CBMS = c128 \ c16 \ c64 \ cbm510 \ cbm610 \ pet \ plus4 \ vic20 GEOS = geos-apple \ geos-cbm TARGETS = $(CBMS) \ $(GEOS) \ apple2 \ apple2enh \ atari \ atmos \ lynx \ nes \ supervision DRVTYPES = emd \ joy \ mou \ ser \ tgi # Every target requires its individual vpath setting but the vpath directive # acts globally. Therefore each target is built in a separate make instance. ifeq ($(words $(MAKECMDGOALS)),1) ifeq ($(MAKECMDGOALS),$(filter $(MAKECMDGOALS),$(TARGETS))) TARGET = $(MAKECMDGOALS) endif endif .SUFFIXES: .PHONY: all $(TARGETS) mostlyclean clean ifndef TARGET all: $(TARGETS) $(TARGETS): @$(MAKE) --no-print-directory $@ mostlyclean: $(RM) -r ../wrk clean: mostlyclean $(RM) -r ../lib $(addprefix ../,$(DRVTYPES)) else # TARGET CFLAGS += -Osir EXTZP = cbm510 \ cbm610 \ lynx MKINC = $(GEOS) \ atari \ nes GEOSDIRS = common \ conio \ disk \ dlgbox \ file \ graph \ memory \ menuicon \ mousesprite \ process \ runtime \ system ifeq ($(TARGET),apple2enh) OBJPFX = a2 DRVPFX = a2e DIRS = apple2 else DIRS = $(TARGET) endif ifeq ($(TARGET),$(filter $(TARGET),$(CBMS))) DIRS += cbm endif ifeq ($(TARGET),$(filter $(TARGET),$(GEOS))) DIRS += $(addprefix $(TARGET)/, $(GEOSDIRS)) DIRS += $(addprefix geos-common/,$(GEOSDIRS)) endif DIRS += common \ conio \ dbg \ em \ joystick \ mouse \ runtime \ serial \ tgi \ zlib vpath %.s $(DIRS) vpath %.c $(DIRS) OBJS := $(patsubst %.s,%.o,$(foreach dir,$(DIRS),$(wildcard $(dir)/*.s))) OBJS += $(patsubst %.c,%.o,$(foreach dir,$(DIRS),$(wildcard $(dir)/*.c))) OBJS := $(addprefix ../wrk/$(TARGET)/,$(sort $(notdir $(OBJS)))) DEPS = $(OBJS:.o=.d) ZPOBJ = ../wrk/$(TARGET)/zeropage.o ifeq ($(TARGET),$(filter $(TARGET),$(EXTZP))) ZPOBJ += ../wrk/$(TARGET)/extzp.o endif ifeq ($(TARGET),$(filter $(TARGET),$(MKINC))) include $(TARGET)/Makefile.inc endif ########## define DRVTYPE_template $1_SRCDIR = $$(firstword $$(DIRS))/$1 $1_OBJDIR = ../wrk/$$(TARGET)/$1 $1_DRVDIR = ../$1 $1_OBJPAT = $$($1_OBJDIR)/$$(OBJPFX)%.o $1_DRVPAT = $$($1_DRVDIR)/$$(DRVPFX)%.$1 $1_STCPAT = ../wrk/$$(TARGET)/$$(DRVPFX)%-$1.o $1_OBJS := $$(patsubst $$($1_SRCDIR)/%.s,$$($1_OBJDIR)/%.o,$$(wildcard $$($1_SRCDIR)/*.s)) $1_DRVS = $$(patsubst $$($1_OBJPAT),$$($1_DRVPAT),$$($1_OBJS)) $1_STCS = $$(patsubst $$($1_DRVPAT),$$($1_STCPAT),$$($1_DRVS)) $$($1_OBJS): | $$($1_OBJDIR) $$($1_OBJDIR): mkdir -p $$@ $$($1_DRVPAT): $$($1_OBJPAT) $$(ZPOBJ) | $$($1_DRVDIR) $$(LD) -o $$@ -t module $$^ $$($1_DRVDIR): mkdir $$@ $(TARGET): $$($1_DRVS) $$($1_STCPAT): $$($1_DRVPAT) $$(CO) -o $$(@:.o=.s) --code-label _$$(subst -,_,$$(subst .,_,$$(