# Makefile for a 'Peer C' project
VIDEROOT=/home/vide/Vide.RPI5/
VLIB=$(VIDEROOT)C/PeerC/vectrex/lib/static
PROJECT=newproj
P_VERSION=1.0
ARGS=-quiet \
       -fno-tree-vrp -fno-ipa-reference -ftree-ter -fno-gcse -fverbose-asm \
       -W -Wall -Wextra -Wconversion -Werror \
       -fno-strict-overflow -fomit-frame-pointer -fno-toplevel-reorder \
       -mint8 -msoft-reg-count=0 -std=gnu99 -fno-time-report \
       -I$(VIDEROOT)C/PeerC/vectrex/include \
       -DP_VERSION_80="$(P_VERSION)\x80" -DP_VERSION_0="$(P_VERSION)" \
       -D__RUM_FUNCTION=1 \
       -DOMMIT_FRAMEPOINTER=1 -DOMIT_FRAMEPOINTER=1 \
       -Iinclude
LIBS=-l rum.lib -l libgcc.lib -l gcc.lib -l assert.lib
CC1=$(VIDEROOT)C/Linux64/bin/cc1
AS6809=$(VIDEROOT)C/Linux64/bin/as6809
ASLINK=$(VIDEROOT)C/Linux64/bin/aslink
SREC2BIN=$(VIDEROOT)C/Linux64/bin/srec2bin
OBJLIBS=$(VLIB)/vec_rum_0xe7.rel \
       $(VLIB)/vec_ram_0xc8_2.rel \
       $(VLIB)/vec_rom_0xfc_0.rel \
       $(VLIB)/vec_rom_dped_0.rel \
       $(VLIB)/vec_rum_0xf0.rel \
       $(VLIB)/vec_rom_0xfe_0.rel \
       $(VLIB)/vec_rum_0xf5.rel \
       $(VLIB)/vec_ram_dpcb_1.rel \
       $(VLIB)/vec_rom_dpfd_0.rel \
       $(VLIB)/vec_ram_dpc8_2.rel \
       $(VLIB)/vec_ram_0xc8_0.rel \
       $(VLIB)/vec_ram_dpd0_1.rel \
       $(VLIB)/vec_rum_0xf1.rel \
       $(VLIB)/vec_rum_0xf4.rel \
       $(VLIB)/vec_rum_0xe9.rel \
       $(VLIB)/vec_ram_0xd0_1.rel \
       $(VLIB)/vec_rum_0xf9.rel \
       $(VLIB)/vec_rom_dpff_0.rel \
       $(VLIB)/vec_ram_0xcb_3.rel \
       $(VLIB)/vec_ram_dpc8_1.rel \
       $(VLIB)/vec_rom_dpfe_0.rel \
       $(VLIB)/vec_ram_dpc8_0.rel \
       $(VLIB)/vec_rom_0xed_0.rel \
       $(VLIB)/vec_ram_dpcb_2.rel \
       $(VLIB)/vec_rum_0xff.rel \
       $(VLIB)/vec_rum_0xf8.rel \
       $(VLIB)/vec_rum_0xf2.rel \
       $(VLIB)/vec_ram_dpcb_0.rel \
       $(VLIB)/vec_rum_0xf7.rel \
       $(VLIB)/vec_ram_0xcb_0.rel \
       $(VLIB)/vec_ram_0xc8_1.rel \
       $(VLIB)/vec_rum_0xf3.rel \
       $(VLIB)/vec_rom_0xff_0.rel \
       $(VLIB)/vec_rum_0xf6.rel \
       $(VLIB)/vec_ram_0xcb_1.rel \
       $(VLIB)/vec_ram_dpcb_3.rel \
       $(VLIB)/vec_ram_0xcb_2.rel \
       $(VLIB)/vec_ram_0xd0_0.rel \
       $(VLIB)/vec_rom_0xfd_0.rel \
       $(VLIB)/vec_ram_dpd0_0.rel \
       $(VLIB)/vec_rom_dpfe_1.rel \
       $(VLIB)/vec_rum_0xea.rel \
       $(VLIB)/vec_rom_0xfe_1.rel \
       $(VLIB)/vec_rom_dpfc_0.rel

all: bin/$(PROJECT)_$(P_VERSION).bin
	echo All up to date.

build/lib/main.i: source/main.c
	$(CC1) $(ARGS) -E source/main.c -o build/lib/main.i

build/lib/cartridge.i: source/cartridge.c
	$(CC1) $(ARGS) -E source/cartridge.c -o build/lib/cartridge.i

build/lib/main.s: build/lib/main.i
	$(CC1) $(ARGS) source/main.c -o build/lib/main.s

build/lib/cartridge.s: build/lib/cartridge.i
	$(CC1) $(ARGS) source/cartridge.c -o build/lib/cartridge.s

build/lib/main.rel: build/lib/main.s
	$(AS6809) -x -p -l -o -y -g build/lib/main.rel build/lib/main.s

build/lib/cartridge.rel: build/lib/cartridge.s
	$(AS6809) -x -p -l -o -y -g build/lib/cartridge.rel build/lib/cartridge.s

build/$(PROJECT).s19: build/lib/main.rel build/lib/cartridge.rel $(VIDEROOT)C/PeerC/vectrex/lib/crt0.rel $(OBJLIBS)
	$(ASLINK) -n -m -u -w -s -k $(VIDEROOT)C/PeerC/vectrex/lib/ $(LIBS) build/$(PROJECT).s19 $(VIDEROOT)C/PeerC/vectrex/lib/crt0.rel build/lib/main.rel build/lib/cartridge.rel $(OBJLIBS)

build/$(PROJECT)_rom.bin: build/$(PROJECT).s19
	$(SREC2BIN) -q build/$(PROJECT)_rom.s19 build/$(PROJECT)_rom.bin # also creates build/$(PROJECT)_rom.s19

bin/$(PROJECT)_$(P_VERSION).bin: build/$(PROJECT)_rom.bin
	cp build/$(PROJECT)_rom.bin bin/$(PROJECT)_$(P_VERSION).bin # not sure where bin/$(PROJECT)_$(P_VERSION).cnt comes from

clean:
	rm -f build/lib/*.??? build/lib/*.? build/*.??? build/*.? bin/*.???
