1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
if(NOT DARTPY_PYTHON_VERSION)
set(DARTPY_PYTHON_VERSION 3.4 CACHE STRING "Choose the target Python version (e.g., 3.4, 2.7)" FORCE)
endif()
find_package(PythonInterp ${DARTPY_PYTHON_VERSION} QUIET)
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
"from distutils.sysconfig import get_python_lib;\
print(get_python_lib(plat_specific=True, prefix=''))"
OUTPUT_VARIABLE PYTHON_SITE_PACKAGES
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT PythonInterp_FOUND)
message(STATUS "DART_BUILD_DARTPY is ON, but failed to find PythonInterp. "
"Disabling dartpy."
)
return()
endif()
find_package(PythonLibs ${DARTPY_PYTHON_VERSION} QUIET)
if(NOT PythonLibs_FOUND)
message(STATUS "DART_BUILD_DARTPY is ON, but failed to find PythonLibs. "
"Disabling dartpy."
)
return()
endif()
# Find pybind11
# Needs to set PYBIND11_PYTHON_VERSION before finding pybind11
set(PYBIND11_PYTHON_VERSION ${DARTPY_PYTHON_VERSION})
find_package(pybind11 2.2.0 QUIET)
if(NOT pybind11_FOUND)
message(STATUS "DART_BUILD_DARTPY is ON, but failed to find pybind11 >= "
"2.2.0. Disabling dartpy."
)
return()
endif()
file(GLOB_RECURSE dartpy_headers "*.h" "*.hpp")
file(GLOB_RECURSE dartpy_sources "*.cpp")
# Build a Python extension module:
# pybind11_add_module(<name> [MODULE | SHARED] [EXCLUDE_FROM_ALL]
# [NO_EXTRAS] [SYSTEM] [THIN_LTO] source1 [source2 ...])
#
pybind11_add_module(dartpy
MODULE
${dartpy_headers}
${dartpy_sources}
)
target_include_directories(dartpy
SYSTEM PUBLIC
${PYTHON_INCLUDE_DIRS}
${pybind11_INCLUDE_DIRS}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(dartpy
PUBLIC
dart
dart-utils
dart-utils-urdf
dart-gui
dart-gui-osg
${PYTHON_LIBRARIES}
)
if(TARGET dart-optimizer-nlopt)
target_link_libraries(dartpy PUBLIC dart-optimizer-nlopt)
endif()
if(TARGET dart-collision-bullet)
target_link_libraries(dartpy PUBLIC dart-collision-bullet)
endif()
if(TARGET dart-collision-ode)
target_link_libraries(dartpy PUBLIC dart-collision-ode)
endif()
set_target_properties(dartpy
PROPERTIES
PREFIX ""
SUFFIX ".so" # python uses '.so' extension even on macOS
DEBUG_POSTFIX ""
)
install(TARGETS dartpy
LIBRARY DESTINATION "${PYTHON_SITE_PACKAGES}"
)
list(REMOVE_ITEM dartpy_headers
${CMAKE_CURRENT_LIST_DIR}/eigen_geometry_pybind.h
${CMAKE_CURRENT_LIST_DIR}/eigen_pybind.h
)
list(REMOVE_ITEM dartpy_sources
${CMAKE_CURRENT_LIST_DIR}/eigen_geometry_pybind.cpp
)
dart_format_add(${dartpy_headers} ${dartpy_sources})
|