From 68b854fc204ea8735a0fea561b30349f63dc60f9 Mon Sep 17 00:00:00 2001 From: Jordan Carlin Date: Sun, 29 Sep 2024 14:05:28 -0700 Subject: [PATCH] Finish updating riscof and sim Makefiles to allow targets to run in parallel --- sim/Makefile | 35 ++++------ tests/riscof/Makefile | 94 ++++++++++---------------- {sim => tests/riscof}/makefile-memfile | 28 ++------ 3 files changed, 56 insertions(+), 101 deletions(-) rename {sim => tests/riscof}/makefile-memfile (54%) diff --git a/sim/Makefile b/sim/Makefile index 980bf9ed5..189f2e4b2 100644 --- a/sim/Makefile +++ b/sim/Makefile @@ -3,10 +3,11 @@ # SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 SIM = ${WALLY}/sim +TESTS = ${WALLY}/tests -all: riscoftests memfiles coveragetests deriv +all: riscoftests coveragetests deriv -wally-riscv-arch-test: wallyriscoftests memfiles +wally-riscv-arch-test: wallyriscoftests QuestaCodeCoverage: questa/ucdb/rv64gc_arch64i.ucdb vcover merge -out questa/ucdb/cov.ucdb questa/ucdb/rv64gc_arch64i.ucdb questa/ucdb/rv64gc*.ucdb -logfile questa/cov/log @@ -44,32 +45,26 @@ riscvdv: # python3 ${WALLY}/addins/riscv-dv/run.py --test ${test_name} --target rv64gc --output tests/riscvdv --iterations 1 -si questa --iss spike --verbose --cov --seed 0 --steps iss_sim >> ${SIM}/questa/fcov_logs/${test_name}.log 2>&1 # run-elf.bash --seed ${SIM}/questa/seed0.txt --verbose --elf ${WALLY}/tests/riscvdv/asm_test/${test_name}_0.o >> ${SIM}/questa/fcov_logs/${test_name}.log 2>&1 -allclean: clean all - -clean: - make clean -C ../tests/riscof -# make clean -C ../../tests/wally-riscv-arch-test -# make allclean -C ../../tests/imperas-riscv-tests - riscoftests: # Builds riscv-arch-test 64 and 32-bit versions and builds wally-riscv-arch-test 64 and 32-bit versions - make -C ../tests/riscof/ + $(MAKE) -C ${TESTS}/riscof wallyriscoftests: -# Builds riscv-arch-test 64 and 32-bit versions and builds wally-riscv-arch-test 64 and 32-bit versions - make -C ../tests/riscof/ wally-riscv-arch-test - -memfiles: - make -f makefile-memfile wally-sim-files --jobs +# Builds wally-riscv-arch-test 64 and 32-bit versions + $(MAKE) -C ${TESTS}/riscof wally-riscv-arch-test coveragetests: - make -C ../tests/coverage/ --jobs + $(MAKE) -C ${TESTS}/coverage deriv: derivgen.pl benchmarks: - $(MAKE) -C ../benchmarks/embench build - $(MAKE) -C ../benchmarks/embench size - $(MAKE) -C ../benchmarks/embench modelsim_build_memfile - $(MAKE) -C ../benchmarks/coremark + $(MAKE) -C ${WALLY}benchmarks/embench build + $(MAKE) -C ${WALLY}/benchmarks/embench size + $(MAKE) -C ${WALLY}/benchmarks/embench modelsim_build_memfile + $(MAKE) -C ${WALLY}/benchmarks/coremark + +clean: + $(MAKE) clean -C ${TESTS}/riscof +# $(MAKE) clean -C ${TESTS}/wally-riscv-arch-test diff --git a/tests/riscof/Makefile b/tests/riscof/Makefile index 603377677..7b2405a70 100644 --- a/tests/riscof/Makefile +++ b/tests/riscof/Makefile @@ -1,71 +1,49 @@ -arch_dir = ../../addins/riscv-arch-test -wally_dir = ../wally-riscv-arch-test -work_dir = ./riscof_work -work = ./work -arch_workdir = $(work)/riscv-arch-test -wally_workdir = $(work)/wally-riscv-arch-test -nproc = $(shell nproc --ignore=1) +.SECONDEXPANSION: -current_dir = $(shell pwd) -#XLEN ?= 64 +MAKEFLAGS += --output-sync --no-print-directory +nproc := $(shell nproc --ignore=1) -all: root arch32 wally32 arch32e arch64 wally64 +# Directories +arch_dir := $(WALLY)/addins/riscv-arch-test +wally_dir := $(WALLY)/tests/wally-riscv-arch-test +work_dir := ./riscof_work +work := ./work +arch_workdir := $(work)/riscv-arch-test +wally_workdir := $(work)/wally-riscv-arch-test +current_dir := $(shell pwd) -wally-riscv-arch-test: root wally64 wally32 +# General make rules +.PHONY: all riscv-arch-test wally-riscv-arch-test quad64 clean +all: riscv-arch-test wally-riscv-arch-test +riscv-arch-test: arch32e arch32 arch64 +wally-riscv-arch-test: wally32 wally64 -root: - mkdir -p $(work_dir) - mkdir -p $(work) - mkdir -p $(arch_workdir) - mkdir -p $(wally_workdir) - sed 's,{0},$(current_dir),g;s,{1},32gc,g;s,{2},$(nproc),g' config.ini > config32.ini - sed 's,{0},$(current_dir),g;s,{1},64gc,g;s,{2},$(nproc),g' config.ini > config64.ini - sed 's,{0},$(current_dir),g;s,{1},32e,g;s,{2},$(nproc),g' config.ini > config32e.ini +# Generate config.ini files +config%.ini: config.ini + sed 's,{0},$(current_dir),g;s,{1},$(patsubst %64,%64gc,$(patsubst %32,%32gc,$*)),g;s,{2},$(nproc),g' config.ini > $@ -arch32e: - riscof run --work-dir=$(work_dir) --config=config32e.ini --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env --no-browser - rsync -a $(work_dir)/rv32e_m/ $(arch_workdir)/rv32e_m/ || echo "error suppressed" +# Generate riscv-arch-test targets +arch%: config$$*.ini | $(work_dir) $(arch_workdir) + riscof run --work-dir=$(work_dir)/$@ --config=$< --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env --no-browser + $(MAKE) -f makefile-memfile WORKDIR=$(work_dir)/$@ + rsync -a $(work_dir)/$@/rv*/* $(arch_workdir)/rv$(patsubst %64,%64i,$(patsubst %32,%32i,$*))_m || echo "error suppressed" -arch32: - riscof run --work-dir=$(work_dir) --config=config32.ini --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env --no-browser - rsync -a $(work_dir)/rv32i_m/ $(arch_workdir)/rv32i_m/ || echo "error suppressed" +# Generate wally-riscv-arch-test targets +wally%: config$$*.ini | $(work_dir) $(wally_workdir) + riscof run --work-dir=$(work_dir)/$@ --config=$< --suite=$(wally_dir)/riscv-test-suite/ --env=$(wally_dir)/riscv-test-suite/env --no-browser --no-dut-run + $(MAKE) -f makefile-memfile WORKDIR=$(work_dir)/$@ + rsync -a $(work_dir)/$@/rv*/* $(wally_workdir)/rv$(patsubst %64,%64i,$(patsubst %32,%32i,$*))_m || echo "error suppressed" - -arch64: - riscof run --work-dir=$(work_dir) --config=config64.ini --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env --no-browser - rsync -a $(work_dir)/rv64i_m/ $(arch_workdir)/rv64i_m/ || echo "error suppressed" -# Also copy F and D tests to RV64 - rsync -a $(work_dir)/rv32i_m/ $(arch_workdir)/rv64i_m/ || echo "error suppressed" - -wally32: - riscof run --work-dir=$(work_dir) --config=config32.ini --suite=$(wally_dir)/riscv-test-suite/ --env=$(wally_dir)/riscv-test-suite/env --no-browser --no-dut-run - rsync -a $(work_dir)/rv32i_m/ $(wally_workdir)/rv32i_m/ || echo "error suppressed" - -wally64: - riscof run --work-dir=$(work_dir) --config=config64.ini --suite=$(wally_dir)/riscv-test-suite/ --env=$(wally_dir)/riscv-test-suite/env --no-browser --no-dut-run - rsync -a $(work_dir)/rv64i_m/ $(wally_workdir)/rv64i_m/ || echo "error suppressed" -# Also copy F and D tests to RV64 - rsync -a $(work_dir)/rv32i_m/ $(wally_workdir)/rv64i_m/ || echo "error suppressed" - -quad64: - riscof run --work-dir=$(work_dir) --config=config64.ini --suite=$(wally_dir)/riscv-test-suite/rv64i_m/Q/riscv-ctg/tests/ --env=$(wally_dir)/riscv-test-suite/env - -#wally32e: -# riscof run --work-dir=$(work_dir) --config=config32e.ini --suite=$(wally_dir)/riscv-test-suite/ --env=$(wally_dir)/riscv-test-suite/env --no-browser --no-dut-run -# rsync -a $(work_dir)/rv32i_m/ $(wally_workdir)/rv32i_m/ || echo "error suppressed" -# rsync -a $(work_dir)/rv32e_unratified/ $(wally_workdir)/rv32e_unratified/ || echo "error suppressed" - - -memfile: - find $(work) -type f -name "*.elf" | grep "rv64i_m" | while read f; do riscv64-unknown-elf-elf2hex --bit-width 64 --input "$$f" --output "$$f.memfile"; done - find $(work) -type f -name "*.elf" | grep "rv32i_m" | while read f; do riscv64-unknown-elf-elf2hex --bit-width 32 --input "$$f" --output "$$f.memfile"; done - find $(work) -type f -name "*.elf.objdump" | while read f; do extractFunctionRadix.sh $$f; done +quad64: config64.ini $(wally_dir)/riscv-test-suite/rv64i_m/Q/riscv-ctg/tests | $(work_dir) + riscof run --work-dir=$(work_dir)/$@ --config=$< --suite=$(wally_dir)/riscv-test-suite/rv64i_m/Q/riscv-ctg/tests/ --env=$(wally_dir)/riscv-test-suite/env + $(MAKE) -f makefile-memfile WORKDIR=$(work_dir)/$@ clean: - rm -f config64.ini - rm -f config32.ini - rm -f config32e.ini + rm -f config??*.ini rm -rf $(work_dir) rm -rf $(wally_workdir) rm -rf $(arch_workdir) rm -rf $(submodule_wor_dir) + +$(work_dir) $(arch_workdir) $(wally_workdir): + mkdir -p $@ diff --git a/sim/makefile-memfile b/tests/riscof/makefile-memfile similarity index 54% rename from sim/makefile-memfile rename to tests/riscof/makefile-memfile index 6c2da42fa..3fabb3b90 100644 --- a/sim/makefile-memfile +++ b/tests/riscof/makefile-memfile @@ -1,27 +1,12 @@ -ROOT := .. -SUFFIX := work -ARCHDIR := $(ROOT)/tests/riscof -WALLYDIR:= $(ROOT)/tests/wally-riscv-arch-test -# IMPERASDIR := $(ROOT)/tests/imperas-riscv-tests -# ALLDIRS := $(ARCHDIR)/$(SUFFIX) $(WALLYDIR)/$(SUFFIX) $(IMPERASDIR)/$(SUFFIX) -IMPERASDIR := $(ROOT)/tests/imperas-riscv-tests -#ALLDIRS := $(ARCHDIR)/$(SUFFIX) $(WALLYDIR)/$(SUFFIX) -ALLDIRS := $(ARCHDIR)/$(SUFFIX) +WORKDIR ?= $(WALLY)/tests/riscof/work/ -ELFFILES ?= $(shell find $(ALLDIRS) -type f -regex ".*\.elf") -OBJDUMPFILES ?= $(shell find $(ALLDIRS) -type f -regex ".*\.elf.objdump") +ELFFILES ?= $(shell find $(WORKDIR) -type f -regex ".*\.elf") +OBJDUMPFILES ?= $(shell find $(WORKDIR) -type f -regex ".*\.elf.objdump") MEMFILES ?= $(ELFFILES:.elf=.elf.memfile) ADDRFILES ?= $(OBJDUMPFILES:.objdump=.objdump.addr) -print: - echo "files in $(ALLDIRS) are $(ELFFILES)." - echo "memfiles are $(MEMFILES)" - -.PHONY: all wally-sim-files -all: wally-sim-files - -wally-sim-files: $(MEMFILES) $(ADDRFILES) - echo "$@" +.PHONY: wally-sim-files +wally-sim-files: $(MEMFILES) $(ADDRFILES) # notes to self on how this works. # The find command locates all of the *.elf files in directory DIR1. A list of .memfiles and @@ -36,6 +21,3 @@ wally-sim-files: $(MEMFILES) $(ADDRFILES) %.elf.objdump.addr: %.elf.objdump extractFunctionRadix.sh $< - -.PHONY: clean -clean: