Skip to content

Commit bf8f69a

Browse files
authored
Merge pull request #495 from isuruf/freethreading
Freethreading support
2 parents 562ff08 + 170e7de commit bf8f69a

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

cmake/FindPython.cmake

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,36 @@ execute_process(
2222
string(STRIP ${PYTHON_LIB_PATH} PYTHON_LIB_PATH)
2323

2424
execute_process(
25-
COMMAND ${PYTHON_BIN} -c "import sys; print(sys.prefix)"
26-
OUTPUT_VARIABLE PYTHON_PREFIX_PATH
27-
)
25+
COMMAND ${PYTHON_BIN} -c "import sys; print(sys.prefix)"
26+
OUTPUT_VARIABLE PYTHON_PREFIX_PATH
27+
)
2828

2929
string(STRIP ${PYTHON_PREFIX_PATH} PYTHON_PREFIX_PATH)
3030

3131
execute_process(
32-
COMMAND ${PYTHON_BIN} -c "import sys; print('%s.%s' % sys.version_info[:2])"
32+
COMMAND ${PYTHON_BIN} -c "import sys; print('%s.%s' % sys.version_info[:2])"
3333
OUTPUT_VARIABLE PYTHON_VERSION
34-
)
34+
)
3535
string(STRIP ${PYTHON_VERSION} PYTHON_VERSION)
3636
message(STATUS "Python version: ${PYTHON_VERSION}")
3737

3838
string(REPLACE "." "" PYTHON_VERSION_WITHOUT_DOTS ${PYTHON_VERSION})
3939

40+
execute_process(
41+
COMMAND ${PYTHON_BIN} -c "import sysconfig;print(bool(sysconfig.get_config_var('Py_GIL_DISABLED')))"
42+
OUTPUT_VARIABLE PY_GIL_DISABLED
43+
)
44+
string(STRIP ${PY_GIL_DISABLED} PY_GIL_DISABLED)
45+
46+
if ("${PY_GIL_DISABLED}" STREQUAL "True")
47+
set (PY_THREAD "t")
48+
endif()
49+
4050
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
4151
FIND_LIBRARY(PYTHON_LIBRARY NAMES
42-
python${PYTHON_VERSION}
52+
python${PYTHON_VERSION}${PY_THREAD}
4353
python${PYTHON_VERSION}m
44-
python${PYTHON_VERSION_WITHOUT_DOTS}
54+
python${PYTHON_VERSION_WITHOUT_DOTS}${PY_THREAD}
4555
PATHS ${PYTHON_LIB_PATH} ${PYTHON_PREFIX_PATH}/lib ${PYTHON_PREFIX_PATH}/libs
4656
PATH_SUFFIXES ${CMAKE_LIBRARY_ARCHITECTURE}
4757
NO_DEFAULT_PATH
@@ -51,8 +61,8 @@ endif()
5161

5262
execute_process(
5363
COMMAND ${PYTHON_BIN} -c "from sysconfig import get_paths; print(get_paths()['purelib'])"
54-
OUTPUT_VARIABLE PYTHON_INSTALL_PATH_tmp
55-
)
64+
OUTPUT_VARIABLE PYTHON_INSTALL_PATH_tmp
65+
)
5666
string(STRIP ${PYTHON_INSTALL_PATH_tmp} PYTHON_INSTALL_PATH_tmp)
5767
set(PYTHON_INSTALL_PATH ${PYTHON_INSTALL_PATH_tmp}
5868
CACHE BOOL "Python install path")
@@ -129,5 +139,9 @@ macro(ADD_PYTHON_LIBRARY name)
129139
IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
130140
target_link_libraries(${name} ${PYTHON_LIBRARY})
131141
set_target_properties(${name} PROPERTIES SUFFIX ".pyd")
142+
IF("${PY_GIL_DISABLED}" STREQUAL "True")
143+
target_compile_definitions(${name} PRIVATE Py_GIL_DISABLED=1)
144+
ENDIF()
132145
ENDIF()
146+
133147
endmacro(ADD_PYTHON_LIBRARY)

cmake/cython_test.pyx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ cdef extern from "<symengine/symbol.h>" namespace "SymEngine":
7575
string get_name() nogil
7676

7777
cdef extern from "<symengine/add.h>" namespace "SymEngine":
78-
cdef RCP[Basic] add(RCP[Basic] &a, RCP[Basic] &b) nogil except+
79-
cdef RCP[Basic] sub(RCP[Basic] &a, RCP[Basic] &b) nogil except+
78+
cdef RCP[Basic] add(RCP[Basic] &a, RCP[Basic] &b) except+ nogil
79+
cdef RCP[Basic] sub(RCP[Basic] &a, RCP[Basic] &b) except+ nogil
8080

8181
cdef cppclass Add(Basic):
8282
void as_two_terms(const Ptr[RCP[Basic]] &a, const Ptr[RCP[Basic]] &b)

0 commit comments

Comments
 (0)