cmake_minimum_required(VERSION 3.5) project(tracetools) # 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) elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") add_compile_options(/W4) endif() find_package(ament_cmake_ros REQUIRED) if(WIN32) set(DISABLED_DEFAULT ON) else() set(DISABLED_DEFAULT OFF) endif() option(TRACETOOLS_DISABLED "Explicitly disable support for tracing" ${DISABLED_DEFAULT}) if(NOT TRACETOOLS_DISABLED) # Set TRACETOOLS_LTTNG_ENABLED if we can find lttng-ust find_package(PkgConfig) if(PkgConfig_FOUND) pkg_check_modules(LTTNG lttng-ust) if(LTTNG_FOUND) set(TRACETOOLS_LTTNG_ENABLED TRUE) message("LTTng found: tracing enabled") endif() endif() endif() # Store configuration variables for runtime use # TRACETOOLS_DISABLED # TRACETOOLS_LTTNG_ENABLED configure_file(include/${PROJECT_NAME}/config.h.in include/${PROJECT_NAME}/config.h) # Tracetools lib set(SOURCES src/tracetools.c src/utils.cpp ) set(HEADERS include/${PROJECT_NAME}/tracetools.h include/${PROJECT_NAME}/utils.hpp include/${PROJECT_NAME}/visibility_control.hpp ) if(TRACETOOLS_LTTNG_ENABLED) # We only need these if we're using LTTng list(APPEND SOURCES src/tp_call.c ) list(APPEND HEADERS include/${PROJECT_NAME}/tp_call.h ) endif() # Copy select headers to the actual include/ directory that we will use and export foreach(_header ${HEADERS}) configure_file( ${PROJECT_SOURCE_DIR}/${_header} ${PROJECT_BINARY_DIR}/${_header} COPYONLY ) endforeach() # Only use output/binary include directory include_directories( ${PROJECT_BINARY_DIR}/include ) add_library(${PROJECT_NAME} ${SOURCES}) if(TRACETOOLS_LTTNG_ENABLED) target_link_libraries(${PROJECT_NAME} ${LTTNG_LIBRARIES}) endif() if(WIN32) # Causes the visibility macros to use dllexport rather than dllimport # which is appropriate when building the dll but not consuming it. target_compile_definitions(${PROJECT_NAME} PRIVATE "TRACETOOLS_BUILDING_DLL") endif() ament_export_interfaces(${PROJECT_NAME}_export HAS_LIBRARY_TARGET) # Status checking tool add_executable(status src/status.c ) target_link_libraries(status ${PROJECT_NAME} ) install(TARGETS status DESTINATION lib/${PROJECT_NAME} ) install( DIRECTORY ${PROJECT_BINARY_DIR}/include/ DESTINATION include ) install( TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}_export LIBRARY DESTINATION lib ARCHIVE DESTINATION lib RUNTIME DESTINATION bin INCLUDES DESTINATION include ) ament_export_include_directories(include) if(TRACETOOLS_LTTNG_ENABLED) ament_export_libraries(${PROJECT_NAME} ${LTTNG_LIBRARIES}) else() ament_export_libraries(${PROJECT_NAME}) endif() if(BUILD_TESTING) set(ament_cmake_cppcheck_ADDITIONAL_INCLUDE_DIRS ${LTTNG_INCLUDE_DIRS}) find_package(ament_cmake_gtest REQUIRED) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() # Only build tracetools utils tests if LTTng is enabled and found if(TRACETOOLS_LTTNG_ENABLED) ament_add_gtest(test_utils test/test_utils.cpp) if(TARGET test_utils) target_link_libraries(test_utils ${PROJECT_NAME} -rdynamic) endif() endif() endif() ament_package() target_compile_definitions(${PROJECT_NAME} PRIVATE ${PROJECT_NAME}_VERSION="${${PROJECT_NAME}_VERSION}")