Skip to content

Build a single abi3 (Stable ABI) wheel for CPython 3.11+, release 1.0.0 - #133

Merged
urschrei merged 1 commit into
masterfrom
abi3
Jun 8, 2026
Merged

Build a single abi3 (Stable ABI) wheel for CPython 3.11+, release 1.0.0#133
urschrei merged 1 commit into
masterfrom
abi3

Conversation

@urschrei

@urschrei urschrei commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Stacked on #132 (base branch cibuildwheel-4); GitHub will retarget this to master once #132 merges.

Summary

Builds a single CPython Stable ABI (abi3) wheel per platform covering CPython 3.11+, instead of one wheel per minor version. CPython 3.10 still gets a regular, version-specific wheel, so support for all currently-supported Python versions is preserved. The Rust lonlat_bng FFI library is a pure C-ABI dependency and is unaffected.

Changes

  • pyproject.toml: wheel.py-api = "cp311"; raise scikit-build-core build requirement to >=0.11 for SKBUILD_SABI_COMPONENT / SKBUILD_SABI_VERSION; bump version to 1.0.0.
  • CMakeLists.txt: request Development.SABIModule and pass USE_SABI to python_add_library when targeting the Stable ABI, so FindPython defines Py_LIMITED_API and names the extension cutil.abi3.so.
  • README.md: document the abi3 wheels and the 3.11 floor (and fix a stray reference to "Simplification").
  • CITATION.cff: version 1.0.0, today's release date.

Why 3.11

The typed memoryviews in cutil.pyx are only available under the Limited API from CPython 3.11 onwards.

Base automatically changed from cibuildwheel-4 to master June 8, 2026 13:09
Target the CPython Limited API via scikit-build-core's wheel.py-api so a single
abi3 wheel per platform covers CPython 3.11 and later. CPython 3.10 still
receives a regular, version-specific wheel, preserving support for all
currently-supported Python versions.

- pyproject.toml: set wheel.py-api = "cp311" and raise the scikit-build-core
  build requirement to >=0.11 for the SKBUILD_SABI_COMPONENT and
  SKBUILD_SABI_VERSION variables
- CMakeLists.txt: request the Development.SABIModule component and pass USE_SABI
  to python_add_library when targeting the Stable ABI, so FindPython defines
  Py_LIMITED_API and names the extension cutil.abi3.so
- README: document the abi3 wheels and the 3.11 floor (and fix a stray
  reference to Simplification)
- Bump version to 1.0.0 (CITATION.cff and pyproject.toml; uv.lock follows)

The floor is 3.11 because the typed memoryviews used in cutil.pyx are only
available under the Limited API from CPython 3.11 onwards. The Rust lonlat_bng
FFI library is a pure C-ABI dependency and is unaffected. cibuildwheel 4.0.0
handles abi3 wheels automatically (build once, test on all later versions, run
abi3audit after repair), so no CI changes are required.
@urschrei
urschrei merged commit 412809f into master Jun 8, 2026
8 checks passed
@urschrei
urschrei deleted the abi3 branch June 8, 2026 13:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant