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/service.h 47 public/pw_rpc/internal/hash.h 48 public/pw_rpc/internal/method.h 49 public/pw_rpc/internal/method_lookup.h 50 public/pw_rpc/internal/method_union.h 51 public/pw_rpc/internal/server_call.h 52 PUBLIC_INCLUDES 53 public 54 SOURCES 55 server.cc 56 server_call.cc 57 service.cc 58 PUBLIC_DEPS 59 pw_rpc.common 60 PRIVATE_DEPS 61 pw_log 62 pw_rpc.log_config 63) 64 65pw_add_library(pw_rpc.client STATIC 66 HEADERS 67 public/pw_rpc/client.h 68 public/pw_rpc/internal/client_call.h 69 public/pw_rpc/internal/service_client.h 70 PUBLIC_INCLUDES 71 public 72 PUBLIC_DEPS 73 pw_result 74 pw_rpc.common 75 pw_span 76 SOURCES 77 client.cc 78 client_call.cc 79 PRIVATE_DEPS 80 pw_log 81 pw_rpc.log_config 82) 83 84pw_add_library(pw_rpc.client_server STATIC 85 HEADERS 86 public/pw_rpc/client_server.h 87 PUBLIC_INCLUDES 88 public 89 PUBLIC_DEPS 90 pw_rpc.client 91 pw_rpc.server 92 SOURCES 93 client_server.cc 94) 95 96pw_add_library(pw_rpc.synchronous_client_api INTERFACE 97 HEADERS 98 public/pw_rpc/synchronous_call.h 99 public/pw_rpc/synchronous_call_result.h 100 public/pw_rpc/internal/synchronous_call_impl.h 101 PUBLIC_INCLUDES 102 public 103 PUBLIC_DEPS 104 pw_chrono.system_clock 105 pw_rpc.client 106 pw_rpc.common 107 pw_sync.timed_thread_notification 108) 109 110pw_add_library(pw_rpc.common STATIC 111 HEADERS 112 public/pw_rpc/channel.h 113 public/pw_rpc/internal/call.h 114 public/pw_rpc/internal/call_context.h 115 public/pw_rpc/internal/channel.h 116 public/pw_rpc/internal/channel_list.h 117 public/pw_rpc/internal/encoding_buffer.h 118 public/pw_rpc/internal/endpoint.h 119 public/pw_rpc/internal/lock.h 120 public/pw_rpc/internal/method_info.h 121 public/pw_rpc/internal/packet.h 122 public/pw_rpc/method_id.h 123 public/pw_rpc/method_info.h 124 public/pw_rpc/method_type.h 125 public/pw_rpc/packet_meta.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_rpc.config 136 pw_rpc.protos.pwpb 137 pw_span 138 pw_status 139 pw_sync.lock_annotations 140 pw_toolchain.no_destructor 141 SOURCES 142 call.cc 143 channel.cc 144 channel_list.cc 145 endpoint.cc 146 packet.cc 147 packet_meta.cc 148 PRIVATE_DEPS 149 pw_log 150 pw_preprocessor 151 pw_rpc.log_config 152) 153if(NOT "${pw_sync.mutex_BACKEND}" STREQUAL "") 154 pw_target_link_targets(pw_rpc.common PUBLIC pw_sync.mutex) 155endif() 156 157if(NOT "${pw_thread.sleep_BACKEND}" STREQUAL "") 158 pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.sleep) 159endif() 160 161if(NOT "${pw_thread.yield_BACKEND}" STREQUAL "") 162 pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.yield) 163endif() 164 165pw_add_library(pw_rpc.fake_channel_output STATIC 166 HEADERS 167 public/pw_rpc/internal/fake_channel_output.h 168 public/pw_rpc/payloads_view.h 169 PUBLIC_INCLUDES 170 public 171 PUBLIC_DEPS 172 pw_assert 173 pw_bytes 174 pw_containers.filtered_view 175 pw_containers.vector 176 pw_containers.wrapped_iterator 177 pw_function 178 pw_rpc.common 179 pw_sync.mutex 180 SOURCES 181 fake_channel_output.cc 182 PRIVATE_DEPS 183 pw_log 184 pw_rpc.log_config 185) 186 187pw_add_library(pw_rpc.client_server_testing INTERFACE 188 HEADERS 189 public/pw_rpc/internal/client_server_testing.h 190 PUBLIC_INCLUDES 191 public 192 PUBLIC_DEPS 193 pw_bytes 194 pw_result 195 pw_rpc.client_server 196 pw_rpc.fake_channel_output 197) 198 199pw_add_library(pw_rpc.client_server_testing_threaded INTERFACE 200 HEADERS 201 public/pw_rpc/internal/client_server_testing_threaded.h 202 PUBLIC_INCLUDES 203 public 204 PUBLIC_DEPS 205 pw_bytes 206 pw_result 207 pw_rpc.client_server_testing 208 pw_sync.binary_semaphore 209 pw_sync.lock_annotations 210 pw_sync.mutex 211 pw_thread.thread 212) 213 214pw_add_library(pw_rpc.test_helpers INTERFACE 215 HEADERS 216 public/pw_rpc/test_helpers.h 217 PUBLIC_INCLUDES 218 public 219 PUBLIC_DEPS 220 pw_assert 221 pw_chrono.system_clock 222 pw_rpc.fake_channel_output 223 pw_status 224 pw_sync.counting_semaphore 225 pw_thread.yield 226) 227 228# thread_testing target is kept for backward compatibility. 229# New code should use pw_rpc.test_helpers instead. 230pw_add_library(pw_rpc.thread_testing INTERFACE 231 HEADERS 232 public/pw_rpc/thread_testing.h 233 PUBLIC_INCLUDES 234 public 235 PUBLIC_DEPS 236 pw_rpc.test_helpers 237) 238 239pw_add_library(pw_rpc.test_utils INTERFACE 240 HEADERS 241 public/pw_rpc/internal/fake_channel_output.h 242 public/pw_rpc/internal/method_impl_tester.h 243 public/pw_rpc/internal/method_info_tester.h 244 public/pw_rpc/internal/test_method_context.h 245 public/pw_rpc/internal/test_utils.h 246 pw_rpc_private/fake_server_reader_writer.h 247 pw_rpc_private/test_method.h 248 PUBLIC_INCLUDES 249 public 250 PUBLIC_DEPS 251 pw_assert 252 pw_bytes 253 pw_rpc.client 254 pw_rpc.server 255 pw_containers.vector 256 pw_rpc.raw.fake_channel_output 257 pw_rpc.raw.server_api 258) 259 260pw_add_library(pw_rpc.integration_testing STATIC 261 HEADERS 262 public/pw_rpc/integration_test_socket_client.h 263 public/pw_rpc/integration_testing.h 264 PUBLIC_INCLUDES 265 public 266 PUBLIC_DEPS 267 pw_assert 268 pw_function 269 pw_hdlc.default_addresses 270 pw_hdlc.rpc_channel_output 271 pw_rpc.client 272 pw_stream.socket_stream 273 pw_unit_test 274 pw_unit_test.logging_event_handler 275 SOURCES 276 integration_testing.cc 277 PRIVATE_DEPS 278 pw_log 279) 280 281pw_proto_library(pw_rpc.protos 282 SOURCES 283 benchmark.proto 284 internal/packet.proto 285 echo.proto 286 INPUTS 287 echo.options 288 benchmark.options 289 PREFIX 290 pw_rpc 291) 292 293pw_proto_library(pw_rpc.test_protos 294 SOURCES 295 pw_rpc_test_protos/no_package.proto 296 pw_rpc_test_protos/test.proto 297 INPUTS 298 pw_rpc_test_protos/test.options 299) 300 301# Set pw_rpc_CONFIG to this to disable the global mutex. 302pw_add_library(pw_rpc.disable_global_mutex_config INTERFACE 303 PUBLIC_DEFINES 304 PW_RPC_USE_GLOBAL_MUTEX=0 305) 306 307pw_add_test(pw_rpc.call_test 308 SOURCES 309 call_test.cc 310 PRIVATE_DEPS 311 pw_rpc.server 312 pw_rpc.test_utils 313 GROUPS 314 modules 315 pw_rpc 316) 317 318pw_add_test(pw_rpc.channel_test 319 SOURCES 320 channel_test.cc 321 PRIVATE_DEPS 322 pw_rpc.server 323 pw_rpc.test_utils 324 GROUPS 325 modules 326 pw_rpc 327) 328 329pw_add_test(pw_rpc.packet_test 330 SOURCES 331 packet_test.cc 332 PRIVATE_DEPS 333 pw_bytes 334 pw_fuzzer.fuzztest 335 pw_protobuf 336 pw_rpc.server 337 GROUPS 338 modules 339 pw_rpc 340) 341 342pw_add_test(pw_rpc.packet_meta_test 343 SOURCES 344 packet_meta_test.cc 345 PRIVATE_DEPS 346 pw_bytes 347 pw_fuzzer.fuzztest 348 pw_rpc.server 349 GROUPS 350 modules 351 pw_rpc 352) 353 354pw_add_test(pw_rpc.service_test 355 SOURCES 356 service_test.cc 357 PRIVATE_DEPS 358 pw_assert 359 pw_rpc.protos.pwpb 360 pw_rpc.server 361 GROUPS 362 modules 363 pw_rpc 364) 365 366pw_add_test(pw_rpc.client_server_test 367 SOURCES 368 client_server_test.cc 369 PRIVATE_DEPS 370 pw_rpc.client_server 371 pw_rpc.test_utils 372 pw_rpc.raw.server_api 373 GROUPS 374 modules 375 pw_rpc 376) 377 378pw_add_test(pw_rpc.method_test 379 SOURCES 380 method_test.cc 381 PRIVATE_DEPS 382 pw_rpc.server 383 pw_rpc.test_utils 384 GROUPS 385 modules 386 pw_rpc 387) 388 389pw_add_test(pw_rpc.server_test 390 SOURCES 391 server_test.cc 392 PRIVATE_DEPS 393 pw_assert 394 pw_rpc.protos.pwpb 395 pw_rpc.server 396 pw_rpc.test_utils 397 GROUPS 398 modules 399 pw_rpc 400) 401 402pw_add_test(pw_rpc.fake_channel_output_test 403 SOURCES 404 fake_channel_output_test.cc 405 PRIVATE_DEPS 406 pw_rpc.test_utils 407 GROUPS 408 modules 409 pw_rpc 410) 411 412pw_add_test(pw_rpc.test_helpers_test 413 SOURCES 414 test_helpers_test.cc 415 PRIVATE_DEPS 416 pw_result 417 pw_rpc.pwpb.client_testing 418 pw_rpc.pwpb.echo_service 419 pw_rpc.pwpb.server_api 420 pw_rpc.test_helpers 421 pw_status 422 pw_sync.interrupt_spin_lock 423 pw_sync.lock_annotations 424 pw_sync.timed_thread_notification 425 GROUPS 426 modules 427 pw_rpc 428) 429