The main reason to do this is so that we can compile laser_geometry with the clang static analyzer. As of clang++-14 (what is in Ubuntu 22.04), the default still seems to be C++14, so we need to specify C++17 so that new things in the rclcpp headers work properly. Further, due to reasons I don't fully understand, I needed to set CMAKE_CXX_STANDARD_REQUIRED in order for clang to really use that version. So set this as well. Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
107 lines
2.6 KiB
CMake
107 lines
2.6 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
|
|
project(laser_geometry)
|
|
|
|
if(NOT CMAKE_CXX_STANDARD)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
endif()
|
|
|
|
find_package(ament_cmake REQUIRED)
|
|
|
|
find_package(rclcpp REQUIRED)
|
|
find_package(sensor_msgs REQUIRED)
|
|
find_package(tf2 REQUIRED)
|
|
find_package(eigen3_cmake_module REQUIRED)
|
|
find_package(Eigen3 REQUIRED)
|
|
|
|
ament_python_install_package(laser_geometry PACKAGE_DIR src/laser_geometry)
|
|
|
|
add_library(laser_geometry SHARED src/laser_geometry.cpp)
|
|
target_include_directories(laser_geometry
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:include/${PROJECT_NAME}>
|
|
${Eigen3_INCLUDE_DIRS}
|
|
)
|
|
ament_target_dependencies(laser_geometry
|
|
"rclcpp"
|
|
"sensor_msgs"
|
|
"tf2"
|
|
)
|
|
|
|
# Causes the visibility macros to use dllexport rather than dllimport,
|
|
# which is appropriate when building the dll but not consuming it.
|
|
target_compile_definitions(laser_geometry PRIVATE "LASER_GEOMETRY_BUILDING_LIBRARY")
|
|
|
|
# Export old-style CMake variables
|
|
ament_export_include_directories("include/${PROJECT_NAME}")
|
|
ament_export_libraries(laser_geometry)
|
|
|
|
# Export modern CMake targets
|
|
ament_export_targets(laser_geometry)
|
|
|
|
ament_export_dependencies(
|
|
eigen3_cmake_module
|
|
Eigen3
|
|
rclcpp
|
|
sensor_msgs
|
|
tf2
|
|
)
|
|
|
|
install(
|
|
TARGETS laser_geometry
|
|
EXPORT laser_geometry
|
|
ARCHIVE DESTINATION lib
|
|
LIBRARY DESTINATION lib
|
|
RUNTIME DESTINATION bin
|
|
INCLUDES DESTINATION include
|
|
)
|
|
|
|
install(
|
|
DIRECTORY include/
|
|
DESTINATION include/${PROJECT_NAME}
|
|
)
|
|
|
|
if(BUILD_TESTING)
|
|
# TODO(Martin-Idel-SI): replace this with ament_lint_auto() and/or add the copyright linter back
|
|
find_package(ament_cmake_cppcheck REQUIRED)
|
|
find_package(ament_cmake_cpplint REQUIRED)
|
|
find_package(ament_cmake_lint_cmake REQUIRED)
|
|
find_package(ament_cmake_uncrustify REQUIRED)
|
|
ament_cppcheck()
|
|
ament_cpplint()
|
|
ament_lint_cmake()
|
|
ament_uncrustify()
|
|
|
|
find_package(ament_cmake_gtest REQUIRED)
|
|
|
|
ament_add_gtest(projection_test
|
|
test/projection_test.cpp
|
|
TIMEOUT 240)
|
|
if(TARGET projection_test)
|
|
target_link_libraries(projection_test laser_geometry)
|
|
endif()
|
|
|
|
# Python test
|
|
# Provides PYTHON_EXECUTABLE_DEBUG
|
|
find_package(python_cmake_module REQUIRED)
|
|
find_package(PythonExtra REQUIRED)
|
|
|
|
set(_PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
|
if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
set(PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE_DEBUG}")
|
|
endif()
|
|
|
|
find_package(ament_cmake_pytest REQUIRED)
|
|
|
|
ament_add_pytest_test(projection test/projection_test.py
|
|
TIMEOUT 120
|
|
PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}"
|
|
)
|
|
|
|
set(PYTHON_EXECUTABLE "${_PYTHON_EXECUTABLE}")
|
|
endif()
|
|
|
|
ament_package()
|