fix(cmake): add required emscripten flags (#5298)

* fix(cmake): add required emscripten flags

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* Update emscripten.yaml

* fix(cmake): add required emscripten flags to headers target

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix(cmake): incorrect detection of Emscripten

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix(cmake): allow pybind11::headers to be modified

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix(cmake): hide a warning when building the tests standalone

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix(cmake): use explicit variable for is config

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix(cmake): go back to ALIAS target

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* chore: reduce overall diff

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* chore: reduce overall diff

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* chore: shorten code a bit

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
This commit is contained in:
Henry Schreiner 2024-08-12 16:51:48 -04:00 committed by Henry Schreiner
parent 78e26321c6
commit d8fcfe3416
No known key found for this signature in database
GPG Key ID: B9D0E45146A241E8
4 changed files with 35 additions and 5 deletions

View File

@ -5,6 +5,8 @@ on:
pull_request: pull_request:
branches: branches:
- master - master
- stable
- v*
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
@ -23,8 +25,6 @@ jobs:
- uses: pypa/cibuildwheel@v2.20 - uses: pypa/cibuildwheel@v2.20
env: env:
PYODIDE_BUILD_EXPORTS: whole_archive PYODIDE_BUILD_EXPORTS: whole_archive
CFLAGS: -fexceptions
LDFLAGS: -fexceptions
with: with:
package-dir: tests package-dir: tests
only: cp312-pyodide_wasm32 only: cp312-pyodide_wasm32

View File

@ -10,6 +10,10 @@ name = "pybind11_tests"
version = "0.0.1" version = "0.0.1"
dependencies = ["pytest", "pytest-timeout", "numpy", "scipy"] dependencies = ["pytest", "pytest-timeout", "numpy", "scipy"]
[tool.scikit-build]
# Hide a warning while we also support CMake < 3.15
cmake.version = ">=3.15"
[tool.scikit-build.cmake.define] [tool.scikit-build.cmake.define]
PYBIND11_FINDPYTHON = true PYBIND11_FINDPYTHON = true

View File

@ -2,7 +2,7 @@
Adds the following targets:: Adds the following targets::
pybind11::pybind11 - link to headers and pybind11 pybind11::pybind11 - link to Python headers and pybind11::headers
pybind11::module - Adds module links pybind11::module - Adds module links
pybind11::embed - Adds embed links pybind11::embed - Adds embed links
pybind11::lto - Link time optimizations (only if CMAKE_INTERPROCEDURAL_OPTIMIZATION is not set) pybind11::lto - Link time optimizations (only if CMAKE_INTERPROCEDURAL_OPTIMIZATION is not set)
@ -75,6 +75,32 @@ set_property(
APPEND APPEND
PROPERTY INTERFACE_LINK_LIBRARIES pybind11::pybind11) PROPERTY INTERFACE_LINK_LIBRARIES pybind11::pybind11)
# -------------- emscripten requires exceptions enabled -------------
# _pybind11_no_exceptions is a private mechanism to disable this addition.
# Please open an issue if you need to use it; it will be removed if no one
# needs it.
if(CMAKE_SYSTEM_NAME MATCHES Emscripten AND NOT _pybind11_no_exceptions)
if(CMAKE_VERSION VERSION_LESS 3.13)
message(WARNING "CMake 3.13+ is required to build for Emscripten. Some flags will be missing")
else()
if(_is_config)
set(_tmp_config_target pybind11::pybind11_headers)
else()
set(_tmp_config_target pybind11_headers)
endif()
set_property(
TARGET ${_tmp_config_target}
APPEND
PROPERTY INTERFACE_LINK_OPTIONS -fexceptions)
set_property(
TARGET ${_tmp_config_target}
APPEND
PROPERTY INTERFACE_COMPILE_OPTIONS -fexceptions)
unset(_tmp_config_target)
endif()
endif()
# --------------------------- link helper --------------------------- # --------------------------- link helper ---------------------------
add_library(pybind11::python_link_helper IMPORTED INTERFACE ${optional_global}) add_library(pybind11::python_link_helper IMPORTED INTERFACE ${optional_global})
@ -329,7 +355,7 @@ function(_pybind11_generate_lto target prefer_thin_lto)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le" OR CMAKE_SYSTEM_PROCESSOR MATCHES "mips64") if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le" OR CMAKE_SYSTEM_PROCESSOR MATCHES "mips64")
# Do nothing # Do nothing
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES emscripten) elseif(CMAKE_SYSTEM_NAME MATCHES Emscripten)
# This compile is very costly when cross-compiling, so set this without checking # This compile is very costly when cross-compiling, so set this without checking
set(PYBIND11_LTO_CXX_FLAGS "-flto${thin}${cxx_append}") set(PYBIND11_LTO_CXX_FLAGS "-flto${thin}${cxx_append}")
set(PYBIND11_LTO_LINKER_FLAGS "-flto${thin}${linker_append}") set(PYBIND11_LTO_LINKER_FLAGS "-flto${thin}${linker_append}")

View File

@ -84,7 +84,7 @@ you can either use the basic targets, or use the FindPython tools:
# Python method: # Python method:
Python_add_library(MyModule2 src2.cpp) Python_add_library(MyModule2 src2.cpp)
target_link_libraries(MyModule2 pybind11::headers) target_link_libraries(MyModule2 PUBLIC pybind11::headers)
set_target_properties(MyModule2 PROPERTIES set_target_properties(MyModule2 PROPERTIES
INTERPROCEDURAL_OPTIMIZATION ON INTERPROCEDURAL_OPTIMIZATION ON
CXX_VISIBILITY_PRESET ON CXX_VISIBILITY_PRESET ON