Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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