1# Copyright 2023 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 15import("//build_overrides/pigweed.gni") 16 17import("$dir_pw_build/target_types.gni") 18import("$dir_pw_chrono/backend.gni") 19import("$dir_pw_docgen/docs.gni") 20import("$dir_pw_protobuf_compiler/proto.gni") 21import("$dir_pw_sync/backend.gni") 22import("$dir_pw_thread/backend.gni") 23import("$dir_pw_unit_test/test.gni") 24 25config("public_include_path") { 26 include_dirs = [ "public" ] 27 visibility = [ ":*" ] 28} 29 30pw_doc_group("docs") { 31 sources = [ "docs.rst" ] 32} 33 34pw_test_group("tests") { 35 tests = [ 36 ":egress_ingress_test", 37 ":hdlc_framing_test", 38 ":local_rpc_egress_test", 39 ":packet_buffer_queue_test", 40 ":rpc_integration_test", 41 ":simple_framing_test", 42 ":socket_rpc_transport_test", 43 ":stream_rpc_dispatcher_test", 44 ] 45} 46 47pw_source_set("rpc_transport") { 48 public = [ "public/pw_rpc_transport/rpc_transport.h" ] 49 public_configs = [ ":public_include_path" ] 50 public_deps = [ 51 "$dir_pw_bytes", 52 "$dir_pw_function", 53 "$dir_pw_status", 54 ] 55} 56 57pw_source_set("service_registry") { 58 public = [ "public/pw_rpc_transport/service_registry.h" ] 59 public_deps = [ 60 ":rpc_transport", 61 "$dir_pw_rpc:client_server", 62 "$dir_pw_span", 63 "$dir_pw_status", 64 ] 65} 66 67pw_source_set("test_loopback_service_registry") { 68 public = [ "public/pw_rpc_transport/test_loopback_service_registry.h" ] 69 public_deps = [ 70 ":egress_ingress", 71 ":service_registry", 72 "$dir_pw_work_queue:pw_work_queue", 73 "$dir_pw_work_queue:test_thread", 74 ] 75} 76 77pw_source_set("packet_buffer_queue") { 78 public = [ "public/pw_rpc_transport/internal/packet_buffer_queue.h" ] 79 public_configs = [ ":public_include_path" ] 80 public_deps = [ 81 "$dir_pw_bytes", 82 "$dir_pw_containers", 83 "$dir_pw_result", 84 "$dir_pw_status", 85 "$dir_pw_sync:lock_annotations", 86 "$dir_pw_sync:mutex", 87 ] 88 deps = [ 89 "$dir_pw_assert:check", 90 "$dir_pw_log", 91 ] 92 visibility = [ ":*" ] 93} 94 95pw_test("packet_buffer_queue_test") { 96 sources = [ "internal/packet_buffer_queue_test.cc" ] 97 deps = [ 98 ":packet_buffer_queue", 99 "$dir_pw_bytes", 100 "$dir_pw_containers", 101 "$dir_pw_result", 102 "$dir_pw_status", 103 "$dir_pw_sync:lock_annotations", 104 "$dir_pw_sync:mutex", 105 ] 106} 107 108pw_source_set("local_rpc_egress") { 109 public = [ "public/pw_rpc_transport/local_rpc_egress.h" ] 110 sources = [ "local_rpc_egress.cc" ] 111 public_deps = [ 112 ":packet_buffer_queue", 113 ":rpc_transport", 114 "$dir_pw_bytes", 115 "$dir_pw_result", 116 "$dir_pw_rpc:client", 117 "$dir_pw_status", 118 "$dir_pw_sync:thread_notification", 119 "$dir_pw_thread:thread_core", 120 ] 121 deps = [ "$dir_pw_log" ] 122} 123 124pw_test("local_rpc_egress_test") { 125 sources = [ "local_rpc_egress_test.cc" ] 126 enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" 127 deps = [ 128 ":local_rpc_egress", 129 ":rpc_transport", 130 ":service_registry", 131 ":test_protos.pwpb_rpc", 132 "$dir_pw_bytes", 133 "$dir_pw_chrono:system_clock", 134 "$dir_pw_rpc:client_server", 135 "$dir_pw_status", 136 "$dir_pw_sync:counting_semaphore", 137 "$dir_pw_sync:thread_notification", 138 "$dir_pw_thread:sleep", 139 "$dir_pw_thread:thread", 140 "$dir_pw_thread_stl:thread", 141 ] 142} 143 144pw_source_set("hdlc_framing") { 145 public = [ "public/pw_rpc_transport/hdlc_framing.h" ] 146 public_configs = [ ":public_include_path" ] 147 public_deps = [ 148 ":rpc_transport", 149 "$dir_pw_bytes", 150 "$dir_pw_hdlc:decoder", 151 "$dir_pw_hdlc:default_addresses", 152 "$dir_pw_hdlc:encoder", 153 "$dir_pw_result", 154 "$dir_pw_status", 155 "$dir_pw_stream:pw_stream", 156 ] 157} 158 159pw_test("hdlc_framing_test") { 160 sources = [ "hdlc_framing_test.cc" ] 161 deps = [ 162 ":hdlc_framing", 163 "$dir_pw_bytes", 164 "$dir_pw_status", 165 ] 166} 167 168pw_source_set("simple_framing") { 169 public = [ "public/pw_rpc_transport/simple_framing.h" ] 170 public_configs = [ ":public_include_path" ] 171 sources = [ "simple_framing.cc" ] 172 public_deps = [ 173 ":rpc_transport", 174 "$dir_pw_assert", 175 "$dir_pw_bytes", 176 "$dir_pw_status", 177 ] 178 deps = [ "$dir_pw_log" ] 179} 180 181pw_test("simple_framing_test") { 182 sources = [ "simple_framing_test.cc" ] 183 deps = [ 184 ":simple_framing", 185 "$dir_pw_bytes", 186 "$dir_pw_log", 187 "$dir_pw_status", 188 ] 189} 190 191pw_source_set("egress_ingress") { 192 public = [ "public/pw_rpc_transport/egress_ingress.h" ] 193 sources = [ "egress_ingress.cc" ] 194 public_deps = [ 195 ":hdlc_framing", 196 ":rpc_transport", 197 ":simple_framing", 198 "$dir_pw_bytes", 199 "$dir_pw_metric", 200 "$dir_pw_rpc:client", 201 "$dir_pw_status", 202 "$dir_pw_sync:mutex", 203 ] 204 deps = [ "$dir_pw_log" ] 205} 206 207pw_test("egress_ingress_test") { 208 sources = [ "egress_ingress_test.cc" ] 209 enable_if = pw_thread_THREAD_BACKEND != "" 210 deps = [ 211 ":egress_ingress", 212 ":service_registry", 213 ":test_protos.pwpb_rpc", 214 "$dir_pw_bytes", 215 "$dir_pw_metric", 216 "$dir_pw_status", 217 "$dir_pw_sync:thread_notification", 218 ] 219} 220 221pw_source_set("socket_rpc_transport") { 222 public = [ "public/pw_rpc_transport/socket_rpc_transport.h" ] 223 sources = [ "socket_rpc_transport.cc" ] 224 public_deps = [ 225 ":rpc_transport", 226 "$dir_pw_assert", 227 "$dir_pw_chrono:system_clock", 228 "$dir_pw_status", 229 "$dir_pw_stream:pw_stream", 230 "$dir_pw_stream:socket_stream", 231 "$dir_pw_sync:condition_variable", 232 "$dir_pw_sync:lock_annotations", 233 "$dir_pw_sync:mutex", 234 "$dir_pw_sync:thread_notification", 235 "$dir_pw_thread:sleep", 236 "$dir_pw_thread:thread_core", 237 ] 238 deps = [ "$dir_pw_log" ] 239} 240 241pw_source_set("stream_rpc_frame_sender") { 242 public = [ "public/pw_rpc_transport/stream_rpc_frame_sender.h" ] 243 public_deps = [ 244 ":rpc_transport", 245 "$dir_pw_status", 246 "$dir_pw_stream:pw_stream", 247 ] 248} 249 250pw_source_set("stream_rpc_dispatcher") { 251 public = [ "public/pw_rpc_transport/stream_rpc_dispatcher.h" ] 252 public_deps = [ 253 ":egress_ingress", 254 "$dir_pw_status", 255 "$dir_pw_stream:pw_stream", 256 ] 257} 258 259pw_test("socket_rpc_transport_test") { 260 sources = [ "socket_rpc_transport_test.cc" ] 261 enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" && 262 host_os != "win" && pw_sync_CONDITION_VARIABLE_BACKEND != "" 263 deps = [ 264 ":socket_rpc_transport", 265 "$dir_pw_bytes", 266 "$dir_pw_log", 267 "$dir_pw_status", 268 "$dir_pw_sync:thread_notification", 269 "$dir_pw_thread:sleep", 270 "$dir_pw_thread:thread", 271 "$dir_pw_thread_stl:thread", 272 ] 273} 274 275pw_test("stream_rpc_dispatcher_test") { 276 sources = [ "stream_rpc_dispatcher_test.cc" ] 277 enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" 278 deps = [ 279 ":stream_rpc_dispatcher", 280 "$dir_pw_bytes", 281 "$dir_pw_log", 282 "$dir_pw_status", 283 "$dir_pw_sync:mutex", 284 "$dir_pw_sync:thread_notification", 285 "$dir_pw_thread:thread", 286 "$dir_pw_thread_stl:thread", 287 ] 288} 289 290pw_test("rpc_integration_test") { 291 sources = [ "rpc_integration_test.cc" ] 292 enable_if = pw_thread_THREAD_BACKEND == "$dir_pw_thread_stl:thread" && 293 host_os != "win" && pw_sync_CONDITION_VARIABLE_BACKEND != "" 294 deps = [ 295 ":egress_ingress", 296 ":local_rpc_egress", 297 ":service_registry", 298 ":socket_rpc_transport", 299 ":test_protos.pwpb_rpc", 300 "$dir_pw_chrono:system_clock", 301 "$dir_pw_log", 302 "$dir_pw_rpc:client_server", 303 "$dir_pw_rpc:synchronous_client_api", 304 "$dir_pw_string", 305 "$dir_pw_thread:thread", 306 "$dir_pw_thread_stl:thread", 307 ] 308} 309 310pw_proto_library("test_protos") { 311 sources = [ "internal/test.proto" ] 312 inputs = [ "internal/test.pwpb_options" ] 313 prefix = "pw_rpc_transport" 314} 315