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)
38 DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir))))
44 MKDIR = mkdir $(subst /,\,$1)
45 RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST)))
50 .PHONY: all $(TARGETS) mostlyclean clean
57 @$(MAKE) --no-print-directory $@
63 $(call RMDIR,../wrk ../lib $(addprefix ../,$(DRVTYPES)))
90 ifeq ($(TARGET),apple2enh)
98 ifeq ($(TARGET),$(filter $(TARGET),$(CBMS)))
102 ifeq ($(TARGET),$(filter $(TARGET),$(GEOS)))
103 DIRS += $(addprefix $(TARGET)/, $(GEOSDIRS))
104 DIRS += $(addprefix geos-common/,$(GEOSDIRS))
121 OBJS := $(patsubst %.s,%.o,$(foreach dir,$(DIRS),$(wildcard $(dir)/*.s)))
122 OBJS += $(patsubst %.c,%.o,$(foreach dir,$(DIRS),$(wildcard $(dir)/*.c)))
124 OBJS := $(addprefix ../wrk/$(TARGET)/,$(sort $(notdir $(OBJS))))
128 ZPOBJ = ../wrk/$(TARGET)/zeropage.o
129 ifeq ($(TARGET),$(filter $(TARGET),$(EXTZP)))
130 ZPOBJ += ../wrk/$(TARGET)/extzp.o
133 ifeq ($(TARGET),$(filter $(TARGET),$(MKINC)))
134 include $(TARGET)/Makefile.inc
139 define DRVTYPE_template
141 $1_SRCDIR = $$(firstword $$(DIRS))/$1
142 $1_OBJDIR = ../wrk/$$(TARGET)/$1
145 $1_OBJPAT = $$($1_OBJDIR)/$$(OBJPFX)%.o
146 $1_DRVPAT = $$($1_DRVDIR)/$$(DRVPFX)%.$1
147 $1_STCPAT = ../wrk/$$(TARGET)/$$(DRVPFX)%-$1.o
149 $1_OBJS := $$(patsubst $$($1_SRCDIR)/%.s,$$($1_OBJDIR)/%.o,$$(wildcard $$($1_SRCDIR)/*.s))
151 $1_DRVS = $$(patsubst $$($1_OBJPAT),$$($1_DRVPAT),$$($1_OBJS))
153 $1_STCS = $$(patsubst $$($1_DRVPAT),$$($1_STCPAT),$$($1_DRVS))
155 $$($1_OBJS): | $$($1_OBJDIR)
160 $$($1_DRVPAT): $$($1_OBJPAT) $$(ZPOBJ) | $$($1_DRVDIR)
161 @echo $$(TARGET) - $$(@F)
162 @$$(LD) -o $$@ -t module $$^
167 $(TARGET): $$($1_DRVS)
169 $$($1_STCPAT): $$($1_DRVPAT)
170 @echo $$(TARGET) - $$(<F)
171 @$$(CO) -o $$(@:.o=.s) --code-label _$$(subst -,_,$$(subst .,_,$$(<F))) $$<
172 @$$(CA) -t $$(TARGET) -o $$@ $$(@:.o=.s)
176 DEPS += $$($1_OBJS:.o=.d)
182 $(foreach drvtype,$(DRVTYPES),$(eval $(call DRVTYPE_template,$(drvtype))))
185 AR = $(CC65_HOME)/bin/ar65
186 CA = $(CC65_HOME)/bin/ca65
187 CC = $(CC65_HOME)/bin/cc65
188 CO = $(CC65_HOME)/bin/co65
189 LD = $(CC65_HOME)/bin/ld65
198 ../wrk/$(TARGET)/%.o: %.s | ../wrk/$(TARGET)
200 @$(CA) -t $(TARGET) $(AFLAGS) --create-dep $(@:.o=.d) -o $@ $<
202 ../wrk/$(TARGET)/%.o: %.c | ../wrk/$(TARGET)
204 @$(CC) -t $(TARGET) $(CFLAGS) --create-dep $(@:.o=.d) -o $(@:.o=.s) $<
205 @$(CA) -t $(TARGET) -o $@ $(@:.o=.s)
210 ../lib/$(TARGET).lib: $(OBJS) | ../lib
216 $(TARGET): ../lib/$(TARGET).lib