diff --git a/CMakeLists.txt b/CMakeLists.txt index 9695a73e..4743d984 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,25 +1,41 @@ -cmake_minimum_required(VERSION 3.5) -project(realtime_tools) +cmake_minimum_required(VERSION 3.16) +project(realtime_tools LANGUAGES CXX) -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 14) +if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") + add_compile_options(-Wall -Wextra) endif() -# Load catkin and all dependencies required for this package -find_package(ament_cmake REQUIRED) -find_package(rclcpp REQUIRED) -find_package(rclcpp_action REQUIRED) -find_package(Threads REQUIRED) +set(THIS_PACKAGE_INCLUDE_DEPENDS + rclcpp + rclcpp_action + Threads +) -add_library(${PROJECT_NAME} src/realtime_clock.cpp) -ament_target_dependencies(${PROJECT_NAME} "rclcpp" "rclcpp_action") -target_link_libraries(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT}) -target_include_directories(${PROJECT_NAME} PUBLIC include) +find_package(ament_cmake REQUIRED) +foreach(Dependency IN ITEMS ${THIS_PACKAGE_INCLUDE_DEPENDS}) + find_package(${Dependency} REQUIRED) +endforeach() + +add_library(realtime_tools SHARED + src/realtime_clock.cpp +) +target_compile_features(realtime_tools PUBLIC cxx_std_17) +target_include_directories(realtime_tools PUBLIC + $ + $ +) +ament_target_dependencies(realtime_tools PUBLIC ${THIS_PACKAGE_INCLUDE_DEPENDS}) # A library to detect a realtime kernel and set thread priority, if one is found -add_library(thread_priority SHARED src/thread_priority.cpp) -target_include_directories(thread_priority PUBLIC include) -ament_target_dependencies(thread_priority "rclcpp" "rclcpp_action") +add_library(thread_priority SHARED + src/thread_priority.cpp +) +target_compile_features(thread_priority PUBLIC cxx_std_17) +target_include_directories(thread_priority PUBLIC + $ + $ +) +ament_target_dependencies(thread_priority PUBLIC ${THIS_PACKAGE_INCLUDE_DEPENDS}) # Unit Tests if(BUILD_TESTING) @@ -27,42 +43,45 @@ if(BUILD_TESTING) find_package(test_msgs REQUIRED) ament_add_gmock(realtime_box_tests test/realtime_box_tests.cpp) - target_link_libraries(realtime_box_tests ${PROJECT_NAME} ${GMOCK_MAIN_LIBRARIES}) + target_link_libraries(realtime_box_tests realtime_tools) ament_add_gmock(realtime_buffer_tests test/realtime_buffer_tests.cpp) - target_link_libraries(realtime_buffer_tests ${PROJECT_NAME} ${GMOCK_MAIN_LIBRARIES}) + target_link_libraries(realtime_buffer_tests realtime_tools) ament_add_gmock(realtime_clock_tests test/realtime_clock_tests.cpp) - target_link_libraries(realtime_clock_tests ${PROJECT_NAME} ${GMOCK_MAIN_LIBRARIES}) + target_link_libraries(realtime_clock_tests realtime_tools) ament_add_gmock(realtime_publisher_tests_non_polling - test/realtime_publisher_non_polling.test test/realtime_publisher_tests_non_polling.cpp) - target_link_libraries(realtime_publisher_tests_non_polling ${PROJECT_NAME} ${test_msgs_LIBRARIES} ${GMOCK_MAIN_LIBRARIES}) - target_include_directories(realtime_publisher_tests_non_polling PRIVATE ${test_msgs_INCLUDE_DIRS}) - - ament_add_gmock(realtime_publisher_tests test/realtime_publisher.test test/realtime_publisher_tests.cpp) - target_link_libraries(realtime_publisher_tests ${PROJECT_NAME} ${test_msgs_LIBRARIES} ${GMOCK_MAIN_LIBRARIES}) - target_include_directories(realtime_publisher_tests PRIVATE ${test_msgs_INCLUDE_DIRS}) - - ament_add_gmock(realtime_server_goal_handle_tests test/realtime_server_goal_handle.test test/realtime_server_goal_handle_tests.cpp) - target_link_libraries(realtime_server_goal_handle_tests ${PROJECT_NAME} ${test_msgs_LIBRARIES} ${GMOCK_MAIN_LIBRARIES}) - target_include_directories(realtime_server_goal_handle_tests PRIVATE ${test_msgs_INCLUDE_DIRS}) + test/realtime_publisher_non_polling.test + test/realtime_publisher_tests_non_polling.cpp) + target_link_libraries(realtime_publisher_tests_non_polling realtime_tools) + ament_target_dependencies(realtime_publisher_tests_non_polling test_msgs) + + ament_add_gmock(realtime_publisher_tests + test/realtime_publisher.test + test/realtime_publisher_tests.cpp) + target_link_libraries(realtime_publisher_tests realtime_tools) + ament_target_dependencies(realtime_publisher_tests test_msgs) + + ament_add_gmock(realtime_server_goal_handle_tests + test/realtime_server_goal_handle.test + test/realtime_server_goal_handle_tests.cpp) + target_link_libraries(realtime_server_goal_handle_tests realtime_tools) + ament_target_dependencies(realtime_server_goal_handle_tests test_msgs) endif() # Install install( DIRECTORY include/ - DESTINATION include) - -install(TARGETS ${PROJECT_NAME} thread_priority + DESTINATION include/realtime_tools +) +install(TARGETS realtime_tools thread_priority + EXPORT export_realtime_tools ARCHIVE DESTINATION lib LIBRARY DESTINATION lib - RUNTIME DESTINATION bin) - -ament_export_include_directories(include) -ament_export_libraries(${PROJECT_NAME} thread_priority) - -ament_export_dependencies(rclcpp) -ament_export_dependencies(rclcpp_action) + RUNTIME DESTINATION bin +) +ament_export_targets(export_realtime_tools HAS_LIBRARY_TARGET) +ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS}) ament_package() diff --git a/package.xml b/package.xml index d3b4422d..11e313f8 100644 --- a/package.xml +++ b/package.xml @@ -23,7 +23,6 @@ rclcpp_action ament_cmake_gmock - rclcpp_action test_msgs