Unverified Commit 7c1ed458 authored by Ralf Gommers's avatar Ralf Gommers Committed by GitHub
Browse files

[CI/Build]: make it possible to build with a free-threaded interpreter (#29241)


Signed-off-by: default avatarRalf Gommers <ralf.gommers@gmail.com>
Co-authored-by: default avatarCyrus Leung <tlleungac@connect.ust.hk>
parent 1986de13
...@@ -495,7 +495,13 @@ function (define_extension_target MOD_NAME) ...@@ -495,7 +495,13 @@ function (define_extension_target MOD_NAME)
set(SOABI_KEYWORD "") set(SOABI_KEYWORD "")
endif() endif()
if (ARG_USE_SABI) run_python(IS_FREETHREADED_PYTHON
"import sysconfig; print(1 if sysconfig.get_config_var(\"Py_GIL_DISABLED\") else 0)"
"Failed to determine whether interpreter is free-threaded")
# Free-threaded Python doesn't yet support the stable ABI (see PEP 803/809),
# so avoid using the stable ABI under free-threading only.
if (ARG_USE_SABI AND NOT IS_FREETHREADED_PYTHON)
Python_add_library(${MOD_NAME} MODULE USE_SABI ${ARG_USE_SABI} ${SOABI_KEYWORD} "${ARG_SOURCES}") Python_add_library(${MOD_NAME} MODULE USE_SABI ${ARG_USE_SABI} ${SOABI_KEYWORD} "${ARG_SOURCES}")
else() else()
Python_add_library(${MOD_NAME} MODULE ${SOABI_KEYWORD} "${ARG_SOURCES}") Python_add_library(${MOD_NAME} MODULE ${SOABI_KEYWORD} "${ARG_SOURCES}")
......
...@@ -10,6 +10,7 @@ import re ...@@ -10,6 +10,7 @@ import re
import shutil import shutil
import subprocess import subprocess
import sys import sys
import sysconfig
from pathlib import Path from pathlib import Path
from shutil import which from shutil import which
...@@ -74,9 +75,13 @@ def is_ninja_available() -> bool: ...@@ -74,9 +75,13 @@ def is_ninja_available() -> bool:
return which("ninja") is not None return which("ninja") is not None
def is_freethreaded():
return bool(sysconfig.get_config_var("Py_GIL_DISABLED"))
class CMakeExtension(Extension): class CMakeExtension(Extension):
def __init__(self, name: str, cmake_lists_dir: str = ".", **kwa) -> None: def __init__(self, name: str, cmake_lists_dir: str = ".", **kwa) -> None:
super().__init__(name, sources=[], py_limited_api=True, **kwa) super().__init__(name, sources=[], py_limited_api=not is_freethreaded(), **kwa)
self.cmake_lists_dir = os.path.abspath(cmake_lists_dir) self.cmake_lists_dir = os.path.abspath(cmake_lists_dir)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment