##
## Pfade
##
SD	= bin/sdcard
SDSYS	= bin/sdcard/system
FLASH	= bin/flash
LIB	= lib
BSTC	= ./bstc.linux

##
## Laessig oder pingelig?
##
## Laessig: Aenderungen im Makefile sollen kein Neubauen veranlassen
## Pingelig: Makefile als Abhängigkeit
##
#DEPS	=
DEPS	= Makefile

##
## Alles, was zu bearbeiten ist.
##
## TODO: Sortieren, in Gruppen packen, halt irgendwie uebersichtlicher machen.
##
BINS	= \
	$(FLASH)/admflash.binary \
	$(SDSYS)/admsys.adm\
	$(FLASH)/belflash.binary \
	$(SDSYS)/vga.bel \
	$(SDSYS)/tv.bel \
	$(FLASH)/regflash.binary \
	\
	$(SD)/reg.sys \
	\
	$(SDSYS)/admsid.adm \
	$(SDSYS)/admay.adm \
	$(SDSYS)/admnet.adm \
	\
	$(SDSYS)/htext.bel \
	$(SDSYS)/g0key.bel \
	\
	$(SDSYS)/admtest.bin \
	$(SDSYS)/beltest.bin \
	$(SDSYS)/charmap.bin \
	$(SDSYS)/eram.bin \
	$(SDSYS)/flash.bin \
	$(SDSYS)/fm.bin \
	$(SDSYS)/fterm.bin \
	$(SDSYS)/ftp.bin \
	$(SDSYS)/g0test.bin \
	$(SDSYS)/hplay.bin \
	$(SDSYS)/ipconfig.bin \
	$(SDSYS)/irc.bin \
	$(SDSYS)/keycode.bin \
	$(SDSYS)/m.bin \
	$(SDSYS)/man.bin \
	$(SDSYS)/perplex.bin \
	$(SDSYS)/ramtest.bin \
	$(SDSYS)/regime.bin \
	$(SDSYS)/rom.bin \
	$(SDSYS)/sfxtool.bin \
	$(SDSYS)/splay.bin \
	$(SDSYS)/sysconf.bin \
	$(SDSYS)/tapecut.bin \
	$(SDSYS)/time.bin \
	$(SDSYS)/wplay.bin \
	$(SDSYS)/yplay.bin \
	\
	$(SDSYS)/adm.lib \
	$(SDSYS)/ari.lib \
	$(SDSYS)/basics.mod \
	$(SDSYS)/bel.lib \
	$(SDSYS)/cog.lib \
	$(SDSYS)/debug.mod \
	$(SDSYS)/fib.mod \
	$(SDSYS)/g0.lib \
	$(SDSYS)/hplay.mod \
	$(SDSYS)/hss.lib \
	$(SDSYS)/key.lib \
	$(SDSYS)/rom.mod \
	$(SDSYS)/scr.lib \
	$(SDSYS)/sd0.lib \
	$(SDSYS)/sfx.lib \
	$(SDSYS)/splay.mod \
	$(SDSYS)/tools.mod \
	$(SDSYS)/tpix.f \
	$(SDSYS)/v1.mod \
	$(SDSYS)/wav.lib \
	$(SDSYS)/win.lib \
	$(SDSYS)/words.mod \
	$(SDSYS)/wplay.mod \
	\
	$(SDSYS)/BLUE.COL \
	$(SDSYS)/BW.COL \
	$(SDSYS)/BWHALF.COL \
	$(SDSYS)/CHESS.COL \
	$(SDSYS)/GREEN.COL \
	$(SDSYS)/PAR.COL \
	\
	$(SDSYS)/eram.man \
	$(SDSYS)/error.man \
	$(SDSYS)/flash.man \
	$(SDSYS)/fm.man \
	$(SDSYS)/ftp.man \
	$(SDSYS)/hplay.man \
	$(SDSYS)/regime.man \
	$(SDSYS)/splay.man \
	$(SDSYS)/sysconf.man \
	$(SDSYS)/wplay.man \
	$(SDSYS)/yplay.man \
	\
	$(SDSYS)/test1.txt \
	$(SDSYS)/test2.txt

##------------------------------------------------------------------------------

# date /T
# time /T

## HHGTTG 1,25:
## (41) Deep Thought paused for a moment's reflection.
## (42) ''Tricky,'' he said finally.

all: do_it
	date '+END %F %T %Z'

do_it: start $(BINS)

start:
	date '+START %F %T %Z'

##------------------------------------------------------------------------------

# Alte Versionen loeschen
#
# del ".\bin\flash"\*.* /Q
# del ".\bin\sdcard"\*.* /Q
# del ".\bin\sdcard\system"\*.* /Q

##
## Alte Versionen loeschen würde den Zweck von make untergraben. (yeti@20170522)
##

# ----------------------------------------------------------------
# Flashdateien erzeugen
# --> \bin\flash

$(FLASH)/admflash.binary: flash/administra/admflash.spin \
	$(DEPS) \
	$(LIB)/adm-fat.spin \
	$(LIB)/adm-rtc.spin \
	$(LIB)/adm-hss.spin \
	$(LIB)/adm-wav.spin \
	$(LIB)/adm-rtc.spin \
	$(LIB)/adm-com.spin \
	$(LIB)/adm-plx.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a flash/administra/admflash.spin
	##
	## das mv könnte durch BSTCs -o-Option ersetzt werden, aber das greift
	## nur ohne Klimmzüge, solange die Extension .binary ist und da im
	## Folgenden auch andere Extensions gebraucht werden, meide ich "-o"
	## in jedem der auftauchenden Kontexte. (yeti@20170522)
	##
	mv admflash.binary $@

$(SDSYS)/admsys.adm: $(FLASH)/admflash.binary
	cp $< $@

$(FLASH)/belflash.binary: flash/bellatrix/belflash.spin \
	$(DEPS) \
	flash/bellatrix/belf-vga.spin \
	$(LIB)/bel-vga.spin \
	$(LIB)/bel-keyb.spin \
	$(LIB)/bel-bus.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -D __VGA -b -O a flash/bellatrix/belflash.spin
	mv belflash.binary $@

$(SDSYS)/vga.bel: $(FLASH)/belflash.binary
	cp $< $@

$(SDSYS)/tv.bel: flash/bellatrix/belflash.spin \
	$(DEPS) \
	flash/bellatrix/belf-tv.spin \
	$(LIB)/bel-tv.spin \
	$(LIB)/bel-keyb.spin \
	$(LIB)/bel-bus.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -D __TV -b -O a flash/bellatrix/belflash.spin
	mv belflash.binary $@

$(FLASH)/regflash.binary: flash/regnatix/regflash.spin \
	$(DEPS)
	$(BSTC) -L $(LIB) -b -O a flash/regnatix/regflash.spin
	mv regflash.binary $@

##------------------------------------------------------------------------------
# Startdateie erzeugen
# reg.sys	(Regime)
# --> \bin\sdcard

$(SD)/reg.sys: system/regnatix/regime.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/regime.spin
	mv regime.binary $@

##------------------------------------------------------------------------------
# Slave-Dateien erzeugen
# admsid, admay, admterm
# htxt, g0key

$(SDSYS)/admsid.adm: system/administra/admsid/admsid.spin \
	$(DEPS) \
	$(LIB)/adm-fat.spin \
	$(LIB)/adm-rtc.spin \
	$(LIB)/adm-sid.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/administra/admsid/admsid.spin
	mv admsid.binary $@

$(SDSYS)/admay.adm: system/administra/admay/admay.spin \
	$(DEPS) \
	$(LIB)/adm-fat.spin \
	$(LIB)/adm-rtc.spin \
	$(LIB)/adm-ay.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/administra/admay/admay.spin
	mv admay.binary $@

$(SDSYS)/admnet.adm: system/administra/admnet/admnet.spin \
	$(DEPS) \
	$(LIB)/adm-fat.spin \
	$(LIB)/adm-rtc.spin \
	$(LIB)/adm-hss.spin \
	$(LIB)/adm-rtc.spin \
	$(LIB)/adm-com.spin \
	$(LIB)/adm-socket.spin \
	$(LIB)/adm-enc28j60.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-numbers.spin
	$(BSTC) -L $(LIB) -b -O a system/administra/admnet/admnet.spin
	mv admnet.binary $@

$(SDSYS)/htext.bel: system/bellatrix/bel-htext/htext.spin \
	$(DEPS) \
	$(LIB)/bel-htext.spin \
	$(LIB)/bel-keyb.spin
	$(BSTC) -L $(LIB) -b -O a system/bellatrix/bel-htext/htext.spin
	mv htext.binary $@



$(SDSYS)/g0key.bel: system/bellatrix/bel-g0/g0key.spin \
	$(DEPS) \
	$(LIB)/bel-tv.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/bellatrix/bel-g0/g0key.spin
	mv g0key.binary $@

#-------------------------------------------------------------------------------
# Systemdateien erzeugen
# - div. externe Kommandos
# - div. Systemdateien (Farbtabellen usw.) 
# --> \bin\sdcard\system\

##
## Die hier ursprünglich im Original eingesetzte for-Schleife laesst sich nicht
## auf ein Makefile abbilden, da sich die einzelnen Binaries in ihren
## Abhängigkeiten (incl. Hauptprogramm, das offensichtlich überall anders ist)
## unterscheiden. Es bleibt also nur, jedem Programm eine eigene Makefile-Regel
## zu basteln. (yeti@20170522)
##

$(SDSYS)/admtest.bin: system/regnatix/admtest.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/admtest.spin
	mv admtest.binary $@

$(SDSYS)/beltest.bin: system/regnatix/beltest.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/beltest.spin
	mv beltest.binary $@

$(SDSYS)/charmap.bin: system/regnatix/charmap.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/charmap.spin
	mv charmap.binary $@

$(SDSYS)/eram.bin: system/regnatix/eram.spin \
	$(DEPS) \
	$(LIB)/glob-numbers.spin \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/eram.spin
	mv eram.binary $@

$(SDSYS)/flash.bin: system/regnatix/flash.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-sdspi.spin \
	$(LIB)/glob-numbers.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/flash.spin
	mv flash.binary $@

$(SDSYS)/fm.bin: system/regnatix/fm.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/gui-dlbox.spin \
	$(LIB)/fm-con.spin \
	$(LIB)/gui-pbar.spin \
	$(LIB)/gui-wbox.spin \
	$(LIB)/gui-input.spin \
	$(LIB)/glob-string.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/fm.spin
	mv fm.binary $@

$(SDSYS)/fterm.bin: system/regnatix/fterm.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-fds.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/fterm.spin
	mv fterm.binary $@

$(SDSYS)/ftp.bin: system/regnatix/ftp.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin \
	$(LIB)/glob-numbers.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/ftp.spin
	mv ftp.binary $@

$(SDSYS)/g0test.bin: system/regnatix/g0test.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/g0test.spin
	mv g0test.binary $@

$(SDSYS)/hplay.bin: system/regnatix/hplay.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/hplay.spin
	mv hplay.binary $@

$(SDSYS)/ipconfig.bin: system/regnatix/ipconfig.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin \
	$(LIB)/glob-numbers.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/ipconfig.spin
	mv ipconfig.binary $@

$(SDSYS)/irc.bin: system/regnatix/irc.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin \
	$(LIB)/glob-numbers.spin \
	$(LIB)/glob-led-engine.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/irc.spin
	mv irc.binary $@

$(SDSYS)/keycode.bin: system/regnatix/keycode.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/keycode.spin
	mv keycode.binary $@

$(SDSYS)/m.bin: system/regnatix/m.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/m-glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/m.spin
	mv m.binary $@

$(SDSYS)/man.bin: system/regnatix/man.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/man.spin
	mv man.binary $@

$(SDSYS)/perplex.bin: system/regnatix/perplex.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-numbers.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/perplex.spin
	mv perplex.binary $@

$(SDSYS)/ramtest.bin: system/regnatix/ramtest.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/ramtest.spin
	mv ramtest.binary $@

$(SDSYS)/regime.bin: system/regnatix/regime.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/regime.spin
	mv regime.binary $@

$(SDSYS)/rom.bin: system/regnatix/rom.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-sdspi.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/rom.spin
	mv rom.binary $@

$(SDSYS)/sfxtool.bin: system/regnatix/sfxtool.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-numbers.spin \
	$(LIB)/glob-string.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/sfxtool.spin
	mv sfxtool.binary $@

$(SDSYS)/splay.bin: system/regnatix/splay.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/splay.spin
	mv splay.binary $@

$(SDSYS)/sysconf.bin: system/regnatix/sysconf.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/sysconf.spin
	mv sysconf.binary $@

$(SDSYS)/tapecut.bin: system/regnatix/tapecut.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-numbers.spin \
	$(LIB)/m-glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/tapecut.spin
	mv tapecut.binary $@

$(SDSYS)/time.bin: system/regnatix/time.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin \
	$(LIB)/glob-string.spin \
	$(LIB)/glob-numbers.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/time.spin
	mv time.binary $@

$(SDSYS)/wplay.bin: system/regnatix/wplay.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/wplay.spin
	mv wplay.binary $@

$(SDSYS)/yplay.bin: system/regnatix/yplay.spin \
	$(DEPS) \
	$(LIB)/reg-ios.spin \
	$(LIB)/glob-con.spin
	$(BSTC) -L $(LIB) -b -O a system/regnatix/yplay.spin
	mv yplay.binary $@

##
## TODO: nacht z.B. Extension sortieren
##
$(SDSYS)/adm.lib: forth/adm.lib $(DEPS)
	cp $< $@
$(SDSYS)/ari.lib: forth/ari.lib $(DEPS)
	cp $< $@
$(SDSYS)/basics.mod: forth/basics.mod $(DEPS)
	cp $< $@
$(SDSYS)/bel.lib: forth/bel.lib $(DEPS)
	cp $< $@
$(SDSYS)/cog.lib: forth/cog.lib $(DEPS)
	cp $< $@
$(SDSYS)/debug.mod: forth/debug.mod $(DEPS)
	cp $< $@
$(SDSYS)/fib.mod: forth/fib.mod $(DEPS)
	cp $< $@
$(SDSYS)/g0.lib: forth/g0.lib $(DEPS)
	cp $< $@
$(SDSYS)/hplay.mod: forth/hplay.mod $(DEPS)
	cp $< $@
$(SDSYS)/hss.lib: forth/hss.lib $(DEPS)
	cp $< $@
$(SDSYS)/key.lib: forth/key.lib $(DEPS)
	cp $< $@
$(SDSYS)/rom.mod: forth/rom.mod $(DEPS)
	cp $< $@
$(SDSYS)/scr.lib: forth/scr.lib $(DEPS)
	cp $< $@
$(SDSYS)/sd0.lib: forth/sd0.lib $(DEPS)
	cp $< $@
$(SDSYS)/sfx.lib: forth/sfx.lib $(DEPS)
	cp $< $@
$(SDSYS)/splay.mod: forth/splay.mod $(DEPS)
	cp $< $@
$(SDSYS)/tools.mod: forth/tools.mod $(DEPS)
	cp $< $@
$(SDSYS)/tpix.f: forth/tpix.f $(DEPS)
	cp $< $@
$(SDSYS)/v1.mod: forth/v1.mod $(DEPS)
	cp $< $@
$(SDSYS)/wav.lib: forth/wav.lib $(DEPS)
	cp $< $@
$(SDSYS)/win.lib: forth/win.lib $(DEPS)
	cp $< $@
$(SDSYS)/words.mod: forth/words.mod $(DEPS)
	cp $< $@
$(SDSYS)/wplay.mod: forth/wplay.mod $(DEPS)
	cp $< $@

##
## COL-Dateien
##
$(SDSYS)/BLUE.COL: system/sonstiges/BLUE.COL $(DEPS)
	cp $< $@
$(SDSYS)/BW.COL: system/sonstiges/BW.COL $(DEPS)
	cp $< $@
$(SDSYS)/BWHALF.COL: system/sonstiges/BWHALF.COL $(DEPS)
	cp $< $@
$(SDSYS)/CHESS.COL: system/sonstiges/CHESS.COL $(DEPS)
	cp $< $@
$(SDSYS)/GREEN.COL: system/sonstiges/GREEN.COL $(DEPS)
	cp $< $@
$(SDSYS)/PAR.COL: system/sonstiges/PAR.COL $(DEPS)
	cp $< $@

##
## man-Dateien
##
$(SDSYS)/eram.man: system/sonstiges/eram.man $(DEPS)
	cp $< $@
$(SDSYS)/error.man: system/sonstiges/error.man $(DEPS)
	cp $< $@
$(SDSYS)/flash.man: system/sonstiges/flash.man $(DEPS)
	cp $< $@
$(SDSYS)/fm.man: system/sonstiges/fm.man $(DEPS)
	cp $< $@
$(SDSYS)/ftp.man: system/sonstiges/ftp.man $(DEPS)
	cp $< $@
$(SDSYS)/hplay.man: system/sonstiges/hplay.man $(DEPS)
	cp $< $@
$(SDSYS)/regime.man: system/sonstiges/regime.man $(DEPS)
	cp $< $@
$(SDSYS)/splay.man: system/sonstiges/splay.man $(DEPS)
	cp $< $@
$(SDSYS)/sysconf.man: system/sonstiges/sysconf.man $(DEPS)
	cp $< $@
$(SDSYS)/wplay.man: system/sonstiges/wplay.man $(DEPS)
	cp $< $@
$(SDSYS)/yplay.man: system/sonstiges/yplay.man $(DEPS)
	cp $< $@

##
## txt-Dateien
##
$(SDSYS)/test1.txt: system/sonstiges/test1.txt $(DEPS)
	cp $< $@
$(SDSYS)/test2.txt: system/sonstiges/test2.txt $(DEPS)
	cp $< $@

##==============================================================================