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_list.h 116 public/pw_rpc/internal/encoding_buffer.h 117 public/pw_rpc/internal/endpoint.h 118 public/pw_rpc/internal/lock.h 119 public/pw_rpc/internal/method_info.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_id.h 126 public/pw_rpc/writer.h 127 PUBLIC_INCLUDES 128 public 129 PUBLIC_DEPS 130 pw_assert 131 pw_bytes 132 pw_containers.intrusive_list 133 pw_function 134 pw_polyfill 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 benchmark.options 288 benchmark.pwpb_options 289 echo.options 290 echo.pwpb_options 291 PREFIX 292 pw_rpc 293) 294 295pw_proto_library(pw_rpc.test_protos 296 SOURCES 297 pw_rpc_test_protos/no_package.proto 298 pw_rpc_test_protos/test.proto 299 INPUTS 300 pw_rpc_test_protos/test.options 301) 302 303# Set pw_rpc_CONFIG to this to disable the global mutex. 304pw_add_library(pw_rpc.disable_global_mutex_config INTERFACE 305 PUBLIC_DEFINES 306 PW_RPC_USE_GLOBAL_MUTEX=0 307) 308 309pw_add_test(pw_rpc.call_test 310 SOURCES 311 call_test.cc 312 PRIVATE_DEPS 313 pw_rpc.server 314 pw_rpc.test_utils 315 GROUPS 316 modules 317 pw_rpc 318) 319 320pw_add_test(pw_rpc.channel_test 321 SOURCES 322 channel_test.cc 323 PRIVATE_DEPS 324 pw_rpc.server 325 pw_rpc.test_utils 326 GROUPS 327 modules 328 pw_rpc 329) 330 331pw_add_test(pw_rpc.packet_test 332 SOURCES 333 packet_test.cc 334 PRIVATE_DEPS 335 pw_bytes 336 pw_fuzzer.fuzztest 337 pw_protobuf 338 pw_rpc.server 339 GROUPS 340 modules 341 pw_rpc 342) 343 344pw_add_test(pw_rpc.packet_meta_test 345 SOURCES 346 packet_meta_test.cc 347 PRIVATE_DEPS 348 pw_bytes 349 pw_fuzzer.fuzztest 350 pw_rpc.server 351 GROUPS 352 modules 353 pw_rpc 354) 355 356pw_add_test(pw_rpc.service_test 357 SOURCES 358 service_test.cc 359 PRIVATE_DEPS 360 pw_assert 361 pw_rpc.protos.pwpb 362 pw_rpc.server 363 GROUPS 364 modules 365 pw_rpc 366) 367 368pw_add_test(pw_rpc.client_server_test 369 SOURCES 370 client_server_test.cc 371 PRIVATE_DEPS 372 pw_rpc.client_server 373 pw_rpc.test_utils 374 pw_rpc.raw.server_api 375 GROUPS 376 modules 377 pw_rpc 378) 379 380pw_add_test(pw_rpc.method_test 381 SOURCES 382 method_test.cc 383 PRIVATE_DEPS 384 pw_rpc.server 385 pw_rpc.test_utils 386 GROUPS 387 modules 388 pw_rpc 389) 390 391pw_add_test(pw_rpc.server_test 392 SOURCES 393 server_test.cc 394 PRIVATE_DEPS 395 pw_assert 396 pw_rpc.protos.pwpb 397 pw_rpc.server 398 pw_rpc.test_utils 399 GROUPS 400 modules 401 pw_rpc 402) 403 404pw_add_test(pw_rpc.fake_channel_output_test 405 SOURCES 406 fake_channel_output_test.cc 407 PRIVATE_DEPS 408 pw_rpc.test_utils 409 GROUPS 410 modules 411 pw_rpc 412) 413 414pw_add_test(pw_rpc.test_helpers_test 415 SOURCES 416 test_helpers_test.cc 417 PRIVATE_DEPS 418 pw_result 419 pw_rpc.pwpb.client_testing 420 pw_rpc.pwpb.echo_service 421 pw_rpc.pwpb.server_api 422 pw_rpc.test_helpers 423 pw_status 424 pw_sync.interrupt_spin_lock 425 pw_sync.lock_annotations 426 pw_sync.timed_thread_notification 427 GROUPS 428 modules 429 pw_rpc 430) 431