BLD: Add CMake option to build Python bindings without rebuilding libz3 #8028
+137
−33
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Conda-forge builds z3-solver for 5 Python versions (3.10-3.14), currently rebuilding the Python-version-independent libz3 library each time. This wastes 3-5 hours rebuilding identical C++ code.
Changes
New CMake option
Z3_BUILD_LIBZ3_CORE(defaultON):OFF, skips building libz3 and links Python bindings to pre-installed libraryfind_library()to locate existing libz3 and creates imported CMake targetModified build logic:
src/api/python/CMakeLists.txt: Detects imported vs regular libz3 target, adjusts source paths and dependencies accordinglyCMakeLists.txt: Conditionally exportsZ3_EXPORTED_TARGETSonly when building libz3 to prevent CMake errorsDocumentation: Added usage example to
README-CMake.mdUsage
Reduces conda-forge build time from 3-5h to ~1h.
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.