xref: /XiangShan/Makefile (revision de74d3631887c9bee15db1ee98da5b342a1f8067)
184e9d6ebSZihao YuTOP = TopMain
21cd939dcSZihao YuFPGATOP = FPGANOOP
384e9d6ebSZihao YuBUILD_DIR = ./build
484e9d6ebSZihao YuTOP_V = $(BUILD_DIR)/$(TOP).v
584e9d6ebSZihao YuSCALA_FILE = $(shell find ./src/main/scala -name '*.scala')
61a772c7eSZihao YuTEST_FILE = $(shell find ./src/test/scala -name '*.scala')
7885733f1SZihao YuMEM_GEN = ./scripts/vlsi_mem_gen
884e9d6ebSZihao Yu
90991dc5eSZihao YuSIMTOP = top.TestMain
10e8ab4e39SZihao YuIMAGE ?= temp
1107379a26SZihao Yu
12*de74d363SYinan Xu# co-simulation with DRAMsim3
13*de74d363SYinan Xuifeq ($(WITH_DRAMSIM3),1)
14*de74d363SYinan Xuifndef DRAMSIM3_HOME
15*de74d363SYinan Xu$(error DRAMSIM3_HOME is not set)
16*de74d363SYinan Xuendif
17*de74d363SYinan Xuoverride SIM_ARGS += --with-dramsim3
18*de74d363SYinan Xu
19*de74d363SYinan XuEMU_CXXFLAGS += -I$(DRAMSIM3_HOME)/src
20*de74d363SYinan XuEMU_CXXFLAGS += -DWITH_DRAMSIM3 -DDRAMSIM3_CONFIG=\\\"$(DRAMSIM3_HOME)/configs/XiangShan.ini\\\" -DDRAMSIM3_OUTDIR=\\\"$(BUILD_DIR)\\\"
21*de74d363SYinan XuEMU_LDFLAGS  += $(DRAMSIM3_HOME)/build/libdramsim3.a
22*de74d363SYinan Xuendif
23*de74d363SYinan Xu
2406b2abbaSYinan Xu# remote machine with more cores to speedup c++ build
257eaffc59SYinan XuREMOTE ?= localhost
267eaffc59SYinan Xu
270016469dSZihao Yu.DEFAULT_GOAL = verilog
280016469dSZihao Yu
29d22ebddaSZihao Yuhelp:
3029c0dd83Slinjiawei	mill XiangShan.test.runMain top.$(TOP) --help
31d22ebddaSZihao Yu
3284e9d6ebSZihao Yu$(TOP_V): $(SCALA_FILE)
3384e9d6ebSZihao Yu	mkdir -p $(@D)
34ab51325dSYinan Xu	mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) --disable-all --fpga-platform $(SIM_ARGS)
35f874f036SYinan Xu	# mill XiangShan.runMain top.$(TOP) -X verilog -td $(@D) --output-file $(@F) --infer-rw $(FPGATOP) --repl-seq-mem -c:$(FPGATOP):-o:$(@D)/$(@F).conf
36f874f036SYinan Xu	# $(MEM_GEN) $(@D)/$(@F).conf >> $@
37f874f036SYinan Xu	# sed -i -e 's/_\(aw\|ar\|w\|r\|b\)_\(\|bits_\)/_\1/g' $@
38f874f036SYinan Xu	# @git log -n 1 >> .__head__
39f874f036SYinan Xu	# @git diff >> .__diff__
40f874f036SYinan Xu	# @sed -i 's/^/\/\// ' .__head__
41f874f036SYinan Xu	# @sed -i 's/^/\/\//' .__diff__
42f874f036SYinan Xu	# @cat .__head__ .__diff__ $@ > .__out__
43f874f036SYinan Xu	# @mv .__out__ $@
44f874f036SYinan Xu	# @rm .__head__ .__diff__
4584e9d6ebSZihao Yu
46709152c8SWang Huizhedeploy: build/top.zip
47709152c8SWang Huizhe
48709152c8SWang Huizhe
49709152c8SWang Huizhebuild/top.zip: $(TOP_V)
50709152c8SWang Huizhe	@zip -r $@ $< $<.conf build/*.anno.json
51709152c8SWang Huizhe
52709152c8SWang Huizhe.PHONY: deploy build/top.zip
53709152c8SWang Huizhe
540016469dSZihao Yuverilog: $(TOP_V)
550016469dSZihao Yu
561e3fad10SLinJiaweiSIM_TOP = XSSimTop
5719dedbf6SZihao YuSIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v
581a772c7eSZihao Yu$(SIM_TOP_V): $(SCALA_FILE) $(TEST_FILE)
5919dedbf6SZihao Yu	mkdir -p $(@D)
60003b6d2eSYinan Xu	date -R
6129c0dd83Slinjiawei	mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) $(SIM_ARGS)
62003b6d2eSYinan Xu	date -R
6319dedbf6SZihao Yu
6419dedbf6SZihao YuEMU_CSRC_DIR = $(abspath ./src/test/csrc)
6519dedbf6SZihao YuEMU_VSRC_DIR = $(abspath ./src/test/vsrc)
6619dedbf6SZihao YuEMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp")
6719dedbf6SZihao YuEMU_VFILES = $(shell find $(EMU_VSRC_DIR) -name "*.v" -or -name "*.sv")
6819dedbf6SZihao Yu
69360f082fSYinan XuEMU_CXXFLAGS += -std=c++11 -static -Wall -I$(EMU_CSRC_DIR)
7019dedbf6SZihao YuEMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized
71155966d2SZihao YuEMU_LDFLAGS   = -lpthread -lSDL2 -ldl
72360f082fSYinan Xu
738ea79e0dSYinan XuVEXTRA_FLAGS  = -I$(abspath $(BUILD_DIR)) --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" -LDFLAGS "$(EMU_LDFLAGS)"
748ea79e0dSYinan Xu
75360f082fSYinan Xu# Verilator trace support
768ea79e0dSYinan Xuifeq ($(EMU_TRACE),1)
778ea79e0dSYinan XuVEXTRA_FLAGS += --trace
788ea79e0dSYinan Xuendif
79360f082fSYinan Xu
80360f082fSYinan Xu# Verilator multi-thread support
81360f082fSYinan XuEMU_THREADS  ?= 1
828ea79e0dSYinan Xuifneq ($(EMU_THREADS),1)
83360f082fSYinan XuVEXTRA_FLAGS += --threads $(EMU_THREADS) --threads-dpi none
848ea79e0dSYinan Xuendif
85360f082fSYinan Xu
86360f082fSYinan Xu# Verilator savable
87360f082fSYinan Xuifeq ($(EMU_SNAPSHOT),1)
88360f082fSYinan XuVEXTRA_FLAGS += --savable
89360f082fSYinan XuEMU_CXXFLAGS += -DVM_SAVABLE
90d791ba37Slinjiaweiendif
9119dedbf6SZihao Yu
92d791ba37Slinjiawei# --trace
9319dedbf6SZihao YuVERILATOR_FLAGS = --top-module $(SIM_TOP) \
94c357e0e1SZihao Yu  +define+VERILATOR=1 \
9519dedbf6SZihao Yu  +define+PRINTF_COND=1 \
9619dedbf6SZihao Yu  +define+RANDOMIZE_REG_INIT \
976ddc3619SZihao Yu  +define+RANDOMIZE_MEM_INIT \
98360f082fSYinan Xu  $(VEXTRA_FLAGS) \
99a7fc95b2SZihao Yu  --assert \
1006b369accSZihao Yu  --stats-vars \
101a7fc95b2SZihao Yu  --output-split 5000 \
1028ea79e0dSYinan Xu  --output-split-cfuncs 5000
10319dedbf6SZihao Yu
10419dedbf6SZihao YuEMU_MK := $(BUILD_DIR)/emu-compile/V$(SIM_TOP).mk
10519dedbf6SZihao YuEMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES)
10619dedbf6SZihao YuEMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h")
10719dedbf6SZihao YuEMU := $(BUILD_DIR)/emu
10819dedbf6SZihao Yu
10919dedbf6SZihao Yu$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS)
11019dedbf6SZihao Yu	@mkdir -p $(@D)
111003b6d2eSYinan Xu	date -R
11219dedbf6SZihao Yu	verilator --cc --exe $(VERILATOR_FLAGS) \
1139ae8972bSZihao Yu		-o $(abspath $(EMU)) -Mdir $(@D) $^ $(EMU_DEPS)
114003b6d2eSYinan Xu	date -R
11519dedbf6SZihao Yu
11610325796SYinan Xuifndef NEMU_HOME
11710325796SYinan Xu$(error NEMU_HOME is not set)
11810325796SYinan Xuendif
1194a7b9111SLinJiaweiREF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so
1205211b1c1SZihao Yu$(REF_SO):
121aa38aa4dSWilliam Wang	$(MAKE) -C $(NEMU_HOME) ISA=riscv64 SHARE=1
1225211b1c1SZihao Yu
1235211b1c1SZihao Yu$(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS) $(REF_SO)
124003b6d2eSYinan Xu	date -R
1255496d1b7SYinan Xuifeq ($(REMOTE),localhost)
1265496d1b7SYinan Xu	CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" $(MAKE) VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(abspath $(dir $(EMU_MK))) -f $(abspath $(EMU_MK))
1275496d1b7SYinan Xuelse
128960af85eSYinan Xu	ssh -tt $(REMOTE) 'CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" $(MAKE) -j128 VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(abspath $(dir $(EMU_MK))) -f $(abspath $(EMU_MK))'
1295496d1b7SYinan Xuendif
130003b6d2eSYinan Xu	date -R
13119dedbf6SZihao Yu
132f19d0b9dSYinan XuSEED ?= $(shell shuf -i 1-10000 -n 1)
1336ddc3619SZihao Yu
1343e354996SLinJiawei
1351d0ee72fSLinJiawei# log will only be printed when (B<=GTimer<=E) && (L < loglevel)
1361d0ee72fSLinJiawei# use 'emu -h' to see more details
1373e354996SLinJiaweiB ?= 0
1383e354996SLinJiaweiE ?= -1
139c0788c7eSYinan XuSNAPSHOT ?=
140c0788c7eSYinan Xu
141a428082bSLinJiawei# enable this runtime option if you want to generate a vcd file
142a428082bSLinJiawei# use 'emu -h' to see more details
143a428082bSLinJiawei#WAVEFORM = --dump-wave
144a428082bSLinJiawei
145c0788c7eSYinan Xuifeq ($(SNAPSHOT),)
146c0788c7eSYinan XuSNAPSHOT_OPTION =
147c0788c7eSYinan Xuelse
14806b2abbaSYinan XuSNAPSHOT_OPTION = --load-snapshot=$(SNAPSHOT)
149c0788c7eSYinan Xuendif
150c0788c7eSYinan Xu
15110325796SYinan Xuifndef NOOP_HOME
15210325796SYinan Xu$(error NOOP_HOME is not set)
15310325796SYinan Xuendif
154a428082bSLinJiaweiEMU_FLAGS = -s $(SEED) -b $(B) -e $(E) $(SNAPSHOT_OPTION) $(WAVEFORM)
1553e354996SLinJiawei
15619dedbf6SZihao Yuemu: $(EMU)
157e471b1f5SYinan Xu	ls build
15806b2abbaSYinan Xu	$(EMU) -i $(IMAGE) $(EMU_FLAGS)
15919dedbf6SZihao Yu
1609a36b64cSZihao Yucache:
161bc5a4cf6SZihao Yu	$(MAKE) emu IMAGE=Makefile
1629a36b64cSZihao Yu
16384e9d6ebSZihao Yuclean:
164917276a0SJiuyang liu	git submodule foreach git clean -fdx
165917276a0SJiuyang liu	git clean -fd
166c3515a9cSYinan Xu	rm -rf ./build
1670016469dSZihao Yu
1689e38a5d4Slinjiaweiinit:
1699e38a5d4Slinjiawei	git submodule update --init
1709e38a5d4Slinjiawei
171917276a0SJiuyang liubump:
172917276a0SJiuyang liu	git submodule foreach "git fetch origin&&git checkout master&&git reset --hard origin/master"
173917276a0SJiuyang liu
174917276a0SJiuyang liubsp:
175917276a0SJiuyang liu	mill -i mill.contrib.BSP/install
176917276a0SJiuyang liu.PHONY: verilog emu clean help init bump bsp $(REF_SO)
177