# System: AmigaOS, 68020/68881 minimum
CC = vc
DEFS = -DAMIGA -DHAVE_CONFIG_H
TARG = Amiga68k
COPTS = -cpu=68020 -fpu=68881 -c -o $@ -dontwarn=129 -dontwarn=214
CLIBS = -lm881 -lvc -lrtgm -lamiga

# Native C compiler for helper tools
NCC = vc
NDEFS = -DAMIGA -DPRINTF_RETURN=1
NCOPTS = -o $@ -dontwarn=129 -dontwarn=214
NCLIBS =

# Linker
LD = vlink
LDOPTS = -bamigaos -s -x -r

# Misc
CAT = join as


SRCOBJS = $(TARG)/thrust.o $(TARG)/getopt.o $(TARG)/getopt1.o \
          $(TARG)/amiga.o $(TARG)/amigakey.o $(TARG)/amigaextra.o \
          $(TARG)/ksyms.o $(TARG)/init.o $(TARG)/fast_gr.o \
          $(TARG)/font5x5.o $(TARG)/graphics.o $(TARG)/things.o \
          $(TARG)/hiscore.o $(TARG)/conf.o $(TARG)/level.o \
          $(TARG)/strdup.o $(TARG)/hypot.o $(TARG)/soundIt.o

DATAOBJS = $(TARG)/font.o $(TARG)/blks.o $(TARG)/ship.o $(TARG)/shld.o \
           $(TARG)/colors.o $(TARG)/bullet.o $(TARG)/title.o \
           $(TARG)/level1.o $(TARG)/level2.o $(TARG)/level3.o \
           $(TARG)/level4.o $(TARG)/level5.o $(TARG)/level6.o \
           $(TARG)/demomove.o $(TARG)/snd_boom.o $(TARG)/snd_boom2.o \
           $(TARG)/snd_harp.o $(TARG)/snd_thrust.o $(TARG)/snd_zero.o

BLKBIN = datatmp/blks0.bin datatmp/blks1.bin datatmp/blks2.bin \
         datatmp/blks3.bin datatmp/blks4.bin datatmp/blks5.bin \
         datatmp/blks6.bin datatmp/blks7.bin datatmp/blks8.bin \
         datatmp/blks9.bin datatmp/blksa.bin datatmp/blksb.bin \
         datatmp/blksc.bin datatmp/blksd.bin datatmp/blkse.bin \
         datatmp/blksf.bin


all: $(TARG)/AThrust

$(TARG)/AThrust: $(SRCOBJS) $(TARG)/data.o
	$(CC) -o $@ $(SRCOBJS) $(TARG)/data.o $(CLIBS)

$(TARG)/data.o: $(DATAOBJS)
	$(LD) $(LDOPTS) -o $@ $(DATAOBJS)


# SRCOBJS dependencies 

$(TARG)/thrust.o: src/thrust.c src/config.h src/getopt.h src/thrust_t.h \
                  src/thrust.h src/hiscore.h src/graphics.h src/fast_gr.h \
                  src/gr_drv.h src/font5x5.h src/things.h src/conf.h \
                  src/init.h src/level.h src/keyboard.h src/options.h \
                  src/soundit.h
	$(CC) $(COPTS) $(DEFS) src/thrust.c

$(TARG)/getopt.o: src/getopt.c src/config.h src/getopt.h
	$(CC) $(COPTS) $(DEFS) src/getopt.c

$(TARG)/getopt1.o: src/getopt1.c src/config.h src/getopt.h
	$(CC) $(COPTS) $(DEFS) src/getopt1.c

$(TARG)/amiga.o: src/amiga.c src/config.h src/getopt.h src/thrust.h \
                 src/fast_gr.h src/gr_drv.h src/options.h
	$(CC) $(COPTS) $(DEFS) src/amiga.c

$(TARG)/amigakey.o: src/amigakey.c src/config.h src/keyboard.h \
                    src/ksyms.h src/amigakey.h
	$(CC) $(COPTS) $(DEFS) src/amigakey.c

$(TARG)/amigaextra.o: src/amigaextra.c src/config.h
	$(CC) $(COPTS) $(DEFS) src/amigaextra.c

$(TARG)/ksyms.o: src/ksyms.c src/ksyms.h
	$(CC) $(COPTS) $(DEFS) src/ksyms.c

$(TARG)/init.o: src/init.c src/config.h src/keyboard.h src/thrust_t.h \
                src/init.h src/fast_gr.h src/graphics.h src/things.h \
                src/font5x5.h src/thrust.h src/gr_drv.h src/soundit.h
	$(CC) $(COPTS) $(DEFS) src/init.c

$(TARG)/fast_gr.o: src/fast_gr.c src/config.h src/thrust_t.h src/thrust.h \
                   src/fast_gr.h src/font5x5.h src/gr_drv.h
	$(CC) $(COPTS) $(DEFS) src/fast_gr.c

$(TARG)/font5x5.o: src/font5x5.c src/config.h src/keyboard.h src/thrust_t.h \
                   src/thrust.h src/font5x5.h src/fast_gr.h src/gr_drv.h
	$(CC) $(COPTS) $(DEFS) src/font5x5.c

$(TARG)/graphics.o: src/graphics.c src/config.h src/thrust_t.h \
                    src/graphics.h src/things.h src/fast_gr.h \
                    src/gr_drv.h src/thrust.h
	$(CC) $(COPTS) $(DEFS) src/graphics.c

$(TARG)/things.o: src/things.c src/config.h src/thrust_t.h src/things.h \
                  src/fast_gr.h src/graphics.h src/thrust.h src/soundit.h
	$(CC) $(COPTS) $(DEFS) src/things.c

$(TARG)/hiscore.o: src/hiscore.c src/config.h src/thrust_t.h src/hiscore.h
	$(CC) $(COPTS) $(DEFS) src/hiscore.c

$(TARG)/conf.o: src/conf.c src/config.h src/thrust_t.h src/keyboard.h \
                src/conf.h src/font5x5.h src/thrust.h src/keyboard.h \
                src/gr_drv.h
	$(CC) $(COPTS) $(DEFS) src/conf.c

$(TARG)/level.o: src/level.c src/config.h src/thrust_t.h src/level.h \
                 src/things.h src/fast_gr.h src/graphics.h src/thrust.h
	$(CC) $(COPTS) $(DEFS) src/level.c

$(TARG)/strdup.o: src/strdup.c src/config.h
	$(CC) $(COPTS) $(DEFS) src/strdup.c

$(TARG)/hypot.o: src/hypot.c src/config.h
	$(CC) $(COPTS) $(DEFS) src/hypot.c

$(TARG)/soundIt.o: src/soundIt.c src/config.h
	$(CC) $(COPTS) $(DEFS) src/soundIt.c


# Helpers

$(TARG)/copypart: helpers/copypart.c
	$(NCC) $(NCOPTS) $(NDEFS) -o $@ $<

$(TARG)/reverse: helpers/reverse.c
	$(NCC) $(NCOPTS) $(NDEFS) -o $@ $<

$(TARG)/bin2c: helpers/bin2c.c
	$(NCC) $(NCOPTS) $(NDEFS) -o $@ $<

$(TARG)/txt2c: helpers/txt2c.c
	$(NCC) $(NCOPTS) $(NDEFS) -o $@ $<


# Extract palette information.
datatmp/colors.bin: datasrc/colors.pal $(TARG)/copypart
	$(TARG)/copypart $< $@ 790 0

# Extract picture information.
datatmp/bullet-4.rev: datasrc/bullet-4.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks0-8.rev: datasrc/blks0-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks1-8.rev: datasrc/blks1-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks2-8.rev: datasrc/blks2-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks3-8.rev: datasrc/blks3-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks4-8.rev: datasrc/blks4-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks5-8.rev: datasrc/blks5-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks6-8.rev: datasrc/blks6-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks7-8.rev: datasrc/blks7-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks8-8.rev: datasrc/blks8-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blks9-8.rev: datasrc/blks9-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blksa-8.rev: datasrc/blksa-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blksb-8.rev: datasrc/blksb-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blksc-8.rev: datasrc/blksc-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blksd-8.rev: datasrc/blksd-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blkse-8.rev: datasrc/blkse-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/blksf-8.rev: datasrc/blksf-8.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/ship-16.rev: datasrc/ship-16.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0
datatmp/shld-16.rev: datasrc/shld-16.bmp $(TARG)/copypart
	$(TARG)/copypart $< $@ 1078 0

# The bmp format stores rows backwards (last row first).
# These rules are used to "reverse" the order in which the rows are stored.
# There is one rule for each of the three used widths of the line.
datatmp/bullet.bin: datatmp/bullet-4.rev $(TARG)/reverse
	$(TARG)/reverse 4 < $< > $@
datatmp/blks0.bin: datatmp/blks0-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks1.bin: datatmp/blks1-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks2.bin: datatmp/blks2-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks3.bin: datatmp/blks3-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks4.bin: datatmp/blks4-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks5.bin: datatmp/blks5-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks6.bin: datatmp/blks6-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks7.bin: datatmp/blks7-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks8.bin: datatmp/blks8-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blks9.bin: datatmp/blks9-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blksa.bin: datatmp/blksa-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blksb.bin: datatmp/blksb-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blksc.bin: datatmp/blksc-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blksd.bin: datatmp/blksd-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blkse.bin: datatmp/blkse-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/blksf.bin: datatmp/blksf-8.rev $(TARG)/reverse
	$(TARG)/reverse 8 < $< > $@
datatmp/ship.bin: datatmp/ship-16.rev $(TARG)/reverse
	$(TARG)/reverse 16 < $< > $@
datatmp/shld.bin: datatmp/shld-16.rev $(TARG)/reverse
	$(TARG)/reverse 16 < $< > $@

# Make a C file out of a binary file. The info is stored in a byte array.
datatmp/blks.bin: $(BLKBIN)
	$(CAT) $@ $(BLKBIN)

datatmp/blks.c: datatmp/blks.bin $(TARG)/bin2c
	$(TARG)/bin2c bin_blks < $< > $@

datatmp/ship.c: datatmp/ship.bin $(TARG)/bin2c
	$(TARG)/bin2c bin_ship < $< > $@

datatmp/shld.c: datatmp/shld.bin $(TARG)/bin2c
	$(TARG)/bin2c bin_shld < $< > $@

datatmp/colors.c: datatmp/colors.bin $(TARG)/bin2c
	$(TARG)/bin2c bin_colors < $< > $@

datatmp/bullet.c: datatmp/bullet.bin $(TARG)/bin2c
	$(TARG)/bin2c bin_bullet < $< > $@

datatmp/level1.c: datasrc/level1.def $(TARG)/txt2c
	$(TARG)/txt2c level1 < $< > $@

datatmp/level2.c: datasrc/level2.def $(TARG)/txt2c
	$(TARG)/txt2c level2 < $< > $@

datatmp/level3.c: datasrc/level3.def $(TARG)/txt2c
	$(TARG)/txt2c level3 < $< > $@

datatmp/level4.c: datasrc/level4.def $(TARG)/txt2c
	$(TARG)/txt2c level4 < $< > $@

datatmp/level5.c: datasrc/level5.def $(TARG)/txt2c
	$(TARG)/txt2c level5 < $< > $@

datatmp/level6.c: datasrc/level6.def $(TARG)/txt2c
	$(TARG)/txt2c level6 < $< > $@

datatmp/demomove.c: datasrc/demomove.bin $(TARG)/bin2c
	$(TARG)/bin2c bin_demomove < $< > $@

datatmp/snd_boom.c: datasrc/boom.snd $(TARG)/bin2c
	$(TARG)/bin2c sound_boom < $< > $@

datatmp/snd_boom2.c: datasrc/boom2.snd $(TARG)/bin2c
	$(TARG)/bin2c sound_boom2 < $< > $@

datatmp/snd_harp.c: datasrc/harp.snd $(TARG)/bin2c
	$(TARG)/bin2c sound_harp < $< > $@

datatmp/snd_thrust.c: datasrc/thrust.snd $(TARG)/bin2c
	$(TARG)/bin2c sound_thrust < $< > $@

datatmp/snd_zero.c: datasrc/zero.snd $(TARG)/bin2c
	$(TARG)/bin2c sound_zero < $< > $@


# DATAOBJS dependencies

$(TARG)/font.o: datasrc/font.c
	$(CC) $(COPTS) $(DEFS) datasrc/font.c
$(TARG)/blks.o: datatmp/blks.c
	$(CC) $(COPTS) $(DEFS) datatmp/blks.c
$(TARG)/ship.o: datatmp/ship.c
	$(CC) $(COPTS) $(DEFS) datatmp/ship.c
$(TARG)/shld.o: datatmp/shld.c
	$(CC) $(COPTS) $(DEFS) datatmp/shld.c
$(TARG)/colors.o: datatmp/colors.c
	$(CC) $(COPTS) $(DEFS) datatmp/colors.c
$(TARG)/bullet.o: datatmp/bullet.c
	$(CC) $(COPTS) $(DEFS) datatmp/bullet.c
$(TARG)/title.o: datasrc/title.c
	$(CC) $(COPTS) $(DEFS) datasrc/title.c
$(TARG)/level1.o: datatmp/level1.c
	$(CC) $(COPTS) $(DEFS) datatmp/level1.c
$(TARG)/level2.o: datatmp/level2.c
	$(CC) $(COPTS) $(DEFS) datatmp/level2.c
$(TARG)/level3.o: datatmp/level3.c
	$(CC) $(COPTS) $(DEFS) datatmp/level3.c
$(TARG)/level4.o: datatmp/level4.c
	$(CC) $(COPTS) $(DEFS) datatmp/level4.c
$(TARG)/level5.o: datatmp/level5.c
	$(CC) $(COPTS) $(DEFS) datatmp/level5.c
$(TARG)/level6.o: datatmp/level6.c
	$(CC) $(COPTS) $(DEFS) datatmp/level6.c
$(TARG)/demomove.o: datatmp/demomove.c
	$(CC) $(COPTS) $(DEFS) datatmp/demomove.c
$(TARG)/snd_boom.o: datatmp/snd_boom.c
	$(CC) $(COPTS) $(DEFS) datatmp/snd_boom.c
$(TARG)/snd_boom2.o: datatmp/snd_boom2.c
	$(CC) $(COPTS) $(DEFS) datatmp/snd_boom2.c
$(TARG)/snd_harp.o: datatmp/snd_harp.c
	$(CC) $(COPTS) $(DEFS) datatmp/snd_harp.c
$(TARG)/snd_thrust.o: datatmp/snd_thrust.c
	$(CC) $(COPTS) $(DEFS) datatmp/snd_thrust.c
$(TARG)/snd_zero.o: datatmp/snd_zero.c
	$(CC) $(COPTS) $(DEFS) datatmp/snd_zero.c
