1*61c4878aSAndroid Build Coastguard Worker// Copyright 2022 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 Workerpackage { 16*61c4878aSAndroid Build Coastguard Worker default_applicable_licenses: ["external_pigweed_license"], 17*61c4878aSAndroid Build Coastguard Worker} 18*61c4878aSAndroid Build Coastguard Worker 19*61c4878aSAndroid Build Coastguard Workercc_library_static { 20*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf", 21*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 22*61c4878aSAndroid Build Coastguard Worker vendor_available: true, 23*61c4878aSAndroid Build Coastguard Worker export_include_dirs: ["public"], 24*61c4878aSAndroid Build Coastguard Worker defaults: [ 25*61c4878aSAndroid Build Coastguard Worker "pw_android_common_backends", 26*61c4878aSAndroid Build Coastguard Worker ], 27*61c4878aSAndroid Build Coastguard Worker header_libs: [ 28*61c4878aSAndroid Build Coastguard Worker "fuchsia_sdk_lib_fit", 29*61c4878aSAndroid Build Coastguard Worker "fuchsia_sdk_lib_stdcompat", 30*61c4878aSAndroid Build Coastguard Worker "pw_assert", 31*61c4878aSAndroid Build Coastguard Worker "pw_log", 32*61c4878aSAndroid Build Coastguard Worker ], 33*61c4878aSAndroid Build Coastguard Worker export_header_lib_headers: [ 34*61c4878aSAndroid Build Coastguard Worker "pw_assert", 35*61c4878aSAndroid Build Coastguard Worker "pw_log", 36*61c4878aSAndroid Build Coastguard Worker ], 37*61c4878aSAndroid Build Coastguard Worker host_supported: true, 38*61c4878aSAndroid Build Coastguard Worker srcs: [ 39*61c4878aSAndroid Build Coastguard Worker "decoder.cc", 40*61c4878aSAndroid Build Coastguard Worker "encoder.cc", 41*61c4878aSAndroid Build Coastguard Worker "find.cc", 42*61c4878aSAndroid Build Coastguard Worker "map_utils.cc", 43*61c4878aSAndroid Build Coastguard Worker "message.cc", 44*61c4878aSAndroid Build Coastguard Worker "stream_decoder.cc", 45*61c4878aSAndroid Build Coastguard Worker ], 46*61c4878aSAndroid Build Coastguard Worker static_libs: [ 47*61c4878aSAndroid Build Coastguard Worker "pw_bytes", 48*61c4878aSAndroid Build Coastguard Worker "pw_containers", 49*61c4878aSAndroid Build Coastguard Worker "pw_function", 50*61c4878aSAndroid Build Coastguard Worker "pw_polyfill", 51*61c4878aSAndroid Build Coastguard Worker "pw_preprocessor", 52*61c4878aSAndroid Build Coastguard Worker "pw_result", 53*61c4878aSAndroid Build Coastguard Worker "pw_span", 54*61c4878aSAndroid Build Coastguard Worker "pw_status", 55*61c4878aSAndroid Build Coastguard Worker "pw_stream", 56*61c4878aSAndroid Build Coastguard Worker "pw_string", 57*61c4878aSAndroid Build Coastguard Worker "pw_toolchain", 58*61c4878aSAndroid Build Coastguard Worker "pw_varint", 59*61c4878aSAndroid Build Coastguard Worker ], 60*61c4878aSAndroid Build Coastguard Worker export_static_lib_headers: [ 61*61c4878aSAndroid Build Coastguard Worker "pw_bytes", 62*61c4878aSAndroid Build Coastguard Worker "pw_containers", 63*61c4878aSAndroid Build Coastguard Worker "pw_function", 64*61c4878aSAndroid Build Coastguard Worker "pw_preprocessor", 65*61c4878aSAndroid Build Coastguard Worker "pw_result", 66*61c4878aSAndroid Build Coastguard Worker "pw_span", 67*61c4878aSAndroid Build Coastguard Worker "pw_status", 68*61c4878aSAndroid Build Coastguard Worker "pw_stream", 69*61c4878aSAndroid Build Coastguard Worker "pw_toolchain", 70*61c4878aSAndroid Build Coastguard Worker "pw_varint", 71*61c4878aSAndroid Build Coastguard Worker ], 72*61c4878aSAndroid Build Coastguard Worker} 73*61c4878aSAndroid Build Coastguard Worker 74*61c4878aSAndroid Build Coastguard Workercc_library_headers { 75*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_pwpb", 76*61c4878aSAndroid Build Coastguard Worker cpp_std: "c++20", 77*61c4878aSAndroid Build Coastguard Worker vendor_available: true, 78*61c4878aSAndroid Build Coastguard Worker host_supported: true, 79*61c4878aSAndroid Build Coastguard Worker generated_headers: [ 80*61c4878aSAndroid Build Coastguard Worker "google_protobuf_descriptor_pwpb_h", 81*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos_common_pwpb_h", 82*61c4878aSAndroid Build Coastguard Worker ], 83*61c4878aSAndroid Build Coastguard Worker export_generated_headers: [ 84*61c4878aSAndroid Build Coastguard Worker "google_protobuf_descriptor_pwpb_h", 85*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos_common_pwpb_h", 86*61c4878aSAndroid Build Coastguard Worker ], 87*61c4878aSAndroid Build Coastguard Worker} 88*61c4878aSAndroid Build Coastguard Worker 89*61c4878aSAndroid Build Coastguard Workergenrule { 90*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_protos_common_nanopb_h", 91*61c4878aSAndroid Build Coastguard Worker srcs: [":pw_protobuf_common_proto_with_prefix"], 92*61c4878aSAndroid Build Coastguard Worker cmd: "python3 $(location pw_protobuf_compiler_py) " + 93*61c4878aSAndroid Build Coastguard Worker "--proto-path=external/pigweed/pw_protobuf/ " + 94*61c4878aSAndroid Build Coastguard Worker "--out-dir=$$(dirname $(location pw_protobuf_protos/common.pb.h)) " + 95*61c4878aSAndroid Build Coastguard Worker "--plugin-path=$(location protoc-gen-nanopb) " + 96*61c4878aSAndroid Build Coastguard Worker "--compile-dir=$$(dirname $(in)) " + 97*61c4878aSAndroid Build Coastguard Worker "--sources $(in) " + 98*61c4878aSAndroid Build Coastguard Worker "--language nanopb " + 99*61c4878aSAndroid Build Coastguard Worker "--no-experimental-proto3-optional " + 100*61c4878aSAndroid Build Coastguard Worker "--no-experimental-editions " + 101*61c4878aSAndroid Build Coastguard Worker "--pwpb-no-oneof-callbacks " + 102*61c4878aSAndroid Build Coastguard Worker "--protoc=$(location aprotoc) ", 103*61c4878aSAndroid Build Coastguard Worker out: [ 104*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos/common.pb.h", 105*61c4878aSAndroid Build Coastguard Worker ], 106*61c4878aSAndroid Build Coastguard Worker tools: [ 107*61c4878aSAndroid Build Coastguard Worker "aprotoc", 108*61c4878aSAndroid Build Coastguard Worker "protoc-gen-nanopb", 109*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_compiler_py", 110*61c4878aSAndroid Build Coastguard Worker ], 111*61c4878aSAndroid Build Coastguard Worker} 112*61c4878aSAndroid Build Coastguard Worker 113*61c4878aSAndroid Build Coastguard Worker// Copies the proto files to a prefix directory to add the prefix to the 114*61c4878aSAndroid Build Coastguard Worker// compiled proto. The prefix is taken from the directory name of the first 115*61c4878aSAndroid Build Coastguard Worker// item listen in out. 116*61c4878aSAndroid Build Coastguard Workergenrule_defaults { 117*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_add_prefix_to_proto", 118*61c4878aSAndroid Build Coastguard Worker cmd: "out_files=($(out)); prefix=$$(dirname $${out_files[0]}); " + 119*61c4878aSAndroid Build Coastguard Worker "mkdir -p $${prefix}; cp -t $${prefix} $(in);", 120*61c4878aSAndroid Build Coastguard Worker} 121*61c4878aSAndroid Build Coastguard Worker 122*61c4878aSAndroid Build Coastguard Workerfilegroup { 123*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_common_proto", 124*61c4878aSAndroid Build Coastguard Worker srcs: [ 125*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos/common.proto", 126*61c4878aSAndroid Build Coastguard Worker ], 127*61c4878aSAndroid Build Coastguard Worker} 128*61c4878aSAndroid Build Coastguard Worker 129*61c4878aSAndroid Build Coastguard Workergenrule { 130*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_common_proto_with_prefix", 131*61c4878aSAndroid Build Coastguard Worker defaults: ["pw_protobuf_add_prefix_to_proto"], 132*61c4878aSAndroid Build Coastguard Worker srcs: [ 133*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos/common.proto", 134*61c4878aSAndroid Build Coastguard Worker ], 135*61c4878aSAndroid Build Coastguard Worker out: [ 136*61c4878aSAndroid Build Coastguard Worker "pw_protobuf/pw_protobuf_protos/common.proto", 137*61c4878aSAndroid Build Coastguard Worker ], 138*61c4878aSAndroid Build Coastguard Worker} 139*61c4878aSAndroid Build Coastguard Worker 140*61c4878aSAndroid Build Coastguard Workergenrule { 141*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_protos_common_pwpb_h", 142*61c4878aSAndroid Build Coastguard Worker srcs: [":pw_protobuf_common_proto_with_prefix"], 143*61c4878aSAndroid Build Coastguard Worker cmd: "python3 $(location pw_protobuf_compiler_py) " + 144*61c4878aSAndroid Build Coastguard Worker "--proto-path=external/pigweed/pw_protobuf/ " + 145*61c4878aSAndroid Build Coastguard Worker "--proto-path=external/protobuf/src/ " + 146*61c4878aSAndroid Build Coastguard Worker "--out-dir=$$(dirname $(location pw_protobuf_protos/common.pwpb.h)) " + 147*61c4878aSAndroid Build Coastguard Worker "--plugin-path=$(location pw_protobuf_plugin_py) " + 148*61c4878aSAndroid Build Coastguard Worker "--compile-dir=$$(dirname $(in)) " + 149*61c4878aSAndroid Build Coastguard Worker "--sources $(in) " + 150*61c4878aSAndroid Build Coastguard Worker "--language pwpb " + 151*61c4878aSAndroid Build Coastguard Worker "--no-experimental-proto3-optional " + 152*61c4878aSAndroid Build Coastguard Worker "--no-experimental-editions " + 153*61c4878aSAndroid Build Coastguard Worker "--pwpb-no-oneof-callbacks " + 154*61c4878aSAndroid Build Coastguard Worker "--protoc=$(location aprotoc) ", 155*61c4878aSAndroid Build Coastguard Worker out: [ 156*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos/common.pwpb.h", 157*61c4878aSAndroid Build Coastguard Worker ], 158*61c4878aSAndroid Build Coastguard Worker tools: [ 159*61c4878aSAndroid Build Coastguard Worker "aprotoc", 160*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_plugin_py", 161*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_compiler_py", 162*61c4878aSAndroid Build Coastguard Worker ], 163*61c4878aSAndroid Build Coastguard Worker} 164*61c4878aSAndroid Build Coastguard Worker 165*61c4878aSAndroid Build Coastguard Worker// Generate the google/protobuf/descriptor.pwpb.h which is commonly imported. 166*61c4878aSAndroid Build Coastguard Workergenrule { 167*61c4878aSAndroid Build Coastguard Worker name: "google_protobuf_descriptor_pwpb_h", 168*61c4878aSAndroid Build Coastguard Worker // The libprotobuf-internal-descriptor-proto filegroup is unavailable so 169*61c4878aSAndroid Build Coastguard Worker // instead filter for just the descriptor.proto. 170*61c4878aSAndroid Build Coastguard Worker srcs: [":libprotobuf-internal-protos"], 171*61c4878aSAndroid Build Coastguard Worker cmd: "in_files=($(in)); compile_dir=$$(dirname $${in_files[0]}); " + 172*61c4878aSAndroid Build Coastguard Worker "proto_files=(); " + 173*61c4878aSAndroid Build Coastguard Worker "for f in \"$${in_files[@]}\"; do " + 174*61c4878aSAndroid Build Coastguard Worker "if [[ \"$${f##*descriptor.}\" == \"proto\" ]]; then " + 175*61c4878aSAndroid Build Coastguard Worker "proto_files+=(\"$${f}\"); fi; done; " + 176*61c4878aSAndroid Build Coastguard Worker "python3 $(location pw_protobuf_compiler_py) " + 177*61c4878aSAndroid Build Coastguard Worker "--proto-path=external/protobuf/src/ " + 178*61c4878aSAndroid Build Coastguard Worker "--out-dir=$$(dirname $(location google/protobuf/descriptor.pwpb.h)) " + 179*61c4878aSAndroid Build Coastguard Worker "--plugin-path=$(location pw_protobuf_plugin_py) " + 180*61c4878aSAndroid Build Coastguard Worker "--compile-dir=$${compile_dir} " + 181*61c4878aSAndroid Build Coastguard Worker "--sources $${proto_files} " + 182*61c4878aSAndroid Build Coastguard Worker "--language pwpb " + 183*61c4878aSAndroid Build Coastguard Worker "--no-experimental-proto3-optional " + 184*61c4878aSAndroid Build Coastguard Worker "--no-experimental-editions " + 185*61c4878aSAndroid Build Coastguard Worker "--pwpb-no-oneof-callbacks " + 186*61c4878aSAndroid Build Coastguard Worker "--protoc=$(location aprotoc) ", 187*61c4878aSAndroid Build Coastguard Worker out: [ 188*61c4878aSAndroid Build Coastguard Worker "google/protobuf/descriptor.pwpb.h", 189*61c4878aSAndroid Build Coastguard Worker ], 190*61c4878aSAndroid Build Coastguard Worker tools: [ 191*61c4878aSAndroid Build Coastguard Worker "aprotoc", 192*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_plugin_py", 193*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_compiler_py", 194*61c4878aSAndroid Build Coastguard Worker ], 195*61c4878aSAndroid Build Coastguard Worker} 196*61c4878aSAndroid Build Coastguard Worker 197*61c4878aSAndroid Build Coastguard Workergenrule { 198*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_codegen_protos_py", 199*61c4878aSAndroid Build Coastguard Worker srcs: ["pw_protobuf_codegen_protos/codegen_options.proto"], 200*61c4878aSAndroid Build Coastguard Worker cmd: "$(location aprotoc) " + 201*61c4878aSAndroid Build Coastguard Worker "-I$$(dirname $(in)) " + 202*61c4878aSAndroid Build Coastguard Worker "--python_out=$(genDir) " + 203*61c4878aSAndroid Build Coastguard Worker "$(in)", 204*61c4878aSAndroid Build Coastguard Worker out: [ 205*61c4878aSAndroid Build Coastguard Worker "codegen_options_pb2.py", 206*61c4878aSAndroid Build Coastguard Worker ], 207*61c4878aSAndroid Build Coastguard Worker tools: [ 208*61c4878aSAndroid Build Coastguard Worker "aprotoc", 209*61c4878aSAndroid Build Coastguard Worker ], 210*61c4878aSAndroid Build Coastguard Worker} 211*61c4878aSAndroid Build Coastguard Worker 212*61c4878aSAndroid Build Coastguard Workerpython_library_host { 213*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_codegen_protos_py_lib", 214*61c4878aSAndroid Build Coastguard Worker srcs: [ 215*61c4878aSAndroid Build Coastguard Worker ":pw_protobuf_codegen_protos_py", 216*61c4878aSAndroid Build Coastguard Worker ], 217*61c4878aSAndroid Build Coastguard Worker pkg_path: "pw_protobuf_codegen_protos", 218*61c4878aSAndroid Build Coastguard Worker} 219*61c4878aSAndroid Build Coastguard Worker 220*61c4878aSAndroid Build Coastguard Workergenrule { 221*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_protos_py", 222*61c4878aSAndroid Build Coastguard Worker srcs: [ 223*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos/common.proto", 224*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos/field_options.proto", 225*61c4878aSAndroid Build Coastguard Worker "pw_protobuf_protos/status.proto", 226*61c4878aSAndroid Build Coastguard Worker ":libprotobuf-internal-protos", 227*61c4878aSAndroid Build Coastguard Worker ], 228*61c4878aSAndroid Build Coastguard Worker cmd: "$(location aprotoc) " + 229*61c4878aSAndroid Build Coastguard Worker "-I$$(dirname $(location pw_protobuf_protos/common.proto)) " + 230*61c4878aSAndroid Build Coastguard Worker "-Iexternal/protobuf/src/ " + 231*61c4878aSAndroid Build Coastguard Worker "--python_out=$(genDir) " + 232*61c4878aSAndroid Build Coastguard Worker "$(in)", 233*61c4878aSAndroid Build Coastguard Worker out: [ 234*61c4878aSAndroid Build Coastguard Worker "common_pb2.py", 235*61c4878aSAndroid Build Coastguard Worker "field_options_pb2.py", 236*61c4878aSAndroid Build Coastguard Worker "status_pb2.py", 237*61c4878aSAndroid Build Coastguard Worker ], 238*61c4878aSAndroid Build Coastguard Worker tools: [ 239*61c4878aSAndroid Build Coastguard Worker "aprotoc", 240*61c4878aSAndroid Build Coastguard Worker ], 241*61c4878aSAndroid Build Coastguard Worker} 242*61c4878aSAndroid Build Coastguard Worker 243*61c4878aSAndroid Build Coastguard Workerpython_library_host { 244*61c4878aSAndroid Build Coastguard Worker name: "pw_protobuf_protos_py_lib", 245*61c4878aSAndroid Build Coastguard Worker srcs: [ 246*61c4878aSAndroid Build Coastguard Worker ":pw_protobuf_protos_py", 247*61c4878aSAndroid Build Coastguard Worker ], 248*61c4878aSAndroid Build Coastguard Worker pkg_path: "pw_protobuf_protos", 249*61c4878aSAndroid Build Coastguard Worker} 250