diff options
Diffstat (limited to '')
| -rw-r--r-- | Makefile | 68 |
1 files changed, 50 insertions, 18 deletions
@@ -13,6 +13,7 @@ DEMO_OBJ_DIR := $(OBJ_DIR)/$(TOP)/demo DIST_OBJ_DIR := $(OBJ_DIR)/$(TOP)/dist RBF_OUT_DIR := output_files VERILATOR ?= verilator +COCOTB_CONFIG ?= cocotb-config GENHTML ?= genhtml COCOTB_CONFIG ?= cocotb-config CROSS_CC := $(CROSS_COMPILE)gcc @@ -20,6 +21,14 @@ CROSS_OBJCOPY := $(CROSS_COMPILE)objcopy CROSS_CFLAGS := -O3 -Wall -Wextra -Werror CROSS_LDFLAGS := +ifeq ($(shell which $(VERILATOR)),) + $(error verilator not found) +endif + +ifeq ($(shell which $(COCOTB_CONFIG)),) + $(error cocotb not found) +endif + ifdef FASTER_IS_BETTER DISABLE_COV := 1 DISABLE_RAND := 1 @@ -29,6 +38,8 @@ ifdef FASTER_IS_BETTER LDFLAGS += -O3 -flto endif +CXXFLAGS += -iquote $(shell pwd)/$(TB_DIR) + export CXXFLAGS LDFLAGS X_MODE := $(if $(DISABLE_RAND),fast,unique) @@ -41,11 +52,23 @@ VFLAGS ?= \ $(if $(DISABLE_TRACE),,--trace --trace-fst --trace-structs) \ $(if $(DISABLE_COV),,--coverage) -RTL_FILES = $(shell find $(RTL_DIR)/ ! -path '$(RTL_DIR)/top/*' -type f -name '*.sv') +VFLAGS += -O3 --cc --exe -y $(RTL_DIR) --prefix Vtop + +LIBPYTHON = $(shell $(COCOTB_CONFIG) --libpython) + +COCOTB_LDFLAGS := $(LDFLAGS) \ + -Wl,-rpath,$(shell $(COCOTB_CONFIG) --lib-dir) \ + -L$(shell $(COCOTB_CONFIG) -config --lib-dir) \ + -Wl,-rpath,$(dir $(LIBPYTHON)) \ + -lcocotbvpi_verilator -lgpi -lcocotb -lgpilog -lcocotbutils + +RTL_FILES := $(shell find $(RTL_DIR)/ ! -path '$(RTL_DIR)/top/*' -type f -name '*.sv') RTL_FILES += $(shell find $(TB_DIR)/ ! -path '$(TB_DIR)/top/*' -type f -name '*.sv') -TB_FILES = $(shell find $(TB_DIR)/ ! -path '$(TB_DIR)/top/*' -type f -name '*.cpp') +TB_FILES := $(shell find $(TB_DIR)/ ! -path '$(TB_DIR)/top/*' -type f -name '*.cpp') -SIMS := $(patsubst $(TB_SIM_DIR)/%.py,%,$(wildcard $(TB_SIM_DIR)/*.py)) +SIMS := \ + $(patsubst $(TB_SIM_DIR)/%.py,%,$(wildcard $(TB_SIM_DIR)/*.py)) \ + $(patsubst $(TB_DIR)/top/%.py,%,$(wildcard $(TB_DIR)/top/*.py)) GIT_REV := $(shell if [ -d .git ]; then echo -$$(git rev-parse --short HEAD); fi) @@ -69,18 +92,25 @@ dist: $(if $(DISABLE_COV),,cov) sim: $(addprefix sim/,$(SIMS)) -sim/%: $(SIM_DIR)/sim.py $(TB_SIM_DIR)/%.py exe/$(TOP) $(SIM_OBJ_DIR)/%.bin - @$(if $(DISABLE_TRACE),,mkdir -p $(FST_DIR)/$*) - @$< $(TB_SIM_DIR)/$*.py $(OBJ_DIR)/$(TOP)/V$(TOP) \ +sim/%: $(SIM_DIR)/sim.py $(TB_SIM_DIR)/%.py exe/$(TOP) $(SIM_OBJ_DIR)/%.bin $(FST_DIR)/% + @$< $(TB_SIM_DIR)/$*.py $(OBJ_DIR)/$(TOP)/Vtop \ $(SIM_OBJ_DIR)/$*.bin \ $(if $(DISABLE_COV),,--coverage $(SIM_OBJ_DIR)/$*.cov) \ $(if $(DISABLE_TRACE),,--trace $(FST_DIR)/$*/trace$(GIT_REV).fst) +sim/%: $(TB_DIR)/top/%.py exe/% $(FST_DIR)/% + @LIBPYTHON_LOC=$(LIBPYTHON) MODULE=tb.top.$* \ + $(if $(SIM_SEED),RANDOM_SEED=$(SIM_SEED)) \ + $(OBJ_DIR)/$*/Vtop + +$(FST_DIR)/%: + @mkdir -p $@ + vmlaunch: $(SIM_DIR)/sim.py $(SIM_DIR)/gdbstub.py exe/$(TOP) - @ENABLE_VIDEO=1 $< $(SIM_DIR)/gdbstub.py $(OBJ_DIR)/$(TOP)/V$(TOP) build/u-boot.bin + @ENABLE_VIDEO=1 $< $(SIM_DIR)/gdbstub.py $(OBJ_DIR)/$(TOP)/Vtop build/u-boot.bin demo: $(SIM_DIR)/sim.py $(SIM_DIR)/gdbstub.py exe/$(TOP) $(DEMO_OBJ_DIR)/demo.bin - @START_HALTED=0 $< $(SIM_DIR)/gdbstub.py $(OBJ_DIR)/$(TOP)/V$(TOP) $(DEMO_OBJ_DIR)/demo.bin + @START_HALTED=0 $< $(SIM_DIR)/gdbstub.py $(OBJ_DIR)/$(TOP)/Vtop $(DEMO_OBJ_DIR)/demo.bin ifndef DISABLE_COV $(COV_DIR): $(OBJ_DIR)/$(TOP)/cov.info @@ -130,23 +160,25 @@ $(SIM_OBJ_DIR)/%.o: $(SIM_DIR)/%.S exe: exe/$(TOP) -exe/%: $(OBJ_DIR)/%/V%.mk - $(MAKE) -C $(OBJ_DIR)/$* -f V$*.mk +exe/%: $(OBJ_DIR)/%/Vtop.mk + @CXXFLAGS="$(CXXFLAGS) -iquote $(shell pwd)/$(TB_DIR)/top/$*" \ + $(MAKE) -C $(OBJ_DIR)/$* -f Vtop.mk -.PRECIOUS: $(SIM_OBJ_DIR)/% $(SIM_OBJ_DIR)/%.o $(SIM_OBJ_DIR)/%.cov %.bin +.PRECIOUS: $(OBJ_DIR)/%.mk $(SIM_OBJ_DIR)/% $(SIM_OBJ_DIR)/%.o $(SIM_OBJ_DIR)/%.cov %.bin .PHONY: all clean dist demo sim .SECONDEXPANSION: $(OBJ_DIR)/%.mk: \ $(RTL_DIR)/top/$$(word 1,$$(subst /, ,$$*)).sv \ - $$(shell find $(RTL_DIR)/top/$$(dir $$*) -type f -name '*.sv' 2>/dev/null) \ - $$(shell find $(TB_DIR)/top/$$(dir $$*) -type f -name '*.sv' 2>/dev/null) \ + $$(shell find $(RTL_DIR)/top/$$(dir $$*) -type f 2>/dev/null) \ $(RTL_FILES) $(TB_FILES) $(TB_DIR)/top/$$(word 1,$$(subst /, ,$$*)).cpp \ - $$(shell find $(TB_DIR)/top/$$(dir $$*) -type f -name '*.cpp' 2>/dev/null) + $$(shell find $(TB_DIR)/top/$$(dir $$*) -type f 2>/dev/null) mkdir -p $(dir $@) - $(VERILATOR) \ - -O3 --cc --exe -y $(RTL_DIR) --Mdir $(dir $@) \ - --top $(word 1,$(subst /, ,$*)) $(patsubst tb/%,../tb/%,$^) \ - $(VFLAGS) + $(VERILATOR) $(VFLAGS) \ + --Mdir $(dir $@) --top $(word 1,$(subst /, ,$*)) \ + $(filter %.sv %.cpp,$(patsubst tb/%,../tb/%,$^)) \ + $(if $(filter $(TOP),$(word 1,$(subst /, ,$*))),, \ + --vpi --public-flat-rw -LDFLAGS "$(COCOTB_LDFLAGS) $(LIBPYTHON)" \ + $(shell $(COCOTB_CONFIG) --share)/lib/verilator/verilator.cpp) |
