-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add macros for generating pybind11 bindings #400
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,3 +24,101 @@ find_package(Python3 ${GZ_PYTHON_VERSION} QUIET) | |
if(Python3_EXECUTABLE AND NOT PYTHON_EXECUTABLE) | ||
set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) | ||
endif() | ||
|
||
# Macro Definitions # | ||
|
||
################################################# | ||
# Insert options required to control the include of pybind11 | ||
# | ||
# Usage: | ||
# | ||
# gz_add_pybind_project_settings() | ||
# | ||
# Variables defined by this macro: | ||
# | ||
# SKIP_PYBIND11 Skip generating of Python bindings if OFF | ||
# USE_SYSTEM_PATHS_FOR_PYTHON_INSTALLATION Install modules in default system path if ON | ||
# USE_DIST_PACKAGES_FOR_PYTHON Use dist-package over site-package for module installation if ON | ||
# | ||
macro(gz_add_pybind_project_settings) | ||
set(skip_pybind11_default_value OFF) | ||
if (MSVC) | ||
# We're disabling pybind11 by default on Windows because they | ||
# don't have active CI on them for now. | ||
set(skip_pybind11_default_value ON) | ||
endif() | ||
|
||
option(SKIP_PYBIND11 | ||
"Skip generating Python bindings via pybind11" | ||
${skip_pybind11_default_value}) | ||
|
||
include(CMakeDependentOption) | ||
|
||
cmake_dependent_option(USE_SYSTEM_PATHS_FOR_PYTHON_INSTALLATION | ||
"Install Python modules in standard system paths in the system" | ||
OFF "NOT SKIP_PYBIND11" OFF) | ||
|
||
cmake_dependent_option(USE_DIST_PACKAGES_FOR_PYTHON | ||
"Use dist-packages instead of site-package to install Python modules" | ||
OFF "NOT SKIP_PYBIND11" OFF) | ||
endmacro() | ||
|
||
|
||
################################################# | ||
# Search for pybind11 and its dependencies if SKIP_PYBIND11 is not set | ||
# | ||
# Usage: | ||
# | ||
# gz_add_pybind_project_settings() <- required! | ||
# gz_search_for_pybind() | ||
# | ||
# Variables defined by this macro: | ||
# | ||
# Python3_* Python result variables from FindPython3 module | ||
# pybind11_* pybind11 result variables from pybind11 module | ||
# | ||
macro(gz_search_for_pybind) | ||
if (SKIP_PYBIND11) | ||
message(STATUS "SKIP_PYBIND11 set - disabling python bindings") | ||
else() | ||
find_package(Python3 ${GZ_PYTHON_VERSION} QUIET COMPONENTS Interpreter Development) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. gazebosim/gz-math#588 updated the code in gz-math to use Mind updating this to match? cc @scpeters There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think I haven't been completely consistent with using There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok, in gz-math8 and sdformat15, I used made finding the Python3 Interpreter
I think I do recommend the approach used in gz-math and sdformat, but I also recognize the lack of flexibility in finding packages from a macro. I would suggest calling |
||
|
||
if (NOT Python3_FOUND) | ||
GZ_BUILD_WARNING ("Python is missing: Python interfaces are disabled.") | ||
message (STATUS "Searching for Python - not found.") | ||
else() | ||
message (STATUS "Searching for Python - found version ${Python3_VERSION}.") | ||
|
||
set(PYBIND11_PYTHON_VERSION 3) | ||
find_package(pybind11 CONFIG QUIET) | ||
|
||
if (${pybind11_FOUND}) | ||
message (STATUS "Searching for pybind11 - found version ${pybind11_VERSION}.") | ||
else() | ||
GZ_BUILD_WARNING ("pybind11 is missing: Python interfaces are disabled.") | ||
message (STATUS "Searching for pybind11 - not found.") | ||
endif() | ||
endif() | ||
endif() | ||
endmacro() | ||
|
||
|
||
################################################# | ||
# Add the given directory to the CMake project and thus process the inner CMakeLists.txt | ||
# which should contain the pybind module (e.g. pybind11_add_module) instructions. | ||
# | ||
# Usage: | ||
# | ||
# gz_add_pybind_project_settings() <- required! | ||
# gz_search_for_pybind() <- required! | ||
# gz_add_pybind_directory(my_bindings) | ||
# | ||
# Argument required by this macro: | ||
# DIRECTORY Path to the folder with pybind module(s) | ||
# | ||
macro(gz_add_pybind_directory DIRECTORY) | ||
if (pybind11_FOUND AND NOT SKIP_PYBIND11) | ||
# Bindings subdirectory | ||
add_subdirectory(${DIRECTORY}) | ||
endif() | ||
endmacro() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
apologies for not reviewing this sooner
I actually deprecated
GzPython
in #431; I think these new macros should be in a new file likeGzPybind.cmake