riscv

an RV32I simulator and related experiments
git clone http://frotz.net/git/riscv.git
Log | Files | Refs | README

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)