diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 64360c7..347f351 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,11 +16,12 @@ jobs: include: - ros: humble ubuntu: jammy - # TODO(Zeerek): Enable once socketcan adapter supports them - # - ros: jazzy - # ubuntu: noble - # - ros: rolling - # ubuntu: noble + - ros: jazzy + ubuntu: noble + - ros: kilted + ubuntu: noble + - ros: rolling + ubuntu: noble name: ROS 2 ${{ matrix.ros }} container: image: ghcr.io/ros-tooling/setup-ros-docker/setup-ros-docker-ubuntu-${{ matrix.ubuntu }}:latest diff --git a/mvec/mvec_lib/CMakeLists.txt b/mvec/mvec_lib/CMakeLists.txt index fd2abb3..96fcdff 100644 --- a/mvec/mvec_lib/CMakeLists.txt +++ b/mvec/mvec_lib/CMakeLists.txt @@ -25,11 +25,8 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_link_options("-Wl,--no-undefined") endif() -find_package(ament_cmake REQUIRED) -find_package(socketcan_adapter REQUIRED) - -# socketcan adapter's improperly configured dependencies -# TODO (Zeerek): Remove when socketcan adapter's dependencies are cleaned up +find_package(ament_cmake_auto REQUIRED) +ament_auto_find_build_dependencies() add_library( ${PROJECT_NAME} SHARED @@ -79,8 +76,8 @@ ament_export_dependencies( ) if(BUILD_TESTING) - find_package(Catch2 2 REQUIRED) - include(Catch) + ament_auto_find_test_dependencies() + find_package(Catch2 REQUIRED) add_executable(relay_tests test/mvec_relay.cpp @@ -88,7 +85,15 @@ if(BUILD_TESTING) target_link_libraries(relay_tests PRIVATE ${PROJECT_NAME} Catch2::Catch2WithMain ) - catch_discover_tests(relay_tests) + ament_add_test( + relay_tests + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "$" + -r junit -s + -o test_results/${PROJECT_NAME}/relay_tests_output.xml + ENV CATCH_CONFIG_CONSOLE_WIDTH=120 + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) add_executable(status_messages_tests test/status_messages.cpp @@ -96,7 +101,15 @@ if(BUILD_TESTING) target_link_libraries(status_messages_tests PRIVATE ${PROJECT_NAME} Catch2::Catch2WithMain ) - catch_discover_tests(status_messages_tests) + ament_add_test( + status_messages_tests + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "$" + -r junit -s + -o test_results/${PROJECT_NAME}/status_messages_tests_output.xml + ENV CATCH_CONFIG_CONSOLE_WIDTH=120 + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) add_executable(status_enums_tests test/status_enums.cpp @@ -104,7 +117,15 @@ if(BUILD_TESTING) target_link_libraries(status_enums_tests PRIVATE ${PROJECT_NAME} Catch2::Catch2WithMain ) - catch_discover_tests(status_enums_tests) + ament_add_test( + status_enums_tests + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "$" + -r junit -s + -o test_results/${PROJECT_NAME}/status_enums_tests_output.xml + ENV CATCH_CONFIG_CONSOLE_WIDTH=120 + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) # Only build hardware tests if CAN_AVAILABLE is set in the environment if(DEFINED ENV{CAN_AVAILABLE}) @@ -114,7 +135,15 @@ if(BUILD_TESTING) target_link_libraries(socketcan_hardware_tests PRIVATE ${PROJECT_NAME} Catch2::Catch2WithMain ) - catch_discover_tests(socketcan_hardware_tests) + ament_add_test( + socketcan_hardware_tests + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "$" + -r junit -s + -o test_results/${PROJECT_NAME}/socketcan_hardware_tests_output.xml + ENV CATCH_CONFIG_CONSOLE_WIDTH=120 + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) message(STATUS "CAN_AVAILABLE set - including hardware tests") else() message(STATUS "CAN_AVAILABLE not set - skipping hardware tests (set CAN_AVAILABLE=1 to enable)") diff --git a/mvec/mvec_lib/package.xml b/mvec/mvec_lib/package.xml index 926029a..02465fd 100644 --- a/mvec/mvec_lib/package.xml +++ b/mvec/mvec_lib/package.xml @@ -8,9 +8,12 @@ Apache-2.0 Zeerek Ahmad + ament_cmake + ament_cmake_auto socketcan_adapter ament_cmake_test + catch2 ament_cmake diff --git a/mvec/mvec_lib/test/mvec_relay.cpp b/mvec/mvec_lib/test/mvec_relay.cpp index 83cd217..0cefada 100644 --- a/mvec/mvec_lib/test/mvec_relay.cpp +++ b/mvec/mvec_lib/test/mvec_relay.cpp @@ -17,7 +17,13 @@ #include #include -#include +#if __has_include() + #include +#elif __has_include() + #include +#else + #error "Catch2 headers not found. Please install Catch2 (v2 or v3)." +#endif #include "mvec_lib/core/mvec_constants.hpp" #include "socketcan_adapter/can_frame.hpp" diff --git a/mvec/mvec_lib/test/mvec_socketcan_hardware.cpp b/mvec/mvec_lib/test/mvec_socketcan_hardware.cpp index 6468a3c..f63e208 100644 --- a/mvec/mvec_lib/test/mvec_socketcan_hardware.cpp +++ b/mvec/mvec_lib/test/mvec_socketcan_hardware.cpp @@ -21,7 +21,13 @@ #include #include -#include +#if __has_include() + #include +#elif __has_include() + #include +#else + #error "Catch2 headers not found. Please install Catch2 (v2 or v3)." +#endif #include "mvec_lib/mvec_relay_socketcan.hpp" #include "socketcan_adapter/socketcan_adapter.hpp" diff --git a/mvec/mvec_lib/test/status_enums.cpp b/mvec/mvec_lib/test/status_enums.cpp index b257711..275d879 100644 --- a/mvec/mvec_lib/test/status_enums.cpp +++ b/mvec/mvec_lib/test/status_enums.cpp @@ -14,7 +14,13 @@ #include -#include +#if __has_include() + #include +#elif __has_include() + #include +#else + #error "Catch2 headers not found. Please install Catch2 (v2 or v3)." +#endif #include "mvec_lib/core/mvec_constants.hpp" #include "mvec_lib/status_messages/mvec_error_status_message.hpp" diff --git a/mvec/mvec_lib/test/status_messages.cpp b/mvec/mvec_lib/test/status_messages.cpp index c832851..d567cad 100644 --- a/mvec/mvec_lib/test/status_messages.cpp +++ b/mvec/mvec_lib/test/status_messages.cpp @@ -14,7 +14,13 @@ #include -#include +#if __has_include() + #include +#elif __has_include() + #include +#else + #error "Catch2 headers not found. Please install Catch2 (v2 or v3)." +#endif #include "mvec_lib/core/mvec_constants.hpp" #include "mvec_lib/status_messages/mvec_error_status_message.hpp" diff --git a/mvec/mvec_msgs/CMakeLists.txt b/mvec/mvec_msgs/CMakeLists.txt index 19c7b85..7bdd289 100644 --- a/mvec/mvec_msgs/CMakeLists.txt +++ b/mvec/mvec_msgs/CMakeLists.txt @@ -15,10 +15,8 @@ cmake_minimum_required(VERSION 3.8) project(mvec_msgs) -find_package(ament_cmake REQUIRED) -find_package(rosidl_default_generators REQUIRED) -find_package(builtin_interfaces REQUIRED) -find_package(std_msgs REQUIRED) +find_package(ament_cmake_auto REQUIRED) +ament_auto_find_build_dependencies() set(msg_files "msg/Relay.msg" diff --git a/mvec/mvec_msgs/package.xml b/mvec/mvec_msgs/package.xml index 4cde3b6..f2bf53a 100644 --- a/mvec/mvec_msgs/package.xml +++ b/mvec/mvec_msgs/package.xml @@ -8,8 +8,11 @@ Apache-2.0 ament_cmake + ament_cmake_auto rosidl_default_generators + builtin_interfaces + std_msgs rosidl_interface_packages diff --git a/mvec/mvec_ros2/src/mvec_node.cpp b/mvec/mvec_ros2/src/mvec_node.cpp index 22c4d97..8637bb7 100644 --- a/mvec/mvec_ros2/src/mvec_node.cpp +++ b/mvec/mvec_ros2/src/mvec_node.cpp @@ -23,7 +23,13 @@ #include #include -#include +#if __has_include() + #include +#elif __has_include() + #include +#else + #error "magic_enum headers not found. Please install magic_enum." +#endif #include "mvec_lib/core/mvec_constants.hpp" diff --git a/sygnal_can_interface/sygnal_can_interface_lib/CMakeLists.txt b/sygnal_can_interface/sygnal_can_interface_lib/CMakeLists.txt index 34c114a..5d3fad8 100644 --- a/sygnal_can_interface/sygnal_can_interface_lib/CMakeLists.txt +++ b/sygnal_can_interface/sygnal_can_interface_lib/CMakeLists.txt @@ -24,9 +24,8 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_link_options("-Wl,--no-undefined") endif() -find_package(ament_cmake REQUIRED) -find_package(socketcan_adapter REQUIRED) -find_package(sygnal_dbc REQUIRED) +find_package(ament_cmake_auto REQUIRED) +ament_auto_find_build_dependencies() add_library( ${PROJECT_NAME} SHARED @@ -42,11 +41,11 @@ target_include_directories(${PROJECT_NAME} PUBLIC ) target_link_libraries(${PROJECT_NAME} - PUBLIC socketcan_adapter::socketcan_adapter + PUBLIC + socketcan_adapter::socketcan_adapter + sygnal_dbc::sygnal_dbc ) -ament_target_dependencies(${PROJECT_NAME} PUBLIC sygnal_dbc) - install( DIRECTORY include/ DESTINATION include @@ -74,8 +73,8 @@ ament_export_dependencies( ) if(BUILD_TESTING) - find_package(Catch2 2 REQUIRED) - include(Catch) + ament_auto_find_test_dependencies() + find_package(Catch2 REQUIRED) add_executable(sygnal_mcm_interface_tests test/sygnal_mcm_interface_test.cpp @@ -83,7 +82,15 @@ if(BUILD_TESTING) target_link_libraries(sygnal_mcm_interface_tests PRIVATE ${PROJECT_NAME} Catch2::Catch2WithMain ) - catch_discover_tests(sygnal_mcm_interface_tests) + ament_add_test( + sygnal_mcm_interface_tests + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "$" + -r junit -s + -o test_results/${PROJECT_NAME}/sygnal_mcm_interface_tests_output.xml + ENV CATCH_CONFIG_CONSOLE_WIDTH=120 + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) add_executable(sygnal_command_interface_tests test/sygnal_command_interface_test.cpp @@ -91,7 +98,15 @@ if(BUILD_TESTING) target_link_libraries(sygnal_command_interface_tests PRIVATE ${PROJECT_NAME} Catch2::Catch2WithMain ) - catch_discover_tests(sygnal_command_interface_tests) + ament_add_test( + sygnal_command_interface_tests + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "$" + -r junit -s + -o test_results/${PROJECT_NAME}/sygnal_command_interface_tests_output.xml + ENV CATCH_CONFIG_CONSOLE_WIDTH=120 + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) if(DEFINED ENV{CAN_AVAILABLE}) add_executable(sygnal_interface_socketcan_tests @@ -100,7 +115,15 @@ if(BUILD_TESTING) target_link_libraries(sygnal_interface_socketcan_tests PRIVATE ${PROJECT_NAME} Catch2::Catch2WithMain ) - catch_discover_tests(sygnal_interface_socketcan_tests) + ament_add_test( + sygnal_interface_socketcan_tests + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "$" + -r junit -s + -o test_results/${PROJECT_NAME}/sygnal_interface_socketcan_tests_output.xml + ENV CATCH_CONFIG_CONSOLE_WIDTH=120 + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) message(STATUS "CAN_AVAILABLE set - including hardware tests") endif() endif() diff --git a/sygnal_can_interface/sygnal_can_interface_lib/package.xml b/sygnal_can_interface/sygnal_can_interface_lib/package.xml index 14c9b72..8116708 100644 --- a/sygnal_can_interface/sygnal_can_interface_lib/package.xml +++ b/sygnal_can_interface/sygnal_can_interface_lib/package.xml @@ -9,9 +9,12 @@ Zeerek Ahmad ament_cmake + ament_cmake_auto socketcan_adapter sygnal_dbc + catch2 + ament_cmake diff --git a/sygnal_can_interface/sygnal_can_interface_lib/src/sygnal_interface_socketcan.cpp b/sygnal_can_interface/sygnal_can_interface_lib/src/sygnal_interface_socketcan.cpp index 558cd81..2a5ec25 100644 --- a/sygnal_can_interface/sygnal_can_interface_lib/src/sygnal_interface_socketcan.cpp +++ b/sygnal_can_interface/sygnal_can_interface_lib/src/sygnal_interface_socketcan.cpp @@ -131,8 +131,6 @@ SendCommandResult SygnalInterfaceSocketcan::sendControlStateCommand( return {false, std::nullopt}; } - auto data = frame_opt->get_data(); - std::optional> future_opt; if (expect_reply) { std::promise promise; diff --git a/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_command_interface_test.cpp b/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_command_interface_test.cpp index a6ebbb8..2b5fb0c 100644 --- a/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_command_interface_test.cpp +++ b/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_command_interface_test.cpp @@ -17,7 +17,13 @@ #include #include -#include +#if __has_include() + #include +#elif __has_include() + #include +#else + #error "Catch2 headers not found. Please install Catch2 (v2 or v3)." +#endif #include "socketcan_adapter/can_frame.hpp" diff --git a/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_interface_socketcan_test.cpp b/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_interface_socketcan_test.cpp index ab277e2..b1bea82 100644 --- a/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_interface_socketcan_test.cpp +++ b/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_interface_socketcan_test.cpp @@ -19,8 +19,12 @@ #if __has_include() #include -#else + #include +using Catch::Approx; +#elif __has_include() #include +#else + #error "Catch2 headers not found. Please install Catch2 (v2 or v3)." #endif #include diff --git a/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_mcm_interface_test.cpp b/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_mcm_interface_test.cpp index db71ca6..7e49d18 100644 --- a/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_mcm_interface_test.cpp +++ b/sygnal_can_interface/sygnal_can_interface_lib/test/sygnal_mcm_interface_test.cpp @@ -17,7 +17,13 @@ #include #include -#include +#if __has_include() + #include +#elif __has_include() + #include +#else + #error "Catch2 headers not found. Please install Catch2 (v2 or v3)." +#endif #include "socketcan_adapter/can_frame.hpp" diff --git a/sygnal_can_interface/sygnal_can_interface_ros2/src/sygnal_can_interface_node.cpp b/sygnal_can_interface/sygnal_can_interface_ros2/src/sygnal_can_interface_node.cpp index c442202..79f3cc8 100644 --- a/sygnal_can_interface/sygnal_can_interface_ros2/src/sygnal_can_interface_node.cpp +++ b/sygnal_can_interface/sygnal_can_interface_ros2/src/sygnal_can_interface_node.cpp @@ -22,7 +22,13 @@ #include #include -#include +#if __has_include() + #include +#elif __has_include() + #include +#else + #error "magic_enum headers not found. Please install magic_enum." +#endif #include "sygnal_can_interface_lib/sygnal_command_interface.hpp" #include "sygnal_can_interface_lib/sygnal_mcm_interface.hpp" diff --git a/sygnal_can_interface/sygnal_can_msgs/CMakeLists.txt b/sygnal_can_interface/sygnal_can_msgs/CMakeLists.txt index bd7e46a..839d6c0 100644 --- a/sygnal_can_interface/sygnal_can_msgs/CMakeLists.txt +++ b/sygnal_can_interface/sygnal_can_msgs/CMakeLists.txt @@ -15,10 +15,8 @@ cmake_minimum_required(VERSION 3.8) project(sygnal_can_msgs) -find_package(ament_cmake REQUIRED) -find_package(rosidl_default_generators REQUIRED) -find_package(builtin_interfaces REQUIRED) -find_package(std_msgs REQUIRED) +find_package(ament_cmake_auto REQUIRED) +ament_auto_find_build_dependencies() set(msg_files "msg/McmHeartbeat.msg" diff --git a/sygnal_can_interface/sygnal_can_msgs/package.xml b/sygnal_can_interface/sygnal_can_msgs/package.xml index 201f4a7..239c3bc 100644 --- a/sygnal_can_interface/sygnal_can_msgs/package.xml +++ b/sygnal_can_interface/sygnal_can_msgs/package.xml @@ -8,8 +8,11 @@ Apache-2.0 ament_cmake + ament_cmake_auto rosidl_default_generators + builtin_interfaces + std_msgs rosidl_interface_packages diff --git a/sygnal_dbc/CMakeLists.txt b/sygnal_dbc/CMakeLists.txt index 8235f66..d18f137 100644 --- a/sygnal_dbc/CMakeLists.txt +++ b/sygnal_dbc/CMakeLists.txt @@ -15,7 +15,8 @@ cmake_minimum_required(VERSION 3.5) project(sygnal_dbc VERSION 0.1.0 LANGUAGES C CXX) -find_package(ament_cmake REQUIRED) +find_package(ament_cmake_auto REQUIRED) +ament_auto_find_build_dependencies() find_package(Python3 COMPONENTS Interpreter REQUIRED) include(GNUInstallDirs) @@ -95,9 +96,8 @@ ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) ament_package(CONFIG_EXTRAS "cmake/${PROJECT_NAME}-extras.cmake") if(BUILD_TESTING) - find_package(ament_cmake_pytest REQUIRED) + ament_auto_find_test_dependencies() find_package(Catch2 REQUIRED) - include(Catch) ament_add_pytest_test(test_mcm_heartbeat_python test/test_mcm_heartbeat.py @@ -106,6 +106,14 @@ if(BUILD_TESTING) add_executable(test_mcm_heartbeat_cpp test/test_mcm_heartbeat.cpp) target_link_libraries(test_mcm_heartbeat_cpp PRIVATE Catch2::Catch2WithMain ${PROJECT_NAME}) - catch_discover_tests(test_mcm_heartbeat_cpp) + ament_add_test( + test_mcm_heartbeat_cpp + GENERATE_RESULT_FOR_RETURN_CODE_ZERO + COMMAND "$" + -r junit -s + -o test_results/${PROJECT_NAME}/test_mcm_heartbeat_cpp_output.xml + ENV CATCH_CONFIG_CONSOLE_WIDTH=120 + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + ) endif() diff --git a/sygnal_dbc/package.xml b/sygnal_dbc/package.xml index 0838ff4..8829888 100644 --- a/sygnal_dbc/package.xml +++ b/sygnal_dbc/package.xml @@ -8,6 +8,7 @@ Zeerek Ahmad ament_cmake + ament_cmake_auto python3-cantools-pip ament_cmake_pytest diff --git a/sygnal_fault_clear/CMakeLists.txt b/sygnal_fault_clear/CMakeLists.txt index 9ed9bd2..0d6c1a4 100644 --- a/sygnal_fault_clear/CMakeLists.txt +++ b/sygnal_fault_clear/CMakeLists.txt @@ -20,27 +20,8 @@ endif() set(CMAKE_CXX_STANDARD 17) -# find dependencies -find_package(ament_cmake REQUIRED) -find_package(rclcpp REQUIRED) -find_package(rclcpp_action REQUIRED) -find_package(rclcpp_lifecycle REQUIRED) -find_package(rclcpp_components REQUIRED) -find_package(std_msgs REQUIRED) -find_package(std_srvs REQUIRED) - -include_directories( - include -) - -set(dependencies - rclcpp - rclcpp_action - rclcpp_lifecycle - rclcpp_components - std_msgs - std_srvs -) +find_package(ament_cmake_auto REQUIRED) +ament_auto_find_build_dependencies() set(library_name ${PROJECT_NAME}_lib) add_library( @@ -48,8 +29,18 @@ add_library( src/fault_clear_node.cpp ) -ament_target_dependencies(${library_name} - ${dependencies} +target_include_directories(${library_name} PUBLIC + "$" + "$" +) + +target_link_libraries(${library_name} PUBLIC + ${std_msgs_TARGETS} + ${std_srvs_TARGETS} + rclcpp::rclcpp + rclcpp_action::rclcpp_action + rclcpp_lifecycle::rclcpp_lifecycle + rclcpp_components::component ) set(executable_name sygnal_fault_clear) diff --git a/sygnal_fault_clear/package.xml b/sygnal_fault_clear/package.xml index 42ad906..7e2f475 100644 --- a/sygnal_fault_clear/package.xml +++ b/sygnal_fault_clear/package.xml @@ -8,6 +8,7 @@ Apache 2.0 ament_cmake + ament_cmake_auto rclcpp rclcpp_action rclcpp_lifecycle