-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
111 lines (83 loc) · 2.66 KB
/
Makefile
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
ifneq ($(words $(CURDIR)),1)
$(error Unsupported: GNU Make cannot build in directories containing spaces, build elsewhere: '$(CURDIR)')
endif
BDF_DIR=nessy/src
VERILOG_DIR=verilog
$(shell if [ ! -f Makefile.user ]; then cp Makefile.user.example Makefile.user; fi)
-include Makefile.user
TLE=cpu/cpu
CORE_COUNT=4
default: verilog run
SOURCES_BDF = $(shell find $(BDF_DIR) -name "*.bdf" -printf "%P ")
SOURCES_VERILOG = $(addprefix $(VERILOG_DIR)/,$(SOURCES_BDF:.bdf=.v))
SOURCES_VERILOG += $(addprefix $(VERILOG_DIR)/,$(shell find $(BDF_DIR) -name "*.v" -printf "%P "))
INCLUDE_FOLDERS = $(shell find ./nessy/src -type d -printf "-I${VERILOG_DIR}/%P ")
INCLUDE_FOLDERS += -CFLAGS -I../h
#-CFLAGS "-I../h -g -ggdb"
${VERILOG_DIR}/%.v: ${BDF_DIR}/%.bdf
quartus_map --convert_bdf_to_verilog=$<
dirname $@ | xargs mkdir --parents
mv $(BDF_DIR)/$*.v $@
${VERILOG_DIR}/%.v: ${BDF_DIR}/%.v
cp $< $@
.PHONY: verilog
verilog: $(SOURCES_VERILOG)
ifeq ($(VERILATOR_ROOT),)
VERILATOR = verilator
else
export VERILATOR_ROOT
VERILATOR = $(VERILATOR_ROOT)/bin/verilator
endif
# Generate C++ in executable form
VERILATOR_FLAGS += -cc --exe
# Generate makefile dependencies (not shown as complicates the Makefile)
#VERILATOR_FLAGS += -MMD
# Optimize
VERILATOR_FLAGS += -x-assign fast
# Warn abount lint issues; may not want this on less solid designs
VERILATOR_FLAGS += -Wno-fatal
# Make waveforms
VERILATOR_FLAGS += --trace
# Run Verilator in debug mode
#VERILATOR_FLAGS += --debug
# Add this trace to get a backtrace in gdb
#VERILATOR_FLAGS += --gdbbt
# Set output directory
VERILATOR_FLAGS += --Mdir build
# Compile the verilated files
VERILATOR_FLAGS += --build
# Input files for Verilator
VERILATOR_INPUT = +librescan +libext+.v+.sv+.vh+.svh -y . $(INCLUDE_FOLDERS) verilog/${TLE}.v $(shell find src -name "*.cpp" -printf "src/%P ") --build-jobs $(CORE_COUNT) -CFLAGS "--std=c++23"
ifneq ($(GPUTag),)
VERILATOR_INPUT += -LDFLAGS "-lopengl32 -lfreeglut"
endif
ifneq ($(DebugTag),)
VERILATOR_INPUT += -CFLAGS "-g -ggdb"
endif
ifneq ($(GPUTag),)
VERILATOR_INPUT += -CFLAGS "-DGPUOut"
endif
run:
ifneq ($(TEST_NAME),)
@echo
@echo "COMPILE TEST: ------------"
make -C tests -E TEST_NAME=$(TEST_NAME)
endif
@echo
@echo "VERILATE: ----------------"
$(VERILATOR) $(VERILATOR_FLAGS) $(VERILATOR_INPUT)
@echo
@echo "RUN: ---------------------"
@rm -rf logs
@mkdir -p logs
build/V${shell basename ${TLE}} +trace
@echo
@echo "DONE: -------------------"
@echo
######################################################################
# Other targets
show-config:
$(VERILATOR) -V
maintainer-copy::
clean mostlyclean distclean maintainer-clean::
-rm -rf build logs *.log *.dmp *.vpd coverage.dat core