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