diff --git a/tracetools/CMakeLists.txt b/tracetools/CMakeLists.txt new file mode 100644 index 0000000..328185e --- /dev/null +++ b/tracetools/CMakeLists.txt @@ -0,0 +1,94 @@ +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 -fPIC) +endif() + +find_package(ament_cmake REQUIRED) + +option(WITH_LTTNG "Include support for tracing with LTTng" OFF) +if(WITH_LTTNG) + # Try to find LTTng + find_package(PkgConfig REQUIRED) + pkg_check_modules(LTTNG REQUIRED lttng-ust) +endif() +if(LTTNG_FOUND) + # Generate necessary LTTng files + # If successful, enable tracing + add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/src/tp_call.c + COMMAND lttng-gen-tp tp_call.tp -o ../src/tp_call.c -o ../src/tp_call.h + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/lttng + DEPENDS ${PROJECT_SOURCE_DIR}/lttng/tp_call.tp + ) + set(LTTNG_GENERATED + src/tp_call.h + src/tp_call.c + ) + set(TRACING_ENABLED TRUE) + message("LTTng found: tracing enabled") +elseif(WITH_LTTNG) + message("LTTng NOT found: tracing disabled") +endif() + +include_directories(include) + +# Status checking tool +add_executable(${PROJECT_NAME}_status + src/status.c + src/tracetools.c +) +target_link_libraries(${PROJECT_NAME}_status + ${PROJECT_NAME} +) +ament_target_dependencies(${PROJECT_NAME}_status + ${PROJECT_NAME} +) +install(TARGETS + ${PROJECT_NAME}_status + DESTINATION lib/${PROJECT_NAME} +) + +# Tracetools lib +set(SOURCES + src/tracetools.c +) +if(TRACING_ENABLED) + list(APPEND SOURCES ${LTTNG_GENERATED}) +endif() + +add_library(${PROJECT_NAME} ${SOURCES}) +if(TRACING_ENABLED) + target_compile_definitions(${PROJECT_NAME} PUBLIC WITH_LTTNG) + target_link_libraries(${PROJECT_NAME} ${LTTNG_LIBRARIES} -ldl) +else() + target_link_libraries(${PROJECT_NAME}) +endif() + +ament_export_interfaces(${PROJECT_NAME}_export HAS_LIBRARY_TARGET) +install( + DIRECTORY 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(TRACING_ENABLED) + ament_export_libraries(${PROJECT_NAME} ${LTTNG_LIBRARIES}) +else() + ament_export_libraries(${PROJECT_NAME}) +endif() + +ament_package() diff --git a/tracetools/package.xml b/tracetools/package.xml new file mode 100644 index 0000000..2d80723 --- /dev/null +++ b/tracetools/package.xml @@ -0,0 +1,19 @@ + + + + tracetools + 0.0.1 + ROS 2 wrapper for instrumentation + Christophe Bedard + Christophe Bedard + APLv2 + + ament_cmake + pkg-config + + + + + ament_cmake + +