xref: /aosp_15_r20/external/pigweed/pw_hdlc/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_async2/backend.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_bloat/bloat.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/python.gni")
20*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
21*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
22*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_fuzzer/fuzz_test.gni")
23*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.gni")
24*61c4878aSAndroid Build Coastguard Worker
25*61c4878aSAndroid Build Coastguard Workerconfig("default_config") {
26*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public" ]
27*61c4878aSAndroid Build Coastguard Worker}
28*61c4878aSAndroid Build Coastguard Worker
29*61c4878aSAndroid Build Coastguard Workergroup("pw_hdlc") {
30*61c4878aSAndroid Build Coastguard Worker  public_deps = [
31*61c4878aSAndroid Build Coastguard Worker    ":decoder",
32*61c4878aSAndroid Build Coastguard Worker    ":encoded_size",
33*61c4878aSAndroid Build Coastguard Worker    ":encoder",
34*61c4878aSAndroid Build Coastguard Worker  ]
35*61c4878aSAndroid Build Coastguard Worker}
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Workerpw_source_set("common") {
38*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
39*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_hdlc/internal/protocol.h" ]
40*61c4878aSAndroid Build Coastguard Worker  public_deps = [ dir_pw_varint ]
41*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
42*61c4878aSAndroid Build Coastguard Worker}
43*61c4878aSAndroid Build Coastguard Worker
44*61c4878aSAndroid Build Coastguard Workerpw_source_set("encoded_size") {
45*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
46*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_hdlc/encoded_size.h" ]
47*61c4878aSAndroid Build Coastguard Worker  public_deps = [
48*61c4878aSAndroid Build Coastguard Worker    ":common",
49*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_bytes",
50*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_span",
51*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_varint",
52*61c4878aSAndroid Build Coastguard Worker  ]
53*61c4878aSAndroid Build Coastguard Worker}
54*61c4878aSAndroid Build Coastguard Worker
55*61c4878aSAndroid Build Coastguard Workerpw_source_set("decoder") {
56*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
57*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_hdlc/decoder.h" ]
58*61c4878aSAndroid Build Coastguard Worker  sources = [ "decoder.cc" ]
59*61c4878aSAndroid Build Coastguard Worker  public_deps = [
60*61c4878aSAndroid Build Coastguard Worker    ":common",
61*61c4878aSAndroid Build Coastguard Worker    dir_pw_bytes,
62*61c4878aSAndroid Build Coastguard Worker    dir_pw_checksum,
63*61c4878aSAndroid Build Coastguard Worker    dir_pw_result,
64*61c4878aSAndroid Build Coastguard Worker    dir_pw_span,
65*61c4878aSAndroid Build Coastguard Worker    dir_pw_status,
66*61c4878aSAndroid Build Coastguard Worker  ]
67*61c4878aSAndroid Build Coastguard Worker  deps = [ dir_pw_log ]
68*61c4878aSAndroid Build Coastguard Worker  friend = [ ":*" ]
69*61c4878aSAndroid Build Coastguard Worker}
70*61c4878aSAndroid Build Coastguard Worker
71*61c4878aSAndroid Build Coastguard Workerpw_source_set("encoder") {
72*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
73*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_hdlc/encoder.h" ]
74*61c4878aSAndroid Build Coastguard Worker  sources = [ "encoder.cc" ]
75*61c4878aSAndroid Build Coastguard Worker  public_deps = [
76*61c4878aSAndroid Build Coastguard Worker    ":common",
77*61c4878aSAndroid Build Coastguard Worker    dir_pw_bytes,
78*61c4878aSAndroid Build Coastguard Worker    dir_pw_checksum,
79*61c4878aSAndroid Build Coastguard Worker    dir_pw_span,
80*61c4878aSAndroid Build Coastguard Worker    dir_pw_status,
81*61c4878aSAndroid Build Coastguard Worker    dir_pw_stream,
82*61c4878aSAndroid Build Coastguard Worker  ]
83*61c4878aSAndroid Build Coastguard Worker  deps = [ ":encoded_size" ]
84*61c4878aSAndroid Build Coastguard Worker  friend = [ ":*" ]
85*61c4878aSAndroid Build Coastguard Worker}
86*61c4878aSAndroid Build Coastguard Worker
87*61c4878aSAndroid Build Coastguard Workerpw_source_set("rpc_channel_output") {
88*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
89*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_hdlc/rpc_channel.h" ]
90*61c4878aSAndroid Build Coastguard Worker  public_deps = [
91*61c4878aSAndroid Build Coastguard Worker    ":pw_hdlc",
92*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_rpc:server",
93*61c4878aSAndroid Build Coastguard Worker    dir_pw_span,
94*61c4878aSAndroid Build Coastguard Worker  ]
95*61c4878aSAndroid Build Coastguard Worker}
96*61c4878aSAndroid Build Coastguard Worker
97*61c4878aSAndroid Build Coastguard Workerpw_source_set("default_addresses") {
98*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
99*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_hdlc/default_addresses.h" ]
100*61c4878aSAndroid Build Coastguard Worker}
101*61c4878aSAndroid Build Coastguard Worker
102*61c4878aSAndroid Build Coastguard Workerpw_source_set("packet_parser") {
103*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
104*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_hdlc/wire_packet_parser.h" ]
105*61c4878aSAndroid Build Coastguard Worker  sources = [ "wire_packet_parser.cc" ]
106*61c4878aSAndroid Build Coastguard Worker  public_deps = [
107*61c4878aSAndroid Build Coastguard Worker    ":pw_hdlc",
108*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_router:packet_parser",
109*61c4878aSAndroid Build Coastguard Worker  ]
110*61c4878aSAndroid Build Coastguard Worker  deps = [
111*61c4878aSAndroid Build Coastguard Worker    dir_pw_bytes,
112*61c4878aSAndroid Build Coastguard Worker    dir_pw_checksum,
113*61c4878aSAndroid Build Coastguard Worker  ]
114*61c4878aSAndroid Build Coastguard Worker}
115*61c4878aSAndroid Build Coastguard Worker
116*61c4878aSAndroid Build Coastguard Worker# A backend for pw_rpc's `system_server` that sends and receives HDLC-framed RPC
117*61c4878aSAndroid Build Coastguard Worker# packets over pw_sys_io.
118*61c4878aSAndroid Build Coastguard Worker#
119*61c4878aSAndroid Build Coastguard Worker# Warning: This system server is polling and blocking, so it's not
120*61c4878aSAndroid Build Coastguard Worker# production-ready. This exists for simplifying initial bringup/testing, and
121*61c4878aSAndroid Build Coastguard Worker# should not be used in any performance-sensitive application.
122*61c4878aSAndroid Build Coastguard Workerpw_source_set("hdlc_sys_io_system_server") {
123*61c4878aSAndroid Build Coastguard Worker  deps = [
124*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_hdlc:decoder",
125*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_hdlc:default_addresses",
126*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_hdlc:rpc_channel_output",
127*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_rpc/system_server:facade",
128*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_stream:sys_io_stream",
129*61c4878aSAndroid Build Coastguard Worker    dir_pw_log,
130*61c4878aSAndroid Build Coastguard Worker  ]
131*61c4878aSAndroid Build Coastguard Worker  sources = [ "hdlc_sys_io_system_server.cc" ]
132*61c4878aSAndroid Build Coastguard Worker}
133*61c4878aSAndroid Build Coastguard Worker
134*61c4878aSAndroid Build Coastguard Workerpw_source_set("router") {
135*61c4878aSAndroid Build Coastguard Worker  public_configs = [ ":default_config" ]
136*61c4878aSAndroid Build Coastguard Worker  public_deps = [
137*61c4878aSAndroid Build Coastguard Worker    ":decoder",
138*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_async2:dispatcher",
139*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_async2:poll",
140*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_containers:vector",
141*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_multibuf:allocator",
142*61c4878aSAndroid Build Coastguard Worker    dir_pw_channel,
143*61c4878aSAndroid Build Coastguard Worker    dir_pw_multibuf,
144*61c4878aSAndroid Build Coastguard Worker    dir_pw_status,
145*61c4878aSAndroid Build Coastguard Worker  ]
146*61c4878aSAndroid Build Coastguard Worker  deps = [
147*61c4878aSAndroid Build Coastguard Worker    ":encoder",
148*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_multibuf:stream",
149*61c4878aSAndroid Build Coastguard Worker    dir_pw_log,
150*61c4878aSAndroid Build Coastguard Worker    dir_pw_result,
151*61c4878aSAndroid Build Coastguard Worker    dir_pw_stream,
152*61c4878aSAndroid Build Coastguard Worker  ]
153*61c4878aSAndroid Build Coastguard Worker  public = [ "public/pw_hdlc/router.h" ]
154*61c4878aSAndroid Build Coastguard Worker  sources = [ "router.cc" ]
155*61c4878aSAndroid Build Coastguard Worker}
156*61c4878aSAndroid Build Coastguard Worker
157*61c4878aSAndroid Build Coastguard Workerpw_test("router_test") {
158*61c4878aSAndroid Build Coastguard Worker  enable_if = pw_async2_DISPATCHER_BACKEND != ""
159*61c4878aSAndroid Build Coastguard Worker  deps = [
160*61c4878aSAndroid Build Coastguard Worker    ":router",
161*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_allocator:testing",
162*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_async2:pend_func_task",
163*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_channel:forwarding_channel",
164*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_channel:loopback_channel",
165*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_multibuf:simple_allocator",
166*61c4878aSAndroid Build Coastguard Worker  ]
167*61c4878aSAndroid Build Coastguard Worker  sources = [ "router_test.cc" ]
168*61c4878aSAndroid Build Coastguard Worker}
169*61c4878aSAndroid Build Coastguard Worker
170*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") {
171*61c4878aSAndroid Build Coastguard Worker  tests = [
172*61c4878aSAndroid Build Coastguard Worker    ":encoded_size_test",
173*61c4878aSAndroid Build Coastguard Worker    ":encoder_test",
174*61c4878aSAndroid Build Coastguard Worker    ":decoder_test",
175*61c4878aSAndroid Build Coastguard Worker    ":router_test",
176*61c4878aSAndroid Build Coastguard Worker    ":rpc_channel_test",
177*61c4878aSAndroid Build Coastguard Worker    ":wire_packet_parser_test",
178*61c4878aSAndroid Build Coastguard Worker  ]
179*61c4878aSAndroid Build Coastguard Worker  group_deps = [
180*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_preprocessor:tests",
181*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_status:tests",
182*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_stream:tests",
183*61c4878aSAndroid Build Coastguard Worker  ]
184*61c4878aSAndroid Build Coastguard Worker}
185*61c4878aSAndroid Build Coastguard Worker
186*61c4878aSAndroid Build Coastguard Workerpw_test("encoded_size_test") {
187*61c4878aSAndroid Build Coastguard Worker  deps = [
188*61c4878aSAndroid Build Coastguard Worker    ":pw_hdlc",
189*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_bytes",
190*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_result",
191*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_stream",
192*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_varint",
193*61c4878aSAndroid Build Coastguard Worker  ]
194*61c4878aSAndroid Build Coastguard Worker  sources = [ "encoded_size_test.cc" ]
195*61c4878aSAndroid Build Coastguard Worker
196*61c4878aSAndroid Build Coastguard Worker  # TODO: b/259746255 - Remove this when everything compiles with -Wconversion.
197*61c4878aSAndroid Build Coastguard Worker  configs = [ "$dir_pw_build:conversion_warnings" ]
198*61c4878aSAndroid Build Coastguard Worker}
199*61c4878aSAndroid Build Coastguard Worker
200*61c4878aSAndroid Build Coastguard Workerpw_test("encoder_test") {
201*61c4878aSAndroid Build Coastguard Worker  deps = [ ":pw_hdlc" ]
202*61c4878aSAndroid Build Coastguard Worker  sources = [ "encoder_test.cc" ]
203*61c4878aSAndroid Build Coastguard Worker
204*61c4878aSAndroid Build Coastguard Worker  # TODO: b/259746255 - Remove this when everything compiles with -Wconversion.
205*61c4878aSAndroid Build Coastguard Worker  configs = [ "$dir_pw_build:conversion_warnings" ]
206*61c4878aSAndroid Build Coastguard Worker}
207*61c4878aSAndroid Build Coastguard Worker
208*61c4878aSAndroid Build Coastguard Workerpw_python_action("generate_decoder_test") {
209*61c4878aSAndroid Build Coastguard Worker  outputs = [ "$target_gen_dir/generated_decoder_test.cc" ]
210*61c4878aSAndroid Build Coastguard Worker  script = "py/decode_test.py"
211*61c4878aSAndroid Build Coastguard Worker  args = [ "--generate-cc-test" ] + rebase_path(outputs, root_build_dir)
212*61c4878aSAndroid Build Coastguard Worker  python_deps = [
213*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_build/py",
214*61c4878aSAndroid Build Coastguard Worker    "py",
215*61c4878aSAndroid Build Coastguard Worker  ]
216*61c4878aSAndroid Build Coastguard Worker}
217*61c4878aSAndroid Build Coastguard Worker
218*61c4878aSAndroid Build Coastguard Workerpw_fuzz_test("decoder_test") {
219*61c4878aSAndroid Build Coastguard Worker  deps = [ ":pw_hdlc" ]
220*61c4878aSAndroid Build Coastguard Worker  source_gen_deps = [ ":generate_decoder_test" ]
221*61c4878aSAndroid Build Coastguard Worker  sources = [ "decoder_test.cc" ]
222*61c4878aSAndroid Build Coastguard Worker
223*61c4878aSAndroid Build Coastguard Worker  # TODO: b/259746255 - Remove this when everything compiles with -Wconversion.
224*61c4878aSAndroid Build Coastguard Worker  configs = [ "$dir_pw_build:conversion_warnings" ]
225*61c4878aSAndroid Build Coastguard Worker}
226*61c4878aSAndroid Build Coastguard Worker
227*61c4878aSAndroid Build Coastguard Workerpw_test("rpc_channel_test") {
228*61c4878aSAndroid Build Coastguard Worker  deps = [
229*61c4878aSAndroid Build Coastguard Worker    ":pw_hdlc",
230*61c4878aSAndroid Build Coastguard Worker    ":rpc_channel_output",
231*61c4878aSAndroid Build Coastguard Worker  ]
232*61c4878aSAndroid Build Coastguard Worker  sources = [ "rpc_channel_test.cc" ]
233*61c4878aSAndroid Build Coastguard Worker
234*61c4878aSAndroid Build Coastguard Worker  # TODO: b/259746255 - Remove this when everything compiles with -Wconversion.
235*61c4878aSAndroid Build Coastguard Worker  configs = [ "$dir_pw_build:conversion_warnings" ]
236*61c4878aSAndroid Build Coastguard Worker}
237*61c4878aSAndroid Build Coastguard Worker
238*61c4878aSAndroid Build Coastguard Workerpw_test("wire_packet_parser_test") {
239*61c4878aSAndroid Build Coastguard Worker  deps = [
240*61c4878aSAndroid Build Coastguard Worker    ":packet_parser",
241*61c4878aSAndroid Build Coastguard Worker    dir_pw_bytes,
242*61c4878aSAndroid Build Coastguard Worker  ]
243*61c4878aSAndroid Build Coastguard Worker  sources = [ "wire_packet_parser_test.cc" ]
244*61c4878aSAndroid Build Coastguard Worker
245*61c4878aSAndroid Build Coastguard Worker  # TODO: b/259746255 - Remove this when everything compiles with -Wconversion.
246*61c4878aSAndroid Build Coastguard Worker  configs = [ "$dir_pw_build:conversion_warnings" ]
247*61c4878aSAndroid Build Coastguard Worker}
248*61c4878aSAndroid Build Coastguard Worker
249*61c4878aSAndroid Build Coastguard Workerpw_size_diff("size_report") {
250*61c4878aSAndroid Build Coastguard Worker  title = "HDLC sizes"
251*61c4878aSAndroid Build Coastguard Worker
252*61c4878aSAndroid Build Coastguard Worker  binaries = [
253*61c4878aSAndroid Build Coastguard Worker    {
254*61c4878aSAndroid Build Coastguard Worker      target = "size_report:full"
255*61c4878aSAndroid Build Coastguard Worker      base = "size_report:base"
256*61c4878aSAndroid Build Coastguard Worker      label = "HDLC encode and decode"
257*61c4878aSAndroid Build Coastguard Worker    },
258*61c4878aSAndroid Build Coastguard Worker    {
259*61c4878aSAndroid Build Coastguard Worker      target = "size_report:full_crc"
260*61c4878aSAndroid Build Coastguard Worker      base = "size_report:base_crc"
261*61c4878aSAndroid Build Coastguard Worker      label = "HDLC encode and decode, ignoring CRC and varint"
262*61c4878aSAndroid Build Coastguard Worker    },
263*61c4878aSAndroid Build Coastguard Worker  ]
264*61c4878aSAndroid Build Coastguard Worker}
265*61c4878aSAndroid Build Coastguard Worker
266*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
267*61c4878aSAndroid Build Coastguard Worker  sources = [
268*61c4878aSAndroid Build Coastguard Worker    "api.rst",
269*61c4878aSAndroid Build Coastguard Worker    "design.rst",
270*61c4878aSAndroid Build Coastguard Worker    "docs.rst",
271*61c4878aSAndroid Build Coastguard Worker    "guide.rst",
272*61c4878aSAndroid Build Coastguard Worker    "router.rst",
273*61c4878aSAndroid Build Coastguard Worker    "rpc_example/docs.rst",
274*61c4878aSAndroid Build Coastguard Worker    "size.rst",
275*61c4878aSAndroid Build Coastguard Worker  ]
276*61c4878aSAndroid Build Coastguard Worker  inputs = [
277*61c4878aSAndroid Build Coastguard Worker    "Kconfig",
278*61c4878aSAndroid Build Coastguard Worker    "py/pw_hdlc/decode.py",
279*61c4878aSAndroid Build Coastguard Worker    "py/pw_hdlc/encode.py",
280*61c4878aSAndroid Build Coastguard Worker  ]
281*61c4878aSAndroid Build Coastguard Worker  report_deps = [ ":size_report" ]
282*61c4878aSAndroid Build Coastguard Worker}
283