@@ -2,28 +2,35 @@ cmake_minimum_required(VERSION 3.20)
22
33project (rcl)
44
5+ option (RCL_MICROROS "micro-ROS build mode" ON )
6+
57find_package (ament_cmake_ros REQUIRED )
68find_package (ament_cmake_gen_version_h REQUIRED )
79
8- find_package (libyaml_vendor REQUIRED )
910find_package (rcl_interfaces REQUIRED )
1011find_package (rcl_logging_interface REQUIRED )
11- find_package (rcl_yaml_param_parser REQUIRED )
1212find_package (rcutils REQUIRED )
1313find_package (rmw REQUIRED )
1414find_package (rmw_implementation REQUIRED )
1515find_package (rosidl_runtime_c REQUIRED )
1616find_package (service_msgs REQUIRED )
1717find_package (tracetools REQUIRED )
1818find_package (type_description_interfaces REQUIRED )
19- find_package (yaml REQUIRED )
19+
20+ if (NOT RCL_MICROROS)
21+ find_package (libyaml_vendor REQUIRED )
22+ find_package (yaml REQUIRED )
23+ find_package (rcl_yaml_param_parser REQUIRED )
24+ endif ()
2025
2126include (cmake/rcl_set_symbol_visibility_hidden.cmake )
2227
23- # Determine the logging implementation to use
24- include (cmake/get_default_rcl_logging_implementation.cmake )
25- get_default_rcl_logging_implementation (RCL_LOGGING_IMPL )
26- message (STATUS "RCL_LOGGING_IMPLEMENTATION: ${RCL_LOGGING_IMPL} " )
28+ if (NOT RCL_MICROROS)
29+ # Determine the logging implementation to use
30+ include (cmake/get_default_rcl_logging_implementation.cmake )
31+ get_default_rcl_logging_implementation (RCL_LOGGING_IMPL )
32+ message (STATUS "RCL_LOGGING_IMPLEMENTATION: ${RCL_LOGGING_IMPL} " )
33+ endif ()
2734
2835# Default to C11
2936if (NOT CMAKE_C_STANDARD )
@@ -41,7 +48,7 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
4148endif ()
4249
4350set (${PROJECT_NAME } _sources
44- src/rcl/arguments.c
51+ $<$< NOT :$< BOOL : ${RCL_MICROROS} >>: src /rcl /arguments .c >
4552 src/rcl/client.c
4653 src/rcl/common.c
4754 src/rcl/context.c
@@ -57,13 +64,13 @@ set(${PROJECT_NAME}_sources
5764 src/rcl/init_options.c
5865 src/rcl/lexer.c
5966 src/rcl/lexer_lookahead.c
60- src/rcl/logging_rosout.c
61- src/rcl/logging.c
62- src/rcl/log_level.c
67+ $<$< NOT :$< BOOL : ${RCL_MICROROS} >>: src /rcl /logging_rosout .c >
68+ $<$< NOT :$< BOOL : ${RCL_MICROROS} >>: src /rcl /logging .c >
69+ $<$< NOT :$< BOOL : ${RCL_MICROROS} >>: src /rcl /log_level .c >
6370 src/rcl/network_flow_endpoints.c
6471 src/rcl/node.c
6572 src/rcl/node_options.c
66- src/rcl/node_type_cache.c
73+ $<$< NOT :$< BOOL : ${RCL_MICROROS} >>: src /rcl /node_type_cache .c >
6774 src/rcl/publisher.c
6875 src/rcl/remap.c
6976 src/rcl/node_resolve_name.c
@@ -75,7 +82,7 @@ set(${PROJECT_NAME}_sources
7582 src/rcl/time.c
7683 src/rcl/timer.c
7784 src/rcl/type_hash.c
78- src/rcl/type_description_conversions.c
85+ $<$< NOT :$< BOOL : ${RCL_MICROROS} >>: src /rcl /type_description_conversions .c >
7986 src/rcl/validate_enclave_name.c
8087 src/rcl/validate_topic_name.c
8188 src/rcl/wait.c
@@ -88,36 +95,62 @@ target_include_directories(${PROJECT_NAME} PUBLIC
8895 "$<INSTALL_INTERFACE :include /${PROJECT_NAME } >" )
8996target_link_libraries (${PROJECT_NAME } PUBLIC
9097 # TODO(clalancette): rcl_interfaces should be PRIVATE, but downstream depends on it for now
91- rcl_interfaces::rcl_interfaces
98+ $<$< NOT :$< BOOL : ${RCL_MICROROS} >>: rcl_interfaces ::rcl_interfaces >
9299 # TODO(clalancette): rcl_logging_interface should be PRIVATE, but downstream depends on it for now
93- rcl_logging_interface::rcl_logging_interface
94- rcl_yaml_param_parser::rcl_yaml_param_parser
100+ $<$<NOT :$<BOOL :${RCL_MICROROS} >>:rcl_logging_interface ::rcl_logging_interface >
95101 rcutils::rcutils
96102 rmw::rmw
97103 # TODO(clalancette): rmw_implementation should be PRIVATE, but downstream depends on it for now
98104 rmw_implementation::rmw_implementation
99105 rosidl_runtime_c::rosidl_runtime_c
100106 type_description_interfaces::type_description_interfaces
101107)
108+
102109target_link_libraries (${PROJECT_NAME } PRIVATE
103- service_msgs::service_msgs
104110 tracetools::tracetools
105- yaml
106111)
107112
108- # Link logging implementation based on configuration
109- if (RCL_LOGGING_IMPL STREQUAL "rcl_logging_implementation" )
110- # Dynamic loading: use rcl_logging_implementation abstraction
113+ if (NOT RCL_MICROROS)
111114 target_link_libraries (${PROJECT_NAME } PRIVATE
112- rcl_logging_implementation::rcl_logging_implementation
115+ service_msgs::service_msgs
116+ yaml
113117 )
114- else ()
115- # Static linking: use specific logging implementation
116- target_link_libraries (${PROJECT_NAME } PRIVATE
117- ${RCL_LOGGING_IMPL} ::${RCL_LOGGING_IMPL}
118+ endif ()
119+
120+ if (NOT RCL_MICROROS)
121+ ament_target_dependencies (${PROJECT_NAME }
122+ "rcl_yaml_param_parser"
123+ )
124+ endif ()
125+
126+ if (NOT RCL_MICROROS)
127+ ament_target_dependencies (${PROJECT_NAME }
128+ ${RCL_LOGGING_IMPL}
118129 )
119130endif ()
120131
132+ if (NOT RCL_MICROROS)
133+ target_compile_definitions (${PROJECT_NAME }
134+ PUBLIC
135+ RCL_MICROROS_COMPLETE_IMPL
136+ )
137+ endif ()
138+
139+ if (NOT RCL_MICROROS)
140+ # Link logging implementation based on configuration
141+ if (RCL_LOGGING_IMPL STREQUAL "rcl_logging_implementation" )
142+ # Dynamic loading: use rcl_logging_implementation abstraction
143+ target_link_libraries (${PROJECT_NAME } PRIVATE
144+ rcl_logging_implementation::rcl_logging_implementation
145+ )
146+ else ()
147+ # Static linking: use specific logging implementation
148+ target_link_libraries (${PROJECT_NAME } PRIVATE
149+ ${RCL_LOGGING_IMPL} ::${RCL_LOGGING_IMPL}
150+ )
151+ endif ()
152+ endif ()
153+
121154# Allow configuring the default discovery range
122155if (DEFINED RCL_DEFAULT_DISCOVERY_RANGE)
123156target_compile_definitions (${PROJECT_NAME } PRIVATE
@@ -156,14 +189,21 @@ ament_export_dependencies(ament_cmake)
156189ament_export_dependencies (rcl_interfaces )
157190# TODO(clalancette): rcl_logging_interface shouldn't be exported, but downstream depends on it for now
158191ament_export_dependencies (rcl_logging_interface )
159- ament_export_dependencies (rcl_yaml_param_parser )
160192ament_export_dependencies (rcutils )
161193ament_export_dependencies (rmw )
162194# TODO(clalancette): rmw_implementation shouldn't be exported, but downstream depends on it for now
163195ament_export_dependencies (rmw_implementation )
164196ament_export_dependencies (rosidl_runtime_c )
165197ament_export_dependencies (type_description_interfaces )
166- ament_generate_version_header (${PROJECT_NAME } )
198+ ament_export_dependencies (tracetools )
199+
200+ if (NOT RCL_MICROROS)
201+ ament_export_dependencies (rcl_yaml_param_parser )
202+ endif ()
203+
204+ if (NOT RCL_MICROROS)
205+ ament_export_dependencies (${RCL_LOGGING_IMPL} )
206+ endif ()
167207
168208if (BUILD_TESTING)
169209 find_package (ament_lint_auto REQUIRED )
0 commit comments