diff --git a/orbbec_camera/CMakeLists.txt b/orbbec_camera/CMakeLists.txt index bea1c898..080d028a 100644 --- a/orbbec_camera/CMakeLists.txt +++ b/orbbec_camera/CMakeLists.txt @@ -14,50 +14,83 @@ if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") endif () # find dependencies -find_package(ament_cmake REQUIRED) -find_package(ament_index_cpp REQUIRED) -find_package(Eigen3 REQUIRED) -find_package(builtin_interfaces REQUIRED) -find_package(cv_bridge REQUIRED) -find_package(camera_info_manager REQUIRED) -find_package(image_transport REQUIRED) -find_package(image_publisher REQUIRED) -find_package(OpenCV REQUIRED) -find_package(orbbec_camera_msgs REQUIRED) -find_package(rclcpp REQUIRED) -find_package(rclcpp_components REQUIRED) -find_package(sensor_msgs REQUIRED) -find_package(std_msgs REQUIRED) -find_package(std_srvs REQUIRED) -find_package(tf2 REQUIRED) -find_package(tf2_eigen REQUIRED) -find_package(tf2_msgs REQUIRED) -find_package(tf2_ros REQUIRED) -find_package(tf2_sensor_msgs REQUIRED) -find_package(Threads REQUIRED) +set(dependencies + ament_cmake + ament_index_cpp + Eigen3 + builtin_interfaces + cv_bridge + camera_info_manager + image_transport + image_publisher + OpenCV + orbbec_camera_msgs + rclcpp + rclcpp_components + sensor_msgs + std_msgs + std_srvs + tf2 + tf2_eigen + tf2_msgs + tf2_ros + tf2_sensor_msgs + Threads +) + +foreach (dep IN LISTS dependencies) + find_package(${dep} REQUIRED) +endforeach () + find_package(PkgConfig REQUIRED) pkg_search_module(GLOG REQUIRED libglog) if (NOT GLOG_FOUND) message(FATAL_ERROR "glog is not found") endif () + execute_process(COMMAND uname -m OUTPUT_VARIABLE MACHINES) execute_process(COMMAND getconf LONG_BIT OUTPUT_VARIABLE MACHINES_BIT) message(STATUS "ORRBEC Machine : ${MACHINES}") message(STATUS "ORRBEC Machine Bits : ${MACHINES_BIT}") + if ((${MACHINES} MATCHES "x86_64") AND (${MACHINES_BIT} MATCHES "64")) set(HOST_PLATFORM "x64") -elseif (${MACHINES} MATCHES "arm") +elseif (${MACHINES} MATCHES "arm" OR (${MACHINES} MATCHES "aarch64" AND ${MACHINES_BIT} MATCHES "32")) set(HOST_PLATFORM "arm32") elseif ((${MACHINES} MATCHES "aarch64") AND (${MACHINES_BIT} MATCHES "64")) set(HOST_PLATFORM "arm64") -elseif ((${MACHINES} MATCHES "aarch64") AND (${MACHINES_BIT} MATCHES "32")) - set(HOST_PLATFORM "arm32") endif () set(ORBBEC_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/SDK/lib/${HOST_PLATFORM}) set(ORBBEC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/SDK/include/) +set(common_include_dirs + $ + $ + $ + ${ORBBEC_INCLUDE_DIR} + ${OpenCV_INCLUDED_DIRS} + ${GLOG_INCLUDED_DIRS} +) + +set(common_libraries + ${ORBBEC_SDK_LIBRARIES} + ${OpenCV_LIBS} + Eigen3::Eigen + ${GLOG_LIBRARIES} + -lOrbbecSDK + -L${ORBBEC_LIBS} +) + +macro(add_orbbec_executable target source) + add_executable(${target} ${source}) + target_include_directories(${target} PUBLIC ${common_include_dirs}) + target_link_libraries(${target} ${common_libraries} ${PROJECT_NAME}) + ament_target_dependencies(${target} ${dependencies}) +endmacro() + +# Define library and nodes add_library(${PROJECT_NAME} SHARED src/d2c_viewer.cpp src/dynamic_params.cpp @@ -69,203 +102,39 @@ add_library(${PROJECT_NAME} SHARED src/utils.cpp ) -set(dependencies - ament_index_cpp - builtin_interfaces - cv_bridge - camera_info_manager - rclcpp_components - Eigen3 - image_transport - image_publisher - orbbec_camera_msgs - rclcpp - rclcpp_components - sensor_msgs - std_msgs - std_srvs - tf2 - tf2_msgs - tf2_ros - tf2_sensor_msgs -) - -ament_target_dependencies(${PROJECT_NAME} - ${dependencies} -) - -target_include_directories(${PROJECT_NAME} PUBLIC - $ - $ - $ - ${ORBBEC_INCLUDE_DIR} - ${OpenCV_INCLUDED_DIRS} - ${GLOG_INCLUDED_DIRS} -) - - -target_link_libraries(${PROJECT_NAME} - ${ORBBEC_SDK_LIBRARIES} - ${OpenCV_LIBS} - Eigen3::Eigen - ${GLOG_LIBRARIES} - -lOrbbecSDK - -L${ORBBEC_LIBS} -) +ament_target_dependencies(${PROJECT_NAME} ${dependencies}) +target_include_directories(${PROJECT_NAME} PUBLIC ${common_include_dirs}) +target_link_libraries(${PROJECT_NAME} ${common_libraries}) rclcpp_components_register_node(${PROJECT_NAME} PLUGIN "orbbec_camera::OBCameraNodeDriver" EXECUTABLE orbbec_camera_node ) -add_executable(list_devices_node - src/list_devices_node.cpp -) +# Add nodes using the macro +add_orbbec_executable(list_devices_node src/list_devices_node.cpp) +add_orbbec_executable(ob_cleanup_shm_node src/ob_cleanup_shm.cpp) +add_orbbec_executable(list_depth_work_mode_node src/list_depth_work_mode.cpp) +add_orbbec_executable(list_camera_profile_mode_node src/list_camera_profile.cpp) -target_include_directories(list_devices_node PUBLIC - $ - $ - $ - ${ORBBEC_INCLUDE_DIR} - ${OpenCV_INCLUDED_DIRS} - ${GLOG_INCLUDED_DIRS} -) - - -target_link_libraries(list_devices_node - ${ORBBEC_SDK_LIBRARIES} - ${OpenCV_LIBS} - Eigen3::Eigen - ${GLOG_LIBRARIES} - -lOrbbecSDK - -L${ORBBEC_LIBS} - ${PROJECT_NAME} -) - -ament_target_dependencies(list_devices_node - ${dependencies} -) - -add_executable(ob_cleanup_shm_node - src/ob_cleanup_shm.cpp -) - -target_include_directories(ob_cleanup_shm_node PUBLIC - $ - $ - $ - ${ORBBEC_INCLUDE_DIR} - ${OpenCV_INCLUDED_DIRS} - ${GLOG_INCLUDED_DIRS} -) - - -target_link_libraries(ob_cleanup_shm_node - ${ORBBEC_SDK_LIBRARIES} - ${OpenCV_LIBS} - Eigen3::Eigen - ${GLOG_LIBRARIES} - -lOrbbecSDK - -L${ORBBEC_LIBS} - ${PROJECT_NAME} -) - -ament_target_dependencies(ob_cleanup_shm_node - ${dependencies} -) - -add_executable(list_depth_work_mode_node - src/list_depth_work_mode.cpp -) - -target_include_directories(list_depth_work_mode_node PUBLIC - $ - $ - $ - ${ORBBEC_INCLUDE_DIR} - ${OpenCV_INCLUDED_DIRS} - ${GLOG_INCLUDED_DIRS} -) - -target_link_libraries(list_depth_work_mode_node - ${ORBBEC_SDK_LIBRARIES} - ${OpenCV_LIBS} - Eigen3::Eigen - ${GLOG_LIBRARIES} - -lOrbbecSDK - -L${ORBBEC_LIBS} - ${PROJECT_NAME} -) - -ament_target_dependencies(list_depth_work_mode_node - ${dependencies} -) - -add_executable(list_camera_profile_mode_node - src/list_camera_profile.cpp -) - -target_include_directories(list_camera_profile_mode_node PUBLIC - $ - $ - $ - ${ORBBEC_INCLUDE_DIR} - ${OpenCV_INCLUDED_DIRS} - ${GLOG_INCLUDED_DIRS} -) - -target_link_libraries(list_camera_profile_mode_node - ${ORBBEC_SDK_LIBRARIES} - ${OpenCV_LIBS} - Eigen3::Eigen - ${GLOG_LIBRARIES} - -lOrbbecSDK - -L${ORBBEC_LIBS} - ${PROJECT_NAME} -) - -ament_target_dependencies(list_depth_work_mode_node - ${dependencies} -) +# Install rules install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) -install( - DIRECTORY include/ - DESTINATION include -) - -install(DIRECTORY - launch - DESTINATION share/${PROJECT_NAME}/ -) - -install(DIRECTORY - config - DESTINATION share/${PROJECT_NAME}/ -) - -install(DIRECTORY - ${ORBBEC_INCLUDE_DIR} - DESTINATION include -) - -install(DIRECTORY - ${ORBBEC_LIBS}/ - DESTINATION lib/ - FILES_MATCHING PATTERN "*.so" - PATTERN "*.so.*" -) - +install(DIRECTORY include/ DESTINATION include) +install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}/) +install(DIRECTORY config DESTINATION share/${PROJECT_NAME}/) +install(DIRECTORY ${ORBBEC_INCLUDE_DIR} DESTINATION include) +install(DIRECTORY ${ORBBEC_LIBS}/ DESTINATION lib/ FILES_MATCHING PATTERN "*.so*") install(TARGETS list_devices_node ob_cleanup_shm_node list_depth_work_mode_node list_camera_profile_mode_node - DESTINATION lib/${PROJECT_NAME}/ -) + DESTINATION lib/${PROJECT_NAME}/) + if (BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies()