29 # Every target requires its individual vpath setting but the vpath directive
30 # acts globally. Therefore each target is built in a separate make instance.
32 ifeq ($(words $(MAKECMDGOALS)),1)
33 ifeq ($(MAKECMDGOALS),$(filter $(MAKECMDGOALS),$(TARGETS)))
34 TARGET = $(MAKECMDGOALS)
40 .PHONY: all $(TARGETS) mostlyclean clean
47 @$(MAKE) --no-print-directory $@
53 $(RM) -r ../lib $(addprefix ../,$(DRVTYPES))
57 CFLAGS += -t $(TARGET) -Osir --create-dep $(@:.o=.d)
80 ifeq ($(TARGET),apple2enh)
88 ifeq ($(TARGET),$(filter $(TARGET),$(CBMS)))
92 ifeq ($(TARGET),$(filter $(TARGET),$(GEOS)))
93 DIRS += $(addprefix $(TARGET)/, $(GEOSDIRS))
94 DIRS += $(addprefix geos-common/,$(GEOSDIRS))
111 OBJS := $(patsubst %.s,%.o,$(foreach dir,$(DIRS),$(wildcard $(dir)/*.s)))
112 OBJS += $(patsubst %.c,%.o,$(foreach dir,$(DIRS),$(wildcard $(dir)/*.c)))
114 OBJS := $(addprefix ../wrk/$(TARGET)/,$(sort $(notdir $(OBJS))))
118 ZPOBJ = ../wrk/$(TARGET)/zeropage.o
119 ifeq ($(TARGET),$(filter $(TARGET),$(EXTZP)))
120 ZPOBJ += ../wrk/$(TARGET)/extzp.o
123 ifeq ($(TARGET),$(filter $(TARGET),$(MKINC)))
124 include $(TARGET)/Makefile.inc
129 define DRVTYPE_template
131 $1_SRCDIR = $$(firstword $$(DIRS))/$1
132 $1_OBJDIR = ../wrk/$$(TARGET)/$1
135 $1_OBJPAT = $$($1_OBJDIR)/$$(OBJPFX)%.o
136 $1_DRVPAT = $$($1_DRVDIR)/$$(DRVPFX)%.$1
137 $1_STCPAT = ../wrk/$$(TARGET)/$$(DRVPFX)%-$1.o
139 $1_OBJS := $$(patsubst $$($1_SRCDIR)/%.s,$$($1_OBJDIR)/%.o,$$(wildcard $$($1_SRCDIR)/*.s))
141 $1_DRVS = $$(patsubst $$($1_OBJPAT),$$($1_DRVPAT),$$($1_OBJS))
143 $1_STCS = $$(patsubst $$($1_DRVPAT),$$($1_STCPAT),$$($1_DRVS))
145 $$($1_OBJS): | $$($1_OBJDIR)
150 $$($1_DRVPAT): $$($1_OBJPAT) $$(ZPOBJ) | $$($1_DRVDIR)
151 $$(LD) -o $$@ -t module $$^
156 $(TARGET): $$($1_DRVS)
158 $$($1_STCPAT): $$($1_DRVPAT)
159 $$(CO) -o $$(@:.o=.s) --code-label _$$(subst -,_,$$(subst .,_,$$(<F))) $$<
160 $$(CC) -c -t $$(TARGET) -o $$@ $$(@:.o=.s)
164 DEPS += $$($1_OBJS:.o=.d)
170 $(foreach drvtype,$(DRVTYPES),$(eval $(call DRVTYPE_template,$(drvtype))))
173 AR = $(CC65_HOME)/bin/ar65
174 CC = $(CC65_HOME)/bin/cl65
175 CO = $(CC65_HOME)/bin/co65
176 LD = $(CC65_HOME)/bin/ld65
184 ../wrk/$(TARGET)/%.o: %.s | ../wrk/$(TARGET)
185 $(CC) -c $(CFLAGS) -o $@ $<
187 ../wrk/$(TARGET)/%.o: %.c | ../wrk/$(TARGET)
188 $(CC) -c $(CFLAGS) -o $@ $<
193 ../lib/$(TARGET).lib: $(OBJS) | ../lib
199 $(TARGET): ../lib/$(TARGET).lib