blob: ed03a455557298f53c8ead42444bbd17998bc476 [file] [log] [blame]
## Set common environment variables
TOP ?= $(shell git rev-parse --show-toplevel)
include $(TOP)/Makefile.common
SPIKE_MOD_PATH = $(BP_EXTERNAL_DIR)/bin
TEST_DIR = $(BP_COMMON_DIR)/test
MEM_DIR = $(TEST_DIR)/mem
RISCV_SIM = spike
RISCV_OBJDUMP = riscv64-unknown-elf-objdump -D
RISCV_OBJCOPY = riscv64-unknown-elf-objcopy -O verilog
RISCV_OBJCOPY_BIN = riscv64-unknown-elf-objcopy -O binary
MKLFS = $(TEST_DIR)/bin/bsg_newlib_mklfs
NC ?= 1
export TEST_DIR
include $(TEST_DIR)/Makefile.frag
all: all_mem all_dump all_spike
all_mem: perch
all_mem: riscv_mem coremark_mem beebs_mem littlefs_test_mem demos_mem zero_mem
all_dump: riscv_dump coremark_dump beebs_dump littlefs_test_dump demos_dump
all_spike: riscv_spike coremark_spike beebs_spike littlefs_test_spike
zero: zero_mem
riscv: riscv_mem riscv_dump riscv_spike
coremark: coremark_mem coremark_dump coremark_spike
beebs: beebs_mem beebs_dump beebs_spike
littlefs_test: littlefs_test_mem littlefs_test_dump littlefs_test_spike
demos: demos_mem demos_dump
# OpenSBI requires hardfloat and does not support softfloat libraries, so the compilation will fail
#opensbi: opensbi_mem opensbi_dump
#bbl: bbl_mem bbl_dump
# We don't run demos on spike because a lot of them don't terminate
# Spec is separate because it is proprietary
spec: spec_mem spec_dump spec_spike
# mtest is separate because there's not a good default
mtest: mtest_mem mtest_dump mtest_spike
perch:
$(MAKE) -C $(TEST_DIR)/src/perch
mkdir -p $(TEST_DIR)/lib
mkdir -p $(TEST_DIR)/include
cp $(TEST_DIR)/src/perch/libperch.a $(TEST_DIR)/lib
cp $(TEST_DIR)/src/perch/*.h $(TEST_DIR)/include
riscv_elf:
cd $(TEST_DIR)/src/riscv-tests/ && ./configure
$(MAKE) -C $(TEST_DIR)/src/riscv-tests/
find $(TEST_DIR)/src/riscv-tests/isa/ -executable -name "rv64ui-*" -execdir mv {} $(MEM_DIR)/{}.riscv \;
find $(TEST_DIR)/src/riscv-tests/isa/ -executable -name "rv64ua-*" -execdir mv {} $(MEM_DIR)/{}.riscv \;
find $(TEST_DIR)/src/riscv-tests/isa/ -executable -name "rv64si-*" -execdir mv {} $(MEM_DIR)/{}.riscv \;
find $(TEST_DIR)/src/riscv-tests/benchmarks/ -type f -executable -execdir mv {} $(MEM_DIR)/{} \;
coremark_elf:
$(MAKE) -C $(TEST_DIR)/src/coremark/barebones/
find $(TEST_DIR)/src/coremark/barebones/ -type f -executable -execdir mv {} $(MEM_DIR)/{} \;
demos_elf:
$(MAKE) -C $(TEST_DIR)/src/demos
find $(TEST_DIR)/src/demos/ -executable -type f -execdir mv {} $(MEM_DIR)/{} \;
opensbi_elf:
$(MAKE) -C $(TEST_DIR)/src/opensbi PLATFORM=blackparrot CROSS_COMPILE=riscv64-unknown-elf- PLATFORM_RISCV_ISA=rv64imaf
@cp $(TEST_DIR)/src/opensbi/build/platform/blackparrot/firmware/fw_jump.elf $(MEM_DIR)/opensbi.riscv
bbl_elf:
cd $(TEST_DIR)/src/riscv-pk/ && mkdir -p build && cd build \
&& ../configure --host=riscv64-unknown-elf --with-arch=rv64ia --with-abi=lp64 --includedir=$(TEST_DIR)/src/riscv-pk/machine/
$(MAKE) -C $(TEST_DIR)/src/riscv-pk/build
@cp $(TEST_DIR)/src/riscv-pk/build/bbl $(MEM_DIR)/bbl.riscv
littlefs_test_elf:
$(MAKE) -C $(TEST_DIR)/src/littlefs_newlib_test/fhello/
find $(TEST_DIR)/src/littlefs_newlib_test/fhello/ -type f -executable -execdir mv {} $(MEM_DIR)/{} \;
mtest_lfs: $(foreach x, $(PROGS), $(x).bin)
cd $(MEM_DIR) && $(MKLFS) 128 204800 $(foreach x, $(PROGS), $(x).bin) > $(TEST_DIR)/src/mtest/src/lfs.c
rm $(foreach x, $(PROGS), $(MEM_DIR)/$(x).bin)
$(PYTHON) $(TEST_DIR)/src/mtest/py/testgen.py $(NC) $(PROGS) > $(TEST_DIR)/src/mtest/src/benchmarks.h
mtest_elf:
$(MAKE) -C $(TEST_DIR)/src/mtest/
find $(TEST_DIR)/src/mtest -type f -executable -execdir mv {} $(MEM_DIR)/{} \;
find $(TEST_DIR)/src/mtest -type f -name "*dump" -execdir mv {} $(MEM_DIR)/{} \;
#Change the number of iterations per test by changing BOARD_REPEAT_FACTOR in beebs/support/support.h
beebs_elf:
cd $(TEST_DIR)/src/beebs/ && ./configure --host=riscv64 --with-chip=black-parrot
$(MAKE) -C $(TEST_DIR)/src/beebs/
find $(TEST_DIR)/src/beebs/src/ -type f -executable -execdir mv {} $(MEM_DIR)/{}.riscv \;
#Be sure to read the README and clone spec first
spec_elf:
$(MAKE) -C $(TEST_DIR)/src/spec/spec2000/benchmarks/spec2000/CINT2000/175.vpr/src.raw/
find $(TEST_DIR)/src/spec/spec2000/benchmarks/spec2000/CINT2000/175.vpr/src.raw/ -executable -type f -execdir mv {} $(MEM_DIR)/{} \;
riscv_mem: riscv_elf
riscv_mem: $(foreach x, $(RV64_P_TESTS) $(RV64_PT_TESTS) $(RV64_V_TESTS) $(RV64_VT_TESTS) $(RV64_BENCHMARKS), $(x).mem)
riscv_spike: $(foreach x, $(RV64_P_TESTS) $(RV64_PT_TESTS) $(RV64_V_TESTS) $(RV64_VT_TESTS) $(RV64_BENCHMARKS), $(x).spike)
riscv_dump: $(foreach x, $(RV64_P_TESTS) $(RV64_PT_TESTS) $(RV64_V_TESTS) $(RV64_VT_TESTS) $(RV64_BENCHMARKS), $(x).dump)
demos_mem: demos_elf
demos_mem: $(foreach x, $(BP_DEMOS), $(x).mem)
demos_spike: $(foreach x, $(BP_DEMOS), $(x).spike)
demos_dump: $(foreach x, $(BP_DEMOS), $(x).dump)
coremark_mem: coremark_elf
coremark_mem: coremark.mem
coremark_spike: coremark.spike
coremark_dump: coremark.dump
littlefs_test_mem: littlefs_test_elf
littlefs_test_mem: littlefs_test.mem
littlefs_test_spike: littlefs_test.spike
littlefs_test_dump: littlefs_test.dump
zero_mem:
$(PYTHON) $(BP_COMMON_DIR)/software/py/zero_mem.py > $(MEM_DIR)/zero.mem
#mtest_mem: beebs_elf
mtest_mem: mtest_lfs
mtest_mem: mtest_elf
mtest_mem: mtest.mem
mtest_spike: mtest.spike
mtest_dump: mtest.dump
opensbi_mem: opensbi_elf
opensbi_mem: opensbi.mem
# Need to kill spike at the end of opensbi payload for this to work
#opensbi_spike: opensbi.spike
bbl_mem: bbl_elf
bbl_mem: bbl.mem
bbl_dump: bbl.dump
# Need to kill spike at the end of bbl payload for this to work
#bbl_spike: bbl.spike
beebs_mem: beebs_elf
beebs_mem: $(foreach x, $(BEEBS_TESTS), $(x).mem)
beebs_dump: $(foreach x, $(BEEBS_TESTS), $(x).dump)
beebs_spike: $(foreach x, $(BEEBS_TESTS), $(x).spike)
beebs_dump: $(foreach x, $(BEEBS_TESTS), $(x).dump)
spec_mem: spec_elf
spec_mem: $(foreach x, $(BP_SPEC), $(x).mem)
spec_spike: $(foreach x, $(BP_SPEC), $(x).spike)
spec_dump: $(foreach x, $(BP_SPEC), $(x).dump)
%.mem:
$(RISCV_OBJCOPY) $(MEM_DIR)/$*.riscv $(MEM_DIR)/$@
%.bin:
$(RISCV_OBJCOPY_BIN) $(MEM_DIR)/$*.riscv $(MEM_DIR)/$@
%.dump:
$(RISCV_OBJDUMP) $(MEM_DIR)/$*.riscv > $(MEM_DIR)/$@
%.spike:
$(RISCV_SIM) -p$(NC) -l $(MEM_DIR)/$*.riscv 2> $(MEM_DIR)/$@
%.dump:
$(RISCV_OBJDUMP) $(MEM_DIR)/$*.riscv > $(MEM_DIR)/$@
clean:
-$(MAKE) -C $(TEST_DIR)/src/perch clean
-$(MAKE) -C $(TEST_DIR)/src/riscv-tests/benchmarks clean
-$(MAKE) -C $(TEST_DIR)/src/demos clean
-$(MAKE) -C $(TEST_DIR)/src/opensbi clean
-$(MAKE) -C $(TEST_DIR)/src/coremark/barebones clean
-$(MAKE) -C $(TEST_DIR)/src/littlefs_newlib_test/fhello clean
-$(MAKE) -C $(TEST_DIR)/src/beebs clean
-$(MAKE) -C $(TEST_DIR)/src/spec/spec2000/benchmarks/spec2000/CINT2000/175.vpr/src.raw/ clean
-rm -rf $(TEST_DIR)/src/bsg_newlib_dramfs/build-newlib
-rm -rf $(TEST_DIR)/src/bsg_newlib_dramfs/install-newlib
-rm -ff $(MEM_DIR)/*
####### These targets are not maintained at the moment
#
#%_random.riscv:
# $(RANDOM_GEN) -seed $(SEED) -mem 50 20 -mode m -o $@.S
# ${RISCV_GCC_RAND} $@.S -o $@
# rm $@.S
#
#rv_random:
# num=1; while [ $$num -le $(RANDOM_NUM) ]; do \
# make test`expr $$num + 0`_random.v SEED=`expr $$num + 0`; \
# num=`expr $$num + 1`; \
# done
#
##########################################