###############################################################################
##### SimRV/RISC-V since 2018-07-05                  ArchLab. TokyoTech   #####
###############################################################################

RISCV_PREFIX = /opt/riscv/bin/riscv32-unknown-elf-
CCFLAGS      = -O2 -march=rv32i -mabi=ilp32
TARGET       = main
OBJS         = main.o simrv.o startup.o acker.o fib.o nqueen.o qsort.o

.SUFFIXES: .o .c .S
.PHONY: all clean dump

###############################################################################

all:
	make bin
# padding
	cp $(TARGET).bin _$(TARGET).bin
	dd if=/dev/zero bs=4k count=1 >> _$(TARGET).bin
	dd if=_$(TARGET).bin bs=4k count=1 > $(TARGET).bin
	rm -f _$(TARGET).bin
# create hex file
	make hex4
	make dump
	make file

bin: $(TARGET).bin

$(TARGET).elf: main.lds $(OBJS)
	$(RISCV_PREFIX)ld -T $< -o $@ $(OBJS)

$(TARGET).bin: $(TARGET).elf
	$(RISCV_PREFIX)objcopy -O binary $< $@

.c.o:
	$(RISCV_PREFIX)gcc $(CCFLAGS) -o $@ -c $<

.S.o:
	$(RISCV_PREFIX)gcc $(CCFLAGS) -o $@ -c $<

###############################################################################

clean:
	rm -f *.o *.elf simrv.o main.dump *.hex main.bin

dump:
	$(RISCV_PREFIX)objdump -D $(TARGET).elf > $(TARGET).dump

hex:
	hexdump -v -e '1/1 "%02x" "\n"' $(TARGET).bin > $(TARGET).hex

hex2:
	hexdump -v -e '1/2 "%04x" "\n"' $(TARGET).bin > $(TARGET)2.hex

hex4:
	hexdump -v -e '1/4 "%08x" "\n"' $(TARGET).bin > $(TARGET)4.hex

file:
	cp main4.hex test.mem
	cp main.bin  test.bin
	cp main.dump test.dump
