Finish updating riscof and sim Makefiles to allow targets to run in parallel

This commit is contained in:
Jordan Carlin 2024-09-29 14:05:28 -07:00
parent 14d76b9189
commit 68b854fc20
No known key found for this signature in database
3 changed files with 56 additions and 101 deletions

View File

@ -3,10 +3,11 @@
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 # SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
SIM = ${WALLY}/sim 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 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 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 # 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 # 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: riscoftests:
# Builds riscv-arch-test 64 and 32-bit versions and builds wally-riscv-arch-test 64 and 32-bit versions # 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: wallyriscoftests:
# Builds riscv-arch-test 64 and 32-bit versions and builds wally-riscv-arch-test 64 and 32-bit versions # Builds wally-riscv-arch-test 64 and 32-bit versions
make -C ../tests/riscof/ wally-riscv-arch-test $(MAKE) -C ${TESTS}/riscof wally-riscv-arch-test
memfiles:
make -f makefile-memfile wally-sim-files --jobs
coveragetests: coveragetests:
make -C ../tests/coverage/ --jobs $(MAKE) -C ${TESTS}/coverage
deriv: deriv:
derivgen.pl derivgen.pl
benchmarks: benchmarks:
$(MAKE) -C ../benchmarks/embench build $(MAKE) -C ${WALLY}benchmarks/embench build
$(MAKE) -C ../benchmarks/embench size $(MAKE) -C ${WALLY}/benchmarks/embench size
$(MAKE) -C ../benchmarks/embench modelsim_build_memfile $(MAKE) -C ${WALLY}/benchmarks/embench modelsim_build_memfile
$(MAKE) -C ../benchmarks/coremark $(MAKE) -C ${WALLY}/benchmarks/coremark
clean:
$(MAKE) clean -C ${TESTS}/riscof
# $(MAKE) clean -C ${TESTS}/wally-riscv-arch-test

View File

@ -1,71 +1,49 @@
arch_dir = ../../addins/riscv-arch-test .SECONDEXPANSION:
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)
current_dir = $(shell pwd) MAKEFLAGS += --output-sync --no-print-directory
#XLEN ?= 64 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: # Generate config.ini files
mkdir -p $(work_dir) config%.ini: config.ini
mkdir -p $(work) sed 's,{0},$(current_dir),g;s,{1},$(patsubst %64,%64gc,$(patsubst %32,%32gc,$*)),g;s,{2},$(nproc),g' config.ini > $@
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
arch32e: # Generate riscv-arch-test targets
riscof run --work-dir=$(work_dir) --config=config32e.ini --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env --no-browser arch%: config$$*.ini | $(work_dir) $(arch_workdir)
rsync -a $(work_dir)/rv32e_m/ $(arch_workdir)/rv32e_m/ || echo "error suppressed" 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: # Generate wally-riscv-arch-test targets
riscof run --work-dir=$(work_dir) --config=config32.ini --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env --no-browser wally%: config$$*.ini | $(work_dir) $(wally_workdir)
rsync -a $(work_dir)/rv32i_m/ $(arch_workdir)/rv32i_m/ || echo "error suppressed" 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"
quad64: config64.ini $(wally_dir)/riscv-test-suite/rv64i_m/Q/riscv-ctg/tests | $(work_dir)
arch64: 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
riscof run --work-dir=$(work_dir) --config=config64.ini --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)/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
clean: clean:
rm -f config64.ini rm -f config??*.ini
rm -f config32.ini
rm -f config32e.ini
rm -rf $(work_dir) rm -rf $(work_dir)
rm -rf $(wally_workdir) rm -rf $(wally_workdir)
rm -rf $(arch_workdir) rm -rf $(arch_workdir)
rm -rf $(submodule_wor_dir) rm -rf $(submodule_wor_dir)
$(work_dir) $(arch_workdir) $(wally_workdir):
mkdir -p $@

View File

@ -1,27 +1,12 @@
ROOT := .. WORKDIR ?= $(WALLY)/tests/riscof/work/
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)
ELFFILES ?= $(shell find $(ALLDIRS) -type f -regex ".*\.elf") ELFFILES ?= $(shell find $(WORKDIR) -type f -regex ".*\.elf")
OBJDUMPFILES ?= $(shell find $(ALLDIRS) -type f -regex ".*\.elf.objdump") OBJDUMPFILES ?= $(shell find $(WORKDIR) -type f -regex ".*\.elf.objdump")
MEMFILES ?= $(ELFFILES:.elf=.elf.memfile) MEMFILES ?= $(ELFFILES:.elf=.elf.memfile)
ADDRFILES ?= $(OBJDUMPFILES:.objdump=.objdump.addr) ADDRFILES ?= $(OBJDUMPFILES:.objdump=.objdump.addr)
print: .PHONY: wally-sim-files
echo "files in $(ALLDIRS) are $(ELFFILES)."
echo "memfiles are $(MEMFILES)"
.PHONY: all wally-sim-files
all: wally-sim-files
wally-sim-files: $(MEMFILES) $(ADDRFILES) wally-sim-files: $(MEMFILES) $(ADDRFILES)
echo "$@"
# notes to self on how this works. # notes to self on how this works.
# The find command locates all of the *.elf files in directory DIR1. A list of .memfiles and # 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 %.elf.objdump.addr: %.elf.objdump
extractFunctionRadix.sh $< extractFunctionRadix.sh $<
.PHONY: clean
clean: