1# Copyright 2020 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14 15include($ENV{PW_ROOT}/pw_build/pigweed.cmake) 16include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake) 17 18add_subdirectory(nanopb) 19add_subdirectory(pwpb) 20add_subdirectory(raw) 21add_subdirectory(system_server) 22 23pw_add_module_config(pw_rpc_CONFIG) 24 25pw_add_library(pw_rpc.config INTERFACE 26 HEADERS 27 public/pw_rpc/internal/config.h 28 PUBLIC_INCLUDES 29 public 30 PUBLIC_DEPS 31 ${pw_rpc_CONFIG} 32) 33 34pw_add_library(pw_rpc.log_config INTERFACE 35 HEADERS 36 public/pw_rpc/internal/log_config.h 37 PUBLIC_INCLUDES 38 public 39 PUBLIC_DEPS 40 pw_rpc.config 41) 42 43pw_add_library(pw_rpc.server STATIC 44 HEADERS 45 public/pw_rpc/server.h 46 public/pw_rpc/internal/grpc.h 47 public/pw_rpc/internal/server_call.h 48 PUBLIC_INCLUDES 49 public 50 SOURCES 51 server.cc 52 server_call.cc 53 service.cc 54 PUBLIC_DEPS 55 pw_rpc.common 56 PRIVATE_DEPS 57 pw_log 58 pw_rpc.log_config 59) 60 61pw_add_library(pw_rpc.client STATIC 62 HEADERS 63 public/pw_rpc/client.h 64 public/pw_rpc/internal/client_call.h 65 public/pw_rpc/internal/service_client.h 66 PUBLIC_INCLUDES 67 public 68 PUBLIC_DEPS 69 pw_result 70 pw_rpc.common 71 pw_span 72 SOURCES 73 client.cc 74 client_call.cc 75 PRIVATE_DEPS 76 pw_log 77 pw_rpc.log_config 78) 79 80pw_add_library(pw_rpc.client_server STATIC 81 HEADERS 82 public/pw_rpc/client_server.h 83 PUBLIC_INCLUDES 84 public 85 PUBLIC_DEPS 86 pw_rpc.client 87 pw_rpc.server 88 SOURCES 89 client_server.cc 90) 91 92pw_add_library(pw_rpc.synchronous_client_api INTERFACE 93 HEADERS 94 public/pw_rpc/synchronous_call.h 95 public/pw_rpc/synchronous_call_result.h 96 public/pw_rpc/internal/synchronous_call_impl.h 97 PUBLIC_INCLUDES 98 public 99 PUBLIC_DEPS 100 pw_chrono.system_clock 101 pw_rpc.client 102 pw_rpc.common 103 pw_sync.timed_thread_notification 104) 105 106pw_add_library(pw_rpc.common STATIC 107 HEADERS 108 public/pw_rpc/channel.h 109 public/pw_rpc/internal/call.h 110 public/pw_rpc/internal/call_context.h 111 public/pw_rpc/internal/channel_list.h 112 public/pw_rpc/internal/encoding_buffer.h 113 public/pw_rpc/internal/endpoint.h 114 public/pw_rpc/internal/hash.h 115 public/pw_rpc/internal/lock.h 116 public/pw_rpc/internal/method.h 117 public/pw_rpc/internal/method_info.h 118 public/pw_rpc/internal/method_lookup.h 119 public/pw_rpc/internal/method_union.h 120 public/pw_rpc/internal/packet.h 121 public/pw_rpc/method_id.h 122 public/pw_rpc/method_info.h 123 public/pw_rpc/method_type.h 124 public/pw_rpc/packet_meta.h 125 public/pw_rpc/service.h 126 public/pw_rpc/service_id.h 127 public/pw_rpc/writer.h 128 PUBLIC_INCLUDES 129 public 130 PUBLIC_DEPS 131 pw_assert 132 pw_bytes 133 pw_containers.intrusive_list 134 pw_function 135 pw_polyfill 136 pw_rpc.config 137 pw_rpc.protos.pwpb 138 pw_span 139 pw_status 140 pw_sync.lock_annotations 141 pw_toolchain.no_destructor 142 SOURCES 143 call.cc 144 channel.cc 145 channel_list.cc 146 endpoint.cc 147 packet.cc 148 packet_meta.cc 149 PRIVATE_DEPS 150 pw_log 151 pw_preprocessor 152 pw_rpc.log_config 153) 154if(NOT "${pw_sync.mutex_BACKEND}" STREQUAL "") 155 pw_target_link_targets(pw_rpc.common PUBLIC pw_sync.mutex) 156endif() 157 158if(NOT "${pw_thread.sleep_BACKEND}" STREQUAL "") 159 pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.sleep) 160endif() 161 162if(NOT "${pw_thread.yield_BACKEND}" STREQUAL "") 163 pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.yield) 164endif() 165 166pw_add_library(pw_rpc.fake_channel_output STATIC 167 HEADERS 168 public/pw_rpc/internal/fake_channel_output.h 169 public/pw_rpc/payloads_view.h 170 PUBLIC_INCLUDES 171 public 172 PUBLIC_DEPS 173 pw_assert 174 pw_bytes 175 pw_containers.filtered_view 176 pw_containers.vector 177 pw_containers.wrapped_iterator 178 pw_function 179 pw_rpc.common 180 pw_sync.mutex 181 SOURCES 182 fake_channel_output.cc 183 PRIVATE_DEPS 184 pw_log 185 pw_rpc.log_config 186) 187 188pw_add_library(pw_rpc.client_server_testing INTERFACE 189 HEADERS 190 public/pw_rpc/internal/client_server_testing.h 191 PUBLIC_INCLUDES 192 public 193 PUBLIC_DEPS 194 pw_bytes 195 pw_result 196 pw_rpc.client_server 197 pw_rpc.fake_channel_output 198) 199 200pw_add_library(pw_rpc.client_server_testing_threaded INTERFACE 201 HEADERS 202 public/pw_rpc/internal/client_server_testing_threaded.h 203 PUBLIC_INCLUDES 204 public 205 PUBLIC_DEPS 206 pw_bytes 207 pw_result 208 pw_rpc.client_server_testing 209 pw_sync.binary_semaphore 210 pw_sync.lock_annotations 211 pw_sync.mutex 212 pw_thread.thread 213) 214 215pw_add_library(pw_rpc.test_helpers INTERFACE 216 HEADERS 217 public/pw_rpc/test_helpers.h 218 PUBLIC_INCLUDES 219 public 220 PUBLIC_DEPS 221 pw_assert 222 pw_chrono.system_clock 223 pw_rpc.fake_channel_output 224 pw_status 225 pw_sync.counting_semaphore 226 pw_thread.yield 227) 228 229# thread_testing target is kept for backward compatibility. 230# New code should use pw_rpc.test_helpers instead. 231pw_add_library(pw_rpc.thread_testing INTERFACE 232 HEADERS 233 public/pw_rpc/thread_testing.h 234 PUBLIC_INCLUDES 235 public 236 PUBLIC_DEPS 237 pw_rpc.test_helpers 238) 239 240pw_add_library(pw_rpc.test_utils INTERFACE 241 HEADERS 242 public/pw_rpc/internal/fake_channel_output.h 243 public/pw_rpc/internal/method_impl_tester.h 244 public/pw_rpc/internal/method_info_tester.h 245 public/pw_rpc/internal/test_method_context.h 246 public/pw_rpc/internal/test_utils.h 247 pw_rpc_private/fake_server_reader_writer.h 248 pw_rpc_private/test_method.h 249 PUBLIC_INCLUDES 250 public 251 PUBLIC_DEPS 252 pw_assert 253 pw_bytes 254 pw_rpc.client 255 pw_rpc.server 256 pw_containers.vector 257 pw_rpc.raw.fake_channel_output 258 pw_rpc.raw.server_api 259) 260 261pw_add_library(pw_rpc.integration_testing STATIC 262 HEADERS 263 public/pw_rpc/integration_test_socket_client.h 264 public/pw_rpc/integration_testing.h 265 PUBLIC_INCLUDES 266 public 267 PUBLIC_DEPS 268 pw_assert 269 pw_function 270 pw_hdlc.default_addresses 271 pw_hdlc.rpc_channel_output 272 pw_rpc.client 273 pw_stream.socket_stream 274 pw_unit_test 275 pw_unit_test.logging_event_handler 276 SOURCES 277 integration_testing.cc 278 PRIVATE_DEPS 279 pw_log 280) 281 282pw_proto_library(pw_rpc.protos 283 SOURCES 284 benchmark.proto 285 internal/packet.proto 286 echo.proto 287 INPUTS 288 benchmark.options 289 benchmark.pwpb_options 290 echo.options 291 echo.pwpb_options 292 PREFIX 293 pw_rpc 294) 295 296pw_proto_library(pw_rpc.test_protos 297 SOURCES 298 pw_rpc_test_protos/no_package.proto 299 pw_rpc_test_protos/test.proto 300 INPUTS 301 pw_rpc_test_protos/test.options 302) 303 304# Set pw_rpc_CONFIG to this to disable the global mutex. 305pw_add_library(pw_rpc.disable_global_mutex_config INTERFACE 306 PUBLIC_DEFINES 307 PW_RPC_USE_GLOBAL_MUTEX=0 308) 309 310pw_add_test(pw_rpc.call_test 311 SOURCES 312 call_test.cc 313 PRIVATE_DEPS 314 pw_rpc.server 315 pw_rpc.test_utils 316 GROUPS 317 modules 318 pw_rpc 319) 320 321pw_add_test(pw_rpc.channel_test 322 SOURCES 323 channel_test.cc 324 PRIVATE_DEPS 325 pw_rpc.server 326 pw_rpc.test_utils 327 GROUPS 328 modules 329 pw_rpc 330) 331 332pw_add_test(pw_rpc.packet_test 333 SOURCES 334 packet_test.cc 335 PRIVATE_DEPS 336 pw_bytes 337 pw_fuzzer.fuzztest 338 pw_protobuf 339 pw_rpc.server 340 GROUPS 341 modules 342 pw_rpc 343) 344 345pw_add_test(pw_rpc.packet_meta_test 346 SOURCES 347 packet_meta_test.cc 348 PRIVATE_DEPS 349 pw_bytes 350 pw_fuzzer.fuzztest 351 pw_rpc.server 352 GROUPS 353 modules 354 pw_rpc 355) 356 357pw_add_test(pw_rpc.service_test 358 SOURCES 359 service_test.cc 360 PRIVATE_DEPS 361 pw_assert 362 pw_rpc.protos.pwpb 363 pw_rpc.server 364 GROUPS 365 modules 366 pw_rpc 367) 368 369pw_add_test(pw_rpc.client_server_test 370 SOURCES 371 client_server_test.cc 372 PRIVATE_DEPS 373 pw_rpc.client_server 374 pw_rpc.test_utils 375 pw_rpc.raw.server_api 376 GROUPS 377 modules 378 pw_rpc 379) 380 381pw_add_test(pw_rpc.method_test 382 SOURCES 383 method_test.cc 384 PRIVATE_DEPS 385 pw_rpc.server 386 pw_rpc.test_utils 387 GROUPS 388 modules 389 pw_rpc 390) 391 392pw_add_test(pw_rpc.server_test 393 SOURCES 394 server_test.cc 395 PRIVATE_DEPS 396 pw_assert 397 pw_rpc.protos.pwpb 398 pw_rpc.server 399 pw_rpc.test_utils 400 GROUPS 401 modules 402 pw_rpc 403) 404 405pw_add_test(pw_rpc.fake_channel_output_test 406 SOURCES 407 fake_channel_output_test.cc 408 PRIVATE_DEPS 409 pw_rpc.test_utils 410 GROUPS 411 modules 412 pw_rpc 413) 414 415pw_add_test(pw_rpc.test_helpers_test 416 SOURCES 417 test_helpers_test.cc 418 PRIVATE_DEPS 419 pw_result 420 pw_rpc.pwpb.client_testing 421 pw_rpc.pwpb.echo_service 422 pw_rpc.pwpb.server_api 423 pw_rpc.test_helpers 424 pw_status 425 pw_sync.interrupt_spin_lock 426 pw_sync.lock_annotations 427 pw_sync.timed_thread_notification 428 GROUPS 429 modules 430 pw_rpc 431) 432