all: sim rom
sim: dsp_test.ghw
rom: boot_rom.gen.vhdl
bin: ../lab/dsp/au_base_project.runs/impl_1/au_top.bin

CC = ../bin/cc
LD = ../bin/ld

CFLAGS = -I../wave -I../uart

offset = $(shell printf "%d" 0x1100)

test_boot_rom.gen.vhdl: bootloader.o ../uart/uart.o
boot_rom.gen.vhdl: bootloader.o ../uart/uart.o

# hello.bin: hello.o ../uart/uart.o
# synth.bin: synth.o ../uart/uart.o
# echo.bin: echo.o ../uart/uart.o
# bootloader.bin: bootloader.o ../uart/uart.o

sim_sources = dsp_test.vhdl test_boot_rom.gen.vhdl
sources = dsp.vhdl ram.vhdl     \
	  ../cpu/cpu.vhdl ../cpu/reg.vhdl ../cpu/alu.vhdl \
	  $(wildcard ../wave/*.vhdl)      \
	  $(wildcard ../sysbus/*.vhdl)    \
	  ../uart/uart.vhdl

../lab/dsp/au_base_project.runs/impl_1/au_top.bin: ../lab/dsp/au_base_project.runs/synth_1/au_top.dcp
	../lab/dsp/au_base_project.runs/impl_1/runme.sh

../lab/dsp/au_base_project.runs/synth_1/au_top.dcp: $(sources) boot_rom.gen.vhdl
	../lab/dsp/au_base_project.runs/synth_1/runme.sh


%.bin: %.o ../uart/uart.o
	$(LD) -o $@ --offset $(offset) $^

%.gen.vhdl:
	$(LD) -o $@ --vhdl $*.vhdl.in $^


%.ghw: work-obj93.cf
	ghdl -r $* --wave=$@ --assert-level=error


work-obj93.cf: $(sim_sources) $(sources)
	ghdl -a $^

PHONY: bin sim rom clean

clean:
	rm -rf *.o *.gen.vhdl *.ghw work-obj93.cf *.bin

.DELETE_ON_ERROR:

.PRECIOUS: %.ghw