|
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