Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pybind11
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
pybind11
Commits
94db5c5e
Commit
94db5c5e
authored
Jul 30, 2020
by
Henry Schreiner
Committed by
Henry Schreiner
Jul 30, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
format: apply cmake-format
parent
e2a96890
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
270 additions
and
209 deletions
+270
-209
.cmake-format.yaml
+4
-0
CMakeLists.txt
+0
-0
tests/CMakeLists.txt
+0
-0
tests/test_cmake_build/CMakeLists.txt
+25
-18
tests/test_cmake_build/installed_embed/CMakeLists.txt
+0
-1
tests/test_cmake_build/installed_function/CMakeLists.txt
+9
-2
tests/test_cmake_build/installed_target/CMakeLists.txt
+9
-2
tests/test_cmake_build/subdirectory_embed/CMakeLists.txt
+10
-8
tests/test_cmake_build/subdirectory_function/CMakeLists.txt
+9
-2
tests/test_cmake_build/subdirectory_target/CMakeLists.txt
+9
-2
tests/test_embed/CMakeLists.txt
+10
-9
tools/FindCatch.cmake
+14
-4
tools/FindEigen3.cmake
+15
-12
tools/FindPythonLibsNew.cmake
+83
-87
tools/pybind11Tools.cmake
+73
-62
No files found.
.cmake-format.yaml
View file @
94db5c5e
...
...
@@ -67,3 +67,7 @@ format:
# If true, the parsers may infer whether or not an argument
# list is sortable (without annotation).
autosort
:
false
# Causes a few issues - can be solved later, possibly.
markup
:
enable_markup
:
false
CMakeLists.txt
View file @
94db5c5e
This diff is collapsed.
Click to expand it.
tests/CMakeLists.txt
View file @
94db5c5e
This diff is collapsed.
Click to expand it.
tests/test_cmake_build/CMakeLists.txt
View file @
94db5c5e
add_custom_target
(
test_cmake_build
)
function
(
pybind11_add_build_test name
)
cmake_parse_arguments
(
ARG
"INSTALL"
""
""
${
ARGN
}
)
set
(
build_options
"-DCMAKE_PREFIX_PATH=
${
pybind11_BINARY_DIR
}
/mock_install"
"-DCMAKE_CXX_COMPILER=
${
CMAKE_CXX_COMPILER
}
"
"-DPYTHON_EXECUTABLE:FILEPATH=
${
PYTHON_EXECUTABLE
}
"
)
set
(
build_options
"-DCMAKE_PREFIX_PATH=
${
pybind11_BINARY_DIR
}
/mock_install"
"-DCMAKE_CXX_COMPILER=
${
CMAKE_CXX_COMPILER
}
"
"-DPYTHON_EXECUTABLE:FILEPATH=
${
PYTHON_EXECUTABLE
}
"
)
if
(
CMAKE_CXX_STANDARD
)
list
(
APPEND build_options
"-DCMAKE_CXX_STANDARD=
${
CMAKE_CXX_STANDARD
}
"
)
...
...
@@ -16,17 +16,25 @@ function(pybind11_add_build_test name)
list
(
APPEND build_options
"-DPYBIND11_PROJECT_DIR=
${
pybind11_SOURCE_DIR
}
"
)
endif
()
add_custom_target
(
test_
${
name
}
${
CMAKE_CTEST_COMMAND
}
--build-and-test
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
${
name
}
"
"
${
CMAKE_CURRENT_BINARY_DIR
}
/
${
name
}
"
--build-config Release
add_custom_target
(
test_
${
name
}
${
CMAKE_CTEST_COMMAND
}
--build-and-test
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/
${
name
}
"
"
${
CMAKE_CURRENT_BINARY_DIR
}
/
${
name
}
"
--build-config
Release
--build-noclean
--build-generator
${
CMAKE_GENERATOR
}
$<$<BOOL:
${
CMAKE_GENERATOR_PLATFORM
}
>:--build-generator-platform>
${
CMAKE_GENERATOR_PLATFORM
}
--build-makeprogram
${
CMAKE_MAKE_PROGRAM
}
--build-target check
--build-options
${
build_options
}
)
--build-generator
${
CMAKE_GENERATOR
}
$<$<BOOL:
${
CMAKE_GENERATOR_PLATFORM
}
>:--build-generator-platform>
${
CMAKE_GENERATOR_PLATFORM
}
--build-makeprogram
${
CMAKE_MAKE_PROGRAM
}
--build-target
check
--build-options
${
build_options
}
)
if
(
ARG_INSTALL
)
add_dependencies
(
test_
${
name
}
mock_install
)
endif
()
...
...
@@ -40,10 +48,9 @@ if(NOT ${PYTHON_MODULE_EXTENSION} MATCHES "pypy")
endif
()
if
(
PYBIND11_INSTALL
)
add_custom_target
(
mock_install
${
CMAKE_COMMAND
}
"-DCMAKE_INSTALL_PREFIX=
${
pybind11_BINARY_DIR
}
/mock_install"
-P
"
${
pybind11_BINARY_DIR
}
/cmake_install.cmake"
)
add_custom_target
(
mock_install
${
CMAKE_COMMAND
}
"-DCMAKE_INSTALL_PREFIX=
${
pybind11_BINARY_DIR
}
/mock_install"
-P
"
${
pybind11_BINARY_DIR
}
/cmake_install.cmake"
)
pybind11_add_build_test
(
installed_function INSTALL
)
pybind11_add_build_test
(
installed_target INSTALL
)
...
...
tests/test_cmake_build/installed_embed/CMakeLists.txt
View file @
94db5c5e
...
...
@@ -8,7 +8,6 @@ message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}")
add_executable
(
test_cmake_build ../embed.cpp
)
target_link_libraries
(
test_cmake_build PRIVATE pybind11::embed
)
# Do not treat includes from IMPORTED target as SYSTEM (Python headers in pybind11::embed).
# This may be needed to resolve header conflicts, e.g. between Python release and debug headers.
set_target_properties
(
test_cmake_build PROPERTIES NO_SYSTEM_FROM_IMPORTED ON
)
...
...
tests/test_cmake_build/installed_function/CMakeLists.txt
View file @
94db5c5e
...
...
@@ -8,5 +8,12 @@ message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}")
pybind11_add_module
(
test_cmake_build SHARED NO_EXTRAS ../main.cpp
)
add_custom_target
(
check
${
CMAKE_COMMAND
}
-E env PYTHONPATH=$<TARGET_FILE_DIR:test_cmake_build>
${
PYTHON_EXECUTABLE
}
${
PROJECT_SOURCE_DIR
}
/../test.py
${
PROJECT_NAME
}
)
add_custom_target
(
check
${
CMAKE_COMMAND
}
-E
env
PYTHONPATH=$<TARGET_FILE_DIR:test_cmake_build>
${
PYTHON_EXECUTABLE
}
${
PROJECT_SOURCE_DIR
}
/../test.py
${
PROJECT_NAME
}
)
tests/test_cmake_build/installed_target/CMakeLists.txt
View file @
94db5c5e
...
...
@@ -18,5 +18,12 @@ set_target_properties(test_cmake_build PROPERTIES PREFIX "${PYTHON_MODULE_PREFIX
# This may be needed to resolve header conflicts, e.g. between Python release and debug headers.
set_target_properties
(
test_cmake_build PROPERTIES NO_SYSTEM_FROM_IMPORTED ON
)
add_custom_target
(
check
${
CMAKE_COMMAND
}
-E env PYTHONPATH=$<TARGET_FILE_DIR:test_cmake_build>
${
PYTHON_EXECUTABLE
}
${
PROJECT_SOURCE_DIR
}
/../test.py
${
PROJECT_NAME
}
)
add_custom_target
(
check
${
CMAKE_COMMAND
}
-E
env
PYTHONPATH=$<TARGET_FILE_DIR:test_cmake_build>
${
PYTHON_EXECUTABLE
}
${
PROJECT_SOURCE_DIR
}
/../test.py
${
PROJECT_NAME
}
)
tests/test_cmake_build/subdirectory_embed/CMakeLists.txt
View file @
94db5c5e
cmake_minimum_required
(
VERSION 3.7
)
project
(
test_subdirectory_embed CXX
)
set
(
PYBIND11_INSTALL ON CACHE BOOL
""
)
set
(
PYBIND11_INSTALL
ON
CACHE BOOL
""
)
set
(
PYBIND11_EXPORT_NAME test_export
)
add_subdirectory
(
${
PYBIND11_PROJECT_DIR
}
pybind11
)
...
...
@@ -16,10 +18,10 @@ add_custom_target(check $<TARGET_FILE:test_cmake_build> ${PROJECT_SOURCE_DIR}/..
add_library
(
test_embed_lib ../embed.cpp
)
target_link_libraries
(
test_embed_lib PRIVATE pybind11::embed
)
install
(
TARGETS test_embed_lib
EXPORT test_export
ARCHIVE DESTINATION bin
LIBRARY DESTINATION lib
RUNTIME DESTINATION lib
)
install
(
EXPORT test_export
DESTINATION lib/cmake/test_export/test_export-Targets.cmake
)
install
(
TARGETS test_embed_lib
EXPORT test_export
ARCHIVE DESTINATION bin
LIBRARY DESTINATION lib
RUNTIME DESTINATION lib
)
install
(
EXPORT test_export
DESTINATION lib/cmake/test_export/test_export-Targets.cmake
)
tests/test_cmake_build/subdirectory_function/CMakeLists.txt
View file @
94db5c5e
...
...
@@ -4,5 +4,12 @@ project(test_subdirectory_module CXX)
add_subdirectory
(
${
PYBIND11_PROJECT_DIR
}
pybind11
)
pybind11_add_module
(
test_cmake_build THIN_LTO ../main.cpp
)
add_custom_target
(
check
${
CMAKE_COMMAND
}
-E env PYTHONPATH=$<TARGET_FILE_DIR:test_cmake_build>
${
PYTHON_EXECUTABLE
}
${
PROJECT_SOURCE_DIR
}
/../test.py
${
PROJECT_NAME
}
)
add_custom_target
(
check
${
CMAKE_COMMAND
}
-E
env
PYTHONPATH=$<TARGET_FILE_DIR:test_cmake_build>
${
PYTHON_EXECUTABLE
}
${
PROJECT_SOURCE_DIR
}
/../test.py
${
PROJECT_NAME
}
)
tests/test_cmake_build/subdirectory_target/CMakeLists.txt
View file @
94db5c5e
...
...
@@ -11,5 +11,12 @@ target_link_libraries(test_cmake_build PRIVATE pybind11::module)
set_target_properties
(
test_cmake_build PROPERTIES PREFIX
"
${
PYTHON_MODULE_PREFIX
}
"
SUFFIX
"
${
PYTHON_MODULE_EXTENSION
}
"
)
add_custom_target
(
check
${
CMAKE_COMMAND
}
-E env PYTHONPATH=$<TARGET_FILE_DIR:test_cmake_build>
${
PYTHON_EXECUTABLE
}
${
PROJECT_SOURCE_DIR
}
/../test.py
${
PROJECT_NAME
}
)
add_custom_target
(
check
${
CMAKE_COMMAND
}
-E
env
PYTHONPATH=$<TARGET_FILE_DIR:test_cmake_build>
${
PYTHON_EXECUTABLE
}
${
PROJECT_SOURCE_DIR
}
/../test.py
${
PROJECT_NAME
}
)
tests/test_embed/CMakeLists.txt
View file @
94db5c5e
if
(
${
PYTHON_MODULE_EXTENSION
}
MATCHES
"pypy"
)
add_custom_target
(
cpptest
)
# Dummy target on PyPy. Embedding is not supported.
add_custom_target
(
cpptest
)
# Dummy target on PyPy. Embedding is not supported.
set
(
_suppress_unused_variable_warning
"
${
DOWNLOAD_CATCH
}
"
)
return
()
endif
()
...
...
@@ -13,10 +13,7 @@ else()
return
()
endif
()
add_executable
(
test_embed
catch.cpp
test_interpreter.cpp
)
add_executable
(
test_embed catch.cpp test_interpreter.cpp
)
target_include_directories
(
test_embed PRIVATE
"
${
CATCH_INCLUDE_DIR
}
"
)
pybind11_enable_warnings
(
test_embed
)
...
...
@@ -25,14 +22,18 @@ target_link_libraries(test_embed PRIVATE pybind11::embed)
find_package
(
Threads REQUIRED
)
target_link_libraries
(
test_embed PUBLIC Threads::Threads
)
add_custom_target
(
cpptest COMMAND
"$<TARGET_FILE:test_embed>"
WORKING_DIRECTORY
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
add_custom_target
(
cpptest
COMMAND
"$<TARGET_FILE:test_embed>"
WORKING_DIRECTORY
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
pybind11_add_module
(
external_module THIN_LTO external_module.cpp
)
set_target_properties
(
external_module PROPERTIES LIBRARY_OUTPUT_DIRECTORY
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
set_target_properties
(
external_module PROPERTIES LIBRARY_OUTPUT_DIRECTORY
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
foreach
(
config
${
CMAKE_CONFIGURATION_TYPES
}
)
string
(
TOUPPER
${
config
}
config
)
set_target_properties
(
external_module PROPERTIES LIBRARY_OUTPUT_DIRECTORY_
${
config
}
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
set_target_properties
(
external_module PROPERTIES LIBRARY_OUTPUT_DIRECTORY_
${
config
}
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
)
endforeach
()
add_dependencies
(
cpptest external_module
)
...
...
tools/FindCatch.cmake
View file @
94db5c5e
...
...
@@ -19,9 +19,14 @@ endif()
# Extract the version number from catch.hpp
function
(
_get_catch_version
)
file
(
STRINGS
"
${
CATCH_INCLUDE_DIR
}
/catch.hpp"
version_line REGEX
"Catch v.*"
LIMIT_COUNT 1
)
file
(
STRINGS
"
${
CATCH_INCLUDE_DIR
}
/catch.hpp"
version_line
REGEX
"Catch v.*"
LIMIT_COUNT 1
)
if
(
version_line MATCHES
"Catch v([0-9]+)
\\
.([0-9]+)
\\
.([0-9]+)"
)
set
(
CATCH_VERSION
"
${
CMAKE_MATCH_1
}
.
${
CMAKE_MATCH_2
}
.
${
CMAKE_MATCH_3
}
"
PARENT_SCOPE
)
set
(
CATCH_VERSION
"
${
CMAKE_MATCH_1
}
.
${
CMAKE_MATCH_2
}
.
${
CMAKE_MATCH_3
}
"
PARENT_SCOPE
)
endif
()
endfunction
()
...
...
@@ -34,11 +39,16 @@ function(_download_catch version destination_dir)
if
(
error
)
message
(
FATAL_ERROR
"Could not download
${
url
}
"
)
endif
()
set
(
CATCH_INCLUDE_DIR
"
${
destination_dir
}
"
CACHE INTERNAL
""
)
set
(
CATCH_INCLUDE_DIR
"
${
destination_dir
}
"
CACHE INTERNAL
""
)
endfunction
()
# Look for catch locally
find_path
(
CATCH_INCLUDE_DIR NAMES catch.hpp PATH_SUFFIXES catch2
)
find_path
(
CATCH_INCLUDE_DIR
NAMES catch.hpp
PATH_SUFFIXES catch2
)
if
(
CATCH_INCLUDE_DIR
)
_get_catch_version
()
endif
()
...
...
tools/FindEigen3.cmake
View file @
94db5c5e
...
...
@@ -26,17 +26,21 @@ if(NOT Eigen3_FIND_VERSION)
set
(
Eigen3_FIND_VERSION_PATCH 0
)
endif
(
NOT Eigen3_FIND_VERSION_PATCH
)
set
(
Eigen3_FIND_VERSION
"
${
Eigen3_FIND_VERSION_MAJOR
}
.
${
Eigen3_FIND_VERSION_MINOR
}
.
${
Eigen3_FIND_VERSION_PATCH
}
"
)
set
(
Eigen3_FIND_VERSION
"
${
Eigen3_FIND_VERSION_MAJOR
}
.
${
Eigen3_FIND_VERSION_MINOR
}
.
${
Eigen3_FIND_VERSION_PATCH
}
"
)
endif
(
NOT Eigen3_FIND_VERSION
)
macro
(
_eigen3_check_version
)
file
(
READ
"
${
EIGEN3_INCLUDE_DIR
}
/Eigen/src/Core/util/Macros.h"
_eigen3_version_header
)
string
(
REGEX MATCH
"define[
\t
]+EIGEN_WORLD_VERSION[
\t
]+([0-9]+)"
_eigen3_world_version_match
"
${
_eigen3_version_header
}
"
)
string
(
REGEX MATCH
"define[
\t
]+EIGEN_WORLD_VERSION[
\t
]+([0-9]+)"
_eigen3_world_version_match
"
${
_eigen3_version_header
}
"
)
set
(
EIGEN3_WORLD_VERSION
"
${
CMAKE_MATCH_1
}
"
)
string
(
REGEX MATCH
"define[
\t
]+EIGEN_MAJOR_VERSION[
\t
]+([0-9]+)"
_eigen3_major_version_match
"
${
_eigen3_version_header
}
"
)
string
(
REGEX MATCH
"define[
\t
]+EIGEN_MAJOR_VERSION[
\t
]+([0-9]+)"
_eigen3_major_version_match
"
${
_eigen3_version_header
}
"
)
set
(
EIGEN3_MAJOR_VERSION
"
${
CMAKE_MATCH_1
}
"
)
string
(
REGEX MATCH
"define[
\t
]+EIGEN_MINOR_VERSION[
\t
]+([0-9]+)"
_eigen3_minor_version_match
"
${
_eigen3_version_header
}
"
)
string
(
REGEX MATCH
"define[
\t
]+EIGEN_MINOR_VERSION[
\t
]+([0-9]+)"
_eigen3_minor_version_match
"
${
_eigen3_version_header
}
"
)
set
(
EIGEN3_MINOR_VERSION
"
${
CMAKE_MATCH_1
}
"
)
set
(
EIGEN3_VERSION
${
EIGEN3_WORLD_VERSION
}
.
${
EIGEN3_MAJOR_VERSION
}
.
${
EIGEN3_MINOR_VERSION
}
)
...
...
@@ -53,20 +57,19 @@ macro(_eigen3_check_version)
endif
(
NOT EIGEN3_VERSION_OK
)
endmacro
(
_eigen3_check_version
)
if
(
EIGEN3_INCLUDE_DIR
)
if
(
EIGEN3_INCLUDE_DIR
)
# in cache already
_eigen3_check_version
()
set
(
EIGEN3_FOUND
${
EIGEN3_VERSION_OK
}
)
else
(
EIGEN3_INCLUDE_DIR
)
else
(
EIGEN3_INCLUDE_DIR
)
find_path
(
EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
PATHS
${
CMAKE_INSTALL_PREFIX
}
/include
${
KDE4_INCLUDE_DIR
}
PATH_SUFFIXES eigen3 eigen
)
find_path
(
EIGEN3_INCLUDE_DIR
NAMES signature_of_eigen3_matrix_library
PATHS
${
CMAKE_INSTALL_PREFIX
}
/include
${
KDE4_INCLUDE_DIR
}
PATH_SUFFIXES eigen3 eigen
)
if
(
EIGEN3_INCLUDE_DIR
)
_eigen3_check_version
()
...
...
tools/FindPythonLibsNew.cmake
View file @
94db5c5e
...
...
@@ -52,23 +52,23 @@
# Checking for the extension makes sure that `LibsNew` was found and not just `Libs`.
if
(
PYTHONLIBS_FOUND AND PYTHON_MODULE_EXTENSION
)
return
()
return
()
endif
()
# Use the Python interpreter to find the libs.
if
(
NOT PythonLibsNew_FIND_VERSION
)
set
(
PythonLibsNew_FIND_VERSION
""
)
set
(
PythonLibsNew_FIND_VERSION
""
)
endif
()
if
(
PythonLibsNew_FIND_REQUIRED
)
find_package
(
PythonInterp
${
PythonLibsNew_FIND_VERSION
}
REQUIRED
)
find_package
(
PythonInterp
${
PythonLibsNew_FIND_VERSION
}
REQUIRED
)
else
()
find_package
(
PythonInterp
${
PythonLibsNew_FIND_VERSION
}
)
find_package
(
PythonInterp
${
PythonLibsNew_FIND_VERSION
}
)
endif
()
if
(
NOT PYTHONINTERP_FOUND
)
set
(
PYTHONLIBS_FOUND FALSE
)
set
(
PythonLibsNew_FOUND FALSE
)
return
()
set
(
PYTHONLIBS_FOUND FALSE
)
set
(
PythonLibsNew_FOUND FALSE
)
return
()
endif
()
# According to http://stackoverflow.com/questions/646518/python-how-to-detect-debug-interpreter
...
...
@@ -77,8 +77,9 @@ endif()
#
# The library suffix is from the config var LDVERSION sometimes, otherwise
# VERSION. VERSION will typically be like "2.7" on unix, and "27" on windows.
execute_process
(
COMMAND
"
${
PYTHON_EXECUTABLE
}
"
"-c"
"from distutils import sysconfig as s;import sys;import struct;
execute_process
(
COMMAND
"
${
PYTHON_EXECUTABLE
}
"
"-c"
"from distutils import sysconfig as s;import sys;import struct;
print('.'.join(str(v) for v in sys.version_info));
print(sys.prefix);
print(s.get_python_inc(plat_specific=True));
...
...
@@ -90,23 +91,22 @@ print(s.get_config_var('LDVERSION') or s.get_config_var('VERSION'));
print(s.get_config_var('LIBDIR') or '');
print(s.get_config_var('MULTIARCH') or '');
"
RESULT_VARIABLE _PYTHON_SUCCESS
OUTPUT_VARIABLE _PYTHON_VALUES
ERROR_VARIABLE _PYTHON_ERROR_VALUE
)
RESULT_VARIABLE _PYTHON_SUCCESS
OUTPUT_VARIABLE _PYTHON_VALUES
ERROR_VARIABLE _PYTHON_ERROR_VALUE
)
if
(
NOT _PYTHON_SUCCESS MATCHES 0
)
if
(
PythonLibsNew_FIND_REQUIRED
)
message
(
FATAL_ERROR
"Python config failure:
\n
${
_PYTHON_ERROR_VALUE
}
"
)
endif
()
set
(
PYTHONLIBS_FOUND FALSE
)
set
(
PythonLibsNew_FOUND FALSE
)
return
()
if
(
PythonLibsNew_FIND_REQUIRED
)
message
(
FATAL_ERROR
"Python config failure:
\n
${
_PYTHON_ERROR_VALUE
}
"
)
endif
()
set
(
PYTHONLIBS_FOUND FALSE
)
set
(
PythonLibsNew_FOUND FALSE
)
return
()
endif
()
# Convert the process output into a list
if
(
WIN32
)
string
(
REGEX REPLACE
"
\\\\
"
"/"
_PYTHON_VALUES
${
_PYTHON_VALUES
}
)
string
(
REGEX REPLACE
"
\\\\
"
"/"
_PYTHON_VALUES
${
_PYTHON_VALUES
}
)
endif
()
string
(
REGEX REPLACE
";"
"
\\\\
;"
_PYTHON_VALUES
${
_PYTHON_VALUES
}
)
string
(
REGEX REPLACE
"
\n
"
";"
_PYTHON_VALUES
${
_PYTHON_VALUES
}
)
...
...
@@ -124,16 +124,15 @@ list(GET _PYTHON_VALUES 9 PYTHON_MULTIARCH)
# Make sure the Python has the same pointer-size as the chosen compiler
# Skip if CMAKE_SIZEOF_VOID_P is not defined
if
(
CMAKE_SIZEOF_VOID_P
AND
(
NOT
"
${
PYTHON_SIZEOF_VOID_P
}
"
STREQUAL
"
${
CMAKE_SIZEOF_VOID_P
}
"
))
if
(
PythonLibsNew_FIND_REQUIRED
)
math
(
EXPR _PYTHON_BITS
"
${
PYTHON_SIZEOF_VOID_P
}
* 8"
)
math
(
EXPR _CMAKE_BITS
"
${
CMAKE_SIZEOF_VOID_P
}
* 8"
)
message
(
FATAL_ERROR
"Python config failure: Python is
${
_PYTHON_BITS
}
-bit, "
"chosen compiler is
${
_CMAKE_BITS
}
-bit"
)
endif
()
set
(
PYTHONLIBS_FOUND FALSE
)
set
(
PythonLibsNew_FOUND FALSE
)
return
()
if
(
PythonLibsNew_FIND_REQUIRED
)
math
(
EXPR _PYTHON_BITS
"
${
PYTHON_SIZEOF_VOID_P
}
* 8"
)
math
(
EXPR _CMAKE_BITS
"
${
CMAKE_SIZEOF_VOID_P
}
* 8"
)
message
(
FATAL_ERROR
"Python config failure: Python is
${
_PYTHON_BITS
}
-bit, "
"chosen compiler is
${
_CMAKE_BITS
}
-bit"
)
endif
()
set
(
PYTHONLIBS_FOUND FALSE
)
set
(
PythonLibsNew_FOUND FALSE
)
return
()
endif
()
# The built-in FindPython didn't always give the version numbers
...
...
@@ -148,79 +147,76 @@ string(REGEX REPLACE "\\\\" "/" PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}")
string
(
REGEX REPLACE
"
\\\\
"
"/"
PYTHON_SITE_PACKAGES
"
${
PYTHON_SITE_PACKAGES
}
"
)
if
(
CMAKE_HOST_WIN32
)
set
(
PYTHON_LIBRARY
"
${
PYTHON_PREFIX
}
/libs/python
${
PYTHON_LIBRARY_SUFFIX
}
.lib"
)
# when run in a venv, PYTHON_PREFIX points to it. But the libraries remain in the
# original python installation. They may be found relative to PYTHON_INCLUDE_DIR.
if
(
NOT EXISTS
"
${
PYTHON_LIBRARY
}
"
)
get_filename_component
(
_PYTHON_ROOT
${
PYTHON_INCLUDE_DIR
}
DIRECTORY
)
set
(
PYTHON_LIBRARY
"
${
_PYTHON_ROOT
}
/libs/python
${
PYTHON_LIBRARY_SUFFIX
}
.lib"
)
endif
()
# if we are in MSYS & MINGW, and we didn't find windows python lib, look for system python lib
if
(
DEFINED ENV{MSYSTEM} AND MINGW AND NOT EXISTS
"
${
PYTHON_LIBRARY
}
"
)
if
(
PYTHON_MULTIARCH
)
set
(
_PYTHON_LIBS_SEARCH
"
${
PYTHON_LIBDIR
}
/
${
PYTHON_MULTIARCH
}
"
"
${
PYTHON_LIBDIR
}
"
)
else
()
set
(
_PYTHON_LIBS_SEARCH
"
${
PYTHON_LIBDIR
}
"
)
endif
()
unset
(
PYTHON_LIBRARY
)
find_library
(
PYTHON_LIBRARY
NAMES
"python
${
PYTHON_LIBRARY_SUFFIX
}
"
PATHS
${
_PYTHON_LIBS_SEARCH
}
NO_DEFAULT_PATH
)
endif
()
# raise an error if the python libs are still not found.
if
(
NOT EXISTS
"
${
PYTHON_LIBRARY
}
"
)
message
(
FATAL_ERROR
"Python libraries not found"
)
endif
()
else
()
set
(
PYTHON_LIBRARY
"
${
PYTHON_PREFIX
}
/libs/python
${
PYTHON_LIBRARY_SUFFIX
}
.lib"
)
# when run in a venv, PYTHON_PREFIX points to it. But the libraries remain in the
# original python installation. They may be found relative to PYTHON_INCLUDE_DIR.
if
(
NOT EXISTS
"
${
PYTHON_LIBRARY
}
"
)
get_filename_component
(
_PYTHON_ROOT
${
PYTHON_INCLUDE_DIR
}
DIRECTORY
)
set
(
PYTHON_LIBRARY
"
${
_PYTHON_ROOT
}
/libs/python
${
PYTHON_LIBRARY_SUFFIX
}
.lib"
)
endif
()
# if we are in MSYS & MINGW, and we didn't find windows python lib, look for system python lib
if
(
DEFINED ENV{MSYSTEM}
AND MINGW
AND NOT EXISTS
"
${
PYTHON_LIBRARY
}
"
)
if
(
PYTHON_MULTIARCH
)
set
(
_PYTHON_LIBS_SEARCH
"
${
PYTHON_LIBDIR
}
/
${
PYTHON_MULTIARCH
}
"
"
${
PYTHON_LIBDIR
}
"
)
set
(
_PYTHON_LIBS_SEARCH
"
${
PYTHON_LIBDIR
}
/
${
PYTHON_MULTIARCH
}
"
"
${
PYTHON_LIBDIR
}
"
)
else
()
set
(
_PYTHON_LIBS_SEARCH
"
${
PYTHON_LIBDIR
}
"
)
endif
()
#message(STATUS "Searching for Python libs in ${_PYTHON_LIBS_SEARCH}")
# Probably this needs to be more involved. It would be nice if the config
# information the python interpreter itself gave us were more complete.
find_library
(
PYTHON_LIBRARY
NAMES
"python
${
PYTHON_LIBRARY_SUFFIX
}
"
PATHS
${
_PYTHON_LIBS_SEARCH
}
NO_DEFAULT_PATH
)
# If all else fails, just set the name/version and let the linker figure out the path.
if
(
NOT PYTHON_LIBRARY
)
set
(
PYTHON_LIBRARY python
${
PYTHON_LIBRARY_SUFFIX
}
)
set
(
_PYTHON_LIBS_SEARCH
"
${
PYTHON_LIBDIR
}
"
)
endif
()
unset
(
PYTHON_LIBRARY
)
find_library
(
PYTHON_LIBRARY
NAMES
"python
${
PYTHON_LIBRARY_SUFFIX
}
"
PATHS
${
_PYTHON_LIBS_SEARCH
}
NO_DEFAULT_PATH
)
endif
()
# raise an error if the python libs are still not found.
if
(
NOT EXISTS
"
${
PYTHON_LIBRARY
}
"
)
message
(
FATAL_ERROR
"Python libraries not found"
)
endif
()
else
()
if
(
PYTHON_MULTIARCH
)
set
(
_PYTHON_LIBS_SEARCH
"
${
PYTHON_LIBDIR
}
/
${
PYTHON_MULTIARCH
}
"
"
${
PYTHON_LIBDIR
}
"
)
else
()
set
(
_PYTHON_LIBS_SEARCH
"
${
PYTHON_LIBDIR
}
"
)
endif
()
#message(STATUS "Searching for Python libs in ${_PYTHON_LIBS_SEARCH}")
# Probably this needs to be more involved. It would be nice if the config
# information the python interpreter itself gave us were more complete.
find_library
(
PYTHON_LIBRARY
NAMES
"python
${
PYTHON_LIBRARY_SUFFIX
}
"
PATHS
${
_PYTHON_LIBS_SEARCH
}
NO_DEFAULT_PATH
)
# If all else fails, just set the name/version and let the linker figure out the path.
if
(
NOT PYTHON_LIBRARY
)
set
(
PYTHON_LIBRARY python
${
PYTHON_LIBRARY_SUFFIX
}
)
endif
()
endif
()
MARK_AS_ADVANCED
(
PYTHON_LIBRARY
PYTHON_INCLUDE_DIR
)
mark_as_advanced
(
PYTHON_LIBRARY PYTHON_INCLUDE_DIR
)
# We use PYTHON_INCLUDE_DIR, PYTHON_LIBRARY and PYTHON_DEBUG_LIBRARY for the
# cache entries because they are meant to specify the location of a single
# library. We now set the variables listed by the documentation for this
# module.
SET
(
PYTHON_INCLUDE_DIRS
"
${
PYTHON_INCLUDE_DIR
}
"
)
SET
(
PYTHON_LIBRARIES
"
${
PYTHON_LIBRARY
}
"
)
set
(
PYTHON_INCLUDE_DIRS
"
${
PYTHON_INCLUDE_DIR
}
"
)
set
(
PYTHON_LIBRARIES
"
${
PYTHON_LIBRARY
}
"
)
if
(
NOT PYTHON_DEBUG_LIBRARY
)
SET
(
PYTHON_DEBUG_LIBRARY
""
)
set
(
PYTHON_DEBUG_LIBRARY
""
)
endif
()
SET
(
PYTHON_DEBUG_LIBRARIES
"
${
PYTHON_DEBUG_LIBRARY
}
"
)
set
(
PYTHON_DEBUG_LIBRARIES
"
${
PYTHON_DEBUG_LIBRARY
}
"
)
find_package_message
(
PYTHON
"Found PythonLibs:
${
PYTHON_LIBRARY
}
"
"
${
PYTHON_EXECUTABLE
}${
PYTHON_VERSION_STRING
}
"
)
find_package_message
(
PYTHON
"Found PythonLibs:
${
PYTHON_LIBRARY
}
"
"
${
PYTHON_EXECUTABLE
}${
PYTHON_VERSION_STRING
}
"
)
set
(
PYTHONLIBS_FOUND TRUE
)
set
(
PythonLibsNew_FOUND TRUE
)
if
(
NOT PYTHON_MODULE_PREFIX
)
SET
(
PYTHON_MODULE_PREFIX
""
)
set
(
PYTHON_MODULE_PREFIX
""
)
endif
()
tools/pybind11Tools.cmake
View file @
94db5c5e
...
...
@@ -10,18 +10,22 @@ cmake_minimum_required(VERSION 3.7)
# VERSION 3.7...3.18, but some versions of VS have a patched CMake 3.11
# that do not work properly with this syntax, so using the following workaround:
if
(
${
CMAKE_VERSION
}
VERSION_LESS 3.18
)
cmake_policy
(
VERSION
${
CMAKE_MAJOR_VERSION
}
.
${
CMAKE_MINOR_VERSION
}
)
cmake_policy
(
VERSION
${
CMAKE_MAJOR_VERSION
}
.
${
CMAKE_MINOR_VERSION
}
)
else
()
cmake_policy
(
VERSION 3.18
)
cmake_policy
(
VERSION 3.18
)
endif
()
# Add a CMake parameter for choosing a desired Python version
if
(
NOT PYBIND11_PYTHON_VERSION
)
set
(
PYBIND11_PYTHON_VERSION
""
CACHE STRING
"Python version to use for compiling modules"
)
set
(
PYBIND11_PYTHON_VERSION
""
CACHE STRING
"Python version to use for compiling modules"
)
endif
()
# A user can set versions manually too
set
(
Python_ADDITIONAL_VERSIONS
"3.9;3.8;3.7;3.6;3.5;3.4"
CACHE INTERNAL
""
)
set
(
Python_ADDITIONAL_VERSIONS
"3.9;3.8;3.7;3.6;3.5;3.4"
CACHE INTERNAL
""
)
find_package
(
PythonLibsNew
${
PYBIND11_PYTHON_VERSION
}
REQUIRED
)
include
(
CheckCXXCompilerFlag
)
...
...
@@ -29,76 +33,80 @@ include(CMakeParseArguments)
# Warn or error if old variable name used
if
(
PYBIND11_CPP_STANDARD
)
if
(
NOT CMAKE_CXX_STANDARD
)
string
(
REGEX MATCH
[=[..^]=]
VAL
"
${
PYBIND11_CPP_STANDARD
}
"
)
set
(
supported_standards 11 14 17 20
)
if
(
"
${
VAL
}
"
IN_LIST supported_standards
)
message
(
WARNING
"USE -DCMAKE_CXX_STANDARD=
${
VAL
}
instead of PYBIND11_PYTHON_VERSION"
)
set
(
CMAKE_CXX_STANDARD
${
VAL
}
)
else
()
message
(
FATAL_ERROR
"PYBIND11_CPP_STANDARD should be replaced with CMAKE_CXX_STANDARD"
)
endif
()
if
(
NOT CMAKE_CXX_STANDARD
)
string
(
REGEX MATCH
[=[..^]=]
VAL
"
${
PYBIND11_CPP_STANDARD
}
"
)
set
(
supported_standards 11 14 17 20
)
if
(
"
${
VAL
}
"
IN_LIST supported_standards
)
message
(
WARNING
"USE -DCMAKE_CXX_STANDARD=
${
VAL
}
instead of PYBIND11_PYTHON_VERSION"
)
set
(
CMAKE_CXX_STANDARD
${
VAL
}
)
else
()
message
(
FATAL_ERROR
"PYBIND11_CPP_STANDARD should be replaced with CMAKE_CXX_STANDARD"
)
endif
()
endif
()
endif
()
# Checks whether the given CXX/linker flags can compile and link a cxx file. cxxflags and
# linkerflags are lists of flags to use. The result variable is a unique variable name for each set
# of flags: the compilation result will be cached base on the result variable. If the flags work,
# sets them in cxxflags_out/linkerflags_out internal cache variables (in addition to ${result}).
function
(
_pybind11_return_if_cxx_and_linker_flags_work result cxxflags linkerflags cxxflags_out linkerflags_out
)
function
(
_pybind11_return_if_cxx_and_linker_flags_work result cxxflags linkerflags cxxflags_out
linkerflags_out
)
set
(
CMAKE_REQUIRED_LIBRARIES
${
linkerflags
}
)
check_cxx_compiler_flag
(
"
${
cxxflags
}
"
${
result
}
)
if
(
${
result
}
)
set
(
${
cxxflags_out
}
"
${
cxxflags
}
"
CACHE INTERNAL
""
FORCE
)
set
(
${
linkerflags_out
}
"
${
linkerflags
}
"
CACHE INTERNAL
""
FORCE
)
if
(
${
result
}
)
set
(
${
cxxflags_out
}
"
${
cxxflags
}
"
CACHE INTERNAL
""
FORCE
)
set
(
${
linkerflags_out
}
"
${
linkerflags
}
"
CACHE INTERNAL
""
FORCE
)
endif
()
endfunction
()
# Internal: find the appropriate link time optimization flags for this compiler
function
(
_pybind11_add_lto_flags target_name prefer_thin_lto
)
if
(
NOT DEFINED PYBIND11_LTO_CXX_FLAGS
)
set
(
PYBIND11_LTO_CXX_FLAGS
""
CACHE INTERNAL
""
)
set
(
PYBIND11_LTO_LINKER_FLAGS
""
CACHE INTERNAL
""
)
if
(
NOT DEFINED PYBIND11_LTO_CXX_FLAGS
)
set
(
PYBIND11_LTO_CXX_FLAGS
""
CACHE INTERNAL
""
)
set
(
PYBIND11_LTO_LINKER_FLAGS
""
CACHE INTERNAL
""
)
if
(
CMAKE_CXX_COMPILER_ID MATCHES
"GNU|Clang"
)
set
(
cxx_append
""
)
set
(
linker_append
""
)
if
(
CMAKE_CXX_COMPILER_ID MATCHES
"Clang"
AND NOT APPLE
)
if
(
CMAKE_CXX_COMPILER_ID MATCHES
"Clang"
AND NOT APPLE
)
# Clang Gold plugin does not support -Os; append -O3 to MinSizeRel builds to override it
set
(
linker_append
";$<$<CONFIG:MinSizeRel>:-O3>"
)
elseif
(
CMAKE_CXX_COMPILER_ID MATCHES
"GNU"
)
set
(
cxx_append
";-fno-fat-lto-objects"
)
endif
()
if
(
CMAKE_CXX_COMPILER_ID MATCHES
"Clang"
AND prefer_thin_lto
)
_pybind11_return_if_cxx_and_linker_flags_work
(
HAS_FLTO_THIN
"-flto=thin
${
cxx_append
}
"
"-flto=thin
${
linker_append
}
"
if
(
CMAKE_CXX_COMPILER_ID MATCHES
"Clang"
AND prefer_thin_lto
)
_pybind11_return_if_cxx_and_linker_flags_work
(
HAS_FLTO_THIN
"-flto=thin
${
cxx_append
}
"
"-flto=thin
${
linker_append
}
"
PYBIND11_LTO_CXX_FLAGS PYBIND11_LTO_LINKER_FLAGS
)
endif
()
if
(
NOT HAS_FLTO_THIN
)
_pybind11_return_if_cxx_and_linker_flags_work
(
HAS_FLTO
"-flto
${
cxx_append
}
"
"-flto
${
linker_append
}
"
PYBIND11_LTO_
CXX_FLAGS PYBIND11_LTO_
LINKER_FLAGS
)
if
(
NOT HAS_FLTO_THIN
)
_pybind11_return_if_cxx_and_linker_flags_work
(
HAS_FLTO
"-flto
${
cxx_append
}
"
"-flto
${
linker_append
}
"
PYBIND11_LTO_CXX_FLAGS
PYBIND11_LTO_LINKER_FLAGS
)
endif
()
elseif
(
CMAKE_CXX_COMPILER_ID MATCHES
"Intel"
)
elseif
(
CMAKE_CXX_COMPILER_ID MATCHES
"Intel"
)
# Intel equivalent to LTO is called IPO
_pybind11_return_if_cxx_and_linker_flags_work
(
HAS_INTEL_IPO
"-ipo"
"-ipo"
PYBIND11_LTO_CXX_FLAGS PYBIND11_LTO_LINKER_FLAGS
)
_pybind11_return_if_cxx_and_linker_flags_work
(
HAS_INTEL_IPO
"-ipo"
"-ipo"
PYBIND11_LTO_CXX_FLAGS PYBIND11_LTO_LINKER_FLAGS
)
elseif
(
MSVC
)
# cmake only interprets libraries as linker flags when they start with a - (otherwise it
# converts /LTCG to \LTCG as if it was a Windows path). Luckily MSVC supports passing flags
# with - instead of /, even if it is a bit non-standard:
_pybind11_return_if_cxx_and_linker_flags_work
(
HAS_MSVC_GL_LTCG
"/GL"
"-LTCG"
PYBIND11_LTO_CXX_FLAGS PYBIND11_LTO_LINKER_FLAGS
)
_pybind11_return_if_cxx_and_linker_flags_work
(
HAS_MSVC_GL_LTCG
"/GL"
"-LTCG"
PYBIND11_LTO_CXX_FLAGS PYBIND11_LTO_LINKER_FLAGS
)
endif
()
if
(
PYBIND11_LTO_CXX_FLAGS
)
if
(
PYBIND11_LTO_CXX_FLAGS
)
message
(
STATUS
"LTO enabled"
)
else
()
message
(
STATUS
"LTO disabled (not supported by the compiler and/or linker)"
)
...
...
@@ -106,12 +114,13 @@ function(_pybind11_add_lto_flags target_name prefer_thin_lto)
endif
()
# Enable LTO flags if found, except for Debug builds
if
(
PYBIND11_LTO_CXX_FLAGS
)
if
(
PYBIND11_LTO_CXX_FLAGS
)
set
(
not_debug
"$<NOT:$<CONFIG:Debug>>"
)
set
(
cxx_lang
"$<COMPILE_LANGUAGE:CXX>"
)
target_compile_options
(
${
target_name
}
PRIVATE
"$<$<AND:
${
not_debug
}
,
${
cxx_lang
}
>:
${
PYBIND11_LTO_CXX_FLAGS
}
>"
)
target_compile_options
(
${
target_name
}
PRIVATE
"$<$<AND:
${
not_debug
}
,
${
cxx_lang
}
>:
${
PYBIND11_LTO_CXX_FLAGS
}
>"
)
endif
()
if
(
PYBIND11_LTO_LINKER_FLAGS
)
if
(
PYBIND11_LTO_LINKER_FLAGS
)
target_link_libraries
(
${
target_name
}
PRIVATE
"$<
${
not_debug
}
:
${
PYBIND11_LTO_LINKER_FLAGS
}
>"
)
endif
()
endfunction
()
...
...
@@ -143,7 +152,10 @@ function(pybind11_add_module target_name)
target_link_libraries
(
${
target_name
}
PRIVATE pybind11::module
)
if
(
ARG_SYSTEM
)
message
(
STATUS
"Warning: this does not have an effect - use NO_SYSTEM_FROM_IMPORTED if using imported targets"
)
message
(
STATUS
"Warning: this does not have an effect - use NO_SYSTEM_FROM_IMPORTED if using imported targets"
)
endif
()
# Python debug libraries expose slightly different objects before 3.8
...
...
@@ -165,35 +177,33 @@ function(pybind11_add_module target_name)
set_target_properties
(
${
target_name
}
PROPERTIES CXX_VISIBILITY_PRESET
"hidden"
)
set_target_properties
(
${
target_name
}
PROPERTIES CUDA_VISIBILITY_PRESET
"hidden"
)
if
(
ARG_NO_EXTRAS
)
return
()
return
()
endif
()
if
(
CMAKE_VERSION VERSION_LESS 3.9 OR PYBIND11_CLASSIC_LTO
)
_pybind11_add_lto_flags
(
${
target_name
}
${
ARG_THIN_LTO
}
)
_pybind11_add_lto_flags
(
${
target_name
}
${
ARG_THIN_LTO
}
)
else
()
include
(
CheckIPOSupported
)
check_ipo_supported
(
RESULT supported OUTPUT error
)
if
(
supported
)
set_property
(
TARGET
${
target_name
}
PROPERTY
INTERPROCEDURAL_OPTIMIZATION TRUE
)
endif
()
include
(
CheckIPOSupported
)
check_ipo_supported
(
RESULT supported OUTPUT error
)
if
(
supported
)
set_property
(
TARGET
${
target_name
}
PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE
)
endif
()
endif
()
if
(
NOT MSVC AND NOT
${
CMAKE_BUILD_TYPE
}
MATCHES Debug|RelWithDebInfo
)
if
(
NOT MSVC AND NOT
${
CMAKE_BUILD_TYPE
}
MATCHES Debug|RelWithDebInfo
)
# Strip unnecessary sections of the binary on Linux/Mac OS
if
(
CMAKE_STRIP
)
if
(
APPLE
)
add_custom_command
(
TARGET
${
target_name
}
POST_BUILD
COMMAND
${
CMAKE_STRIP
}
-x $<TARGET_FILE:
${
target_name
}
>
)
add_custom_command
(
TARGET
${
target_name
}
POST_BUILD
COMMAND
${
CMAKE_STRIP
}
-x $<TARGET_FILE:
${
target_name
}
>
)
else
()
add_custom_command
(
TARGET
${
target_name
}
POST_BUILD
COMMAND
${
CMAKE_STRIP
}
$<TARGET_FILE:
${
target_name
}
>
)
add_custom_command
(
TARGET
${
target_name
}
POST_BUILD
COMMAND
${
CMAKE_STRIP
}
$<TARGET_FILE:
${
target_name
}
>
)
endif
()
endif
()
endif
()
...
...
@@ -209,7 +219,8 @@ function(pybind11_add_module target_name)
# instance, projects that include other types of source files like CUDA
# .cu files don't get these options propagated to nvcc since that would
# cause the build to fail.
target_compile_options
(
${
target_name
}
PRIVATE $<$<NOT:$<CONFIG:Debug>>:$<$<COMPILE_LANGUAGE:CXX>:/MP>>
)
target_compile_options
(
${
target_name
}
PRIVATE $<$<NOT:$<CONFIG:Debug>>:$<$<COMPILE_LANGUAGE:CXX>:/MP>>
)
endif
()
endif
()
endfunction
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment