# Copyright 2020 The Pigweed Authors # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. include($ENV{PW_ROOT}/pw_build/pigweed.cmake) include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake) add_subdirectory(nanopb) add_subdirectory(pwpb) add_subdirectory(raw) add_subdirectory(system_server) pw_add_module_config(pw_rpc_CONFIG) pw_add_library(pw_rpc.config INTERFACE HEADERS public/pw_rpc/internal/config.h PUBLIC_INCLUDES public PUBLIC_DEPS ${pw_rpc_CONFIG} ) pw_add_library(pw_rpc.log_config INTERFACE HEADERS public/pw_rpc/internal/log_config.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_rpc.config ) pw_add_library(pw_rpc.server STATIC HEADERS public/pw_rpc/server.h public/pw_rpc/service.h public/pw_rpc/internal/hash.h public/pw_rpc/internal/method.h public/pw_rpc/internal/method_lookup.h public/pw_rpc/internal/method_union.h public/pw_rpc/internal/server_call.h PUBLIC_INCLUDES public SOURCES server.cc server_call.cc service.cc PUBLIC_DEPS pw_rpc.common PRIVATE_DEPS pw_log pw_rpc.log_config ) pw_add_library(pw_rpc.client STATIC HEADERS public/pw_rpc/client.h public/pw_rpc/internal/client_call.h public/pw_rpc/internal/service_client.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_result pw_rpc.common pw_span SOURCES client.cc client_call.cc PRIVATE_DEPS pw_log pw_rpc.log_config ) pw_add_library(pw_rpc.client_server STATIC HEADERS public/pw_rpc/client_server.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_rpc.client pw_rpc.server SOURCES client_server.cc ) pw_add_library(pw_rpc.synchronous_client_api INTERFACE HEADERS public/pw_rpc/synchronous_call.h public/pw_rpc/synchronous_call_result.h public/pw_rpc/internal/synchronous_call_impl.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_chrono.system_clock pw_rpc.client pw_rpc.common pw_sync.timed_thread_notification ) pw_add_library(pw_rpc.common STATIC HEADERS public/pw_rpc/channel.h public/pw_rpc/internal/call.h public/pw_rpc/internal/call_context.h public/pw_rpc/internal/channel.h public/pw_rpc/internal/channel_list.h public/pw_rpc/internal/encoding_buffer.h public/pw_rpc/internal/endpoint.h public/pw_rpc/internal/lock.h public/pw_rpc/internal/method_info.h public/pw_rpc/internal/packet.h public/pw_rpc/method_id.h public/pw_rpc/method_info.h public/pw_rpc/method_type.h public/pw_rpc/packet_meta.h public/pw_rpc/service_id.h public/pw_rpc/writer.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_assert pw_bytes pw_containers.intrusive_list pw_function pw_rpc.config pw_rpc.protos.pwpb pw_span pw_status pw_sync.lock_annotations pw_toolchain.no_destructor SOURCES call.cc channel.cc channel_list.cc endpoint.cc packet.cc packet_meta.cc PRIVATE_DEPS pw_log pw_preprocessor pw_rpc.log_config ) if(NOT "${pw_sync.mutex_BACKEND}" STREQUAL "") pw_target_link_targets(pw_rpc.common PUBLIC pw_sync.mutex) endif() if(NOT "${pw_thread.sleep_BACKEND}" STREQUAL "") pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.sleep) endif() if(NOT "${pw_thread.yield_BACKEND}" STREQUAL "") pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.yield) endif() pw_add_library(pw_rpc.fake_channel_output STATIC HEADERS public/pw_rpc/internal/fake_channel_output.h public/pw_rpc/payloads_view.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_assert pw_bytes pw_containers.filtered_view pw_containers.vector pw_containers.wrapped_iterator pw_function pw_rpc.common pw_sync.mutex SOURCES fake_channel_output.cc PRIVATE_DEPS pw_log pw_rpc.log_config ) pw_add_library(pw_rpc.client_server_testing INTERFACE HEADERS public/pw_rpc/internal/client_server_testing.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_bytes pw_result pw_rpc.client_server pw_rpc.fake_channel_output ) pw_add_library(pw_rpc.client_server_testing_threaded INTERFACE HEADERS public/pw_rpc/internal/client_server_testing_threaded.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_bytes pw_result pw_rpc.client_server_testing pw_sync.binary_semaphore pw_sync.lock_annotations pw_sync.mutex pw_thread.thread ) pw_add_library(pw_rpc.test_helpers INTERFACE HEADERS public/pw_rpc/test_helpers.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_assert pw_chrono.system_clock pw_rpc.fake_channel_output pw_status pw_sync.counting_semaphore pw_thread.yield ) # thread_testing target is kept for backward compatibility. # New code should use pw_rpc.test_helpers instead. pw_add_library(pw_rpc.thread_testing INTERFACE HEADERS public/pw_rpc/thread_testing.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_rpc.test_helpers ) pw_add_library(pw_rpc.test_utils INTERFACE HEADERS public/pw_rpc/internal/fake_channel_output.h public/pw_rpc/internal/method_impl_tester.h public/pw_rpc/internal/method_info_tester.h public/pw_rpc/internal/test_method_context.h public/pw_rpc/internal/test_utils.h pw_rpc_private/fake_server_reader_writer.h pw_rpc_private/test_method.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_assert pw_bytes pw_rpc.client pw_rpc.server pw_containers.vector pw_rpc.raw.fake_channel_output pw_rpc.raw.server_api ) pw_add_library(pw_rpc.integration_testing STATIC HEADERS public/pw_rpc/integration_test_socket_client.h public/pw_rpc/integration_testing.h PUBLIC_INCLUDES public PUBLIC_DEPS pw_assert pw_function pw_hdlc.default_addresses pw_hdlc.rpc_channel_output pw_rpc.client pw_stream.socket_stream pw_unit_test pw_unit_test.logging_event_handler SOURCES integration_testing.cc PRIVATE_DEPS pw_log ) pw_proto_library(pw_rpc.protos SOURCES benchmark.proto internal/packet.proto echo.proto INPUTS echo.options benchmark.options PREFIX pw_rpc ) pw_proto_library(pw_rpc.test_protos SOURCES pw_rpc_test_protos/no_package.proto pw_rpc_test_protos/test.proto INPUTS pw_rpc_test_protos/test.options ) # Set pw_rpc_CONFIG to this to disable the global mutex. pw_add_library(pw_rpc.disable_global_mutex_config INTERFACE PUBLIC_DEFINES PW_RPC_USE_GLOBAL_MUTEX=0 ) pw_add_test(pw_rpc.call_test SOURCES call_test.cc PRIVATE_DEPS pw_rpc.server pw_rpc.test_utils GROUPS modules pw_rpc ) pw_add_test(pw_rpc.channel_test SOURCES channel_test.cc PRIVATE_DEPS pw_rpc.server pw_rpc.test_utils GROUPS modules pw_rpc ) pw_add_test(pw_rpc.packet_test SOURCES packet_test.cc PRIVATE_DEPS pw_bytes pw_fuzzer.fuzztest pw_protobuf pw_rpc.server GROUPS modules pw_rpc ) pw_add_test(pw_rpc.packet_meta_test SOURCES packet_meta_test.cc PRIVATE_DEPS pw_bytes pw_fuzzer.fuzztest pw_rpc.server GROUPS modules pw_rpc ) pw_add_test(pw_rpc.service_test SOURCES service_test.cc PRIVATE_DEPS pw_assert pw_rpc.protos.pwpb pw_rpc.server GROUPS modules pw_rpc ) pw_add_test(pw_rpc.client_server_test SOURCES client_server_test.cc PRIVATE_DEPS pw_rpc.client_server pw_rpc.test_utils pw_rpc.raw.server_api GROUPS modules pw_rpc ) pw_add_test(pw_rpc.method_test SOURCES method_test.cc PRIVATE_DEPS pw_rpc.server pw_rpc.test_utils GROUPS modules pw_rpc ) pw_add_test(pw_rpc.server_test SOURCES server_test.cc PRIVATE_DEPS pw_assert pw_rpc.protos.pwpb pw_rpc.server pw_rpc.test_utils GROUPS modules pw_rpc ) pw_add_test(pw_rpc.fake_channel_output_test SOURCES fake_channel_output_test.cc PRIVATE_DEPS pw_rpc.test_utils GROUPS modules pw_rpc ) pw_add_test(pw_rpc.test_helpers_test SOURCES test_helpers_test.cc PRIVATE_DEPS pw_result pw_rpc.pwpb.client_testing pw_rpc.pwpb.echo_service pw_rpc.pwpb.server_api pw_rpc.test_helpers pw_status pw_sync.interrupt_spin_lock pw_sync.lock_annotations pw_sync.timed_thread_notification GROUPS modules pw_rpc )