SRC_ALL=$(wildcard src/**/*.sv src/*.sv)
SRC_MODULE=$(filter-out %_top.sv,$(filter-out %_tb.sv,$(SRC_ALL)))
DEF_MODULE=$(wildcard src/*.svh)

FIRMWARE_SRC=firmware/src/entry.S \
			 firmware/src/main.rs \
			 firmware/link.ld \
			 firmware/Cargo.toml

MAIN_TOP=src/rvx0_soc_top.sv

all: obj_dir/rvx0

obj_dir/apb0_memory.hex: obj_dir/firmware.bin tool/makebin.py
	./tool/makebin.py obj_dir/firmware.bin $@

obj_dir/firmware.bin: firmware/target/riscv32i-unknown-none-elf/release/firmware
	mkdir -p obj_dir
	llvm-objcopy -O binary $< $@

firmware/target/riscv32i-unknown-none-elf/release/firmware: $(FIRMWARE_SRC)
	cd firmware && cargo build --release

obj_dir/rvx0: $(SRC_MODULE) $(DEF_MODULE) $(MAIN_TOP) obj_dir/apb0_memory.hex
	mkdir -p obj_dir
	verilator -Wno-fatal --assert --binary -Isrc -o rvx0 $(MAIN_TOP) $(SRC_MODULE)
#
# obj_dir/firmware.elf: $(FIRMWARE_OBJ) src/firmware.ld
#
# obj_dir/apb0_memory.hex: src/apb0_memory.S tool/makebin.py
# 	mkdir -p obj_dir
# 	riscv64-elf-gcc -c -o obj_dir/apb0_memory.o src/apb0_memory.S
# 	llvm-objcopy -O binary obj_dir/apb0_memory.o obj_dir/apb0_memory.bin
# 	./tool/makebin.py obj_dir/apb0_memory.bin $@
