mirror of
https://github.com/ceph/ceph
synced 2025-04-01 14:51:13 +00:00
cmake: remove cython 0.29's subinterpreter check
cython 0.29 introduced a check which prevents multiple python subinterpreters from loading the same module: https://github.com/cython/cython/commit/7e27c7c Unfortunately, this completely breaks ceph-mgr. Until we can figure out a better long term solution, this commit removes cython's subinterpreter check, via some careful abuse of the C preprocessor. This works because when cython is invoked, it first generates some C code, then compiles it. We know it's going to generate C code including: int __Pyx_check_single_interpreter(void) { ... } and: if (__Pyx_check_single_interpreter()) return NULL; So, we can do the following: #define void0 dead_function(void) #define __Pyx_check_single_interpreter(ARG)=ARG ## 0 This replaces the call to __Pyx_check_single_interpreter() with a literal 0, removing the subinterpreter check. The void0 dead_function(void) thing is necessary because the __Pyx_check_single_interpreter() macro also clobbers that function definition, so we need to make sure it's replaced with something that works as a function definition. Fixes: https://tracker.ceph.com/issues/37472 Signed-off-by: Tim Serong <tserong@suse.com>
This commit is contained in:
parent
2efb9ce8a2
commit
3bde34af8a
@ -49,6 +49,9 @@ function(distutils_add_cython_module name src)
|
||||
# CMake's implicit conversion between strings and lists is wonderful, isn't it?
|
||||
string(REPLACE " " ";" cflags ${CMAKE_C_FLAGS})
|
||||
list(APPEND cflags -iquote${CMAKE_SOURCE_DIR}/src/include -w)
|
||||
# This little bit of magic wipes out __Pyx_check_single_interpreter()
|
||||
list(APPEND cflags -D'void0=dead_function\(void\)')
|
||||
list(APPEND cflags -D'__Pyx_check_single_interpreter\(ARG\)=ARG \#\# 0')
|
||||
set(PY_CC ${compiler_launcher} ${CMAKE_C_COMPILER} ${c_compiler_arg1} ${cflags})
|
||||
set(PY_CXX ${compiler_launcher} ${CMAKE_CXX_COMPILER} ${cxx_compiler_arg1})
|
||||
set(PY_LDSHARED ${link_launcher} ${CMAKE_C_COMPILER} ${c_compiler_arg1} "-shared")
|
||||
|
Loading…
Reference in New Issue
Block a user