diff --git a/libsrc/Makefile b/libsrc/Makefile index 6208d37b9..ea4864994 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -74,6 +74,9 @@ MKINC = $(GEOS) \ atari \ nes +TARGETUTIL = apple2 \ + geos-apple + GEOSDIRS = common \ conio \ disk \ @@ -90,59 +93,65 @@ GEOSDIRS = common \ ifeq ($(TARGET),apple2enh) OBJPFX = a2 DRVPFX = a2e - DIRS = apple2 + SRCDIR = apple2 else - DIRS = $(TARGET) + SRCDIR = $(TARGET) endif +SRCDIRS = $(SRCDIR) + ifeq ($(TARGET),$(filter $(TARGET),$(CBMS))) - DIRS += cbm + SRCDIRS += cbm endif ifeq ($(TARGET),$(filter $(TARGET),$(GEOS))) - DIRS += $(addprefix $(TARGET)/, $(GEOSDIRS)) - DIRS += $(addprefix geos-common/,$(GEOSDIRS)) + SRCDIRS += $(addprefix $(TARGET)/, $(GEOSDIRS)) + SRCDIRS += $(addprefix geos-common/,$(GEOSDIRS)) endif -DIRS += common \ - conio \ - dbg \ - em \ - joystick \ - mouse \ - runtime \ - serial \ - tgi \ - zlib +SRCDIRS += common \ + conio \ + dbg \ + em \ + joystick \ + mouse \ + runtime \ + serial \ + tgi \ + zlib -vpath %.s $(DIRS) -vpath %.c $(DIRS) +vpath %.s $(SRCDIRS) +vpath %.c $(SRCDIRS) -OBJS := $(patsubst %.s,%.o,$(foreach dir,$(DIRS),$(wildcard $(dir)/*.s))) -OBJS += $(patsubst %.c,%.o,$(foreach dir,$(DIRS),$(wildcard $(dir)/*.c))) +OBJS := $(patsubst %.s,%.o,$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.s))) +OBJS += $(patsubst %.c,%.o,$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))) OBJS := $(addprefix ../wrk/$(TARGET)/,$(sort $(notdir $(OBJS)))) DEPS = $(OBJS:.o=.d) -EXTRA_SRCPAT = $(firstword $(DIRS))/extra/%.s +EXTRA_SRCPAT = $(SRCDIR)/extra/%.s EXTRA_OBJPAT = ../lib/$(TARGET)-%.o -EXTRA_OBJS := $(patsubst $(EXTRA_SRCPAT),$(EXTRA_OBJPAT),$(wildcard $(firstword $(DIRS))/extra/*.s)) +EXTRA_OBJS := $(patsubst $(EXTRA_SRCPAT),$(EXTRA_OBJPAT),$(wildcard $(SRCDIR)/extra/*.s)) 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 +ifeq ($(SRCDIR),$(filter $(SRCDIR),$(MKINC))) + include $(SRCDIR)/Makefile.inc +endif + +ifeq ($(SRCDIR),$(filter $(SRCDIR),$(TARGETUTIL))) + include $(SRCDIR)/targetutil/Makefile.inc endif ########## define DRVTYPE_template -$1_SRCDIR = $$(firstword $$(DIRS))/$1 +$1_SRCDIR = $$(SRCDIR)/$1 $1_OBJDIR = ../wrk/$$(TARGET)/$1 $1_DRVDIR = ../$1 @@ -158,14 +167,11 @@ $1_STCS = $$(patsubst $$($1_DRVPAT),$$($1_STCPAT),$$($1_DRVS)) $$($1_OBJS): | $$($1_OBJDIR) -$$($1_OBJDIR): - @$$(call MKDIR,$$@) - $$($1_DRVPAT): $$($1_OBJPAT) $$(ZPOBJ) | $$($1_DRVDIR) @echo $$(TARGET) - $$(@F) @$$(LD) -o $$@ -t module $$^ -$$($1_DRVDIR): +$$($1_OBJDIR) $$($1_DRVDIR): @$$(call MKDIR,$$@) $(TARGET): $$($1_DRVS) @@ -191,17 +197,32 @@ CC = $(if $(wildcard ../bin/cc65*),../bin/cc65,cc65) CO = $(if $(wildcard ../bin/co65*),../bin/co65,co65) LD = $(if $(wildcard ../bin/ld65*),../bin/ld65,ld65) +########## + +define ASSEMBLE_recipe + +@echo $(TARGET) - $< +@$(CA) -t $(TARGET) $(AFLAGS) --create-dep $(@:.o=.d) -o $@ $< + +endef + +########## + +define COMPILE_recipe + +@echo $(TARGET) - $< +@$(CC) -t $(TARGET) $(CFLAGS) --create-dep $(@:.o=.d) -o $(@:.o=.s) $< +@$(CA) -t $(TARGET) -o $@ $(@:.o=.s) + +endef + +########## + ../wrk/$(TARGET)/%.o: %.s | ../wrk/$(TARGET) - @echo $(TARGET) - $< - @$(CA) -t $(TARGET) $(AFLAGS) --create-dep $(@:.o=.d) -o $@ $< + $(ASSEMBLE_recipe) ../wrk/$(TARGET)/%.o: %.c | ../wrk/$(TARGET) - @echo $(TARGET) - $< - @$(CC) -t $(TARGET) $(CFLAGS) --create-dep $(@:.o=.d) -o $(@:.o=.s) $< - @$(CA) -t $(TARGET) -o $@ $(@:.o=.s) - -../wrk/$(TARGET): - @$(call MKDIR,$@) + $(COMPILE_recipe) $(EXTRA_OBJPAT): $(EXTRA_SRCPAT) | ../lib @echo $(TARGET) - $< @@ -210,7 +231,7 @@ $(EXTRA_OBJPAT): $(EXTRA_SRCPAT) | ../lib ../lib/$(TARGET).lib: $(OBJS) | ../lib $(AR) a $@ $? -../lib: +../wrk/$(TARGET) ../lib ../targetutil: @$(call MKDIR,$@) $(TARGET): $(EXTRA_OBJS) ../lib/$(TARGET).lib diff --git a/libsrc/apple2/targetutil/Makefile.inc b/libsrc/apple2/targetutil/Makefile.inc new file mode 100644 index 000000000..37fec5d39 --- /dev/null +++ b/libsrc/apple2/targetutil/Makefile.inc @@ -0,0 +1,7 @@ +../wrk/$(TARGET)/loader.o: $(SRCDIR)/targetutil/loader.s | ../wrk/$(TARGET) + $(ASSEMBLE_recipe) + +../targetutil/loader.system: ../wrk/$(TARGET)/loader.o $(SRCDIR)/targetutil/loader.cfg | ../targetutil + $(LD) -o $@ -C $(filter %.cfg,$^) $(filter-out %.cfg,$^) + +$(TARGET): ../targetutil/loader.system diff --git a/targetutil/apple2/loader.cfg b/libsrc/apple2/targetutil/loader.cfg similarity index 100% rename from targetutil/apple2/loader.cfg rename to libsrc/apple2/targetutil/loader.cfg diff --git a/libsrc/apple2/targetutil/loader.o b/libsrc/apple2/targetutil/loader.o new file mode 100644 index 000000000..5c18e0ea0 Binary files /dev/null and b/libsrc/apple2/targetutil/loader.o differ diff --git a/targetutil/apple2/loader.s b/libsrc/apple2/targetutil/loader.s similarity index 100% rename from targetutil/apple2/loader.s rename to libsrc/apple2/targetutil/loader.s diff --git a/targetutil/apple2/loader.txt b/libsrc/apple2/targetutil/loader.txt similarity index 100% rename from targetutil/apple2/loader.txt rename to libsrc/apple2/targetutil/loader.txt diff --git a/libsrc/geos-apple/targetutil/Makefile.inc b/libsrc/geos-apple/targetutil/Makefile.inc new file mode 100644 index 000000000..ff9429691 --- /dev/null +++ b/libsrc/geos-apple/targetutil/Makefile.inc @@ -0,0 +1,9 @@ +../wrk/$(TARGET)/convert.o: TARGET = apple2enh + +../wrk/$(TARGET)/convert.o: $(SRCDIR)/targetutil/convert.c | ../wrk/$(TARGET) + $(COMPILE_recipe) + +../targetutil/convert.system: ../wrk/$(TARGET)/convert.o | ../targetutil + $(LD) -o $@ -C apple2enh-system.cfg $^ apple2enh.lib + +$(TARGET): ../targetutil/convert.system diff --git a/targetutil/geos-apple/convert.c b/libsrc/geos-apple/targetutil/convert.c similarity index 100% rename from targetutil/geos-apple/convert.c rename to libsrc/geos-apple/targetutil/convert.c diff --git a/targetutil/Makefile b/targetutil/Makefile deleted file mode 100644 index ef20b64b0..000000000 --- a/targetutil/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -# -# Makefile -# - -# -------------------------------------------------------------------------- -# Programs - -# Subdirectories -SUBDIRS = apple2 geos-apple - -# -------------------------------------------------------------------------- -# List of executables. This list could be made target dependent by checking -# $(SYS). - -.PHONY: all -all: - @for DIR in $(SUBDIRS); do \ - $(MAKE) -C $${DIR} $(MAKEOPTS); \ - done - -.PHONY: clean -clean: - @for DIR in $(SUBDIRS); do \ - $(MAKE) -C $${DIR} $(MAKEOPTS) clean; \ - done - -.PHONY: zap -zap: - @for DIR in $(SUBDIRS); do \ - $(MAKE) -C $${DIR} $(MAKEOPTS) zap; \ - done - diff --git a/targetutil/apple2/Makefile b/targetutil/apple2/Makefile deleted file mode 100644 index 03596189e..000000000 --- a/targetutil/apple2/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -# -# Makefile -# - -# -------------------------------------------------------------------------- -# Programs -CC = ../../src/cc65/cc65 -AS = ../../src/ca65/ca65 -LD = ../../src/ld65/ld65 - -# Directories -CFGDIR = ../../src/ld65/cfg -INCDIR = ../../include -LIBDIR = ../../libsrc - -# -------------------------------------------------------------------------- -# List of executables. - -EXELIST = loader.system - - -# -------------------------------------------------------------------------- -# Targets - - -.PHONY: all -all: $(EXELIST) - - -loader.system: loader.s Makefile - $(AS) -t apple2 --forget-inc-paths loader.s - $(LD) -o $@ -C loader.cfg loader.o $(LIBDIR)/apple2.lib - - -# -------------------------------------------------------------------------- -# Cleanup rules - -.PHONY: clean -clean: - $(RM) *~ *.map *.o *.lbl - -.PHONY: zap -zap: clean - $(RM) $(EXELIST) - - - diff --git a/targetutil/geos-apple/Makefile b/targetutil/geos-apple/Makefile deleted file mode 100644 index b2dcc967f..000000000 --- a/targetutil/geos-apple/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -# -# Makefile -# - -# -------------------------------------------------------------------------- -# Programs -CC = ../../src/cc65/cc65 -AS = ../../src/ca65/ca65 -LD = ../../src/ld65/ld65 - -# Directories -CFGDIR = ../../src/ld65/cfg -INCDIR = ../../include -LIBDIR = ../../libsrc - -# -------------------------------------------------------------------------- -# List of executables. - -EXELIST = convert.system - - - -# -------------------------------------------------------------------------- -# Targets - - -.PHONY: all -all: $(EXELIST) - - -convert.system: convert.c Makefile - $(CC) --forget-inc-paths -I $(INCDIR) -t apple2enh -O convert.c - $(AS) --forget-inc-paths convert.s - $(LD) -o $@ -C $(CFGDIR)/apple2enh-system.cfg convert.o $(LIBDIR)/apple2enh.lib - - -# -------------------------------------------------------------------------- -# Cleanup rules - -.PHONY: clean -clean: - $(RM) *~ *.map *.o *.s *.lbl - -.PHONY: zap -zap: clean - $(RM) $(EXELIST) - - -