Feat/enable free threaded python#213
Open
vchamarthi wants to merge 16 commits into
Open
Conversation
add build instructions
remove unnecessary packages and add python 3.14 to clang build
There was a problem hiding this comment.
Pull request overview
This PR adds initial support for CPython’s free-threaded (GIL-disabled) builds in mkl-service, and (as a prerequisite / in anticipation of PR #174) migrates the build and packaging flow from setuptools/setup.py to meson-python across pip/CI/conda recipes.
Changes:
- Enable free-threading compatibility in the Cython extension and declare the
_mklinitC extension as GIL-independent for free-threaded interpreters. - Switch to
meson-python(meson.build,pyproject.toml) and removesetup.py. - Update CI workflows and conda recipes to build via PEP 517 / Meson and expand Python coverage to 3.14.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| setup.py | Removed legacy setuptools build script. |
| pyproject.toml | Switch build backend to mesonpy and update build requirements. |
| meson.build | New Meson build defining _mklinit and _py_mkl_service extension builds and install layout. |
| mkl/_py_mkl_service.pyx | Mark Cython extension as free-threading compatible. |
| mkl/_mklinitmodule.c | Declare module GIL usage as “not used” on free-threaded builds. |
| README.md | Add source build instructions for Meson/PEP517 flow. |
| AGENTS.md | Update repo-level build/CI documentation to Meson + new workflows. |
| mkl/AGENTS.md | Update Cython wrapper file naming references. |
| .github/workflows/build-with-clang.yml | Update CI build steps for Meson/PEP517 and Python 3.14. |
| .github/workflows/build-with-standard-clang.yml | New workflow to build/test with system clang. |
| .github/workflows/build_pip.yml | New workflow to validate pip editable build + tests via conda env. |
| conda-recipe/meta.yaml | Update host deps for Meson/PEP517 and remove python-gil constraints. |
| conda-recipe/build.sh | Build via python -m build instead of setup.py; clean build dir. |
| conda-recipe/bld.bat | Build via python -m build instead of setup.py. |
| conda-recipe-cf/meta.yaml | Update host deps for Meson/PEP517 and remove python-gil constraints. |
| conda-recipe-cf/build.sh | Build/install via pip (PEP517) instead of setup.py. |
| conda-recipe-cf/bld.bat | Build/install via pip (PEP517) instead of setup.py. |
| .github/copilot-instructions.md | Update API-contract file reference to _py_mkl_service.pyx. |
| .github/AGENTS.md | Document newly added workflows. |
Comments suppressed due to low confidence (1)
mkl/_py_mkl_service.pyx:28
- Free-threading support is being enabled here, but there’s no corresponding test ensuring the package imports/operates correctly under a free-threaded (GIL-disabled) Python build (e.g., that importing
mkldoes not re-enable the GIL and basic API calls still work). Adding a small conditional test inmkl/tests/test_mkl_service.pywould help prevent regressions.
Comment on lines
+37
to
+44
| A C compiler and Intel(R) OneAPI Math Kernel Library (OneMKL) are required to build mkl-service from source. | ||
|
|
||
| Executing | ||
| ```sh | ||
| python -m pip install . | ||
| ``` | ||
|
|
||
| will pull in the required build and runtime dependencies, including `mkl`, and build `mkl-service`. |
Comment on lines
42
to
+46
| - `conda-package.yml` — main conda build/test pipeline | ||
| - `conda-package-cf.yml — conda build/test using only conda-forge channel | ||
| - `build-with-clang.yml` — Linux Clang compatibility | ||
| - `build-with-standard-clang.yml` — standard Clang compiler compatibility validation | ||
| - `build_pip` — validates editable build |
Comment on lines
36
to
+40
| ## Source-of-truth files | ||
| - Build/config: `pyproject.toml`, `setup.py` | ||
| - Recipe/deps: `conda-recipe/meta.yaml`, `conda-recipe/conda_build_config.yaml` | ||
| - CI: `.github/workflows/*.{yml,yaml}` | ||
| - API contracts: `mkl/__init__.py`, `mkl/_mkl_service.pyx` | ||
| - API contracts: `mkl/__init__.py`, `mkl/_py_mkl_service.pyx` |
|
|
||
| thread_dep = dependency('threads') | ||
|
|
||
| cc = meson.get_compiler('c') |
Comment on lines
+47
to
+50
| - name: Install mkl-service dependencies | ||
| run: | | ||
| pip install meson-python "cython>=3.1.0" cmake ninja mkl-devel | ||
|
|
Comment on lines
+11
to
+15
| env: | ||
| PACKAGE_NAME: mkl-service | ||
| MODULE_NAME: mkl-service | ||
| TEST_ENV_NAME: test_mkl_service | ||
|
|
| run: | | ||
| conda install mkl-devel mkl | ||
|
|
||
| - name: Build conda package |
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.
This PR might look weird until meson python PR is merged
The latest commit adds the Free threading support for mkl-service