From 447a6cb3f00d088c1fd92b304b8ad40ddf28dbd2 Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Tue, 23 Sep 2025 15:29:01 +0300 Subject: [PATCH] misc: `WITH_PYTHON` -> `YOSYS_ENABLE_PYTHON` For consistency. Also trying a new thing: only rebuilding objects that use the pybind11 library. The idea is these are the only objects that include the Python/pybind headers and thus the only ones that depend on the Python ABI in any capacity, so other objects can be reused across wheel builds. This has the potential to cut down build times. --- .github/workflows/wheels/cibw_before_build.sh | 4 +-- Makefile | 20 +++++++++---- kernel/driver.cc | 16 +++++++---- kernel/rtlil.cc | 28 +++++++++---------- kernel/rtlil.h | 10 +++---- kernel/yosys.cc | 20 ++++++++----- kernel/yosys.h | 4 +-- kernel/yosys_common.h | 7 ----- passes/cmds/plugin.cc | 16 +++++++---- pyosys/generator.py | 2 +- pyosys/hashlib.h | 5 ++-- pyosys/wrappers_tpl.cc | 10 ++++--- 12 files changed, 82 insertions(+), 60 deletions(-) diff --git a/.github/workflows/wheels/cibw_before_build.sh b/.github/workflows/wheels/cibw_before_build.sh index 4e81688d0..1ce96b291 100644 --- a/.github/workflows/wheels/cibw_before_build.sh +++ b/.github/workflows/wheels/cibw_before_build.sh @@ -1,8 +1,8 @@ set -e set -x -# Don't use objects from previous compiles on Windows/macOS -make clean +# Don't use Python objects from previous compiles +make clean-py # DEBUG: show python3 and python3-config outputs if [ "$(uname)" != "Linux" ]; then diff --git a/Makefile b/Makefile index 09d5f055d..22aeee5e8 100644 --- a/Makefile +++ b/Makefile @@ -346,14 +346,18 @@ endif PY_WRAPPER_FILE = pyosys/wrappers +# running make clean on just those and then recompiling saves a lot of +# time when running cibuildwheel +PYTHON_OBJECTS = pyosys/wrappers.o kernel/drivers.o kernel/yosys.o passes/cmds/plugin.o + ifeq ($(ENABLE_PYOSYS),1) # python-config --ldflags includes -l and -L, but LINKFLAGS is only -L LINKFLAGS += $(filter-out -l%,$(shell $(PYTHON_CONFIG) --ldflags)) LIBS += $(shell $(PYTHON_CONFIG) --libs) EXE_LIBS += $(filter-out $(LIBS),$(shell $(PYTHON_CONFIG_FOR_EXE) --libs)) PYBIND11_INCLUDE ?= $(shell $(PYTHON_EXECUTABLE) -m pybind11 --includes) -CXXFLAGS += -I$(PYBIND11_INCLUDE) -DWITH_PYTHON -CXXFLAGS += $(shell $(PYTHON_CONFIG) --includes) -DWITH_PYTHON +CXXFLAGS += -I$(PYBIND11_INCLUDE) -DYOSYS_ENABLE_PYTHON +CXXFLAGS += $(shell $(PYTHON_CONFIG) --includes) -DYOSYS_ENABLE_PYTHON OBJS += $(PY_WRAPPER_FILE).o PY_GEN_SCRIPT = pyosys/generator.py @@ -1108,12 +1112,10 @@ DOC_TARGET ?= html docs: docs/prep $(Q) $(MAKE) -C docs $(DOC_TARGET) -clean: +clean: clean-py rm -rf share - rm -rf kernel/*.pyh - rm -f $(OBJS) $(GENFILES) $(TARGETS) $(EXTRA_TARGETS) $(EXTRA_OBJS) $(PY_WRAP_INCLUDES) $(PY_WRAPPER_FILE).inc.cc $(PY_WRAPPER_FILE).cc + rm -f $(OBJS) $(GENFILES) $(TARGETS) $(EXTRA_TARGETS) $(EXTRA_OBJS) $(PY_WRAP_INCLUDES) rm -f kernel/version_*.o kernel/version_*.cc - rm -f $(PY_WRAPPER_FILE).o rm -f libs/*/*.d frontends/*/*.d passes/*/*.d backends/*/*.d kernel/*.d techlibs/*/*.d rm -rf tests/asicworld/*.out tests/asicworld/*.log rm -rf tests/hana/*.out tests/hana/*.log @@ -1127,8 +1129,14 @@ clean: rm -f $(addsuffix /run-test.mk,$(MK_TEST_DIRS)) -$(MAKE) -C docs clean rm -rf docs/util/__pycache__ + rm -f libyosys.so + +clean-py: + rm -f $(PY_WRAPPER_FILE).inc.cc $(PY_WRAPPER_FILE).cc + rm -f $(PYTHON_OBJECTS) rm -f *.whl rm -f libyosys.so + rm -rf kernel/*.pyh clean-abc: $(MAKE) -C abc DEP= clean diff --git a/kernel/driver.cc b/kernel/driver.cc index a27c0a00f..795fd9fc5 100644 --- a/kernel/driver.cc +++ b/kernel/driver.cc @@ -37,6 +37,12 @@ # include #endif +#ifdef YOSYS_ENABLE_PYTHON +# include +# include +namespace py = pybind11; +#endif + #include #include #include @@ -91,7 +97,7 @@ int main(int argc, char **argv) log_error_stderr = true; yosys_banner(); yosys_setup(); -#ifdef WITH_PYTHON +#ifdef YOSYS_ENABLE_PYTHON py::object sys = py::module_::import("sys"); sys.attr("path").attr("append")(proc_self_dirname()); sys.attr("path").attr("append")(proc_share_dirname()); @@ -227,10 +233,10 @@ int main(int argc, char **argv) cxxopts::value(),"") ("C,tcl-interactive", "enters TCL interactive shell mode") #endif // YOSYS_ENABLE_TCL -#ifdef WITH_PYTHON +#ifdef YOSYS_ENABLE_PYTHON ("y,py-scriptfile", "execute the Python