mirror of
https://github.com/pybind/pybind11.git
synced 2026-05-04 13:41:36 +00:00
fix(cmake): improved cross-compilation support (#5083)
* fix(cmake): do not use Python::Interpreter when cross-compiling * chore: apply cmake-format to pybind11NewTools.cmake * fix(cmake): do not look for Python Interpreter component when cross-compiling * feat(cmake): guess Python extension suffix * fix: add pybind11GuessPythonExtSuffix.cmake to packaging test * Use PYBIND11_CROSSCOMPILING instead of CMAKE_CROSSCOMPILING * refactor: require PYBIND11_USE_CROSSCOMPILING Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
This commit is contained in:
161
tools/test-pybind11GuessPythonExtSuffix.cmake
Normal file
161
tools/test-pybind11GuessPythonExtSuffix.cmake
Normal file
@@ -0,0 +1,161 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
|
||||
# Tests for pybind11_guess_python_module_extension
|
||||
# Run using `cmake -P tools/test-pybind11GuessPythonExtSuffix.cmake`
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/pybind11GuessPythonExtSuffix.cmake")
|
||||
|
||||
macro(expect_streq actual expected)
|
||||
if(NOT "${actual}" STREQUAL "${expected}")
|
||||
message(SEND_ERROR "Fail\n *** actual: '${actual}'\n *** expected: '${expected}'")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(expect_false actual)
|
||||
if("${actual}")
|
||||
message(SEND_ERROR "Fail\n *** actual: '${actual}'\n *** expected: false")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
macro(expect_true actual)
|
||||
if(NOT "${actual}")
|
||||
message(SEND_ERROR "Fail\n *** actual: '${actual}'\n *** expected: true")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# Windows
|
||||
set(CMAKE_SYSTEM_NAME "Windows")
|
||||
set(CMAKE_SHARED_MODULE_SUFFIX ".dll")
|
||||
|
||||
set(Python3_SOABI "")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".pyd")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "cp311-win_arm64")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cp311-win_arm64.pyd")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "cp311d-win_arm64")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cp311d-win_arm64.pyd")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_true("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "pypy310-pp73-win_amd64")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".pypy310-pp73-win_amd64.pyd")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "_d.cp311-win_amd64.pyd") # This is a quirk of FindPython3
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cp311-win_amd64.pyd")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "_d")
|
||||
expect_true("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
unset(Python3_SOABI)
|
||||
set(ENV{SETUPTOOLS_EXT_SUFFIX} ".cp39-win_arm64.pyd") # Set by cibuildwheel
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cp39-win_arm64.pyd")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
unset(ENV{SETUPTOOLS_EXT_SUFFIX})
|
||||
|
||||
set(Python3_SOABI "cp311-win_arm64")
|
||||
set(ENV{SETUPTOOLS_EXT_SUFFIX} "") # Should not be used
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cp311-win_arm64.pyd")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
unset(ENV{SETUPTOOLS_EXT_SUFFIX})
|
||||
|
||||
# macOS
|
||||
set(CMAKE_SYSTEM_NAME "Darwin")
|
||||
set(CMAKE_SHARED_MODULE_SUFFIX ".so")
|
||||
|
||||
set(Python3_SOABI "")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".so")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "cpython-312-darwin")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cpython-312-darwin.so")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "cpython-312d-darwin")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cpython-312d-darwin.so")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_true("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
# Linux
|
||||
set(CMAKE_SYSTEM_NAME "Linux")
|
||||
set(CMAKE_SHARED_MODULE_SUFFIX ".so")
|
||||
|
||||
set(Python3_SOABI "")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".so")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "cpython-312-arm-linux-gnueabihf")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cpython-312-arm-linux-gnueabihf.so")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "cpython-312d-arm-linux-gnueabihf")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".cpython-312d-arm-linux-gnueabihf.so")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_true("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "pypy310-pp73-x86_64-linux-gnu")
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".pypy310-pp73-x86_64-linux-gnu.so")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_false("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
|
||||
set(Python3_SOABI "pypy310d-pp73-x86_64-linux-gnu")
|
||||
# TODO: I'm not sure if this is the right SOABI for PyPy debug builds
|
||||
pybind11_guess_python_module_extension("Python3")
|
||||
expect_streq("${PYTHON_MODULE_EXTENSION}" ".pypy310d-pp73-x86_64-linux-gnu.so")
|
||||
expect_streq("${PYTHON_MODULE_DEBUG_POSTFIX}" "")
|
||||
expect_true("${PYTHON_IS_DEBUG}")
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX)
|
||||
unset(PYTHON_MODULE_EXT_SUFFIX CACHE)
|
||||
Reference in New Issue
Block a user