# Run tbm on the riscv-tests.
# First, build the elf files `m springbok_riscv_tests`

# This must be the first thing in the file:
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))

.DELETE_ON_ERROR:

include tbm.mk

.PHONY: riscv_tests clean_riscv_tests
clean: clean_riscv_tests

RISCV_TESTS_DIR = $(OUT)/springbok/riscv-tests

###############################################################################
## Run tbm on the ELF files from $(RISCV_TESTS_DIR)/isa

# Defines RISCV_TESTS_ISA
include riscv_tests_isa.mk

# TODO(sflur): is there a better way to list only the elf files?
riscv_tests_isa.mk: $(wildcard $(RISCV_TESTS_DIR)/isa/*)
	{ echo "## AUTO GENERATED FILE, DO NOT EDIT!";\
	  echo "$$(cd $(RISCV_TESTS_DIR)/isa && file * |\
	        sed -n 's/\([^:]\+\):[[:space:]]*ELF.*/RISCV_TESTS_ISA += \1/p')";\
	} > $@

# We only support user-level:
RISCV_TESTS_ISA := $(filter rv32u%,$(RISCV_TESTS_ISA))
# We don't support the A-ext:
RISCV_TESTS_ISA := $(filter-out rv32ua-%,$(RISCV_TESTS_ISA))
# We don't support the C-ext:
RISCV_TESTS_ISA := $(filter-out rv32uc-%,$(RISCV_TESTS_ISA))
# We don't support the D-ext:
RISCV_TESTS_ISA := $(filter-out rv32ud-%,$(RISCV_TESTS_ISA))


define isa_rules
$$(OUT_TRACES)/riscv-tests/isa/$1.spike: $$(RISCV_TESTS_DIR)/isa/$1 | $$(OUT_TRACES)/riscv-tests/isa
# The tests don't terminate nicely, so we have to use CYCLES
$$(OUT_TRACES)/riscv-tests/isa/$1.spike: CYCLES = 10000
$$(OUT_TRACES)/riscv-tests/isa/$1.tbm_log: $$(UARCH)

riscv_tests_isa: $$(OUT_TRACES)/riscv-tests/isa/$1.tbm_log
endef

$(foreach t,$(RISCV_TESTS_ISA),$(eval $(call isa_rules,$(t))))

$(OUT_TRACES)/riscv-tests/isa:
	mkdir -p $@

.PHONY: riscv_tests_isa
riscv_tests: riscv_tests_isa

clean_riscv_tests_isa:
	$(RM) riscv_tests_isa.mk
	$(RM) -r $(OUT_TRACES)/riscv-tests/isa
.PHONY: clean_riscv_tests_isa
clean_riscv_tests: clean_riscv_tests_isa

###############################################################################
## Run tbm on the ELF files from $(RISCV_TESTS_DIR)/benchmarks

RISCV_TESTS_BENCHMARKS := $(wildcard $(RISCV_TESTS_DIR)/benchmarks/*.riscv)

define benchmarks_rules
$$(OUT_TRACES)/riscv-tests/benchmarks/$1.spike: $$(RISCV_TESTS_DIR)/benchmarks/$1 | $$(OUT_TRACES)/riscv-tests/benchmarks
$$(OUT_TRACES)/riscv-tests/benchmarks/$1.spike: SPIKE_MEM := 0x80000000:0x100000
$$(OUT_TRACES)/riscv-tests/benchmarks/$1.spike: SPIKE_ENTRY := 0x80000000
$$(OUT_TRACES)/riscv-tests/benchmarks/$1.tbm_log: $$(UARCH)

riscv_tests_benchmarks: $$(OUT_TRACES)/riscv-tests/benchmarks/$1.tbm_log

RISCV_TESTS_BENCHMARKS_LOGS += $$(OUT_TRACES)/riscv-tests/benchmarks/$1.tbm_log
endef

$(foreach t,$(RISCV_TESTS_BENCHMARKS),$(eval $(call benchmarks_rules,$(notdir $(t)))))

$(OUT_TRACES)/riscv-tests/benchmarks:
	mkdir -p $@

.PHONY: riscv_tests_benchmarks
riscv_tests: riscv_tests_benchmarks

# We use -B to make sure everything is up to date
benchmarks:
	TBM_OPTS=--report-dont-include-cfg $(MAKE) -f $(THIS_MAKEFILE) -B $(OUT_TRACES)/riscv-tests/benchmarks/benchmarks.md
.PHONY: benchmarks

$(OUT_TRACES)/riscv-tests/benchmarks/benchmarks.md: $(RISCV_TESTS_BENCHMARKS_LOGS)
	@{ echo "# Benchmark Results #";\
	  echo;\
	  echo "Date: $$(date --iso-8601=seconds --utc)";\
	  echo "uArch config ($(UARCH)):";\
	  echo '```';\
	  cat "$(UARCH)";\
	  echo '```';\
	  $(foreach test,$(RISCV_TESTS_BENCHMARKS),\
	    echo;\
	    echo "### Test: $(notdir $(test)) ###";\
	    echo;\
	    echo "ELF file: $(test:$(ROOTDIR)/%=%)";\
	    echo;\
	    echo '```';\
	    cat "$(test:$(RISCV_TESTS_DIR)/%=$(OUT)/%.tbm_log)";\
	    echo '```';\
	  )\
	} > $@

clean_riscv_tests_benchmarks:
	$(RM) -r $(OUT_TRACES)/riscv-tests/benchmarks
.PHONY: clean_riscv_tests_benchmarks
clean_riscv_tests: clean_riscv_tests_benchmarks
