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 lib $(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))))
184 AR = $(if $(wildcard ../bin/ar65*),../bin/ar65,ar65)
185 CA = $(if $(wildcard ../bin/ca65*),../bin/ca65,ca65)
186 CC = $(if $(wildcard ../bin/cc65*),../bin/cc65,cc65)
187 CO = $(if $(wildcard ../bin/co65*),../bin/co65,co65)
188 LD = $(if $(wildcard ../bin/ld65*),../bin/ld65,ld65)
190 ../wrk/$(TARGET)/%.o: %.s | ../wrk/$(TARGET)
192 @$(CA) -t $(TARGET) $(AFLAGS) --create-dep $(@:.o=.d) -o $@ $<
194 ../wrk/$(TARGET)/%.o: %.c | ../wrk/$(TARGET)
196 @$(CC) -t $(TARGET) $(CFLAGS) --create-dep $(@:.o=.d) -o $(@:.o=.s) $<
197 @$(CA) -t $(TARGET) -o $@ $(@:.o=.s)
202 ../lib/$(TARGET).lib: $(OBJS) | ../lib
208 $(TARGET): ../lib/$(TARGET).lib