Makefile.test (1822B)
1 2 all: run-tests 3 4 RVSIM := bin/rvsim 5 TESTROOT := ../riscv-arch-test 6 BUILDDIR := tests 7 8 V ?= @ 9 10 RISCV_PREFIX := /work/riscv/toolchains/riscv32-elf-7.3.0-Linux-x86_64/bin/riscv32-elf- 11 #RISCV_PREFIX := riscv32-unknown-elf- 12 13 RISCV_GCC := $(RISCV_PREFIX)gcc 14 RISCV_OBJDUMP := $(RISCV_PREFIX)objdump 15 RISCV_OBJCOPY := $(RISCV_PREFIX)objcopy 16 RISCV_NM := $(RISCV_PREFIX)nm 17 RISCV_CFLAGS := -g -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles 18 RISCV_CFLAGS += -march=rv32im -mabi=ilp32 -DXLEN=32 -Ttarget/link.ld 19 RISCV_CFLAGS += -I$(TESTROOT)/riscv-test-env -I$(TESTROOT)/riscv-test-env/p -Itarget 20 21 TESTSUITE := $(TESTROOT)/riscv-test-suite 22 TESTGROUPS := rv32i_m/I rv32i_m/M 23 24 ALL := 25 26 # $1 = source/test.S, $2 = source/test.sig, $3 = build/test 27 define test-template 28 $(3).elf: $(1) 29 @mkdir -p $$(dir $$@) 30 @echo MAKE: $$@ 31 $(V)$(RISCV_GCC) $(RISCV_CFLAGS) -o $$@ $$< 32 33 $(3).bin: $(3).elf 34 $(V)$(RISCV_OBJCOPY) -O binary $$< $$@ 35 36 $(3).lst: $(3).elf 37 $(V)$(RISCV_OBJDUMP) -D $$< > $$@ 38 39 $(3).map: $(3).elf 40 $(V)$(RISCV_NM) $$< > $$@ 41 42 $(3).pass: $(3).bin $(3).map $(3).lst 43 @echo TEST: $(3) 44 $(V)$(RVSIM) $$< -dump=$(3).sig \ 45 -from=$$$$(grep begin_signature $(3).map | awk '{print $$$$1}') \ 46 -to=$$$$(grep end_signature $(3).map | awk '{print $$$$1}') \ 47 2> $(3).log 1>&2 48 $(V)if diff $(3).sig $(2) > $(3).diff ;\ 49 then echo PASS: $(3) ; touch $$@ ;\ 50 else echo FAIL: $(3) ; exit 1 ; fi 51 52 .PRECIOUS: $(3).elf $(3).bin $(3).lst $(3).map $(3).log $(3).sig $(3).diff 53 54 ALL += $(3).pass 55 endef 56 57 $(foreach grp,$(TESTGROUPS),\ 58 $(foreach src,$(wildcard $(TESTSUITE)/$(grp)/src/*.S),\ 59 $(eval $(call test-template,$(src)\ 60 ,$(patsubst $(TESTSUITE)/$(grp)/src/%.S,$(TESTSUITE)/$(grp)/references/%.reference_output,$(src))\ 61 ,$(patsubst $(TESTSUITE)/$(grp)/src/%.S,$(BUILDDIR)/$(grp)/%,$(src)))))) 62 63 run-tests: $(ALL)