xref: /aosp_15_r20/external/pigweed/pw_protobuf/Android.bp (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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