blob: 678c86f51badc71e8a6a144843b251cf2cc21713 [file] [log] [blame]
# 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
)