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))
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 @$$(CA) -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 CA = $(CC65_HOME)/bin/ca65
175 CC = $(CC65_HOME)/bin/cc65
176 CO = $(CC65_HOME)/bin/co65
177 LD = $(CC65_HOME)/bin/ld65
186 ../wrk/$(TARGET)/%.o: %.s | ../wrk/$(TARGET)
187 $(CA) -t $(TARGET) $(AFLAGS) --create-dep $(@:.o=.d) -o $@ $<
189 ../wrk/$(TARGET)/%.o: %.c | ../wrk/$(TARGET)
190 $(CC) -t $(TARGET) $(CFLAGS) --create-dep $(@:.o=.d) -o $(@:.o=.s) $<
191 @$(CA) -t $(TARGET) -o $@ $(@:.o=.s)
196 ../lib/$(TARGET).lib: $(OBJS) | ../lib
202 $(TARGET): ../lib/$(TARGET).lib