Skip to content

Commit

Permalink
Fix CMake install so overriding works (ros-controls#926)
Browse files Browse the repository at this point in the history
Signed-off-by: Tyler Weaver <[email protected]>
  • Loading branch information
tylerjw authored Feb 10, 2023
1 parent 40fcc94 commit 727297e
Show file tree
Hide file tree
Showing 10 changed files with 322 additions and 366 deletions.
120 changes: 52 additions & 68 deletions controller_interface/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,104 +1,88 @@
cmake_minimum_required(VERSION 3.5)
project(controller_interface)
cmake_minimum_required(VERSION 3.16)
project(controller_interface LANGUAGES CXX)

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

set(THIS_PACKAGE_INCLUDE_DEPENDS
hardware_interface
rclcpp_lifecycle
)

find_package(ament_cmake REQUIRED)
find_package(hardware_interface REQUIRED)
find_package(rclcpp_lifecycle REQUIRED)
foreach(Dependency IN ITEMS ${THIS_PACKAGE_INCLUDE_DEPENDS})
find_package(${Dependency} REQUIRED)
endforeach()

add_library(
${PROJECT_NAME}
SHARED
add_library(controller_interface SHARED
src/controller_interface_base.cpp
src/controller_interface.cpp
src/chainable_controller_interface.cpp
)
target_include_directories(
${PROJECT_NAME}
PRIVATE
include
)
ament_target_dependencies(
${PROJECT_NAME}
hardware_interface
rclcpp_lifecycle
target_compile_features(controller_interface PUBLIC cxx_std_17)
target_include_directories(controller_interface PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include/controller_interface>
)
ament_target_dependencies(controller_interface PUBLIC ${THIS_PACKAGE_INCLUDE_DEPENDS})
# 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 "CONTROLLER_INTERFACE_BUILDING_DLL")

install(DIRECTORY include/
DESTINATION include
)
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
target_compile_definitions(controller_interface PRIVATE "CONTROLLER_INTERFACE_BUILDING_DLL")

if(BUILD_TESTING)
find_package(ament_cmake_gmock REQUIRED)

find_package(hardware_interface REQUIRED)
find_package(sensor_msgs REQUIRED)

ament_add_gmock(test_controller_interface test/test_controller_interface.cpp)
target_link_libraries(test_controller_interface ${PROJECT_NAME})
target_include_directories(test_controller_interface PRIVATE include)
target_link_libraries(test_controller_interface
controller_interface
)

ament_add_gmock(test_controller_with_options test/test_controller_with_options.cpp)
target_link_libraries(test_controller_with_options ${PROJECT_NAME})
target_include_directories(test_controller_with_options PRIVATE include)
target_link_libraries(test_controller_with_options
controller_interface
)

ament_add_gmock(test_chainable_controller_interface test/test_chainable_controller_interface.cpp)
target_link_libraries(test_chainable_controller_interface ${PROJECT_NAME})
target_include_directories(test_chainable_controller_interface PRIVATE include)
ament_target_dependencies(test_chainable_controller_interface hardware_interface)

ament_add_gmock(
test_semantic_component_interface
test/test_semantic_component_interface.cpp
)
target_include_directories(test_semantic_component_interface PRIVATE include)
ament_target_dependencies(
test_semantic_component_interface
hardware_interface
target_link_libraries(test_chainable_controller_interface
controller_interface
hardware_interface::hardware_interface
)

ament_add_gmock(
test_force_torque_sensor
test/test_force_torque_sensor.cpp
ament_add_gmock(test_semantic_component_interface test/test_semantic_component_interface.cpp)
target_link_libraries(test_semantic_component_interface
controller_interface
hardware_interface::hardware_interface
)
target_include_directories(test_force_torque_sensor PRIVATE include)
ament_target_dependencies(
test_force_torque_sensor
hardware_interface

ament_add_gmock(test_force_torque_sensor test/test_force_torque_sensor.cpp)
target_link_libraries(test_force_torque_sensor
controller_interface
hardware_interface::hardware_interface
)

ament_add_gmock(
test_imu_sensor
test/test_imu_sensor.cpp
ament_add_gmock(test_imu_sensor test/test_imu_sensor.cpp)
target_link_libraries(test_imu_sensor
controller_interface
hardware_interface::hardware_interface
)
target_include_directories(test_imu_sensor PRIVATE include)
ament_target_dependencies(
test_imu_sensor
hardware_interface
ament_target_dependencies(test_imu_sensor
sensor_msgs
)
endif()

ament_export_dependencies(
hardware_interface
rclcpp_lifecycle
sensor_msgs
)
ament_export_include_directories(
include
install(
DIRECTORY include/
DESTINATION include/controller_interface
)
ament_export_libraries(
${PROJECT_NAME}
install(TARGETS controller_interface
EXPORT export_controller_interface
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)

ament_export_targets(export_controller_interface HAS_LIBRARY_TARGET)
ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS})
ament_package()
5 changes: 1 addition & 4 deletions controller_interface/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,8 @@
<build_depend>rclcpp_lifecycle</build_depend>
<build_depend>sensor_msgs</build_depend>

<exec_depend>hardware_interface</exec_depend>
<exec_depend>rclcpp_lifecycle</exec_depend>
<exec_depend>sensor_msgs</exec_depend>

<test_depend>ament_cmake_gmock</test_depend>
<test_depend>sensor_msgs</test_depend>

<export>
<build_type>ament_cmake</build_type>
Expand Down
Loading

0 comments on commit 727297e

Please sign in to comment.