-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
157 lines (128 loc) · 5.29 KB
/
Copy pathCMakeLists.txt
File metadata and controls
157 lines (128 loc) · 5.29 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
cmake_minimum_required(VERSION 3.14)
project(TetraPGA VERSION 0.1.0)
if(POLICY CMP0167)
cmake_policy(SET CMP0167 OLD)
endif()
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
set(COAL_DISABLE_HPP_FCL_WARNINGS TRUE)
add_compile_definitions(COAL_DISABLE_HPP_FCL_WARNINGS)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
option(TETRAPGA_BUILD_TESTS "Build TetraPGA test executables" ON)
option(TETRAPGA_BUILD_BENCHMARKS "Build TetraPGA benchmark executables" OFF)
set(TETRAPGA_ROBOT_ASSETS_DIR_DEFAULT "${CMAKE_CURRENT_SOURCE_DIR}/../robot-assets")
get_filename_component(TETRAPGA_ROBOT_ASSETS_DIR_DEFAULT "${TETRAPGA_ROBOT_ASSETS_DIR_DEFAULT}" ABSOLUTE)
set(TETRAPGA_ROBOT_ASSETS_DIR "${TETRAPGA_ROBOT_ASSETS_DIR_DEFAULT}" CACHE PATH
"Path to the robot-assets repository used by TetraPGA tests and downstream packages")
if(NOT EXISTS "${TETRAPGA_ROBOT_ASSETS_DIR}/ur10/urdf/ur10.urdf")
message(FATAL_ERROR
"TETRAPGA_ROBOT_ASSETS_DIR must point to the robot-assets repository. "
"Expected to find ur10/urdf/ur10.urdf under '${TETRAPGA_ROBOT_ASSETS_DIR}'.")
endif()
find_package(Eigen3 REQUIRED)
find_package(urdfdom REQUIRED)
add_library(TetraPGA INTERFACE)
add_library(TetraPGA::TetraPGA ALIAS TetraPGA)
target_include_directories(TetraPGA
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
${EIGEN3_INCLUDE_DIR}
${urdfdom_INCLUDE_DIRS}
)
target_link_libraries(TetraPGA INTERFACE Eigen3::Eigen)
if(urdfdom_LIBRARIES)
target_link_libraries(TetraPGA INTERFACE ${urdfdom_LIBRARIES})
endif()
function(tetrapga_add_test target_name source_file)
add_executable(${target_name} ${source_file})
target_link_libraries(${target_name} PRIVATE TetraPGA::TetraPGA)
target_compile_definitions(${target_name}
PRIVATE TETRAPGA_ROBOT_ASSETS_DIR="${TETRAPGA_ROBOT_ASSETS_DIR}")
add_test(NAME ${target_name} COMMAND ${target_name})
endfunction()
function(tetrapga_add_benchmark target_name source_file)
add_executable(${target_name} ${source_file})
target_link_libraries(${target_name}
PRIVATE
TetraPGA::TetraPGA
benchmark::benchmark
)
target_compile_definitions(${target_name}
PRIVATE
TETRAPGA_ROBOT_ASSETS_DIR="${TETRAPGA_ROBOT_ASSETS_DIR}"
)
if(CASADI_FOUND)
target_link_libraries(${target_name} PRIVATE ${CASADI_LIBRARIES})
target_compile_definitions(${target_name} PRIVATE GA4RO_HAS_CASADI_BENCH=1)
target_include_directories(${target_name} PRIVATE ${CASADI_INCLUDE_DIRS})
target_link_directories(${target_name} PRIVATE ${CASADI_LIBRARY_DIRS})
endif()
endfunction()
if(TETRAPGA_BUILD_TESTS)
enable_testing()
find_package(pinocchio REQUIRED)
tetrapga_add_test(TetraPGA_motor_test test/TetraPGA_motor_test.cpp)
tetrapga_add_test(TetraPGA_kinematics_test test/TetraPGA_kinematics_test.cpp)
tetrapga_add_test(TetraPGA_dynamics_test test/TetraPGA_dynamics_test.cpp)
tetrapga_add_test(TetraPGA_models_test test/TetraPGA_models_test.cpp)
target_link_libraries(TetraPGA_models_test PRIVATE pinocchio::pinocchio)
find_package(PkgConfig REQUIRED)
pkg_check_modules(COAL REQUIRED IMPORTED_TARGET coal)
tetrapga_add_test(TetraPGA_collision_test test/TetraPGA_collision_test.cpp)
target_link_libraries(TetraPGA_collision_test
PRIVATE
pinocchio::pinocchio
PkgConfig::COAL
)
endif()
if(TETRAPGA_BUILD_BENCHMARKS)
find_package(benchmark REQUIRED)
find_package(pinocchio REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(CASADI QUIET casadi)
tetrapga_add_benchmark(TetraPGA_dyn_bench benchmark/TetraPGA_dyn_bench.cpp)
target_link_libraries(TetraPGA_dyn_bench PRIVATE pinocchio::pinocchio)
tetrapga_add_benchmark(TetraPGA_dyn_fo_bench benchmark/TetraPGA_dyn_fo_bench.cpp)
target_link_libraries(TetraPGA_dyn_fo_bench PRIVATE pinocchio::pinocchio)
tetrapga_add_benchmark(TetraPGA_dyn_so_bench benchmark/TetraPGA_dyn_so_bench.cpp)
target_link_libraries(TetraPGA_dyn_so_bench PRIVATE pinocchio::pinocchio)
pkg_check_modules(COAL QUIET IMPORTED_TARGET coal)
if(COAL_FOUND)
tetrapga_add_benchmark(TetraPGA_collision_bench benchmark/TetraPGA_collision_bench.cpp)
target_link_libraries(TetraPGA_collision_bench
PRIVATE
pinocchio::pinocchio
PkgConfig::COAL
)
endif()
endif()
install(TARGETS TetraPGA EXPORT TetraPGATargets)
install(DIRECTORY include/TetraPGA DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/TetraPGAConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/TetraPGAConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/TetraPGAConfig.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/TetraPGA"
)
install(EXPORT TetraPGATargets
FILE TetraPGATargets.cmake
NAMESPACE TetraPGA::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/TetraPGA"
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/TetraPGAConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/TetraPGAConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/TetraPGA"
)