xref: /XiangShan/Makefile (revision 9e38a5d42184d57acfb78cfda6aea0d065c7f3d7)
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
127eaffc59SYinan Xu# remote machine with high frequency to speedup verilog generation
137eaffc59SYinan XuREMOTE ?= localhost
140a7baf8fSYinan XuREMOTE_PREFIX ?=
15f18d2d8fSYinan XuREMOTE_PRJ_HOME = $(REMOTE_PREFIX)/$(abspath .)/
167eaffc59SYinan Xu
170016469dSZihao Yu.DEFAULT_GOAL = verilog
180016469dSZihao Yu
19d22ebddaSZihao Yuhelp:
2029c0dd83Slinjiawei	mill XiangShan.test.runMain top.$(TOP) --help
21d22ebddaSZihao Yu
2284e9d6ebSZihao Yu$(TOP_V): $(SCALA_FILE)
2384e9d6ebSZihao Yu	mkdir -p $(@D)
2429c0dd83Slinjiawei	mill XiangShan.runMain top.$(TOP) -X verilog -td $(@D) --output-file $(@F) --infer-rw $(FPGATOP) --repl-seq-mem -c:$(FPGATOP):-o:$(@D)/$(@F).conf
25885733f1SZihao Yu	$(MEM_GEN) $(@D)/$(@F).conf >> $@
2606977425SZihao Yu	sed -i -e 's/_\(aw\|ar\|w\|r\|b\)_\(\|bits_\)/_\1/g' $@
27b9dcac5bSZihao Yu	@git log -n 1 >> .__head__
28b9dcac5bSZihao Yu	@git diff >> .__diff__
29b9dcac5bSZihao Yu	@sed -i 's/^/\/\// ' .__head__
30b9dcac5bSZihao Yu	@sed -i 's/^/\/\//' .__diff__
31b9dcac5bSZihao Yu	@cat .__head__ .__diff__ $@ > .__out__
32b9dcac5bSZihao Yu	@mv .__out__ $@
33b9dcac5bSZihao Yu	@rm .__head__ .__diff__
3484e9d6ebSZihao Yu
35709152c8SWang Huizhedeploy: build/top.zip
36709152c8SWang Huizhe
37709152c8SWang Huizhe
38709152c8SWang Huizhebuild/top.zip: $(TOP_V)
39709152c8SWang Huizhe	@zip -r $@ $< $<.conf build/*.anno.json
40709152c8SWang Huizhe
41709152c8SWang Huizhe.PHONY: deploy build/top.zip
42709152c8SWang Huizhe
430016469dSZihao Yuverilog: $(TOP_V)
440016469dSZihao Yu
451e3fad10SLinJiaweiSIM_TOP = XSSimTop
4619dedbf6SZihao YuSIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v
4767aa35f4SLinJiaweiSIM_ARGS =
481a772c7eSZihao Yu$(SIM_TOP_V): $(SCALA_FILE) $(TEST_FILE)
4919dedbf6SZihao Yu	mkdir -p $(@D)
507eaffc59SYinan Xuifeq ($(REMOTE),localhost)
5129c0dd83Slinjiawei	mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) $(SIM_ARGS)
527eaffc59SYinan Xuelse
5329c0dd83Slinjiawei	ssh -tt $(REMOTE) "cd $(REMOTE_PRJ_HOME) && mill XiangShan.test.runMain $(SIMTOP) -X verilog -td $(@D) --full-stacktrace --output-file $(@F) $(SIM_ARGS)"
547eaffc59SYinan Xuendif
5519dedbf6SZihao Yu
5619dedbf6SZihao Yu
5719dedbf6SZihao YuEMU_CSRC_DIR = $(abspath ./src/test/csrc)
5819dedbf6SZihao YuEMU_VSRC_DIR = $(abspath ./src/test/vsrc)
5919dedbf6SZihao YuEMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp")
6019dedbf6SZihao YuEMU_VFILES = $(shell find $(EMU_VSRC_DIR) -name "*.v" -or -name "*.sv")
6119dedbf6SZihao Yu
6228371fc7SZihao YuEMU_CXXFLAGS  = -std=c++11 -static -Wall -I$(EMU_CSRC_DIR)
6319dedbf6SZihao YuEMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized
64155966d2SZihao YuEMU_LDFLAGS   = -lpthread -lSDL2 -ldl
6519dedbf6SZihao Yu
6619dedbf6SZihao YuVERILATOR_FLAGS = --top-module $(SIM_TOP) \
67c357e0e1SZihao Yu  +define+VERILATOR=1 \
6819dedbf6SZihao Yu  +define+PRINTF_COND=1 \
6919dedbf6SZihao Yu  +define+RANDOMIZE_REG_INIT \
706ddc3619SZihao Yu  +define+RANDOMIZE_MEM_INIT \
71a7fc95b2SZihao Yu  --assert \
72a4b0d645SZihao Yu  --savable \
736b369accSZihao Yu  --stats-vars \
74a428082bSLinJiawei  --trace \
75a7fc95b2SZihao Yu  --output-split 5000 \
76a7fc95b2SZihao Yu  --output-split-cfuncs 5000 \
77b65ec060SZihao Yu  -I$(abspath $(BUILD_DIR)) \
7819dedbf6SZihao Yu  --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" \
7919dedbf6SZihao Yu  -LDFLAGS "$(EMU_LDFLAGS)"
8019dedbf6SZihao Yu
8119dedbf6SZihao YuEMU_MK := $(BUILD_DIR)/emu-compile/V$(SIM_TOP).mk
8219dedbf6SZihao YuEMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES)
8319dedbf6SZihao YuEMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h")
8419dedbf6SZihao YuEMU := $(BUILD_DIR)/emu
8519dedbf6SZihao Yu
8619dedbf6SZihao Yu$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS)
8719dedbf6SZihao Yu	@mkdir -p $(@D)
8819dedbf6SZihao Yu	verilator --cc --exe $(VERILATOR_FLAGS) \
899ae8972bSZihao Yu		-o $(abspath $(EMU)) -Mdir $(@D) $^ $(EMU_DEPS)
9019dedbf6SZihao Yu
919d8a74b5SYinan Xuifeq ($(REMOTE),localhost)
924a7b9111SLinJiaweiREF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so
939d8a74b5SYinan Xuelse
944a7b9111SLinJiaweiREF_SO := /home/pcl/NEMU/build/riscv64-nemu-interpreter-so
959d8a74b5SYinan Xuendif
969d8a74b5SYinan Xu
975211b1c1SZihao Yu$(REF_SO):
98aa38aa4dSWilliam Wang	$(MAKE) -C $(NEMU_HOME) ISA=riscv64 SHARE=1
995211b1c1SZihao Yu
1005211b1c1SZihao Yu$(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS) $(REF_SO)
10128371fc7SZihao Yu	CPPFLAGS=-DREF_SO=\\\"$(REF_SO)\\\" time $(MAKE) VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(dir $(EMU_MK)) -f $(abspath $(EMU_MK))
10219dedbf6SZihao Yu
103f19d0b9dSYinan XuSEED ?= $(shell shuf -i 1-10000 -n 1)
1046ddc3619SZihao Yu
1053e354996SLinJiawei
1061d0ee72fSLinJiawei# log will only be printed when (B<=GTimer<=E) && (L < loglevel)
1071d0ee72fSLinJiawei# use 'emu -h' to see more details
1083e354996SLinJiaweiB ?= 0
1093e354996SLinJiaweiE ?= -1
110c0788c7eSYinan XuSNAPSHOT ?=
111c0788c7eSYinan Xu
112a428082bSLinJiawei# enable this runtime option if you want to generate a vcd file
113a428082bSLinJiawei# use 'emu -h' to see more details
114a428082bSLinJiawei#WAVEFORM = --dump-wave
115a428082bSLinJiawei
116c0788c7eSYinan Xuifeq ($(SNAPSHOT),)
117c0788c7eSYinan XuSNAPSHOT_OPTION =
118c0788c7eSYinan Xuelse
119c0788c7eSYinan XuSNAPSHOT_OPTION = --load-snapshot=$(REMOTE_PREFIX)/$(SNAPSHOT)
120c0788c7eSYinan Xuendif
121c0788c7eSYinan Xu
122a428082bSLinJiaweiEMU_FLAGS = -s $(SEED) -b $(B) -e $(E) $(SNAPSHOT_OPTION) $(WAVEFORM)
1233e354996SLinJiawei
12419dedbf6SZihao Yuemu: $(EMU)
125ea45c659SYinan Xuifeq ($(REMOTE),localhost)
126c0788c7eSYinan Xu	@$(EMU) -i $(IMAGE) $(EMU_FLAGS)
127ea45c659SYinan Xuelse
128c0788c7eSYinan Xu	ssh -tt $(REMOTE) "cd $(REMOTE_PRJ_HOME) && export NOOP_HOME=$(REMOTE_PREFIX)/$(NOOP_HOME) && $(EMU) -i $(REMOTE_PREFIX)/$(IMAGE) $(EMU_FLAGS)"
129ea45c659SYinan Xuendif
13019dedbf6SZihao Yu
1319a36b64cSZihao Yucache:
132bc5a4cf6SZihao Yu	$(MAKE) emu IMAGE=Makefile
1339a36b64cSZihao Yu
13484e9d6ebSZihao Yuclean:
135ce52d698SZihao Yu	rm -rf $(BUILD_DIR)
1360016469dSZihao Yu
137*9e38a5d4Slinjiaweiinit:
138*9e38a5d4Slinjiawei	git submodule update --init
139*9e38a5d4Slinjiawei	# do not use a recursive init to pull some not used submodules
140*9e38a5d4Slinjiawei	cd ./rocket-chip/ && git submodule update --init api-config-chipsalliance hardfloat
141*9e38a5d4Slinjiawei
142*9e38a5d4Slinjiawei.PHONY: verilog emu clean help init $(REF_SO)
143