2021-10-23 04:53:23 +00:00
#
# 4cade Makefile
# assembles source code, optionally builds a disk image and mounts it
# note: Windows users should probably use winmake.bat instead
#
# original by Quinn Dunki on 2014-08-15
# One Girl, One Laptop Productions
# http://www.quinndunki.com/blondihacks
#
# adapted by 4am on 2018-08-19
#
DISK = 4cade.hdv
VOLUME = TOTAL.REPLAY
# third-party tools required to build
# https://sourceforge.net/projects/acme-crossass/
# version 0.96.3 or later
ACME = acme
# https://github.com/mach-kernel/cadius
# version 1.4.0 or later
CADIUS = cadius
2021-11-26 03:16:57 +00:00
# https://www.gnu.org/software/parallel/
PARALLEL = parallel
2021-12-16 22:23:54 +00:00
# https://python.org/
PYTHON = python3
2021-10-23 04:53:23 +00:00
# https://bitbucket.org/magli143/exomizer/wiki/Home
# version 3.1.0 or later
EXOMIZER = exomizer mem -q -P23 -lnone
2024-06-11 03:10:51 +00:00
BUILDDIR = build
MD = $( BUILDDIR) /make.touch
DEMO.SOURCES = $( wildcard src/demo/*.a)
FX.SOURCES = $( wildcard src/fx/*.a)
PRELAUNCH.SOURCES = $( wildcard src/prelaunch/*.a)
PROBOOT.SOURCES = $( wildcard src/proboot/*.a)
LAUNCHER.SOURCES = $( wildcard src/*.a)
HDV = $( BUILDDIR) /$( DISK)
PROBOOTHD = $( BUILDDIR) /proboothd
DEMO = $( BUILDDIR) /demo.touch
FX = $( BUILDDIR) /fx.touch
PRELAUNCH = $( BUILDDIR) /prelaunch.touch
LAUNCHER.SYSTEM = $( BUILDDIR) /LAUNCHER.SYSTEM
ATTRACT.IDX = $( BUILDDIR) /ATTRACT.IDX
HELPTEXT = $( BUILDDIR) /HELPTEXT
CREDITS = $( BUILDDIR) /CREDITS
GAMEHELP = $( BUILDDIR) /GAMEHELP
GAMES.CONF = $( BUILDDIR) /GAMES.CONF
GAMES.SORTED = $( BUILDDIR) /GAMES.SORTED
X = $( BUILDDIR) /X
TOTAL.DATA = $( BUILDDIR) /TOTAL.DATA
ACTION.DGR = $( wildcard res/ACTION.DGR/*)
ACTION.DHGR = $( wildcard res/ACTION.DHGR/*)
ACTION.GR = $( wildcard res/ACTION.GR/*)
ACTION.HGR = $( wildcard res/ACTION.HGR/*)
ARTWORK.SHR = $( wildcard res/ARTWORK.SHR/*)
ATTRACT = $( wildcard res/ATTRACT/*)
SS = $( wildcard res/SS/*)
TITLE.ANIMATED = $( wildcard res/TITLE.ANIMATED/*)
TITLE.DHGR = $( wildcard res/TITLE.DHGR/*)
TITLE.HGR = $( wildcard res/TITLE.HGR/*)
CACHE.IDX = $( wildcard res/CACHE*.IDX)
ICONS = $( wildcard res/ICONS/*)
ATTRACT.CONF = res/ATTRACT.CONF
DFX.CONF = res/DFX.CONF
FX.CONF = res/FX.CONF
SFX.CONF = res/SFX.CONF
PREFS.CONF = res/PREFS.CONF
COVER = res/COVER
DECRUNCH = res/DECRUNCH
FINDER.DATA = res/Finder.Data
FINDER.ROOT = res/Finder.Root
HELP = res/HELP
JOYSTICK = res/JOYSTICK
TITLE = res/TITLE
.PHONY : preconditions compress attract cache clean mount all al
$(HDV) : $( PROBOOTHD ) $( LAUNCHER .SYSTEM ) $( PRELAUNCH ) $( X ) $( TOTAL .DATA ) $( TITLE .ANIMATED ) $( ICONS ) $( FINDER .DATA ) $( FINDER .ROOT )
cp res/blank.hdv " $@ "
cp res/_FileInformation.txt $( BUILDDIR) /
$( CADIUS) ADDFILE " $@ " " / $( VOLUME) / " $( BUILDDIR) /LAUNCHER.SYSTEM -C >>$( BUILDDIR) /log
cp res/PREFS.CONF $( BUILDDIR) /PREFS.CONF
bin/padto.sh $( BUILDDIR) /PREFS.CONF
2021-10-23 04:53:23 +00:00
#
# create _FileInformation.txt files for subdirectories
#
2021-10-23 05:20:34 +00:00
bin/buildfileinfo.sh res/ICONS "CA" "0000"
2024-06-11 03:10:51 +00:00
cp src/prelaunch/_FileInformation.txt $( BUILDDIR) /PRELAUNCH/
2021-10-23 04:53:23 +00:00
#
# add everything to the disk
#
for f in \
2024-06-11 03:10:51 +00:00
$( TOTAL.DATA) \
$( BUILDDIR) /PREFS.CONF \
$( FINDER.DATA) \
$( FINDER.ROOT) ; do \
$( CADIUS) ADDFILE " $@ " " / $( VOLUME) / " " $$ f " -C >>$( BUILDDIR) /log; \
2021-10-23 04:53:23 +00:00
done
for f in \
2022-09-06 00:38:43 +00:00
res/TITLE.ANIMATED \
res/ICONS \
2024-06-11 03:10:51 +00:00
$( BUILDDIR) /PRELAUNCH \
$( X) ; do \
2021-10-23 04:53:23 +00:00
rm -f " $$ f " /.DS_Store; \
2024-06-11 03:10:51 +00:00
$( CADIUS) ADDFOLDER " $@ " " / $( VOLUME) / $$ (basename $$ f) " " $$ f " -C >>$( BUILDDIR) /log; \
2021-10-23 04:53:23 +00:00
done
2024-06-11 03:10:51 +00:00
bin/changebootloader.sh " $@ " $( PROBOOTHD)
@touch " $@ "
2021-10-23 04:53:23 +00:00
2024-05-11 14:36:50 +00:00
# create a version of GAMES.CONF without comments or blank lines or anything after display titles
2024-06-11 03:10:51 +00:00
$(GAMES.CONF) : $( MD )
awk '!/^$$|^#/' < res/GAMES.CONF | awk -F'/' '{ print $$1 }' > " $@ "
2024-05-11 14:36:50 +00:00
# create a list of all game filenames, without metadata or display names, sorted by game filename
2024-06-11 03:10:51 +00:00
$(GAMES.SORTED) : $( GAMES .CONF )
awk -F, '/,/ { print $$2 }' < $( BUILDDIR) /GAMES.CONF | awk -F= '{ print $$1 }' | sort > " $@ "
2024-05-11 14:36:50 +00:00
2024-06-11 03:10:51 +00:00
$(X) : $( GAMES .CONF )
$( PARALLEL) '$(CADIUS) EXTRACTVOLUME {} "$@"/ >>$(BUILDDIR)/log' ::: res/dsk/*.po
rm -f " $@ " /**/.DS_Store " $@ " /**/PRODOS* " $@ " /**/LOADER.SYSTEM* " $@ " /**/_FileInformation.txt
for f in $$ ( grep '^....1' $( BUILDDIR) /GAMES.CONF | awk '!/^$$|^#/' | awk -F, '/,/ { print $$2 }' | awk -F= '{ print $$1 }' ) ; do mv " $@ " /" $$ (basename $$ f) " /" $$ (basename $$ f) " * $( BUILDDIR) /X.INDEXED/; rm -rf " $@ " /" $$ (basename $$ f) " ; done
for d in " $@ " /*; do mv " $$ d " /* " $@ " /; rmdir " $$ d " ; done
@touch " $@ "
2022-09-06 00:38:43 +00:00
2021-10-24 04:26:04 +00:00
# precompute binary data structure for mega-attract mode configuration file
2024-06-11 03:10:51 +00:00
$(ATTRACT.IDX) : $( MD )
bin/buildokvs.sh < res/ATTRACT.CONF > " $@ "
$(HELPTEXT) : $( MD )
bin/converthelp.sh res/HELPTEXT " $@ "
$(CREDITS) : $( MD )
bin/converthelp.sh res/CREDITS " $@ "
$(GAMEHELP) : $( MD )
$( PARALLEL) 'bin/converthelp.sh "{}" "$@/{/}"' ::: res/GAMEHELP/*
@touch " $@ "
$(TOTAL.DATA) : $( FX ) $( PRELAUNCH ) $( DEMO ) $( X ) $( ATTRACT .IDX ) $( HELPTEXT ) $( CREDITS ) $( GAMEHELP ) $( GAMES .CONF ) $( GAMES .SORTED ) $( ACTION .DGR ) $( ACTION .DHGR ) $( ACTION .GR ) $( ACTION .HGR ) $( ARTWORK .SHR ) $( ATTRACT ) $( SS ) $( TITLE .DHGR ) $( TITLE .HGR ) $( CACHE .IDX ) $( ATTRACT .CONF ) $( DFX .CONF ) $( FX .CONF ) $( SFX .CONF ) $( PREFS .CONF ) $( COVER ) $( DECRUNCH ) $( HELP ) $( JOYSTICK ) $( TITLE )
2021-10-24 04:26:04 +00:00
#
# precompute indexed files for prelaunch
# note: prelaunch must be first in TOTAL.DATA due to a hack in LoadStandardPrelaunch
# note 2: these can not be padded because they are loaded at $0106 and padding would clobber the stack
#
2024-06-11 03:10:51 +00:00
bin/buildindexedfile.py $( TOTAL.DATA) $( BUILDDIR) /PRELAUNCH.INDEXED "" < $( BUILDDIR) /GAMES.SORTED > $( BUILDDIR) /PRELAUNCH.IDX
2021-11-16 01:25:32 +00:00
#
# precompute indexed files for HGR & DHGR titles
# note: these are not padded because they are all an exact block-multiple anyway
#
2024-06-11 03:10:51 +00:00
bin/padto.sh $( TOTAL.DATA)
( for f in res/TITLE.HGR/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/TITLE.HGR $( BUILDDIR) /HGR.TITLES.LOG > $( BUILDDIR) /TITLE.IDX
( for f in res/TITLE.DHGR/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/TITLE.DHGR $( BUILDDIR) /DHGR.TITLES.LOG > $( BUILDDIR) /DTITLE.IDX
bin/addfile.sh res/COVER $( TOTAL.DATA) > src/index/res.cover.idx.a
bin/addfile.sh res/TITLE $( TOTAL.DATA) > src/index/res.title.idx.a
bin/addfile.sh res/HELP $( TOTAL.DATA) > src/index/res.help.idx.a
2021-10-24 04:26:04 +00:00
#
# precompute indexed files for game help
2021-11-16 01:25:32 +00:00
# note: these can be padded because they're loaded into $800 at a time when $800..$1FFF is clobber-able
2021-10-24 04:26:04 +00:00
#
2024-06-11 03:10:51 +00:00
bin/buildindexedfile.py -p -a $( TOTAL.DATA) $( BUILDDIR) /GAMEHELP "" < $( BUILDDIR) /GAMES.SORTED > $( BUILDDIR) /GAMEHELP.IDX
2021-10-24 04:26:04 +00:00
#
# precompute indexed files for slideshows
2021-11-16 01:25:32 +00:00
# note: these can be padded because they're loaded into $800 at a time when $800..$1FFF is clobber-able
2021-10-24 04:26:04 +00:00
#
2024-06-11 03:10:51 +00:00
$( PARALLEL) '[ $$(echo "{/}" | cut -c-3) = "ACT" ] && bin/buildslideshow.sh -d $(BUILDDIR)/GAMES.CONF < "{}" > "$(BUILDDIR)/SS/{/}" || bin/buildslideshow.sh $(BUILDDIR)/GAMES.CONF < "{}" > "$(BUILDDIR)/SS/{/}"' ::: res/SS/*
( for f in $( BUILDDIR) /SS/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -p -a $( TOTAL.DATA) $( BUILDDIR) /SS "" > $( BUILDDIR) /SLIDESHOW.IDX
$( PARALLEL) 'bin/buildokvs.sh < "{}" > "$(BUILDDIR)/ATTRACT/{/}"' ::: res/ATTRACT/*
( for f in $( BUILDDIR) /ATTRACT/[ ABCDEFGHIJKLMNOP] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -p -a $( TOTAL.DATA) $( BUILDDIR) /ATTRACT "" > $( BUILDDIR) /MINIATTRACT0.IDX
( for f in $( BUILDDIR) /ATTRACT/[ QRSTUVWXYZ] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -p -a $( TOTAL.DATA) $( BUILDDIR) /ATTRACT "" > $( BUILDDIR) /MINIATTRACT1.IDX
2021-10-24 04:26:04 +00:00
#
# precompute indexed files for graphic effects
2021-11-16 01:25:32 +00:00
# note: these can be padded because they're loaded into $6000 at a time when $6000..$BEFF is clobber-able
2021-10-24 04:26:04 +00:00
#
2024-06-11 03:10:51 +00:00
bin/buildindexedfile.py -p -a $( TOTAL.DATA) $( BUILDDIR) /FX.INDEXED "" < res/FX.CONF > $( BUILDDIR) /FX.IDX
bin/buildindexedfile.py -p -a $( TOTAL.DATA) $( BUILDDIR) /FX.INDEXED "" < res/DFX.CONF > $( BUILDDIR) /DFX.IDX
bin/buildindexedfile.py -p -a $( TOTAL.DATA) $( BUILDDIR) /FX.INDEXED "" < res/SFX.CONF > $( BUILDDIR) /SFX.IDX
( for f in $( BUILDDIR) /FXCODE/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -p -a $( TOTAL.DATA) $( BUILDDIR) /FXCODE "" > $( BUILDDIR) /FXCODE.IDX
2024-05-28 03:09:02 +00:00
#
# precompute indexed files for coordinates files loaded by graphic effects
# note: these can not be padded because some of them are loaded into tight spaces near the unclobberable top of main memory
#
2024-06-11 03:10:51 +00:00
( for f in $( BUILDDIR) /FXDATA/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) $( BUILDDIR) /FXDATA "" > $( BUILDDIR) /FXDATA.IDX
2021-10-24 04:26:04 +00:00
#
2021-10-24 05:14:25 +00:00
# precompute indexed files for HGR & DHGR action screenshots
2021-10-24 04:26:04 +00:00
# note: these can not be padded because they are compressed and the decompressor needs the exact size
#
2024-06-11 03:10:51 +00:00
( for f in res/ACTION.HGR/[ ABCD] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ACTION.HGR "" > $( BUILDDIR) /HGR0.IDX
( for f in res/ACTION.HGR/[ EFGH] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ACTION.HGR "" > $( BUILDDIR) /HGR1.IDX
( for f in res/ACTION.HGR/[ IJKL] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ACTION.HGR "" > $( BUILDDIR) /HGR2.IDX
( for f in res/ACTION.HGR/[ MNOP] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ACTION.HGR "" > $( BUILDDIR) /HGR3.IDX
( for f in res/ACTION.HGR/[ QRST] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ACTION.HGR "" > $( BUILDDIR) /HGR4.IDX
( for f in res/ACTION.HGR/[ UVWX] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ACTION.HGR "" > $( BUILDDIR) /HGR5.IDX
( for f in res/ACTION.HGR/[ YZ] *; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ACTION.HGR "" > $( BUILDDIR) /HGR6.IDX
( for f in res/ACTION.DHGR/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ACTION.DHGR "" > $( BUILDDIR) /DHGR.IDX
2021-10-24 17:36:00 +00:00
#
2021-12-11 02:50:10 +00:00
# precompute indexed files for GR and DGR action screenshots
2021-11-09 18:39:16 +00:00
# note: these can be padded because they are not compressed
#
2024-06-11 03:10:51 +00:00
( for f in res/ACTION.GR/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a -p $( TOTAL.DATA) res/ACTION.GR "" > $( BUILDDIR) /GR.IDX
( for f in res/ACTION.DGR/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a -p $( TOTAL.DATA) res/ACTION.DGR "" > $( BUILDDIR) /DGR.IDX
2021-11-09 18:39:16 +00:00
#
2021-10-24 04:26:04 +00:00
# precompute indexed files for SHR artwork
# note: these can not be padded because they are compressed and the decompressor needs the exact size
#
2024-06-11 03:10:51 +00:00
( for f in res/ARTWORK.SHR/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) res/ARTWORK.SHR "" > $( BUILDDIR) /ARTWORK.IDX
2021-11-13 01:46:05 +00:00
#
2022-10-01 00:04:02 +00:00
# precompute indexed files for demo launchers
# note: these can not be padded because some of them are loaded too close to $C000
#
2024-06-11 03:10:51 +00:00
( for f in $( BUILDDIR) /DEMO/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a $( TOTAL.DATA) $( BUILDDIR) /DEMO "" > $( BUILDDIR) /DEMO.IDX
bin/addfile.sh $( BUILDDIR) /DEMO.IDX $( TOTAL.DATA) > src/index/demo.idx.a
2022-10-01 00:04:02 +00:00
#
2022-09-06 00:38:43 +00:00
# precompute indexed files for single-load game binaries
# note: these can be padded because they are loaded at a time when all of main memory is clobber-able
#
2024-06-11 03:10:51 +00:00
( for f in $( BUILDDIR) /X.INDEXED/*; do echo " $$ (basename $$ f) " ; done ) | bin/buildindexedfile.py -a -p $( TOTAL.DATA) $( BUILDDIR) /X.INDEXED "" > $( BUILDDIR) /XSINGLE.IDX
bin/addfile.sh $( BUILDDIR) /XSINGLE.IDX $( TOTAL.DATA) > src/index/xsingle.idx.a
2022-09-06 00:38:43 +00:00
#
2021-11-16 01:25:32 +00:00
# create search indexes for each variation of (game-requires-joystick) X (game-requires-128K)
# in the form of OKVS data structures, plus game counts in the form of source files
#
2024-06-11 03:10:51 +00:00
$( PARALLEL) ::: \
'(grep "^00" < $(BUILDDIR)/GAMES.CONF | bin/buildsearch.py src/index/count00.a $(BUILDDIR)/HGR.TITLES.LOG "" > $(BUILDDIR)/SEARCH00.IDX)' \
'(grep "^0" < $(BUILDDIR)/GAMES.CONF | bin/buildsearch.py src/index/count01.a $(BUILDDIR)/HGR.TITLES.LOG $(BUILDDIR)/DHGR.TITLES.LOG > $(BUILDDIR)/SEARCH01.IDX)' \
'(grep "^.0" < $(BUILDDIR)/GAMES.CONF | bin/buildsearch.py src/index/count10.a $(BUILDDIR)/HGR.TITLES.LOG "" > $(BUILDDIR)/SEARCH10.IDX)' \
'(bin/buildsearch.py src/index/count11.a $(BUILDDIR)/HGR.TITLES.LOG $(BUILDDIR)/DHGR.TITLES.LOG < $(BUILDDIR)/GAMES.CONF > $(BUILDDIR)/SEARCH11.IDX)'
2021-11-16 01:25:32 +00:00
#
2021-11-13 01:46:05 +00:00
# add IDX files to the combined index file and generate
# the index records that callers use to reference them
#
2024-06-11 03:10:51 +00:00
bin/addfile.sh $( BUILDDIR) /SEARCH00.IDX $( TOTAL.DATA) > src/index/search00.idx.a
bin/addfile.sh res/CACHE00.IDX $( TOTAL.DATA) > src/index/cache00.idx.a
bin/addfile.sh $( BUILDDIR) /SEARCH01.IDX $( TOTAL.DATA) > src/index/search01.idx.a
bin/addfile.sh res/CACHE01.IDX $( TOTAL.DATA) > src/index/cache01.idx.a
bin/addfile.sh $( BUILDDIR) /SEARCH10.IDX $( TOTAL.DATA) > src/index/search10.idx.a
bin/addfile.sh res/CACHE10.IDX $( TOTAL.DATA) > src/index/cache10.idx.a
bin/addfile.sh $( BUILDDIR) /SEARCH11.IDX $( TOTAL.DATA) > src/index/search11.idx.a
bin/addfile.sh res/CACHE11.IDX $( TOTAL.DATA) > src/index/cache11.idx.a
bin/addfile.sh $( BUILDDIR) /PRELAUNCH.IDX $( TOTAL.DATA) > src/index/prelaunch.idx.a
bin/addfile.sh $( BUILDDIR) /ATTRACT.IDX $( TOTAL.DATA) > src/index/attract.idx.a
bin/addfile.sh $( BUILDDIR) /FX.IDX $( TOTAL.DATA) > src/index/fx.idx.a
bin/addfile.sh $( BUILDDIR) /DFX.IDX $( TOTAL.DATA) > src/index/dfx.idx.a
bin/addfile.sh $( BUILDDIR) /SFX.IDX $( TOTAL.DATA) > src/index/sfx.idx.a
bin/addfile.sh $( BUILDDIR) /FXCODE.IDX $( TOTAL.DATA) > src/index/fxcode.idx.a
bin/addfile.sh $( BUILDDIR) /FXDATA.IDX $( TOTAL.DATA) > src/index/fxdata.idx.a
bin/addfile.sh $( BUILDDIR) /GAMEHELP.IDX $( TOTAL.DATA) > src/index/gamehelp.idx.a
bin/addfile.sh $( BUILDDIR) /SLIDESHOW.IDX $( TOTAL.DATA) > src/index/slideshow.idx.a
bin/addfile.sh $( BUILDDIR) /MINIATTRACT0.IDX $( TOTAL.DATA) > src/index/miniattract0.idx.a
bin/addfile.sh $( BUILDDIR) /MINIATTRACT1.IDX $( TOTAL.DATA) > src/index/miniattract1.idx.a
bin/addfile.sh $( BUILDDIR) /TITLE.IDX $( TOTAL.DATA) > src/index/title.idx.a
bin/addfile.sh $( BUILDDIR) /DTITLE.IDX $( TOTAL.DATA) > src/index/dtitle.idx.a
bin/addfile.sh $( BUILDDIR) /HGR0.IDX $( TOTAL.DATA) > src/index/hgr0.idx.a
bin/addfile.sh $( BUILDDIR) /HGR1.IDX $( TOTAL.DATA) > src/index/hgr1.idx.a
bin/addfile.sh $( BUILDDIR) /HGR2.IDX $( TOTAL.DATA) > src/index/hgr2.idx.a
bin/addfile.sh $( BUILDDIR) /HGR3.IDX $( TOTAL.DATA) > src/index/hgr3.idx.a
bin/addfile.sh $( BUILDDIR) /HGR4.IDX $( TOTAL.DATA) > src/index/hgr4.idx.a
bin/addfile.sh $( BUILDDIR) /HGR5.IDX $( TOTAL.DATA) > src/index/hgr5.idx.a
bin/addfile.sh $( BUILDDIR) /HGR6.IDX $( TOTAL.DATA) > src/index/hgr6.idx.a
bin/addfile.sh $( BUILDDIR) /DHGR.IDX $( TOTAL.DATA) > src/index/dhgr.idx.a
bin/addfile.sh $( BUILDDIR) /GR.IDX $( TOTAL.DATA) > src/index/gr.idx.a
bin/addfile.sh $( BUILDDIR) /DGR.IDX $( TOTAL.DATA) > src/index/dgr.idx.a
bin/addfile.sh $( BUILDDIR) /ARTWORK.IDX $( TOTAL.DATA) > src/index/artwork.idx.a
2021-11-17 02:44:30 +00:00
#
# add additional miscellaneous files
#
2024-06-11 03:10:51 +00:00
bin/addfile.sh $( BUILDDIR) /COVERFADE $( TOTAL.DATA) > src/index/coverfade.idx.a
bin/addfile.sh $( BUILDDIR) /GR.FIZZLE $( TOTAL.DATA) > src/index/gr.fizzle.idx.a
bin/addfile.sh $( BUILDDIR) /DGR.FIZZLE $( TOTAL.DATA) > src/index/dgr.fizzle.idx.a
bin/addfile.sh $( BUILDDIR) /HELPTEXT $( TOTAL.DATA) > src/index/helptext.idx.a
bin/addfile.sh $( BUILDDIR) /CREDITS $( TOTAL.DATA) > src/index/credits.idx.a
bin/addfile.sh res/DECRUNCH $( TOTAL.DATA) > src/index/decrunch.idx.a
bin/addfile.sh res/JOYSTICK $( TOTAL.DATA) > src/index/joystick.idx.a
@touch " $@ "
2021-10-23 04:53:23 +00:00
2024-06-11 03:10:51 +00:00
$(LAUNCHER.SYSTEM) : $( LAUNCHER .SOURCES ) | $( MD )
$( ACME) -DBUILDNUMBER= ` git rev-list --count HEAD` src/4cade.a 2>$( BUILDDIR) /relbase.log
$( ACME) -r $( BUILDDIR) /4cade.lst -DBUILDNUMBER= ` git rev-list --count HEAD` -DRELBASE= ` cat $( BUILDDIR) /relbase.log | grep "RELBASE =" | cut -d"=" -f2 | cut -d"(" -f2 | cut -d")" -f1` src/4cade.a
@touch " $@ "
2021-10-23 04:53:23 +00:00
2024-06-11 03:10:51 +00:00
$(DEMO) : $( DEMO .SOURCES ) | $( MD )
2022-09-10 04:38:10 +00:00
$( PARALLEL) 'if grep -q "^!to" "{}"; then $(ACME) "{}"; fi' ::: src/demo/*.a
2024-06-11 03:10:51 +00:00
@touch " $@ "
2022-09-10 04:38:10 +00:00
2024-06-11 03:10:51 +00:00
$(FX) : $( FX .SOURCES ) | $( MD )
2021-11-26 03:16:57 +00:00
$( PARALLEL) 'if grep -q "^!to" "{}"; then $(ACME) "{}"; fi' ::: src/fx/*.a
2024-06-11 03:10:51 +00:00
@touch " $@ "
2021-10-23 04:53:23 +00:00
2024-06-11 03:10:51 +00:00
$(PRELAUNCH) : $( PRELAUNCH .SOURCES ) | $( MD )
2021-11-26 03:16:57 +00:00
$( PARALLEL) 'if grep -q "^!to" "{}"; then $(ACME) "{}"; fi' ::: src/prelaunch/*.a
2024-06-11 03:10:51 +00:00
@touch " $@ "
2021-10-23 04:53:23 +00:00
2024-06-11 03:10:51 +00:00
$(PROBOOTHD) : $( PROBOOT .SOURCES ) | $( MD )
$( ACME) -r $( BUILDDIR) /proboothd.lst src/proboothd/proboothd.a
@touch " $@ "
2021-10-23 04:53:23 +00:00
2024-06-11 03:10:51 +00:00
#
# |compress| must be called separately because it is slow and
# only needs to be run when a new graphic file is added.
# It create files in the repository which can then be checked in.
#
compress : $( MD )
2021-11-26 03:16:57 +00:00
$( PARALLEL) '[ -f "res/ACTION.HGR/{/}" ] || ${EXOMIZER} "{}"@0x4000 -o "res/ACTION.HGR/{/}"' ::: res/ACTION.HGR.UNCOMPRESSED/*
$( PARALLEL) '[ -f "res/ACTION.DHGR/{/}" ] || ${EXOMIZER} "{}"@0x4000 -o "res/ACTION.DHGR/{/}"' ::: res/ACTION.DHGR.UNCOMPRESSED/*
$( PARALLEL) '[ -f "res/ARTWORK.SHR/{/}" ] || ${EXOMIZER} "{}"@0x2000 -o "res/ARTWORK.SHR/{/}"' ::: res/ARTWORK.SHR.UNCOMPRESSED/*
$( PARALLEL) '[ -f "res/TITLE.HGR/{/}" ] || bin/packhgrfile.py "{}" "res/TITLE.HGR/{/}"' ::: res/TITLE.HGR.UNPACKED/*
2021-11-12 06:22:14 +00:00
2021-11-12 23:19:43 +00:00
#
# |attract| must be called separately because it is slow and
# only needs to be run when a new game or demo is added.
# It create files in the repository which can then be checked in.
#
2021-10-23 04:53:23 +00:00
attract : compress
bin/check-attract-mode.sh
bin/generate-mini-attract-mode.sh
2024-06-11 03:10:51 +00:00
#
# |cache| must be called separately because it is slow and
# only needs to be run when a new game is added.
# It create files in the repository which can then be checked in.
#
cache : $( GAMES .CONF )
2021-11-26 19:03:09 +00:00
$( PARALLEL) ::: \
2024-06-11 03:10:51 +00:00
'awk -F= ' "'" '/^00/ { print $$2 }' "'" ' < $(BUILDDIR)/GAMES.CONF | bin/buildcache.py > $(BUILDDIR)/cache00.a' \
'awk -F= ' "'" '/^0/ { print $$2 }' "'" ' < $(BUILDDIR)/GAMES.CONF | bin/buildcache.py > $(BUILDDIR)/cache01.a' \
'awk -F= ' "'" '/^.0/ { print $$2 }' "'" ' < $(BUILDDIR)/GAMES.CONF | bin/buildcache.py > $(BUILDDIR)/cache10.a' \
'awk -F= ' "'" '!/^$$|^#/ { print $$2 }' "'" ' < $(BUILDDIR)/GAMES.CONF | bin/buildcache.py > $(BUILDDIR)/cache11.a'
2021-11-26 19:03:09 +00:00
$( PARALLEL) ::: \
2024-06-11 03:10:51 +00:00
'$(ACME) -o res/CACHE00.IDX $(BUILDDIR)/cache00.a' \
'$(ACME) -o res/CACHE01.IDX $(BUILDDIR)/cache01.a' \
'$(ACME) -o res/CACHE10.IDX $(BUILDDIR)/cache10.a' \
'$(ACME) -o res/CACHE11.IDX $(BUILDDIR)/cache11.a'
2021-11-05 22:39:20 +00:00
2024-06-11 03:10:51 +00:00
mount : $( HDV )
osascript bin/V2Make.scpt "`pwd`" bin/4cade.vii " $( HDV) "
2021-10-23 04:53:23 +00:00
2024-06-11 03:10:51 +00:00
$(MD) :
mkdir -p " $( BUILDDIR) " /X " $( BUILDDIR) " /X.INDEXED " $( BUILDDIR) " /FX.INDEXED " $( BUILDDIR) " /FXDATA " $( BUILDDIR) " /FXCODE " $( BUILDDIR) " /PRELAUNCH " $( BUILDDIR) " /PRELAUNCH.INDEXED " $( BUILDDIR) " /ATTRACT " $( BUILDDIR) " /SS " $( BUILDDIR) " /GAMEHELP " $( BUILDDIR) " /DEMO
touch " $( BUILDDIR) " /log
@touch " $@ "
2021-10-23 04:53:23 +00:00
clean :
2024-06-11 03:10:51 +00:00
rm -rf $( BUILDDIR) / || rm -rf $( BUILDDIR)
2021-10-23 04:53:23 +00:00
2021-12-16 22:23:54 +00:00
preconditions :
@$( ACME) --version | grep -q "ACME, release" || ( echo "ACME is not installed" && exit 1)
@$( CADIUS) | grep -q "cadius v" || ( echo "Cadius is not installed" && exit 1)
@$( PARALLEL) --version | grep -q "GNU" || ( echo "GNU Parallel is not installed" && exit 1)
@$( PYTHON) --version | grep -q "Python 3" || ( echo "Python 3 is not installed" && exit 1)
2021-10-23 04:53:23 +00:00
all : clean dsk mount
al : all
2024-06-11 03:10:51 +00:00
.NOTPARALLEL :