cmake_minimum_required(VERSION 3.5)

project(health_metric_collector)


# Default to C++14
if (NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif ()

if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif ()


find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(aws_common REQUIRED)
find_package(aws_ros2_common REQUIRED)
find_package(ros_monitoring_msgs REQUIRED)

add_definitions(-DUSE_IMPORT_EXPORT)

set(HEALTH_METRIC_COLLECTOR_LIBRARY_TARGET ${PROJECT_NAME}_lib)

###########
## Build ##
###########

include_directories(
        include
        ${rclcpp_INCLUDE_DIRS}
        ${aws_ros2_common_INCLUDE_DIRS}
        ${AWSSDK_INCLUDE_DIRS}
        ${aws_common_INCLUDE_DIRS}
        ${ros_monitoring_msgs_INCLUDE_DIRS}
)

add_library(${HEALTH_METRIC_COLLECTOR_LIBRARY_TARGET}
        src/cpu_data.cpp
        src/cpu_metric_collector.cpp
        src/cpu_stats.cpp
        src/metric_manager.cpp
        src/sys_info_collector.cpp
        )

ament_target_dependencies(${HEALTH_METRIC_COLLECTOR_LIBRARY_TARGET}
        rclcpp
        aws_common
        aws_ros2_common
        ros_monitoring_msgs
        rosidl_typesupport_cpp
        )

add_executable(${PROJECT_NAME} src/collector.cpp)

set(LIB_DEPS
        ${rclcpp_LIBRARIES}
        ${aws_common_LIBRARIES}
        ${aws_ros2_common_LIBRARIES}
        ${ros_monitoring_msgs_LIBRARIES}
)

target_link_libraries(${PROJECT_NAME} ${LIB_DEPS})

ament_target_dependencies(${PROJECT_NAME} ${HEALTH_METRIC_COLLECTOR_LIBRARY_TARGET})

target_link_libraries(${PROJECT_NAME} ${HEALTH_METRIC_COLLECTOR_LIBRARY_TARGET})

#############
## Install ##
#############

## Mark executables and/or libraries for installation
install(TARGETS ${PROJECT_NAME} ${HEALTH_METRIC_COLLECTOR_LIBRARY_TARGET}
        ARCHIVE DESTINATION lib
        LIBRARY DESTINATION lib
        # According to https://answers.ros.org/question/280127/ros2-ros2-run-package-executable-cannot-find-executable/
        # executables are now being installed to the library directory under project name
        RUNTIME DESTINATION lib/${PROJECT_NAME}
        )

## Mark cpp header files for installation
install(
        DIRECTORY include/
        DESTINATION include
        FILES_MATCHING PATTERN "*.h"
)

### Mark other files for installation (e.g. launch and bag files, etc.)
install(DIRECTORY launch/ DESTINATION share/${PROJECT_NAME}/launch)
install(DIRECTORY config/ DESTINATION share/${PROJECT_NAME}/config)

#############
## Tests ##
#############

if(BUILD_TESTING)
  find_package(ament_cmake_gmock REQUIRED)
  
  ament_add_gmock(test_health_metric_collector
    test/health_metric_collector_test.cpp)
  target_include_directories(test_health_metric_collector
    PRIVATE include)
  target_link_libraries(test_health_metric_collector
          ${HEALTH_METRIC_COLLECTOR_LIBRARY_TARGET}
          ${LIB_DEPS})
endif()

ament_package()
