blob: 2f0fa3fbb12a7cc98d3958f0f67d15aa9fc5c8a4 [file] [log] [blame]
include rv32_tests.inc
ARCH_tmp := imf
ifneq (,$(findstring c,$(ARCH_lowercase)))
ARCH_tmp := $(ARCH_tmp)c
endif
override ARCH := $(ARCH_tmp)
src_dir := $(CURDIR)
obj_dir := $(bld_dir)/riscv_objs
test_list := $(patsubst %.S, %, $(notdir $(rv32_isa_tests)))
objs := $(addprefix $(obj_dir)/,$(test_list:%=%.o))
test_elf := $(addprefix $(bld_dir)/,$(test_list:%=%.elf))
test_hex := $(addprefix $(bld_dir)/,$(test_list:%=%.hex))
test_dump := $(addprefix $(bld_dir)/,$(test_list:%=%.dump))
CFLAGS := -I$(inc_dir) -I$(src_dir) -DASM -Wa,-march=rv32$(ARCH) -march=rv32$(ARCH) -mabi=ilp32f -D__riscv_xlen=32
LDFLAGS := -static -fvisibility=hidden -nostdlib -nostartfiles -T$(inc_dir)/link.ld -march=rv32$(ARCH) -mabi=ilp32f
RISCV_TESTS := $(src_dir)/../../dependencies/riscv-tests/
VPATH += $(src_dir) $(bld_dir) $(obj_dir) $(RISCV_TESTS)
default: log_requested_tgt check_riscv_tests $(test_elf) $(test_hex) $(test_dump)
define compile_template
$(obj_dir)/$$(basename $(notdir $(SRC))).o: $$(SRC) | $(obj_dir)
$(RISCV_GCC) -c $$< $(CFLAGS) -o $$@
endef
$(foreach SRC,$(rv32_isa_tests), $(eval $(compile_template)))
log_requested_tgt:
$(foreach test_name, $(test_list), $(eval $(shell echo $(test_name).hex >> $(bld_dir)/test_info)))
$(obj_dir) :
mkdir -p $(obj_dir)
$(bld_dir)/%.elf: $(obj_dir)/%.o | $(obj_dir)
$(RISCV_GCC) $^ $(LDFLAGS) -o $@
$(bld_dir)/%.hex: $(bld_dir)/%.elf
$(RISCV_ROM_OBJCOPY) $^ $@
$(RISCV_RAM_OBJCOPY) $^ $@.ram
#assign 0x0800_0xxx to 0x0000_0xxx to map to TCM Memory
sed -i 's/@08000/@00000/g' $@.ram
$(bld_dir)/%.dump: $(bld_dir)/%.elf
$(RISCV_OBJDUMP) $^ > $@
clean:
$(RM) $(test_elf) $(test_hex) $(test_dump) $(objs)
$(RM) -R $(obj_dir)
.PHONY: check_riscv_tests
riscv_tests_dir := $(if $(RISCV_TESTS), $(RISCV_TESTS), ./undefined)
riscv_tests_commit := 5f8a4918c6482e65c67a2b7decd5c2af3e3fe0e5
## commit hash readed from local copy of https://github.com/riscv/riscv-tests
tmp_commit = $(shell cd $(riscv_tests_dir) 2>/dev/null && git log -1 | grep "commit" | cut -f2 -d ' ')
is_commit_good = $(if $(subst $(riscv_tests_commit),,$(tmp_commit)),false,true)
# Color
RED=\033[0;31m
NC=\033[0m
check_riscv_tests : $(riscv_tests_dir)
@if [ ! -d $(riscv_tests_dir) ]; then \
echo -e "$(RED)==========================================================================" &&\
echo " Error! Environment variable RISCV_TESTS='$(riscv_tests_dir)' " &&\
echo " directory not exist!" && \
echo "==========================================================================$(NC)" ; \
fi
ifneq ($(is_commit_good),true)
@echo -e "$(RED)=========================================================================="
@echo " Warning! Execution of test code is not guaranteed "
@echo " while using the current commit of repositorylocated at : $(riscv_tests_dir) ."
@echo " "
@echo " Riscv-tests repository must point to commit $(riscv_tests_commit)!"
@echo -e "==========================================================================$(NC)"
endif
$(riscv_tests_dir) :.
ifndef RISCV_TESTS
@echo -e "$(RED)=========================================================================="
@echo " Error! Environment variable RISCV_TESTS not set!"
@echo " You must set the environment variable RISCV_TESTS"
@echo " The variable should point to the local copy of the"
@echo " repository https://github.com/riscv/riscv-tests"
@echo " with the commit $(riscv_tests_commit)"
@echo -e "==========================================================================$(NC)"
exit 1
endif