-
Notifications
You must be signed in to change notification settings - Fork 204
Expand file tree
/
Copy pathMakefile
More file actions
85 lines (62 loc) · 2.29 KB
/
Copy pathMakefile
File metadata and controls
85 lines (62 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
###############
# Executables #
###############
BENDER ?= bender
VERILATOR ?= verilator
VSIM ?= vsim
VCS_SEPP ?=
SG_SHELL ?= sg_shell
#########
# Flags #
#########
BENDER_TARGETS = -t test -t tb -t formal -t synth_test
# Suppress vlog-2583: always_comb/always_latch conflict checks are deferred to vopt
VLOG_FLAGS += -suppress 2583
# If any module has a timescale directive, all modules must have a timescale directive,
# so we add a default timescale to all modules
VLOGAN_FLAGS += -timescale=1ns/1ps
###############
# Directories #
###############
VSIM_BUILDDIR = $(abspath build/vsim)
VCS_BUILDDIR = $(abspath build/vcs)
SG_BUILDDIR = $(abspath build/spyglass)
###########
# Targets #
###########
# All modules in src/ with a top-level module declaration, minus skipped ones
SV_MODULES = $(patsubst src/%.sv,%,$(shell grep -l "^module " src/*.sv))
VLT_ELAB_TARGETS = $(addprefix vlt-elab-,$(SV_MODULES))
SG_LINT_TARGETS = $(addprefix sg-lint-,$(SV_MODULES))
.PHONY: all vlt-elab $(VLT_ELAB_TARGETS) vsim-elab vcs-elab sg-lint $(SG_LINT_TARGETS) clean
all: vlt-elab vsim-elab vcs-elab sg-lint
# Re-run bender checkout only when Bender.yml changes
.bender/.checkout: Bender.yml
$(BENDER) checkout
@touch $@
vlt-elab: $(VLT_ELAB_TARGETS)
$(VLT_ELAB_TARGETS): vlt-elab-%: .bender/.checkout
$(VERILATOR) --cc \
$(shell $(BENDER) script verilator) \
--top-module $* \
-Wno-WIDTHEXPAND \
-Wno-WIDTHTRUNC \
-j $(shell nproc)
$(VSIM_BUILDDIR) $(VCS_BUILDDIR) $(SG_BUILDDIR):
mkdir -p $@
$(VSIM_BUILDDIR)/elaborate.tcl: Bender.yml | $(VSIM_BUILDDIR) .bender/.checkout
$(BENDER) script vsim $(BENDER_TARGETS) --vlog-arg="$(VLOG_FLAGS) " > $@
vsim-elab: $(VSIM_BUILDDIR)/elaborate.tcl
cd $(VSIM_BUILDDIR) && $(VSIM) -c -do "source $<; quit"
$(VCS_BUILDDIR)/elaborate.sh: Bender.yml | $(VCS_BUILDDIR) .bender/.checkout
$(BENDER) script vcs $(BENDER_TARGETS) --vlogan-args="$(VLOGAN_FLAGS)" > $@
chmod +x $@
vcs-elab: $(VCS_BUILDDIR)/elaborate.sh
cd $(VCS_BUILDDIR) && $(VCS_SEPP) $<
$(SG_BUILDDIR)/analyze.tcl: Bender.yml | $(SG_BUILDDIR) .bender/.checkout
$(BENDER) script flist-plus > $@
sg-lint: $(SG_LINT_TARGETS)
$(SG_LINT_TARGETS): sg-lint-%: $(SG_BUILDDIR)/analyze.tcl
cd $(SG_BUILDDIR) && IP=$* $(SG_SHELL) -enable_pass_exit_codes -tcl $(abspath lint/spyglass.tcl)
clean:
rm -rf build/