From 092653cb5b038e51b1b439dece01e521750810ab Mon Sep 17 00:00:00 2001
From: Oliver Schmidt 
Date: Thu, 9 May 2013 01:12:26 +0200
Subject: [PATCH] Added support for building targetutils.
---
 libsrc/Makefile                               |  95 +++++++++++-------
 libsrc/apple2/targetutil/Makefile.inc         |   7 ++
 .../apple2/targetutil}/loader.cfg             |   0
 libsrc/apple2/targetutil/loader.o             | Bin 0 -> 3203 bytes
 .../apple2/targetutil}/loader.s               |   0
 .../apple2/targetutil}/loader.txt             |   0
 libsrc/geos-apple/targetutil/Makefile.inc     |   9 ++
 .../geos-apple/targetutil}/convert.c          |   0
 targetutil/Makefile                           |  32 ------
 targetutil/apple2/Makefile                    |  47 ---------
 targetutil/geos-apple/Makefile                |  49 ---------
 11 files changed, 74 insertions(+), 165 deletions(-)
 create mode 100644 libsrc/apple2/targetutil/Makefile.inc
 rename {targetutil/apple2 => libsrc/apple2/targetutil}/loader.cfg (100%)
 create mode 100644 libsrc/apple2/targetutil/loader.o
 rename {targetutil/apple2 => libsrc/apple2/targetutil}/loader.s (100%)
 rename {targetutil/apple2 => libsrc/apple2/targetutil}/loader.txt (100%)
 create mode 100644 libsrc/geos-apple/targetutil/Makefile.inc
 rename {targetutil/geos-apple => libsrc/geos-apple/targetutil}/convert.c (100%)
 delete mode 100644 targetutil/Makefile
 delete mode 100644 targetutil/apple2/Makefile
 delete mode 100644 targetutil/geos-apple/Makefile
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 0000000000000000000000000000000000000000..5c18e0ea0535f00b1f9364052ec88edbdf467b66
GIT binary patch
literal 3203
zcmZ8jYjjjs72f;a$xLPlw1g5Wuhe`z)%s|=mRPqAfFEFp~5
z*R0xc$!MV_Hs%q>_#q}^kHL8vh|7Q*Fg1Qu81YW!ixlrt{JhwuyBajJiA|oT1>P_E
z^E{?$Y2ul@hC=R8=?>mbp@G4EOIqoZz>3G?e82FSS0D+$AoE&IZEP$g4sjRkCxc;b
zC1Y}upA3Tc%H6P7h(7?|DzIyHQXd0dt+bv(GK|GfFojYBiWg;e@RMwD3g;Ld<_^(kQsp?sg_ep#kl>FdnK
zI%1bAF&?k2cE~Mqh4?LgTug8AE@GP<%jQEenTbh`W8v2lPjDpK$z$f2K^!4I	O(
zhDDe36qaRy#1zB}h%a!M_#(?dZwr`bWk1&w-_G}t@kWGiBJ;2)N#ZZ?ei`Qsaf!^6
zRfC&|&v8s=hGWDr?OaLxZ+<}LXDXiOIWflMVF`wuBk8gWofvsSj92r!FtorKo*@$-
z4_B`hGw}@E%9dz)TG>Ku@q8IFT5W`5z6@FATDg0JKO?0quAAOLe?`qDFv2P6zk$LX9cldo|oWj$}`0{El;Cv;B>jjKg!@L=B
z4{=z)c&V4A>{0%(xCM+RpKUUtd-xIgJzD>|#G9~DcVm2$_)S1Be@OCDd?Un%B|EBk
zhL_;vM5=f)6EDHZ@o{ketN6qg&yuycd=zJ49`7Np19Wl-hi@<_u}Dh{qQo&he35D(
z9h2cK-Y{Kc1Mx>?J51}9OS};kt_v#2Ls%wp9V%=KCJ`vxkiQqJcX<|jai4XUxLF$6
zu&aps*wqb_mjv-}$e71-jRiTQf#-6{n9HAHju_WygE7wVtFnSbFDw2?@fV7JfJ}1$
z+d;Pi_G{O9?b;38tAZ32UX+VoQTh+X84#A@6y^Z;A$(JF7Xl~Llt5QEU`*prDwbjB
zgsLAr3F)tzdPMtwulR&wBRZSlJ*M#upubl7Tg9D790B0hMZeNI4{6sH2-g5!()jO+
z&nd2i+zxm|WBk(T8KrXU<#P|v#b~n-X2Dhf9Ka9N*$>Z8<&j17Z58GUqfw}v0NW6L
zAB^@WE(dK!0UPj7O~PxQUQjA8d7{rL9YjI|@gi7X)cmUv?*L7M{aKwqR{V?Nw-kS=
z=AY=qzNE_U6y;4LpSytFU>TF?wKZUX#V#U-F6IG@${tYQViSCpPpTo2nVfEK_B6`xf6o8mVWuaZ8x
z3(4Qncme2Fm2O6t2j~JkrK0>HB3gxt_rm!n6~CwW4aMuxcT(wZ6n_RE-3U0OLNA0i
z#CdoRsCZg238AX=sN%zl4=DDabAw!TGuR4>`M#aYxlW7k&o2!Rm-||ljg~6?eWQ1d
z4wRRb}jyB)LJO-I%{
zUOt`8)Og7*rzf2A+Ik93s6AUOMAsG51;5>P-TDrv;HT2Ar&dCJKbL^zD
zSi76eJ3)rJGg(Q?7BflT@w|H9Z_g$jKe0TK@bl@7j_-?9U4JDK!iI!o=ZRq8pZ2&$$t9kq_@rgM2GAJZEMOiINR
zRe};Tf}7IrXuzdErfZ{OFyz#&*2%4AJwH?IZgaeuInT-GeLK_R%i>042fRWtSCjM7
znL>>k-`%)%`>?g7v}vTN(JF1O42_If!=?T{Ytv9g_EI(?>4d#3mdR|(=R+X18yzp3
pvpbwnrs%p+UBZ?`A`vjGZ&cS%wW-zQI(@0(98q-=c(c5H=|9Kd=vDv#
literal 0
HcmV?d00001
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)
-
-
-
-- 
2.39.5