blob: 1e6806a23f769539564fcd3af953144817dc28b2 [file] [log] [blame]
# Copyright 2023 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.
import("//build_overrides/pigweed.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_chrono/backend.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_protobuf_compiler/proto.gni")
import("$dir_pw_sync/backend.gni")
import("$dir_pw_thread/backend.gni")
import("$dir_pw_unit_test/test.gni")
config("public_include_path") {
include_dirs = [ "public" ]
visibility = [ ":*" ]
}
pw_doc_group("docs") {
sources = [ "docs.rst" ]
}
pw_test_group("tests") {
tests = [
":egress_ingress_test",
":hdlc_framing_test",
":local_rpc_egress_test",
":packet_buffer_queue_test",
":rpc_integration_test",
":simple_framing_test",
":socket_rpc_transport_test",
":stream_rpc_dispatcher_test",
]
}
pw_source_set("rpc_transport") {
public = [ "public/pw_rpc_transport/rpc_transport.h" ]
public_configs = [ ":public_include_path" ]
public_deps = [
"$dir_pw_bytes",
"$dir_pw_function",
"$dir_pw_status",
]
}
pw_source_set("service_registry") {
public = [ "public/pw_rpc_transport/service_registry.h" ]
public_deps = [
":rpc_transport",
"$dir_pw_rpc:client_server",
"$dir_pw_span",
"$dir_pw_status",
]
}
pw_source_set("test_loopback_service_registry") {
public = [ "public/pw_rpc_transport/test_loopback_service_registry.h" ]
public_deps = [
":egress_ingress",
":service_registry",
"$dir_pw_work_queue:pw_work_queue",
"$dir_pw_work_queue:test_thread",
]
}
pw_source_set("packet_buffer_queue") {
public = [ "public/pw_rpc_transport/internal/packet_buffer_queue.h" ]
public_configs = [ ":public_include_path" ]
public_deps = [
"$dir_pw_bytes",
"$dir_pw_containers",
"$dir_pw_result",
"$dir_pw_status",
"$dir_pw_sync:lock_annotations",
"$dir_pw_sync:mutex",
]
deps = [
"$dir_pw_assert:check",
"$dir_pw_log",
]
visibility = [ ":*" ]
}
pw_test("packet_buffer_queue_test") {
sources = [ "internal/packet_buffer_queue_test.cc" ]
deps = [
":packet_buffer_queue",
"$dir_pw_bytes",
"$dir_pw_containers",
"$dir_pw_result",
"$dir_pw_status",
"$dir_pw_sync:lock_annotations",
"$dir_pw_sync:mutex",
]
}
pw_source_set("local_rpc_egress") {
public = [ "public/pw_rpc_transport/local_rpc_egress.h" ]
sources = [ "local_rpc_egress.cc" ]
public_deps = [
":packet_buffer_queue",
":rpc_transport",
"$dir_pw_bytes",
"$dir_pw_result",
"$dir_pw_rpc:client",
"$dir_pw_status",
"$dir_pw_sync:thread_notification",
"$dir_pw_thread:thread_core",
]
deps = [ "$dir_pw_log" ]
}
pw_test("local_rpc_egress_test") {
sources = [ "local_rpc_egress_test.cc" ]
enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread"
deps = [
":local_rpc_egress",
":rpc_transport",
":service_registry",
":test_protos.pwpb_rpc",
"$dir_pw_bytes",
"$dir_pw_chrono:system_clock",
"$dir_pw_rpc:client_server",
"$dir_pw_status",
"$dir_pw_sync:counting_semaphore",
"$dir_pw_sync:thread_notification",
"$dir_pw_thread:sleep",
"$dir_pw_thread:thread",
"$dir_pw_thread_stl:thread",
]
}
pw_source_set("hdlc_framing") {
public = [ "public/pw_rpc_transport/hdlc_framing.h" ]
public_configs = [ ":public_include_path" ]
public_deps = [
":rpc_transport",
"$dir_pw_bytes",
"$dir_pw_hdlc:decoder",
"$dir_pw_hdlc:default_addresses",
"$dir_pw_hdlc:encoder",
"$dir_pw_result",
"$dir_pw_status",
"$dir_pw_stream:pw_stream",
]
}
pw_test("hdlc_framing_test") {
sources = [ "hdlc_framing_test.cc" ]
deps = [
":hdlc_framing",
"$dir_pw_bytes",
"$dir_pw_status",
]
# TODO: https://pwbug.dev/325509758 - Doesn't work on the Pico yet; hangs
# indefinitely.
if (pw_build_EXECUTABLE_TARGET_TYPE == "pico_executable") {
enable_if = false
}
}
pw_source_set("simple_framing") {
public = [ "public/pw_rpc_transport/simple_framing.h" ]
public_configs = [ ":public_include_path" ]
sources = [ "simple_framing.cc" ]
public_deps = [
":rpc_transport",
"$dir_pw_assert",
"$dir_pw_bytes",
"$dir_pw_status",
]
deps = [ "$dir_pw_log" ]
}
pw_test("simple_framing_test") {
sources = [ "simple_framing_test.cc" ]
deps = [
":simple_framing",
"$dir_pw_bytes",
"$dir_pw_log",
"$dir_pw_status",
]
# TODO: https://pwbug.dev/325509758 - Doesn't work on the Pico yet; hangs
# indefinitely.
if (pw_build_EXECUTABLE_TARGET_TYPE == "pico_executable") {
enable_if = false
}
}
pw_source_set("egress_ingress") {
public = [ "public/pw_rpc_transport/egress_ingress.h" ]
sources = [ "egress_ingress.cc" ]
public_deps = [
":hdlc_framing",
":rpc_transport",
":simple_framing",
"$dir_pw_bytes",
"$dir_pw_metric",
"$dir_pw_rpc:client",
"$dir_pw_status",
"$dir_pw_sync:mutex",
]
deps = [ "$dir_pw_log" ]
}
pw_test("egress_ingress_test") {
sources = [ "egress_ingress_test.cc" ]
enable_if = pw_thread_THREAD_BACKEND != ""
deps = [
":egress_ingress",
":service_registry",
":test_protos.pwpb_rpc",
"$dir_pw_bytes",
"$dir_pw_metric",
"$dir_pw_status",
"$dir_pw_sync:thread_notification",
]
# TODO: https://pwbug.dev/325509758 - Doesn't work on the Pico yet; hangs
# indefinitely.
if (pw_build_EXECUTABLE_TARGET_TYPE == "pico_executable") {
enable_if = false
}
}
pw_source_set("socket_rpc_transport") {
public = [ "public/pw_rpc_transport/socket_rpc_transport.h" ]
sources = [ "socket_rpc_transport.cc" ]
public_deps = [
":rpc_transport",
"$dir_pw_assert",
"$dir_pw_chrono:system_clock",
"$dir_pw_status",
"$dir_pw_stream:pw_stream",
"$dir_pw_stream:socket_stream",
"$dir_pw_sync:condition_variable",
"$dir_pw_sync:lock_annotations",
"$dir_pw_sync:mutex",
"$dir_pw_sync:thread_notification",
"$dir_pw_thread:sleep",
"$dir_pw_thread:thread_core",
]
deps = [ "$dir_pw_log" ]
}
pw_source_set("stream_rpc_frame_sender") {
public = [ "public/pw_rpc_transport/stream_rpc_frame_sender.h" ]
public_deps = [
":rpc_transport",
"$dir_pw_status",
"$dir_pw_stream:pw_stream",
]
}
pw_source_set("stream_rpc_dispatcher") {
public = [ "public/pw_rpc_transport/stream_rpc_dispatcher.h" ]
public_deps = [
":egress_ingress",
"$dir_pw_status",
"$dir_pw_stream:pw_stream",
]
}
pw_test("socket_rpc_transport_test") {
sources = [ "socket_rpc_transport_test.cc" ]
enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" &&
host_os != "win" && pw_sync_CONDITION_VARIABLE_BACKEND != ""
deps = [
":socket_rpc_transport",
"$dir_pw_bytes",
"$dir_pw_log",
"$dir_pw_status",
"$dir_pw_sync:thread_notification",
"$dir_pw_thread:sleep",
"$dir_pw_thread:thread",
"$dir_pw_thread_stl:thread",
]
}
pw_test("stream_rpc_dispatcher_test") {
sources = [ "stream_rpc_dispatcher_test.cc" ]
enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread"
deps = [
":stream_rpc_dispatcher",
"$dir_pw_bytes",
"$dir_pw_log",
"$dir_pw_status",
"$dir_pw_sync:mutex",
"$dir_pw_sync:thread_notification",
"$dir_pw_thread:thread",
"$dir_pw_thread_stl:thread",
]
}
pw_test("rpc_integration_test") {
sources = [ "rpc_integration_test.cc" ]
enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" &&
host_os != "win" && pw_sync_CONDITION_VARIABLE_BACKEND != ""
deps = [
":egress_ingress",
":local_rpc_egress",
":service_registry",
":socket_rpc_transport",
":test_protos.pwpb_rpc",
"$dir_pw_chrono:system_clock",
"$dir_pw_log",
"$dir_pw_rpc:client_server",
"$dir_pw_rpc:synchronous_client_api",
"$dir_pw_string",
"$dir_pw_thread:thread",
"$dir_pw_thread_stl:thread",
]
}
pw_proto_library("test_protos") {
sources = [ "internal/test.proto" ]
inputs = [ "internal/test.options" ]
prefix = "pw_rpc_transport"
}