XiangShan/scripts/Makefile.pdb

87 lines
4.1 KiB
Makefile

#***************************************************************************************
# Copyright (c) 2025 Beijing Institute of Open Source Chip (BOSC)
# Copyright (c) 2025 Institute of Computing Technology, Chinese Academy of Sciences
#
# XiangShan is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
#
# See the Mulan PSL v2 for more details.
#***************************************************************************************
PDB_HOME := $(abspath $(BUILD_DIR)/xspdb)
RTL_HOME := $(abspath $(RTL_DIR))
RTL_FILELIST := $(RTL_HOME)/filelist.f
DIFFTEST_HOME := $(abspath $(PDB_HOME)/pydifftest)
DIFFTEST_INCLUDE = $(abspath difftest/src/test/vsrc/common)
PICKER_INCLUDE = $(shell picker --show_xcom_lib_location_cpp | grep include | awk '{print $$2}')
PYTHON_VERSION = $(shell python3 --version | awk '{print $$2}' | cut -d'.' -f1-2)
SIM_LDFLAGS = $(shell cat $(DIFFTEST_HOME)/sim_ld_flags.txt)
PYTHON_DEP_FILE = scripts/xspdb/requirements.txt
PDB_PYTHONPATH := $(PDB_HOME):scripts/xspdb
PDB_LD_PRELOAD := $(PDB_HOME)/pyxscore/xspcomm/libxspcomm.so.0.0.1
PDB_ARGS ?=
IMAGE_FILE ?= ready-to-run/copy_and_run.bin
BATCH_ARGS ?= -l --debug-level info -c 10000
RUN_ARGS = $(if $(IMAGE_FILE),-i $(IMAGE_FILE)) $(if $(BATCH_ARGS), --batch 1 $(BATCH_ARGS))
.PHONY: pdb pdb-run check-deps
pdb: $(DIFFTEST_HOME)/_difftest.so $(PDB_HOME)/libUTSimTop.so
$(RTL_FILELIST): sim-verilog
$(DIFFTEST_HOME)/_difftest.so: $(RTL_FILELIST)
$(MAKE) -C ./difftest pydifftest WITH_CONSTANTIN=0 WITH_CHISELDB=0
cd $(DIFFTEST_HOME) && ln -sr -f _difftest.so libdifftest.so
$(PDB_HOME)/picker.f: $(DIFFTEST_HOME)/_difftest.so
find $(realpath $(RTL_HOME)) -maxdepth 1 \( -name "*.sv" -o -name "*.v" -o -name "*.cpp" -o -name "*.so" \) -not -name "SimTop.sv" -printf "%p\n" > $(PDB_HOME)/picker.f
find $(realpath $(DIFFTEST_INCLUDE)) -maxdepth 1 \( -name "*.v" \) -not -name "SimTop.sv" -printf "%p\n" >> $(PDB_HOME)/picker.f
echo "$(DIFFTEST_HOME)/libdifftest.so" >> $(PDB_HOME)/picker.f
$(PDB_HOME)/libUTSimTop.so: $(PDB_HOME)/picker.f
time picker export $(RTL_HOME)/SimTop.sv \
--rw 1 \
-w $(PDB_HOME)/xs.fst \
--lang python \
--tdir $(PDB_HOME)/pyxscore \
--fs $(PDB_HOME)/picker.f \
-V "--output-split;20000;--no-timing;--threads;8;+define+DIFFTEST;-I$(NOOP_HOME)/build/generated-src" \
-C "-fPIC -lz -I$(PICKER_INCLUDE) -L$(PDB_HOME)/pydifftest -ldifftest -Wl,-rpath='$$ORIGIN../pydifftest' -lpython$(PYTHON_VERSION) $(SIM_LDFLAGS)"
pdb-run: check-deps
LD_PRELOAD="$(PDB_LD_PRELOAD)" \
PYTHONPATH="$(PDB_PYTHONPATH)" \
python3 scripts/pdb-run.py $(PDB_ARGS) $(RUN_ARGS)
check-deps:
@[ -f "$(PYTHON_DEP_FILE)" ] || { echo "Error: $(PYTHON_DEP_FILE) not found"; exit 1; }; \
grep -v '^[#[:space:]]*$$' $(PYTHON_DEP_FILE) | while read -r req; do \
ver=$$(pip show "$${req%%>=*}" 2>/dev/null | awk '/^Version:/{print $$2}') || exit 1; \
[ -n "$$ver" ] && [ "$$(printf "$$ver\n$${req##*>=}" | sort -V | head -n1)" = "$${req##*>=}" ] || \
{ echo "Error: Dependency requirement not satisfied, Please run 'pip install -r $(PYTHON_DEP_FILE)'"; exit 1; }; \
done
package-pdb:
$(eval PACKAGE_TMP_DIR := $(shell mktemp -d))
mkdir -p $(PACKAGE_TMP_DIR)/XSPdb
cp -r scripts/xspdb $(PACKAGE_TMP_DIR)/XSPdb
cp -r ${PDB_HOME}/pydifftest $(PACKAGE_TMP_DIR)/XSPdb/xspdb
cp -r ${PDB_HOME}/pyxscore $(PACKAGE_TMP_DIR)/XSPdb/xspdb
cp scripts/pdb-run.py $(PACKAGE_TMP_DIR)/XSPdb
if [ -f "/nfs/share/unitychip/xspdb/Makefile" ]; then \
cp /nfs/share/unitychip/xspdb/Makefile $(PACKAGE_TMP_DIR)/XSPdb; \
fi
cd $(PACKAGE_TMP_DIR)/XSPdb/xspdb/pyxscore && ln -srf ../pydifftest/_difftest.so libdifftest.so
tar -cjf $(PDB_HOME)/XSPdb.tar.bz2 -C $(PACKAGE_TMP_DIR) XSPdb
rm -rf $(PACKAGE_TMP_DIR)