BLD: Add CMake option to build Python bindings without rebuilding libz3#8028
Closed
BLD: Add CMake option to build Python bindings without rebuilding libz3#8028
Conversation
Introduce Z3_BUILD_LIBZ3_CORE option (default ON) to control whether libz3 is built. When set to OFF with Z3_BUILD_PYTHON_BINDINGS=ON, only Python bindings are built using a pre-installed libz3 library. This is useful for package managers like conda-forge to avoid rebuilding libz3 for each Python version. Changes: - Add Z3_BUILD_LIBZ3_CORE option in src/CMakeLists.txt - When OFF, find and use pre-installed libz3 as imported target - Update Python bindings CMakeLists.txt to handle both built and imported libz3 - Add documentation in README-CMake.md with usage examples Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Conditionally export Z3_EXPORTED_TARGETS only when Z3_BUILD_LIBZ3_CORE=ON to avoid errors when building Python bindings without building libz3. Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
When Z3_BUILD_LIBZ3_CORE=OFF, automatically disable Z3_BUILD_EXECUTABLE and Z3_BUILD_TEST_EXECUTABLES to avoid build/install errors. Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add CMake option to install only Python bindings
BLD: Add CMake option to build Python bindings without rebuilding libz3
Nov 16, 2025
Contributor
|
Since the errors mentioned in #8016 were only under |
Contributor
|
See #8088 for the necessary changes |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.