Skip to content

Commit 8a01014

Browse files
committed
Attempt to keep build behind flag
1 parent 0318c92 commit 8a01014

2 files changed

Lines changed: 84 additions & 9 deletions

File tree

trajoptlib/CMakeLists.txt

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
6363
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS FALSE)
6464

6565
option(BUILD_EXAMPLES "Build examples" OFF)
66+
option(BUILD_PYTHON "Build Python" OFF)
6667

6768
include(CompilerFlags)
6869

@@ -234,15 +235,31 @@ if(BUILD_EXAMPLES)
234235
endforeach()
235236
endif()
236237

237-
set(DEV_MODULE Development.Module)
238238

239-
find_package(Python 3.8 COMPONENTS Interpreter ${DEV_MODULE} REQUIRED)
240239

241-
# Detect the installed nanobind package and import it into CMake
242-
execute_process(
243-
COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir
244-
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE nanobind_ROOT)
245-
find_package(nanobind CONFIG REQUIRED)
240+
if (BUILD_PYTHON)
241+
set(DEV_MODULE Development.Module)
242+
find_package(Python 3.8 COMPONENTS Interpreter ${DEV_MODULE} REQUIRED)
246243

247-
nanobind_add_module(trajoptlib_py py/main.cpp)
248-
target_link_libraries(trajoptlib_py PUBLIC TrajoptLib)
244+
# nanobind dependency
245+
fetchcontent_declare(
246+
nanobind
247+
GIT_REPOSITORY https://github.com/wjakob/nanobind.git
248+
GIT_TAG v2.6.1
249+
)
250+
fetchcontent_makeavailable(nanobind)
251+
252+
# pybind11_mkdoc dependency
253+
fetchcontent_declare(
254+
pybind11_mkdoc
255+
GIT_REPOSITORY https://github.com/pybind/pybind11_mkdoc.git
256+
# master on 2023-02-08
257+
GIT_TAG 42fbf377824185e255b06d68fa70f4efcd569e2d
258+
GIT_SUBMODULES ""
259+
)
260+
fetchcontent_makeavailable(pybind11_mkdoc)
261+
include(cmake/modules/Pybind11Mkdoc.cmake)
262+
263+
nanobind_add_module(trajoptlib_py py/main.cpp)
264+
target_link_libraries(trajoptlib_py PUBLIC TrajoptLib)
265+
endif()
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
function(pybind11_mkdoc target headers)
2+
find_package(Python3 REQUIRED COMPONENTS Interpreter)
3+
4+
if(UNIX AND NOT APPLE)
5+
if(EXISTS /usr/lib/libclang.so)
6+
set(env_vars
7+
LLVM_DIR_PATH=/usr/lib
8+
LIBCLANG_PATH=/usr/lib/libclang.so
9+
)
10+
else()
11+
# Get default clang version
12+
execute_process(
13+
COMMAND
14+
bash -c
15+
"clang++ --version | grep -E -o \'[0-9]+\' | head -1"
16+
OUTPUT_VARIABLE CLANG_VERSION
17+
OUTPUT_STRIP_TRAILING_WHITESPACE
18+
COMMAND_ERROR_IS_FATAL ANY
19+
)
20+
21+
set(env_vars
22+
LLVM_DIR_PATH=/usr/lib/llvm-${CLANG_VERSION}
23+
LIBCLANG_PATH=/usr/lib/llvm-${CLANG_VERSION}/lib/libclang.so
24+
)
25+
endif()
26+
endif()
27+
28+
get_target_property(target_dirs ${target} INCLUDE_DIRECTORIES)
29+
list(TRANSFORM target_dirs PREPEND "-I")
30+
31+
get_target_property(eigen_dirs Eigen3::Eigen INTERFACE_INCLUDE_DIRECTORIES)
32+
list(FILTER eigen_dirs INCLUDE REGEX "\\$<BUILD_INTERFACE:.*>")
33+
list(TRANSFORM eigen_dirs PREPEND "-I")
34+
35+
get_target_property(
36+
small_vector_dirs
37+
small_vector
38+
INTERFACE_INCLUDE_DIRECTORIES
39+
)
40+
list(FILTER small_vector_dirs INCLUDE REGEX "\\$<BUILD_INTERFACE:.*>")
41+
list(TRANSFORM small_vector_dirs PREPEND "-I")
42+
43+
add_custom_command(
44+
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/jormungandr/cpp/docstrings.hpp
45+
COMMAND
46+
${env_vars} ${Python3_EXECUTABLE} -m pybind11_mkdoc ${headers} -o
47+
${CMAKE_CURRENT_SOURCE_DIR}/jormungandr/cpp/docstrings.hpp
48+
-I/usr/lib/clang/`clang++ --version | grep -E -o '[0-9]+' | head
49+
-1`/include ${target_dirs} ${eigen_dirs} ${small_vector_dirs}
50+
-std=c++23
51+
DEPENDS ${headers}
52+
USES_TERMINAL
53+
)
54+
add_custom_target(
55+
${target}_docstrings
56+
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/jormungandr/cpp/docstrings.hpp
57+
)
58+
endfunction()

0 commit comments

Comments
 (0)