xref: /aosp_15_r20/external/pigweed/pw_rpc_transport/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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