forked from KavrakiLab/vamp
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
202 lines (166 loc) · 6.01 KB
/
Copy pathCMakeLists.txt
File metadata and controls
202 lines (166 loc) · 6.01 KB
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
cmake_minimum_required(VERSION 3.16...3.22)
option(VAMP_LTO "Use LTO." ON)
option(VAMP_FORCE_COLORED_OUTPUT "Always produce ANSI-colored output." ON)
option(VAMP_FORCE_CLANG "Force the use of Clang." OFF)
option(VAMP_BUILD_PYTHON_BINDINGS "Build VAMP Python bindings" ON)
option(VAMP_INSTALL_CPP_LIBRARY "Install VAMP C++ library (disable for Python wheel builds)" ON)
option(VAMP_BUILD_CPP_DEMO "Build VAMP C++ Demo Scripts" OFF)
option(VAMP_BUILD_OMPL_DEMO "Build VAMP C++ OMPL Integration Demo Scripts" OFF)
option(VAMP_OMPL_PATH "Search Path for OMPL Installation - Only Needed for Demo Script" "")
option(VAMP_BUILD_WASM "Build VAMP WebAssembly module" OFF)
if(VAMP_FORCE_CLANG)
find_program(CLANG "clang")
find_program(CLANGPP "clang++")
set(CMAKE_C_COMPILER ${CLANG} CACHE STRING "C compiler" FORCE)
set(CMAKE_CXX_COMPILER ${CLANGPP} CACHE STRING "C++ compiler" FORCE)
endif()
if(VAMP_FORCE_COLORED_OUTPUT)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-fdiagnostics-color=always)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_compile_options(-fcolor-diagnostics)
endif()
endif()
project(
vamp
VERSION 0.2
LANGUAGES C CXX
)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(macros)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
include(CompilerSettings)
include(FetchInitCPM)
include(Dependencies)
# Create VAMP C++ library
add_library(vamp_cpp INTERFACE)
# Set required C++ standard for the library
target_compile_features(vamp_cpp INTERFACE cxx_std_17)
target_include_directories(vamp_cpp
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/impl>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/vamp>
)
target_link_libraries_system(vamp_cpp
INTERFACE
Eigen3::Eigen
nigh
pdqsort
)
# Link SIMDxorshift if available
if(TARGET simdxorshift)
target_link_libraries(vamp_cpp INTERFACE simdxorshift)
endif()
# Set library properties
set_target_properties(vamp_cpp PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
# Create alias target for modern CMake usage
add_library(vamp::vamp ALIAS vamp_cpp)
# Build Python bindings
include(Python)
# Install C++ library components (conditional for Python wheel builds)
if(VAMP_INSTALL_CPP_LIBRARY)
# Install C++ library headers and SIMD library (if available)
set(VAMP_INSTALL_TARGETS vamp_cpp)
if(TARGET simdxorshift)
list(APPEND VAMP_INSTALL_TARGETS simdxorshift)
endif()
install(TARGETS ${VAMP_INSTALL_TARGETS}
EXPORT vamp_cppTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# Install headers
install(DIRECTORY src/impl/vamp/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/vamp
FILES_MATCHING PATTERN "*.hh"
)
# Generate package configuration files
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/vampConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/vampConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/vamp
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/vampConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
# Install package configuration files
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/vampConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/vampConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/vamp
)
# Export targets
install(EXPORT vamp_cppTargets
FILE vamp_cppTargets.cmake
NAMESPACE vamp::
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/vamp
)
endif()
# C++ demos
if(VAMP_BUILD_CPP_DEMO)
add_executable(vamp_rrtc_example scripts/cpp/rrtc_example.cc)
target_link_libraries(vamp_rrtc_example PRIVATE vamp_cpp)
# Disable strict warnings for demos to maintain compatibility
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(vamp_rrtc_example PRIVATE -Wno-c++11-narrowing -Wno-sign-compare)
endif()
endif()
# OMPL integration demo
if(VAMP_BUILD_OMPL_DEMO)
find_package(ompl QUIET PATHS ${VAMP_OMPL_PATH})
if(ompl_FOUND)
add_executable(vamp_ompl_integration scripts/cpp/ompl_integration.cc)
target_link_libraries(vamp_ompl_integration PRIVATE ompl::ompl vamp_cpp)
# Disable strict warnings for demos to maintain compatibility
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(vamp_ompl_integration PRIVATE -Wno-c++11-narrowing -Wno-sign-compare)
endif()
else()
message(WARNING "OMPL not found! Cannot build OMPL demo.")
endif()
endif()
# WebAssembly build
if(VAMP_BUILD_WASM)
include(EmscriptenBuild)
if(NOT VAMP_WASM_ROBOT_MODULES)
set(VAMP_WASM_ROBOT_MODULES panda fetch ur5)
set(VAMP_WASM_ROBOT_STRUCTS Panda Fetch UR5)
endif()
foreach(robot_name ROBOT_STRUCT IN ZIP_LISTS VAMP_WASM_ROBOT_MODULES VAMP_WASM_ROBOT_STRUCTS)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/impl/vamp/bindings/wasm/bindings.cc.in
${CMAKE_CURRENT_BINARY_DIR}/wasm/${robot_name}_wasm_bindings.cc
@ONLY
)
vamp_create_wasm_module(${robot_name}_wasm
${CMAKE_CURRENT_BINARY_DIR}/wasm/${robot_name}_wasm_bindings.cc
)
target_include_directories(${robot_name}_wasm PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src/impl
)
endforeach()
endif()
# Print build configuration
message(STATUS "VAMP build configuration:")
message(STATUS " - C++ library: ON")
message(STATUS " - Install C++ library: ${VAMP_INSTALL_CPP_LIBRARY}")
message(STATUS " - Python bindings: ${VAMP_BUILD_PYTHON_BINDINGS}")
message(STATUS " - C++ demos: ${VAMP_BUILD_CPP_DEMO}")
message(STATUS " - OMPL demos: ${VAMP_BUILD_OMPL_DEMO}")
message(STATUS " - WASM module: ${VAMP_BUILD_WASM}")