|
1 | 1 | # Copyright (C) 2008-2020 LAAS-CNRS, JRL AIST-CNRS. |
2 | 2 | # |
3 | | -# Author: Florent Lamiraux, Nirmal Giftsun |
| 3 | +# Author: Florent Lamiraux, Nirmal Giftsun, Guilhem Saurel |
4 | 4 | # |
5 | 5 |
|
6 | | -cmake_minimum_required(VERSION 3.1) |
| 6 | +CMAKE_MINIMUM_REQUIRED(VERSION 3.1) |
7 | 7 |
|
8 | | -set(PROJECT_ORG stack-of-tasks) |
9 | | -set(PROJECT_NAME dynamic_graph_bridge) |
10 | | -set(PROJECT_DESCRIPTION "Dynamic graph bridge library") |
11 | | -set(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}") |
12 | | -set(PROJECT_SUFFIX "-v3") |
| 8 | +# Project properties |
| 9 | +SET(PROJECT_ORG stack-of-tasks) |
| 10 | +SET(PROJECT_NAME dynamic_graph_bridge) |
| 11 | +SET(PROJECT_DESCRIPTION "Dynamic graph bridge library") |
| 12 | +SET(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}") |
| 13 | +SET(PROJECT_SUFFIX "-v3") |
13 | 14 |
|
14 | | -OPTION (BUILD_PYTHON_INTERFACE "Build the python binding" ON) |
| 15 | +# Project options |
| 16 | +OPTION(BUILD_PYTHON_INTERFACE "Build the python bindings" ON) |
15 | 17 |
|
16 | | -set(CUSTOM_HEADER_DIR dynamic_graph_bridge) |
| 18 | +# Project configuration |
| 19 | +SET(PROJECT_USE_CMAKE_EXPORT TRUE) |
| 20 | +SET(CUSTOM_HEADER_DIR ${PROJECT_NAME}) |
| 21 | +set(CXX_DISABLE_WERROR FALSE) |
17 | 22 | SET(DOXYGEN_USE_MATHJAX YES) |
18 | 23 | SET(CATKIN_ENABLE_TESTING OFF) |
19 | | -set(CXX_DISABLE_WERROR False) |
20 | 24 |
|
21 | | -include(cmake/base.cmake) |
22 | | -include(cmake/boost.cmake) |
23 | | -include(cmake/ros.cmake) |
24 | | -include(cmake/python.cmake) |
| 25 | +# JRL-cmakemodule setup |
| 26 | +INCLUDE(cmake/base.cmake) |
| 27 | +INCLUDE(cmake/boost.cmake) |
| 28 | +INCLUDE(cmake/python.cmake) |
| 29 | +INCLUDE(cmake/ros.cmake) |
25 | 30 |
|
26 | | -CMAKE_POLICY(SET CMP0048 OLD) |
27 | | -project(${PROJECT_NAME} CXX) |
| 31 | +# Project definition |
| 32 | +COMPUTE_PROJECT_ARGS(PROJECT_ARGS LANGUAGES CXX) |
| 33 | +PROJECT(${PROJECT_NAME} ${PROJECT_ARGS}) |
28 | 34 |
|
| 35 | +# Project dependencies |
29 | 36 | SET(CATKIN_REQUIRED_COMPONENTS roscpp std_msgs message_generation std_srvs geometry_msgs sensor_msgs tf2_ros) |
30 | | -SET(CATKIN_DEPENDS_LIBRARIES ros_bridge sot_loader) |
31 | 37 |
|
32 | 38 | IF(BUILD_PYTHON_INTERFACE) |
33 | 39 | FINDPYTHON() |
34 | 40 | STRING(REGEX REPLACE "-" "_" PY_NAME ${PROJECT_NAME}) |
35 | | - INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS}) |
36 | | - ADD_REQUIRED_DEPENDENCY("dynamic-graph-python >= 3.0.0") |
| 41 | + ADD_PROJECT_DEPENDENCY(dynamic-graph-python REQUIRED |
| 42 | + PKG_CONFIG_REQUIRES dynamic-graph-python) |
37 | 43 | SET(CATKIN_REQUIRED_COMPONENTS ${CATKIN_REQUIRED_COMPONENTS} rospy) |
38 | | - SET(CATKIN_DEPENDS_LIBRARIES ${CATKIN_DEPENDS_LIBRARIES} ros_interpreter) |
| 44 | + SET(BOOST_COMPONENTS ${BOOST_COMPONENTS} python) |
39 | 45 | ENDIF(BUILD_PYTHON_INTERFACE) |
40 | 46 |
|
41 | 47 | find_package(catkin REQUIRED COMPONENTS ${CATKIN_REQUIRED_COMPONENTS}) |
42 | 48 | find_package(realtime_tools) |
43 | 49 |
|
44 | | -set(${PROJECT_NAME}_HEADERS |
45 | | - include/dynamic_graph_bridge/ros_init.hh |
46 | | - include/dynamic_graph_bridge/sot_loader.hh |
47 | | - include/dynamic_graph_bridge/sot_loader_basic.hh |
48 | | - ) |
49 | | - |
50 | | -IF(BUILD_PYTHON_INTERFACE) |
51 | | - set(${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_HEADERS} |
52 | | - include/dynamic_graph_bridge/ros_interpreter.hh ) |
53 | | -ENDIF(BUILD_PYTHON_INTERFACE) |
54 | | - |
55 | 50 | SEARCH_FOR_BOOST() |
56 | 51 |
|
57 | | -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) |
58 | | -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) |
59 | | -set(CMAKE_INSTALL_RPATH "${LIBRARY_OUTPUT_PATH}") |
60 | | -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${LIBRARY_OUTPUT_PATH}") |
61 | | - |
62 | | -# Add dependency to SoT specific packages. |
63 | | -SET(SOT_PKGNAMES |
64 | | -dynamic_graph_bridge_msgs) |
65 | | - |
66 | 52 | add_required_dependency(roscpp) |
67 | 53 | add_required_dependency(tf2_ros) |
68 | 54 | add_required_dependency("realtime_tools >= 1.8") |
69 | 55 |
|
70 | | -ADD_REQUIRED_DEPENDENCY("dynamic-graph >= 3.0.0") |
71 | | -ADD_REQUIRED_DEPENDENCY("sot-core >= 3.0.0") |
| 56 | +ADD_PROJECT_DEPENDENCY(sot-core REQUIRED PKG_CONFIG_REQUIRES sot-core) |
72 | 57 |
|
73 | 58 | add_required_dependency(dynamic_graph_bridge_msgs) |
74 | 59 |
|
75 | | -foreach(sot_pkgname ${SOT_PKGNAMES}) |
76 | | - add_required_dependency(${sot_pkgname}) |
77 | | - pkg_check_modules(SOT_${sot_pkgname} REQUIRED ${sot_pkgname}) |
78 | | -endforeach(sot_pkgname) |
79 | | - |
80 | | - |
81 | | -# Build ros_bridge library |
82 | | -add_library(ros_bridge |
| 60 | +# Main Library |
| 61 | +set(${PROJECT_NAME}_HEADERS |
| 62 | + include/dynamic_graph_bridge/ros_init.hh |
| 63 | + include/dynamic_graph_bridge/sot_loader.hh |
| 64 | + include/dynamic_graph_bridge/sot_loader_basic.hh |
| 65 | + include/dynamic_graph_bridge/ros_interpreter.hh |
83 | 66 | src/converter.hh |
84 | | - include/dynamic_graph_bridge/ros_init.hh src/ros_init.cpp |
85 | | - src/sot_to_ros.hh src/sot_to_ros.cpp |
| 67 | + src/sot_to_ros.hh |
86 | 68 | ) |
87 | | -pkg_config_use_dependency(ros_bridge dynamic_graph_bridge_msgs) |
88 | | -install(TARGETS ros_bridge DESTINATION lib) |
89 | | - |
90 | | -# Add ros_bridge in the dynamic-graph-bridge pkg-config file. |
91 | | - |
92 | 69 |
|
93 | | -# Make sure rpath are preserved during the install as ROS dependencies |
94 | | -# are not installed. |
95 | | -set_target_properties(ros_bridge PROPERTIES BUILD_WITH_INSTALL_RPATH True |
96 | | - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) |
97 | | - |
98 | | -macro(compile_plugin NAME) |
99 | | - message(lib path ${LIBRARY_OUTPUT_PATH}) |
100 | | - file(MAKE_DIRECTORY "${LIBRARY_OUTPUT_PATH}/dynamic_graph/ros/${NAME}") |
101 | | - add_library(${NAME} SHARED src/${NAME}.cpp src/${NAME}.hh) |
102 | | - pkg_config_use_dependency(${NAME} dynamic-graph) |
103 | | - pkg_config_use_dependency(${NAME} sot-core) |
104 | | - pkg_config_use_dependency(${NAME} dynamic_graph_bridge_msgs) |
105 | | - add_dependencies(${NAME} ros_bridge) |
106 | | - target_link_libraries(${NAME} ros_bridge) |
107 | | - set_target_properties(${NAME} PROPERTIES BUILD_WITH_INSTALL_RPATH True) |
108 | | - set_target_properties(${NAME} PROPERTIES PREFIX "") |
109 | | - install(TARGETS ${NAME} DESTINATION lib/plugin) |
110 | | -endmacro() |
111 | | - |
112 | | -# Build Sot Entities |
113 | | -set(listplugins ros_publish ros_subscribe ros_queued_subscribe ros_tf_listener ros_time) |
114 | | - |
115 | | -foreach(aplugin ${listplugins}) |
116 | | - compile_plugin(${aplugin}) |
117 | | -endforeach() |
118 | | - |
119 | | -target_link_libraries(ros_publish ros_bridge) |
| 70 | +SET(${PROJECT_NAME}_SOURCES |
| 71 | + src/ros_init.cpp |
| 72 | + src/sot_to_ros.cpp |
| 73 | + ) |
120 | 74 |
|
121 | | -IF(BUILD_PYTHON_INTERFACE) |
122 | | - foreach(NAME ${listplugins}) |
123 | | - dynamic_graph_python_module("ros/${NAME}" |
124 | | - ${NAME} |
125 | | - ros/${NAME}/wrap |
126 | | - ) |
127 | | - |
128 | | - PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap realtime_tools) |
129 | | - PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap dynamic_graph) |
130 | | - PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap sot-core) |
131 | | - PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap dynamic_graph_bridge_msgs) |
132 | | - PKG_CONFIG_USE_DEPENDENCY(ros/${NAME}/wrap tf2_ros) |
133 | | - endforeach() |
134 | | - |
135 | | - # ros_interperter library. |
136 | | - |
137 | | - add_library(ros_interpreter src/ros_interpreter.cpp) |
138 | | - pkg_config_use_dependency(ros_interpreter dynamic-graph) |
139 | | - pkg_config_use_dependency(ros_interpreter sot-core) |
140 | | - pkg_config_use_dependency(ros_interpreter roscpp) |
141 | | - pkg_config_use_dependency(ros_interpreter dynamic_graph_bridge_msgs) |
142 | | - pkg_config_use_dependency(ros_interpreter dynamic-graph-python) |
143 | | - |
144 | | - add_dependencies(ros_interpreter ros_bridge) |
145 | | - target_link_libraries(ros_interpreter ros_bridge) |
146 | | - set_target_properties(ros_interpreter PROPERTIES BUILD_WITH_INSTALL_RPATH True |
147 | | - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) |
148 | | - message(cmakeinstalllibdir " is ${CMAKE_INSTALL_LIBDIR} ") |
149 | | - install(TARGETS ros_interpreter |
150 | | - EXPORT ${TARGETS_EXPORT_NAME} |
151 | | - DESTINATION lib) |
| 75 | +ADD_LIBRARY(ros_bridge SHARED |
| 76 | + ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS}) |
| 77 | +TARGET_INCLUDE_DIRECTORIES(ros_bridge SYSTEM PUBLIC ${catkin_INCLUDE_DIRS}) |
| 78 | +TARGET_INCLUDE_DIRECTORIES(ros_bridge PUBLIC $<INSTALL_INTERFACE:include>) |
| 79 | +TARGET_LINK_LIBRARIES(ros_bridge ${catkin_LIBRARIES} sot-core::sot-core) |
| 80 | +pkg_config_use_dependency(ros_bridge dynamic_graph_bridge_msgs) |
152 | 81 |
|
153 | | -ENDIF(BUILD_PYTHON_INTERFACE) |
| 82 | +IF(SUFFIX_SO_VERSION) |
| 83 | + SET_TARGET_PROPERTIES(ros_bridge PROPERTIES SOVERSION ${PROJECT_VERSION}) |
| 84 | +ENDIF(SUFFIX_SO_VERSION) |
154 | 85 |
|
155 | | -# Stand alone embedded intepreter with a robot controller. |
156 | | -add_executable(geometric_simu src/geometric_simu.cpp src/sot_loader.cpp src/sot_loader_basic.cpp) |
157 | | -pkg_config_use_dependency(geometric_simu tf2_ros) |
158 | | -pkg_config_use_dependency(geometric_simu roscpp) |
159 | | -pkg_config_use_dependency(geometric_simu dynamic-graph) |
160 | | -target_link_libraries(geometric_simu ros_bridge tf2_ros ${Boost_LIBRARIES} ${CMAKE_DL_LIBS}) |
161 | | - |
162 | | -# Sot loader library |
163 | | -add_library(sot_loader src/sot_loader.cpp src/sot_loader_basic.cpp) |
164 | | -pkg_config_use_dependency(sot_loader dynamic-graph) |
165 | | -pkg_config_use_dependency(sot_loader sot-core) |
166 | | -target_link_libraries(sot_loader ${Boost_LIBRARIES} roscpp ros_bridge tf2_ros) |
167 | | -install(TARGETS sot_loader |
168 | | - EXPORT ${TARGETS_EXPORT_NAME} |
169 | | - DESTINATION lib) |
| 86 | +IF(NOT INSTALL_PYTHON_INTERFACE_ONLY) |
| 87 | + INSTALL(TARGETS ros_bridge EXPORT ${TARGETS_EXPORT_NAME} DESTINATION lib) |
| 88 | +ENDIF(NOT INSTALL_PYTHON_INTERFACE_ONLY) |
170 | 89 |
|
171 | 90 | add_subdirectory(src) |
172 | 91 | add_subdirectory(tests) |
173 | 92 |
|
174 | | -# This is necessary so that the pc file generated by catking is similar to the on |
175 | | -# done directly by jrl-cmake-modules |
176 | | -catkin_package(INCLUDE_DIRS include CATKIN_DEPENDS message_runtime roscpp realtime_tools ${SOT_PKGNAMES} tf2_ros |
177 | | - LIBRARIES ${CATKIN_DEPENDS_LIBRARIES} |
178 | | -) |
179 | | - |
180 | | -# Add libraries in pc file generated by cmake submodule |
181 | | -PKG_CONFIG_APPEND_LIBS(ros_bridge sot_loader) |
182 | | - |
183 | | -IF(BUILD_PYTHON_INTERFACE) |
184 | | - PKG_CONFIG_APPEND_LIBS(ros_interpreter) |
185 | | - |
186 | | - #install ros executables |
187 | | - install(PROGRAMS |
188 | | - ${CMAKE_SOURCE_DIR}/scripts/robot_pose_publisher |
189 | | - ${CMAKE_SOURCE_DIR}/scripts/run_command |
190 | | - ${CMAKE_SOURCE_DIR}/scripts/tf_publisher |
191 | | - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} |
192 | | - ) |
193 | | - |
194 | | -ENDIF(BUILD_PYTHON_INTERFACE) |
195 | | - |
196 | | -message(cmake_install_bindir " is ${CMAKE_INSTALL_BINDIR} ") |
197 | | - |
198 | | -# Install the geometrical simulation node |
199 | | -install(TARGETS geometric_simu |
200 | | - EXPORT ${TARGETS_EXPORT_NAME} |
201 | | - DESTINATION |
202 | | - ${CATKIN_PACKAGE_SHARE_DESTINATION}) |
| 93 | +#install ros executables |
| 94 | +install(PROGRAMS |
| 95 | + scripts/robot_pose_publisher |
| 96 | + scripts/run_command |
| 97 | + scripts/tf_publisher |
| 98 | + DESTINATION share/${PROJECT_NAME} |
| 99 | + ) |
203 | 100 |
|
204 | 101 | # Install package information |
205 | | -install(FILES manifest.xml |
206 | | - DESTINATION |
207 | | - ${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/) |
| 102 | +install(FILES manifest.xml package.xml DESTINATION share/${PROJECT_NAME}) |
| 103 | +PKG_CONFIG_APPEND_LIBS(ros_bridge sot_loader) |
0 commit comments