ibex/dv/uvm/core_ibex/wrapper.mk
Greg Chadwick 94f9f16c07 [dv] Refactor reporting and add additional reports
New reports provide HTML, dvsim compatible json and an SVG summary
dashboard.
2023-03-03 18:24:58 +00:00

147 lines
5.7 KiB
Makefile

# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
###############################################################################
all: collect_results
# Build Stages
.PHONY: core_config # riscvdv
.PHONY: instr_gen_build
.PHONY: instr_gen_run
.PHONY: compile_riscvdv_tests
.PHONY: compile_directed_tests # directed
.PHONY: rtl_tb_compile # simulation
.PHONY: rtl_sim_run
.PHONY: check_logs # post-checks and coverage merging
.PHONY: riscv_dv_fcov
.PHONY: merge_cov
.PHONY: collect_results
###############################################################################
# Environment variables
TOOLCHAIN := ${RISCV_TOOLCHAIN}
export IBEX_ROOT := $(realpath ../../../)
export PRJ_DIR := $(realpath ../../..)
export LOWRISC_IP_DIR := $(realpath ${PRJ_DIR}/vendor/lowrisc_ip)
# Needed for tcl files that are used with Cadence tools.
export dv_root := $(realpath ../../../vendor/lowrisc_ip/dv)
export DUT_TOP := ibex_top
###############################################################################
# Here we express the different build artifacts that the Makefile uses to
# establish the dependency tree, as well as which jobs depend on which
# top-level configuration knobs when deciding what to rebuild.
# Use build artifacts as targets where appropriate, otherwise use stamp-files.
# TODO Evaluate input variables to more-cleverly schedule partial-rebuilds
# This would allow us to use Make to handle build scheduling and to calculate rebuilds,
# while keeping all the structured-data in the land of Python.
-include scripts/get_meta.mk
OUT-DIR := $(call get-meta,dir_out)
TESTS-DIR := $(call get-meta,dir_tests)
BUILD-DIR := $(call get-meta,dir_build)
RUN-DIR := $(call get-meta,dir_run)
METADATA-DIR := $(call get-meta,dir_metadata)
# This is a list of directories that are automatically generated by some
# targets. To ensure the directory has been built, add an order-only dependency
# (with the pipe symbol before it) on the directory name and add the directory
# to this list.
$(BUILD-DIR):
@mkdir -p $@
riscvdv-ts := $(call get-meta,riscvdv_tds)
directed-ts := $(call get-meta,directed_tds)
asm-stem := test.S
bin-stem := test.bin
rtl-sim-logfile := rtl_sim.log
trr-stem := trr.yaml
riscvdv-dirs = $(foreach ts,$(riscvdv-ts),$(TESTS-DIR)/$(ts)/)
riscvdv-test-asms = $(addsuffix $(asm-stem),$(riscvdv-dirs))
riscvdv-test-bins = $(addsuffix $(bin-stem),$(riscvdv-dirs))
directed-dirs = $(foreach ts,$(directed-ts),$(TESTS-DIR)/$(ts)/)
directed-test-bins = $(addsuffix $(bin-stem),$(directed-dirs))
test-bins := $(riscvdv-test-bins) $(directed-test-bins)
ts-dirs := $(riscvdv-dirs) $(directed-dirs)
rtl-sim-logs = $(addsuffix $(rtl-sim-logfile),$(ts-dirs))
comp-results = $(addsuffix $(trr-stem),$(ts-dirs))
###############################################################################
# Other groups of files we may depend on are...
# A variable containing a file list for the riscv-dv vendored-in module.
# Depending on these files gives a safe over-approximation that will ensure we
# rebuild things if that module changes.
GEN_DIR := $(realpath ../../../vendor/google_riscv-dv)
riscv-dv-files := \
$(shell find $(GEN_DIR) -type f)
all-verilog = \
$(shell find ../../../rtl -name '*.v' -o -name '*.sv' -o -name '*.svh') \
$(shell find ../.. -name '*.v' -o -name '*.sv' -o -name '*.svh')
all-cpp = \
$(shell find ../.. -name '*.cc' -o -name '*.h')
# The compiled ibex testbench (obviously!) also depends on the design and the
# DV code. The clever way of doing this would be to look at a dependency
# listing generated by the simulator as a side-effect of doing the compile (a
# bit like using the -M flags with a C compiler). Unfortunately, that doesn't
# look like it's particularly easy, so we'll just depend on every .v, .sv or
# .svh file in the dv or rtl directories. Note that this variable is set with
# '=', rather than ':='. This means that we don't bother running the find
# commands unless we need the compiled testbench.
-include scripts/util.mk # VARIABLE DUMPING UTILS (see file for example)
###############################################################################
###############################################################################
# Include steps to build riscv-dv, then run to generate test.S files
-include scripts/riscvdv.mk
###############################################################################
# Compile all test assembly/sources
# This has different targets/dependencies because the directed tests may not
# follow an identical test.S-in-the-test-dir format.
#
# We don't explicitly track dependencies on the RISCV toolchain here.
compile_riscvdv_tests: $(riscvdv-test-bins)
$(riscvdv-test-bins): $(TESTS-DIR)/%/test.bin: \
$(TESTS-DIR)/%/test.S scripts/compile_test.py
@echo Compiling riscvdv test assembly to create binary at $@
$(verb)env PYTHONPATH=$(PYTHONPATH) \
scripts/compile_test.py \
--dir-metadata $(METADATA-DIR) \
--test-dot-seed $*
# NB. The directed test builder does not (yet) depend on the directed sources
compile_directed_tests: $(directed-test-bins)
$(directed-test-bins): scripts/compile_test.py
@echo Compiling directed test to create binary at $@
$(verb)env PYTHONPATH=$(PYTHONPATH) \
scripts/compile_test.py \
--dir-metadata $(METADATA-DIR) \
--test-dot-seed $(shell basename $(dir $@))
###############################################################################
# Include rtl-simulation and logfile generation steps
-include scripts/ibex_sim.mk
###############################################################################
# Extras (for convenience)
.PHONY: prettify
prettify:
@./scripts/prettify.sh
.PHONY: dump
dump:
@./scripts/objdump.sh