diff options
Diffstat (limited to 'pw_rpc/CMakeLists.txt')
-rw-r--r-- | pw_rpc/CMakeLists.txt | 376 |
1 files changed, 346 insertions, 30 deletions
diff --git a/pw_rpc/CMakeLists.txt b/pw_rpc/CMakeLists.txt index 7d5b2cf47..37b7cb0c9 100644 --- a/pw_rpc/CMakeLists.txt +++ b/pw_rpc/CMakeLists.txt @@ -15,17 +15,43 @@ include($ENV{PW_ROOT}/pw_build/pigweed.cmake) include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake) -if(NOT "${dir_pw_third_party_nanopb}" STREQUAL "") - add_subdirectory(nanopb) -endif() - +add_subdirectory(nanopb) +add_subdirectory(pwpb) add_subdirectory(raw) add_subdirectory(system_server) -pw_add_module_library(pw_rpc.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 - call.cc - endpoint.cc server.cc server_call.cc service.cc @@ -33,90 +59,380 @@ pw_add_module_library(pw_rpc.server pw_rpc.common PRIVATE_DEPS pw_log + pw_rpc.log_config ) if(Zephyr_FOUND AND CONFIG_PIGWEED_RPC_SERVER) zephyr_link_libraries(pw_rpc.server) endif() -pw_add_module_library(pw_rpc.client +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 - PUBLIC_DEPS - pw_rpc.common - pw_result PRIVATE_DEPS pw_log + pw_rpc.log_config ) if(Zephyr_FOUND AND CONFIG_PIGWEED_RPC_CLIENT) zephyr_link_libraries(pw_rpc.client) endif() -pw_add_module_library(pw_rpc.client_server - SOURCES - client_server.cc +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 ) if(Zephyr_FOUND AND CONFIG_PIGWEED_RPC_CLIENT_SERVER) zephyr_link_libraries(pw_rpc.client_server) endif() -pw_add_module_library(pw_rpc.common - SOURCES - channel.cc - channel_list.cc - packet.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_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 + pw_containers.intrusive_list pw_function + pw_rpc.config + pw_rpc.protos.pwpb pw_span pw_status pw_sync.lock_annotations - pw_rpc.protos.pwpb + 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(Zephyr_FOUND AND CONFIG_PIGWEED_RPC_COMMON) - zephyr_link_libraries(pw_rpc.common) +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_sync.mutex_BACKEND}" STREQUAL "pw_sync.mutex.NO_BACKEND_SET" AND - NOT "${pw_sync.mutex_BACKEND}" STREQUAL "") - target_link_libraries(pw_rpc.common PUBLIC pw_sync.mutex) +if(NOT "${pw_thread.yield_BACKEND}" STREQUAL "") + pw_target_link_targets(pw_rpc.common PUBLIC pw_thread.yield) endif() -pw_add_module_library(pw_rpc.test_utils +if(Zephyr_FOUND AND CONFIG_PIGWEED_RPC_COMMON) + zephyr_link_libraries(pw_rpc.common) +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.h + public/pw_rpc/internal/test_method_context.h + public/pw_rpc/internal/test_utils.h + pw_rpc_private/fake_server_reader_writer.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.pw_rpc + 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 ) -target_include_directories(pw_rpc.test_utils PUBLIC .) 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 ) -pw_auto_add_module_tests(pw_rpc +# 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.client 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_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_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 ) |