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) ELFFILES ?= $(shell find $(ALLDIRS) -type f -regex ".*\.elf") OBJDUMPFILES ?= $(shell find $(ALLDIRS) -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 "$@" # notes to self on how this works. # The find command locates all of the *.elf files in directory DIR1. A list of .memfiles and # .addr files are generated from the .elf. These are used as targets. # % is a wildcard in a make target which is then referenced as % in the depenecies and $* # in the recipe. # because elf2hex requires a bit width we use findstring to figure out if the compiled directory # is XLEN=64 or 32. This is hacky and will likely break in the future. # the .addr is a separate target so make can split into more jobs and more parallism. %.elf.memfile: %.elf riscv64-unknown-elf-elf2hex --bit-width $(if $(findstring rv64,$*),64,32) --input $< --output $@ %.elf.objdump.addr: %.elf.objdump extractFunctionRadix.sh $< .PHONY: clean clean: