xref: /aosp_15_r20/external/pigweed/pw_rpc/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 Workerjava_library {
20*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_java_client",
21*61c4878aSAndroid Build Coastguard Worker    srcs: ["java/main/dev/pigweed/pw_rpc/*.java"],
22*61c4878aSAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
23*61c4878aSAndroid Build Coastguard Worker    static_libs: [
24*61c4878aSAndroid Build Coastguard Worker        "pw_log_android_java",
25*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_packet_proto_java_lite",
26*61c4878aSAndroid Build Coastguard Worker    ],
27*61c4878aSAndroid Build Coastguard Worker    libs: [
28*61c4878aSAndroid Build Coastguard Worker        "auto_value_annotations",
29*61c4878aSAndroid Build Coastguard Worker        "guava",
30*61c4878aSAndroid Build Coastguard Worker        "jsr305",
31*61c4878aSAndroid Build Coastguard Worker        "libprotobuf-java-lite",
32*61c4878aSAndroid Build Coastguard Worker    ],
33*61c4878aSAndroid Build Coastguard Worker    plugins: ["auto_value_plugin"],
34*61c4878aSAndroid Build Coastguard Worker    sdk_version: "current",
35*61c4878aSAndroid Build Coastguard Worker}
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Workerjava_library_static {
38*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_packet_proto_java_lite",
39*61c4878aSAndroid Build Coastguard Worker    host_supported: true,
40*61c4878aSAndroid Build Coastguard Worker    proto: {
41*61c4878aSAndroid Build Coastguard Worker        type: "lite",
42*61c4878aSAndroid Build Coastguard Worker    },
43*61c4878aSAndroid Build Coastguard Worker    srcs: ["internal/packet.proto"],
44*61c4878aSAndroid Build Coastguard Worker    sdk_version: "current",
45*61c4878aSAndroid Build Coastguard Worker}
46*61c4878aSAndroid Build Coastguard Worker
47*61c4878aSAndroid Build Coastguard Workerjava_library_static {
48*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_proto_java_lite",
49*61c4878aSAndroid Build Coastguard Worker    visibility: ["//visibility:public"],
50*61c4878aSAndroid Build Coastguard Worker    host_supported: true,
51*61c4878aSAndroid Build Coastguard Worker    proto: {
52*61c4878aSAndroid Build Coastguard Worker        type: "lite",
53*61c4878aSAndroid Build Coastguard Worker    },
54*61c4878aSAndroid Build Coastguard Worker    srcs: ["echo.proto"],
55*61c4878aSAndroid Build Coastguard Worker    sdk_version: "current",
56*61c4878aSAndroid Build Coastguard Worker}
57*61c4878aSAndroid Build Coastguard Worker
58*61c4878aSAndroid Build Coastguard Workerfilegroup {
59*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_src_files",
60*61c4878aSAndroid Build Coastguard Worker    srcs: [
61*61c4878aSAndroid Build Coastguard Worker        "call.cc",
62*61c4878aSAndroid Build Coastguard Worker        "channel.cc",
63*61c4878aSAndroid Build Coastguard Worker        "channel_list.cc",
64*61c4878aSAndroid Build Coastguard Worker        "client.cc",
65*61c4878aSAndroid Build Coastguard Worker        "client_call.cc",
66*61c4878aSAndroid Build Coastguard Worker        "client_server.cc",
67*61c4878aSAndroid Build Coastguard Worker        "endpoint.cc",
68*61c4878aSAndroid Build Coastguard Worker        "fake_channel_output.cc",
69*61c4878aSAndroid Build Coastguard Worker        "packet.cc",
70*61c4878aSAndroid Build Coastguard Worker        "packet_meta.cc",
71*61c4878aSAndroid Build Coastguard Worker        "server.cc",
72*61c4878aSAndroid Build Coastguard Worker        "server_call.cc",
73*61c4878aSAndroid Build Coastguard Worker        "service.cc",
74*61c4878aSAndroid Build Coastguard Worker    ],
75*61c4878aSAndroid Build Coastguard Worker}
76*61c4878aSAndroid Build Coastguard Worker
77*61c4878aSAndroid Build Coastguard Worker// Do not use this directly. It is used by the pw_rpc_defaults to keep the
78*61c4878aSAndroid Build Coastguard Worker// path to the "public" directory relative to this module.
79*61c4878aSAndroid Build Coastguard Workercc_library_headers {
80*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_include_dirs",
81*61c4878aSAndroid Build Coastguard Worker    export_include_dirs: [
82*61c4878aSAndroid Build Coastguard Worker        "public",
83*61c4878aSAndroid Build Coastguard Worker    ],
84*61c4878aSAndroid Build Coastguard Worker    vendor_available: true,
85*61c4878aSAndroid Build Coastguard Worker    host_supported: true,
86*61c4878aSAndroid Build Coastguard Worker}
87*61c4878aSAndroid Build Coastguard Worker
88*61c4878aSAndroid Build Coastguard Worker// This rule must be instantiated, i.e.
89*61c4878aSAndroid Build Coastguard Worker//
90*61c4878aSAndroid Build Coastguard Worker//   cc_library_static {
91*61c4878aSAndroid Build Coastguard Worker//       name: "pw_rpc_<instance_name>",
92*61c4878aSAndroid Build Coastguard Worker//       defaults: [
93*61c4878aSAndroid Build Coastguard Worker//           "pw_rpc_cflags_<instance_name>",
94*61c4878aSAndroid Build Coastguard Worker//           "pw_rpc_defaults",
95*61c4878aSAndroid Build Coastguard Worker//       ],
96*61c4878aSAndroid Build Coastguard Worker//   }
97*61c4878aSAndroid Build Coastguard Worker//
98*61c4878aSAndroid Build Coastguard Worker// where pw_rpc_cflags_<instance_name> defines your flags, i.e.
99*61c4878aSAndroid Build Coastguard Worker//
100*61c4878aSAndroid Build Coastguard Worker//   cc_defaults {
101*61c4878aSAndroid Build Coastguard Worker//       name: "pw_rpc_cflags_<instance_name>",
102*61c4878aSAndroid Build Coastguard Worker//       cflags: [
103*61c4878aSAndroid Build Coastguard Worker//           "-DPW_RPC_USE_GLOBAL_MUTEX=0",
104*61c4878aSAndroid Build Coastguard Worker//           "-DPW_RPC_COMPLETION_REQUEST_CALLBACK",
105*61c4878aSAndroid Build Coastguard Worker//           "-DPW_RPC_DYNAMIC_ALLOCATION",
106*61c4878aSAndroid Build Coastguard Worker//       ],
107*61c4878aSAndroid Build Coastguard Worker//   }
108*61c4878aSAndroid Build Coastguard Worker//
109*61c4878aSAndroid Build Coastguard Worker// see pw_rpc_nanopb_defaults, pw_rpc_raw_defaults
110*61c4878aSAndroid Build Coastguard Workercc_defaults {
111*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_defaults",
112*61c4878aSAndroid Build Coastguard Worker    cpp_std: "c++20",
113*61c4878aSAndroid Build Coastguard Worker    defaults: [
114*61c4878aSAndroid Build Coastguard Worker        "pw_android_common_backends",
115*61c4878aSAndroid Build Coastguard Worker    ],
116*61c4878aSAndroid Build Coastguard Worker    header_libs: [
117*61c4878aSAndroid Build Coastguard Worker        "fuchsia_sdk_lib_fit",
118*61c4878aSAndroid Build Coastguard Worker        "fuchsia_sdk_lib_stdcompat",
119*61c4878aSAndroid Build Coastguard Worker        "pw_assert",
120*61c4878aSAndroid Build Coastguard Worker        "pw_log",
121*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_include_dirs",
122*61c4878aSAndroid Build Coastguard Worker        "pw_sync",
123*61c4878aSAndroid Build Coastguard Worker    ],
124*61c4878aSAndroid Build Coastguard Worker    export_header_lib_headers: [
125*61c4878aSAndroid Build Coastguard Worker        "fuchsia_sdk_lib_fit",
126*61c4878aSAndroid Build Coastguard Worker        "fuchsia_sdk_lib_stdcompat",
127*61c4878aSAndroid Build Coastguard Worker        "pw_assert",
128*61c4878aSAndroid Build Coastguard Worker        "pw_log",
129*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_include_dirs",
130*61c4878aSAndroid Build Coastguard Worker        "pw_sync",
131*61c4878aSAndroid Build Coastguard Worker    ],
132*61c4878aSAndroid Build Coastguard Worker    static_libs: [
133*61c4878aSAndroid Build Coastguard Worker        "pw_bytes",
134*61c4878aSAndroid Build Coastguard Worker        "pw_containers",
135*61c4878aSAndroid Build Coastguard Worker        "pw_function",
136*61c4878aSAndroid Build Coastguard Worker        "pw_polyfill",
137*61c4878aSAndroid Build Coastguard Worker        "pw_preprocessor",
138*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf",
139*61c4878aSAndroid Build Coastguard Worker        "pw_result",
140*61c4878aSAndroid Build Coastguard Worker        "pw_span",
141*61c4878aSAndroid Build Coastguard Worker        "pw_status",
142*61c4878aSAndroid Build Coastguard Worker        "pw_stream",
143*61c4878aSAndroid Build Coastguard Worker        "pw_string",
144*61c4878aSAndroid Build Coastguard Worker        "pw_sync_baremetal",
145*61c4878aSAndroid Build Coastguard Worker        "pw_toolchain",
146*61c4878aSAndroid Build Coastguard Worker        "pw_varint",
147*61c4878aSAndroid Build Coastguard Worker    ],
148*61c4878aSAndroid Build Coastguard Worker    export_static_lib_headers: [
149*61c4878aSAndroid Build Coastguard Worker        "pw_bytes",
150*61c4878aSAndroid Build Coastguard Worker        "pw_containers",
151*61c4878aSAndroid Build Coastguard Worker        "pw_function",
152*61c4878aSAndroid Build Coastguard Worker        "pw_polyfill",
153*61c4878aSAndroid Build Coastguard Worker        "pw_preprocessor",
154*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf",
155*61c4878aSAndroid Build Coastguard Worker        "pw_result",
156*61c4878aSAndroid Build Coastguard Worker        "pw_span",
157*61c4878aSAndroid Build Coastguard Worker        "pw_status",
158*61c4878aSAndroid Build Coastguard Worker        "pw_stream",
159*61c4878aSAndroid Build Coastguard Worker        "pw_string",
160*61c4878aSAndroid Build Coastguard Worker        "pw_sync_baremetal",
161*61c4878aSAndroid Build Coastguard Worker        "pw_toolchain",
162*61c4878aSAndroid Build Coastguard Worker        "pw_varint",
163*61c4878aSAndroid Build Coastguard Worker    ],
164*61c4878aSAndroid Build Coastguard Worker    generated_headers: [
165*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_internal_packet_pwpb_h",
166*61c4878aSAndroid Build Coastguard Worker    ],
167*61c4878aSAndroid Build Coastguard Worker    export_generated_headers: [
168*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_internal_packet_pwpb_h",
169*61c4878aSAndroid Build Coastguard Worker    ],
170*61c4878aSAndroid Build Coastguard Worker    srcs: [
171*61c4878aSAndroid Build Coastguard Worker        ":pw_rpc_src_files",
172*61c4878aSAndroid Build Coastguard Worker    ],
173*61c4878aSAndroid Build Coastguard Worker}
174*61c4878aSAndroid Build Coastguard Worker
175*61c4878aSAndroid Build Coastguard Workergenrule {
176*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_internal_packet_pwpb_h",
177*61c4878aSAndroid Build Coastguard Worker    srcs: ["internal/packet.proto"],
178*61c4878aSAndroid Build Coastguard Worker    cmd: "python3 $(location pw_protobuf_compiler_py) " +
179*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$$(dirname $(location pw_rpc/internal/packet.pwpb.h)) " +
180*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_protobuf_plugin_py) " +
181*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$$(dirname $(in)) " +
182*61c4878aSAndroid Build Coastguard Worker        "--sources $(in) " +
183*61c4878aSAndroid Build Coastguard Worker        "--language pwpb " +
184*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
185*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
186*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
187*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc) ",
188*61c4878aSAndroid Build Coastguard Worker    out: [
189*61c4878aSAndroid Build Coastguard Worker        "pw_rpc/internal/packet.pwpb.h",
190*61c4878aSAndroid Build Coastguard Worker    ],
191*61c4878aSAndroid Build Coastguard Worker    tools: [
192*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
193*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_plugin_py",
194*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
195*61c4878aSAndroid Build Coastguard Worker    ],
196*61c4878aSAndroid Build Coastguard Worker}
197*61c4878aSAndroid Build Coastguard Worker
198*61c4878aSAndroid Build Coastguard Workergenrule {
199*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_internal_packet_py",
200*61c4878aSAndroid Build Coastguard Worker    srcs: ["internal/packet.proto"],
201*61c4878aSAndroid Build Coastguard Worker    cmd: "python3 $(location pw_protobuf_compiler_py) " +
202*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
203*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$$(dirname $(in)) " +
204*61c4878aSAndroid Build Coastguard Worker        "--sources $(in) " +
205*61c4878aSAndroid Build Coastguard Worker        "--language python " +
206*61c4878aSAndroid Build Coastguard Worker        "--no-generate-type-hints " +
207*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
208*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
209*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
210*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
211*61c4878aSAndroid Build Coastguard Worker    out: [
212*61c4878aSAndroid Build Coastguard Worker        "packet_pb2.py",
213*61c4878aSAndroid Build Coastguard Worker    ],
214*61c4878aSAndroid Build Coastguard Worker    tools: [
215*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
216*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
217*61c4878aSAndroid Build Coastguard Worker    ],
218*61c4878aSAndroid Build Coastguard Worker}
219*61c4878aSAndroid Build Coastguard Worker
220*61c4878aSAndroid Build Coastguard Worker// Generates .pb.c and .pb.h nanopb files.
221*61c4878aSAndroid Build Coastguard Worker// The output file name is based on the srcs file name with an added extension.
222*61c4878aSAndroid Build Coastguard Worker// All dependencies, including .options files, must be listed in srcs and cannot
223*61c4878aSAndroid Build Coastguard Worker// be prefixed. Use the _with_prefix rules if prefixed. Only .proto files are
224*61c4878aSAndroid Build Coastguard Worker// passed to the compile script.
225*61c4878aSAndroid Build Coastguard Worker//
226*61c4878aSAndroid Build Coastguard Worker// Args:
227*61c4878aSAndroid Build Coastguard Worker//   srcs: The list of source files without a prefix.
228*61c4878aSAndroid Build Coastguard Worker//   out: A one-element list with the output file without a prefix.
229*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
230*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_nanopb_proto",
231*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); compile_dir=$$(dirname $${in_files[0]}); " +
232*61c4878aSAndroid Build Coastguard Worker        "proto_files=(); " +
233*61c4878aSAndroid Build Coastguard Worker        "for f in \"$${in_files[@]}\"; do " +
234*61c4878aSAndroid Build Coastguard Worker        "if [[ \"$${f##*.}\" == \"proto\" ]]; then " +
235*61c4878aSAndroid Build Coastguard Worker        "proto_files+=(\"$${f}\"); " +
236*61c4878aSAndroid Build Coastguard Worker        "fi; done; " +
237*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
238*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location protoc-gen-nanopb) " +
239*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
240*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
241*61c4878aSAndroid Build Coastguard Worker        "--language nanopb " +
242*61c4878aSAndroid Build Coastguard Worker        "--sources $${proto_files} " +
243*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
244*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
245*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
246*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
247*61c4878aSAndroid Build Coastguard Worker    tools: [
248*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
249*61c4878aSAndroid Build Coastguard Worker        "protoc-gen-nanopb",
250*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
251*61c4878aSAndroid Build Coastguard Worker    ],
252*61c4878aSAndroid Build Coastguard Worker}
253*61c4878aSAndroid Build Coastguard Worker
254*61c4878aSAndroid Build Coastguard Worker// Same as pw_rpc_generate_nanopb_proto but the proto files are compiled with a
255*61c4878aSAndroid Build Coastguard Worker// single prefix, which can be added with pw_rpc_add_prefix_to_proto.
256*61c4878aSAndroid Build Coastguard Worker// Since pw_rpc_add_prefix_to_proto may include .option files as an input, only
257*61c4878aSAndroid Build Coastguard Worker// .proto files are passed to the compile script. Make sure .option files are
258*61c4878aSAndroid Build Coastguard Worker// prefixed in the same rule as their .proto files. All dependencies must also
259*61c4878aSAndroid Build Coastguard Worker// be listed in srcs and have a single prefix.
260*61c4878aSAndroid Build Coastguard Worker//
261*61c4878aSAndroid Build Coastguard Worker// See the pw_rpc_echo_service_nanopb target for an example. The echo.proto file
262*61c4878aSAndroid Build Coastguard Worker// is compiled with "pw_rpc" as the prefix.
263*61c4878aSAndroid Build Coastguard Worker//
264*61c4878aSAndroid Build Coastguard Worker// Args:
265*61c4878aSAndroid Build Coastguard Worker//   srcs: The list of source files all with one prefix folder.
266*61c4878aSAndroid Build Coastguard Worker//   out: A one-element list with the output file with a prefix folder. The
267*61c4878aSAndroid Build Coastguard Worker//     prefix is based on the parent name of the first item in srcs.
268*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
269*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_nanopb_proto_with_prefix",
270*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); prefix_dir=$$(dirname $${in_files[0]}); " +
271*61c4878aSAndroid Build Coastguard Worker        "compile_dir=$$(dirname $${prefix_dir}); " +
272*61c4878aSAndroid Build Coastguard Worker        "proto_files=(); " +
273*61c4878aSAndroid Build Coastguard Worker        "proto_paths_args=\"\"; " +
274*61c4878aSAndroid Build Coastguard Worker        "for f in \"$${in_files[@]}\"; do " +
275*61c4878aSAndroid Build Coastguard Worker        "if [[ \"$${f##*.}\" == \"proto\" ]]; then " +
276*61c4878aSAndroid Build Coastguard Worker        "proto_files+=(\"$${f}\"); " +
277*61c4878aSAndroid Build Coastguard Worker        "proto_path_args+=\"--proto-path=$$(dirname $$(dirname $${f})) \"; " +
278*61c4878aSAndroid Build Coastguard Worker        "fi; done; " +
279*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
280*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location protoc-gen-nanopb) " +
281*61c4878aSAndroid Build Coastguard Worker        "$${proto_path_args} " +
282*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
283*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
284*61c4878aSAndroid Build Coastguard Worker        "--language nanopb " +
285*61c4878aSAndroid Build Coastguard Worker        "--sources $${proto_files} " +
286*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
287*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
288*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
289*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
290*61c4878aSAndroid Build Coastguard Worker    tools: [
291*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
292*61c4878aSAndroid Build Coastguard Worker        "protoc-gen-nanopb",
293*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
294*61c4878aSAndroid Build Coastguard Worker    ],
295*61c4878aSAndroid Build Coastguard Worker}
296*61c4878aSAndroid Build Coastguard Worker
297*61c4878aSAndroid Build Coastguard Worker// Generate the header nanopb RPC file (.rpc.pb.h).
298*61c4878aSAndroid Build Coastguard Worker//
299*61c4878aSAndroid Build Coastguard Worker// Args:
300*61c4878aSAndroid Build Coastguard Worker//   srcs: The list of source files without a prefix.
301*61c4878aSAndroid Build Coastguard Worker//   out: A one-element list with the output file without a prefix. The name is
302*61c4878aSAndroid Build Coastguard Worker//     based on the srcs file name with a .rpc.pb.h extension.
303*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
304*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_nanopb_rpc_header",
305*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); compile_dir=$$(dirname $${in_files[0]}); " +
306*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
307*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_rpc_plugin_nanopb_py) " +
308*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
309*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
310*61c4878aSAndroid Build Coastguard Worker        "--language nanopb_rpc " +
311*61c4878aSAndroid Build Coastguard Worker        "--sources $(in) " +
312*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
313*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
314*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
315*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
316*61c4878aSAndroid Build Coastguard Worker    tools: [
317*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
318*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
319*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_plugin_nanopb_py",
320*61c4878aSAndroid Build Coastguard Worker    ],
321*61c4878aSAndroid Build Coastguard Worker}
322*61c4878aSAndroid Build Coastguard Worker
323*61c4878aSAndroid Build Coastguard Worker// Same as pw_rpc_generate_nanopb_rpc_header but the proto files are compiled
324*61c4878aSAndroid Build Coastguard Worker// with a single prefix, which can be added with pw_rpc_add_prefix_to_proto.
325*61c4878aSAndroid Build Coastguard Worker// Since pw_rpc_add_prefix_to_proto may include .option files as an input, only
326*61c4878aSAndroid Build Coastguard Worker// .proto files are passed to the compile script. Make sure .option files are
327*61c4878aSAndroid Build Coastguard Worker// prefixed in the same rule as their .proto files. All dependencies must also
328*61c4878aSAndroid Build Coastguard Worker// be listed in srcs and have a single prefix.
329*61c4878aSAndroid Build Coastguard Worker//
330*61c4878aSAndroid Build Coastguard Worker// See the pw_rpc_echo_service_nanopb target for an example. The echo.proto file
331*61c4878aSAndroid Build Coastguard Worker// is compiled with "pw_rpc" as the prefix.
332*61c4878aSAndroid Build Coastguard Worker//
333*61c4878aSAndroid Build Coastguard Worker// Args:
334*61c4878aSAndroid Build Coastguard Worker//   srcs: The list of source files all with one prefix folder.
335*61c4878aSAndroid Build Coastguard Worker//   out: A one-element list with the output file with a prefix folder. The
336*61c4878aSAndroid Build Coastguard Worker//     prefix is based on the parent name of the first item in srcs.
337*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
338*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_nanopb_rpc_header_with_prefix",
339*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); prefix_dir=$$(dirname $${in_files[0]}); " +
340*61c4878aSAndroid Build Coastguard Worker        "compile_dir=$$(dirname $${prefix_dir}); " +
341*61c4878aSAndroid Build Coastguard Worker        "proto_files=(); " +
342*61c4878aSAndroid Build Coastguard Worker        "proto_paths_args=\"\"; " +
343*61c4878aSAndroid Build Coastguard Worker        "for f in \"$${in_files[@]}\"; do " +
344*61c4878aSAndroid Build Coastguard Worker        "if [[ \"$${f##*.}\" == \"proto\" ]]; then " +
345*61c4878aSAndroid Build Coastguard Worker        "proto_files+=(\"$${f}\"); " +
346*61c4878aSAndroid Build Coastguard Worker        "proto_path_args+=\"--proto-path=$$(dirname $$(dirname $${f})) \"; " +
347*61c4878aSAndroid Build Coastguard Worker        "fi; done; " +
348*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
349*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_rpc_plugin_nanopb_py) " +
350*61c4878aSAndroid Build Coastguard Worker        "$${proto_path_args} " +
351*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
352*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
353*61c4878aSAndroid Build Coastguard Worker        "--language nanopb_rpc " +
354*61c4878aSAndroid Build Coastguard Worker        "--sources $${proto_files} " +
355*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
356*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
357*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
358*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
359*61c4878aSAndroid Build Coastguard Worker    tools: [
360*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
361*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
362*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_plugin_nanopb_py",
363*61c4878aSAndroid Build Coastguard Worker    ],
364*61c4878aSAndroid Build Coastguard Worker}
365*61c4878aSAndroid Build Coastguard Worker
366*61c4878aSAndroid Build Coastguard Worker// Generate the header raw RPC file.
367*61c4878aSAndroid Build Coastguard Worker// The output file name is based on the srcs file name with a .raw_rpc.pb.h extension.
368*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
369*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_raw_rpc_header",
370*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); compile_dir=$$(dirname $${in_files[0]}); " +
371*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
372*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_rpc_plugin_rawpb_py) " +
373*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
374*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
375*61c4878aSAndroid Build Coastguard Worker        "--language raw_rpc " +
376*61c4878aSAndroid Build Coastguard Worker        "--sources $(in) " +
377*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
378*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
379*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
380*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
381*61c4878aSAndroid Build Coastguard Worker    tools: [
382*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
383*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
384*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_plugin_rawpb_py",
385*61c4878aSAndroid Build Coastguard Worker    ],
386*61c4878aSAndroid Build Coastguard Worker}
387*61c4878aSAndroid Build Coastguard Worker
388*61c4878aSAndroid Build Coastguard Worker// Same as pw_rpc_generate_raw_rpc_header but the proto files are compiled with
389*61c4878aSAndroid Build Coastguard Worker// a single prefix, which can be added with pw_rpc_add_prefix_to_proto.
390*61c4878aSAndroid Build Coastguard Worker// Since pw_rpc_add_prefix_to_proto may include .option files as an input, only
391*61c4878aSAndroid Build Coastguard Worker// .proto files are passed to the compile script. Make sure .option files are
392*61c4878aSAndroid Build Coastguard Worker// prefixed in the same rule as their .proto files.
393*61c4878aSAndroid Build Coastguard Worker//
394*61c4878aSAndroid Build Coastguard Worker// See the pw_rpc_echo_service_pwpb target for an example. The echo.proto file
395*61c4878aSAndroid Build Coastguard Worker// is compiled with "pw_rpc" as the prefix.
396*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
397*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_raw_rpc_header_with_prefix",
398*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); prefix_dir=$$(dirname $${in_files[0]}); " +
399*61c4878aSAndroid Build Coastguard Worker        "compile_dir=$$(dirname $${prefix_dir}); proto_files=(); " +
400*61c4878aSAndroid Build Coastguard Worker        "for f in \"$${in_files[@]}\"; do " +
401*61c4878aSAndroid Build Coastguard Worker        "if [[ \"$${f##*.}\" == \"proto\" ]]; then " +
402*61c4878aSAndroid Build Coastguard Worker        "proto_files+=(\"$${f}\"); fi; done; " +
403*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
404*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_rpc_plugin_rawpb_py) " +
405*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
406*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
407*61c4878aSAndroid Build Coastguard Worker        "--language raw_rpc " +
408*61c4878aSAndroid Build Coastguard Worker        "--sources $${proto_files} " +
409*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
410*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
411*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
412*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
413*61c4878aSAndroid Build Coastguard Worker    tools: [
414*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
415*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
416*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_plugin_rawpb_py",
417*61c4878aSAndroid Build Coastguard Worker    ],
418*61c4878aSAndroid Build Coastguard Worker}
419*61c4878aSAndroid Build Coastguard Worker
420*61c4878aSAndroid Build Coastguard Worker// Generate header pwpb files.
421*61c4878aSAndroid Build Coastguard Worker// The output file names are based on the srcs file name with a .pwpb.h extension.
422*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
423*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_pwpb_proto",
424*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); compile_dir=$$(dirname $${in_files[0]}); " +
425*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
426*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_protobuf_plugin_py) " +
427*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
428*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
429*61c4878aSAndroid Build Coastguard Worker        "--language pwpb " +
430*61c4878aSAndroid Build Coastguard Worker        "--sources $(in) " +
431*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
432*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
433*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
434*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
435*61c4878aSAndroid Build Coastguard Worker    tools: [
436*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
437*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_plugin_py",
438*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
439*61c4878aSAndroid Build Coastguard Worker    ],
440*61c4878aSAndroid Build Coastguard Worker}
441*61c4878aSAndroid Build Coastguard Worker
442*61c4878aSAndroid Build Coastguard Worker// Same as pw_rpc_generate_pwpb_proto but the proto files are compiled with a
443*61c4878aSAndroid Build Coastguard Worker// single prefix, which can be added with pw_rpc_add_prefix_to_proto.
444*61c4878aSAndroid Build Coastguard Worker// Since pw_rpc_add_prefix_to_proto may include .option files as an input, only
445*61c4878aSAndroid Build Coastguard Worker// .proto files are passed to the compile script. Make sure .option files are
446*61c4878aSAndroid Build Coastguard Worker// prefixed in the same rule as their .proto files.
447*61c4878aSAndroid Build Coastguard Worker//
448*61c4878aSAndroid Build Coastguard Worker// See the pw_rpc_echo_service_pwpb target for an example. The echo.proto file
449*61c4878aSAndroid Build Coastguard Worker// is compiled with "pw_rpc" as the prefix.
450*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
451*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_pwpb_proto_with_prefix",
452*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); prefix_dir=$$(dirname $${in_files[0]}); " +
453*61c4878aSAndroid Build Coastguard Worker        "compile_dir=$$(dirname $${prefix_dir}); proto_files=(); " +
454*61c4878aSAndroid Build Coastguard Worker        "for f in \"$${in_files[@]}\"; do " +
455*61c4878aSAndroid Build Coastguard Worker        "if [[ \"$${f##*.}\" == \"proto\" ]]; then " +
456*61c4878aSAndroid Build Coastguard Worker        "proto_files+=(\"$${f}\"); fi; done; " +
457*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
458*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_protobuf_plugin_py) " +
459*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
460*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
461*61c4878aSAndroid Build Coastguard Worker        "--language pwpb " +
462*61c4878aSAndroid Build Coastguard Worker        "--sources $${proto_files} " +
463*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
464*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
465*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
466*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
467*61c4878aSAndroid Build Coastguard Worker    tools: [
468*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
469*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_plugin_py",
470*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
471*61c4878aSAndroid Build Coastguard Worker    ],
472*61c4878aSAndroid Build Coastguard Worker}
473*61c4878aSAndroid Build Coastguard Worker
474*61c4878aSAndroid Build Coastguard Worker// Generate the header pwpb RPC file.
475*61c4878aSAndroid Build Coastguard Worker// The output file name is based on the srcs file name with a .rpc.pwpb.h extension.
476*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
477*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_pwpb_rpc_header",
478*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); compile_dir=$$(dirname $${in_files[0]}); " +
479*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
480*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_rpc_plugin_pwpb_py) " +
481*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
482*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
483*61c4878aSAndroid Build Coastguard Worker        "--language pwpb_rpc " +
484*61c4878aSAndroid Build Coastguard Worker        "--sources $(in) " +
485*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
486*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
487*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
488*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
489*61c4878aSAndroid Build Coastguard Worker    tools: [
490*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
491*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
492*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_plugin_pwpb_py",
493*61c4878aSAndroid Build Coastguard Worker    ],
494*61c4878aSAndroid Build Coastguard Worker}
495*61c4878aSAndroid Build Coastguard Worker
496*61c4878aSAndroid Build Coastguard Worker// Same as pw_rpc_generate_pwpb_rpc_header but the proto files are compiled
497*61c4878aSAndroid Build Coastguard Worker// with a single prefix, which can be added with pw_rpc_add_prefix_to_proto.
498*61c4878aSAndroid Build Coastguard Worker// Since pw_rpc_add_prefix_to_proto may include .option files as an input, only
499*61c4878aSAndroid Build Coastguard Worker// .proto files are passed to the compile script. Make sure .option files are
500*61c4878aSAndroid Build Coastguard Worker// prefixed in the same rule as their .proto files.
501*61c4878aSAndroid Build Coastguard Worker//
502*61c4878aSAndroid Build Coastguard Worker// See the pw_rpc_echo_service_pwpb target for an example. The echo.proto file
503*61c4878aSAndroid Build Coastguard Worker// is compiled with "pw_rpc" as the prefix.
504*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
505*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_generate_pwpb_rpc_header_with_prefix",
506*61c4878aSAndroid Build Coastguard Worker    cmd: "in_files=($(in)); prefix_dir=$$(dirname $${in_files[0]}); " +
507*61c4878aSAndroid Build Coastguard Worker        "compile_dir=$$(dirname $${prefix_dir}); proto_files=(); " +
508*61c4878aSAndroid Build Coastguard Worker        "for f in \"$${in_files[@]}\"; do " +
509*61c4878aSAndroid Build Coastguard Worker        "if [[ \"$${f##*.}\" == \"proto\" ]]; then " +
510*61c4878aSAndroid Build Coastguard Worker        "proto_files+=(\"$${f}\"); fi; done; " +
511*61c4878aSAndroid Build Coastguard Worker        "python3 $(location pw_protobuf_compiler_py) " +
512*61c4878aSAndroid Build Coastguard Worker        "--plugin-path=$(location pw_rpc_plugin_pwpb_py) " +
513*61c4878aSAndroid Build Coastguard Worker        "--out-dir=$(genDir) " +
514*61c4878aSAndroid Build Coastguard Worker        "--compile-dir=$${compile_dir} " +
515*61c4878aSAndroid Build Coastguard Worker        "--language pwpb_rpc " +
516*61c4878aSAndroid Build Coastguard Worker        "--sources $${proto_files} " +
517*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-proto3-optional " +
518*61c4878aSAndroid Build Coastguard Worker        "--no-experimental-editions " +
519*61c4878aSAndroid Build Coastguard Worker        "--pwpb-no-oneof-callbacks " +
520*61c4878aSAndroid Build Coastguard Worker        "--protoc=$(location aprotoc)",
521*61c4878aSAndroid Build Coastguard Worker    tools: [
522*61c4878aSAndroid Build Coastguard Worker        "aprotoc",
523*61c4878aSAndroid Build Coastguard Worker        "pw_protobuf_compiler_py",
524*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_plugin_pwpb_py",
525*61c4878aSAndroid Build Coastguard Worker    ],
526*61c4878aSAndroid Build Coastguard Worker}
527*61c4878aSAndroid Build Coastguard Worker
528*61c4878aSAndroid Build Coastguard Worker// Copies the proto files to a prefix directory to add the prefix to the
529*61c4878aSAndroid Build Coastguard Worker// compiled proto. The prefix is taken from the directory name of the first
530*61c4878aSAndroid Build Coastguard Worker// item listen in out.
531*61c4878aSAndroid Build Coastguard Workergenrule_defaults {
532*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_add_prefix_to_proto",
533*61c4878aSAndroid Build Coastguard Worker    cmd: "out_files=($(out)); prefix=$$(dirname $${out_files[0]}); " +
534*61c4878aSAndroid Build Coastguard Worker        "mkdir -p $${prefix}; cp -t $${prefix} $(in);",
535*61c4878aSAndroid Build Coastguard Worker}
536*61c4878aSAndroid Build Coastguard Worker
537*61c4878aSAndroid Build Coastguard Workergenrule {
538*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_proto_with_prefix",
539*61c4878aSAndroid Build Coastguard Worker    defaults: ["pw_rpc_add_prefix_to_proto"],
540*61c4878aSAndroid Build Coastguard Worker    srcs: [
541*61c4878aSAndroid Build Coastguard Worker        "echo.options",
542*61c4878aSAndroid Build Coastguard Worker        "echo.proto",
543*61c4878aSAndroid Build Coastguard Worker    ],
544*61c4878aSAndroid Build Coastguard Worker    out: [
545*61c4878aSAndroid Build Coastguard Worker        "pw_rpc/echo.options",
546*61c4878aSAndroid Build Coastguard Worker        "pw_rpc/echo.proto",
547*61c4878aSAndroid Build Coastguard Worker    ],
548*61c4878aSAndroid Build Coastguard Worker}
549*61c4878aSAndroid Build Coastguard Worker
550*61c4878aSAndroid Build Coastguard Workergenrule {
551*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_rpc_header",
552*61c4878aSAndroid Build Coastguard Worker    defaults: ["pw_rpc_generate_nanopb_rpc_header_with_prefix"],
553*61c4878aSAndroid Build Coastguard Worker    srcs: [":pw_rpc_echo_proto_with_prefix"],
554*61c4878aSAndroid Build Coastguard Worker    out: ["pw_rpc/echo.rpc.pb.h"],
555*61c4878aSAndroid Build Coastguard Worker}
556*61c4878aSAndroid Build Coastguard Worker
557*61c4878aSAndroid Build Coastguard Workergenrule {
558*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_proto_header",
559*61c4878aSAndroid Build Coastguard Worker    defaults: ["pw_rpc_generate_nanopb_proto_with_prefix"],
560*61c4878aSAndroid Build Coastguard Worker    srcs: [":pw_rpc_echo_proto_with_prefix"],
561*61c4878aSAndroid Build Coastguard Worker    out: ["pw_rpc/echo.pb.h"],
562*61c4878aSAndroid Build Coastguard Worker}
563*61c4878aSAndroid Build Coastguard Worker
564*61c4878aSAndroid Build Coastguard Workergenrule {
565*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_proto_source",
566*61c4878aSAndroid Build Coastguard Worker    defaults: ["pw_rpc_generate_nanopb_proto_with_prefix"],
567*61c4878aSAndroid Build Coastguard Worker    srcs: [":pw_rpc_echo_proto_with_prefix"],
568*61c4878aSAndroid Build Coastguard Worker    out: ["pw_rpc/echo.pb.c"],
569*61c4878aSAndroid Build Coastguard Worker}
570*61c4878aSAndroid Build Coastguard Worker
571*61c4878aSAndroid Build Coastguard Worker// This is a copy of the echo.pb.h header, since the generated echo.pb.c
572*61c4878aSAndroid Build Coastguard Worker// includes it by file name, while pw_rpc/nanopb/echo_service_nanopb.h includes
573*61c4878aSAndroid Build Coastguard Worker// it with a prefix.
574*61c4878aSAndroid Build Coastguard Worker// Soong makes it very hard to add include directories when they don't come from
575*61c4878aSAndroid Build Coastguard Worker// modules, so this is a kludge to add an include directory path without a
576*61c4878aSAndroid Build Coastguard Worker// prefix.
577*61c4878aSAndroid Build Coastguard Workergenrule {
578*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_proto_header_copy",
579*61c4878aSAndroid Build Coastguard Worker    cmd: "cp $(in) $(out)",
580*61c4878aSAndroid Build Coastguard Worker    srcs: [":pw_rpc_echo_proto_header"],
581*61c4878aSAndroid Build Coastguard Worker    out: ["echo.pb.h"],
582*61c4878aSAndroid Build Coastguard Worker}
583*61c4878aSAndroid Build Coastguard Worker
584*61c4878aSAndroid Build Coastguard Workercc_library_static {
585*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_service_nanopb",
586*61c4878aSAndroid Build Coastguard Worker    cpp_std: "c++20",
587*61c4878aSAndroid Build Coastguard Worker    vendor_available: true,
588*61c4878aSAndroid Build Coastguard Worker    host_supported: true,
589*61c4878aSAndroid Build Coastguard Worker    export_include_dirs: ["public/pw_rpc"],
590*61c4878aSAndroid Build Coastguard Worker    generated_headers: [
591*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_proto_header",
592*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_proto_header_copy",
593*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_rpc_header",
594*61c4878aSAndroid Build Coastguard Worker    ],
595*61c4878aSAndroid Build Coastguard Worker    export_generated_headers: [
596*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_proto_header",
597*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_proto_header_copy",
598*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_rpc_header",
599*61c4878aSAndroid Build Coastguard Worker    ],
600*61c4878aSAndroid Build Coastguard Worker    generated_sources: ["pw_rpc_echo_proto_source"],
601*61c4878aSAndroid Build Coastguard Worker    static_libs: ["libprotobuf-c-nano"],
602*61c4878aSAndroid Build Coastguard Worker}
603*61c4878aSAndroid Build Coastguard Worker
604*61c4878aSAndroid Build Coastguard Workergenrule {
605*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_pwpb_rpc_header",
606*61c4878aSAndroid Build Coastguard Worker    defaults: ["pw_rpc_generate_pwpb_rpc_header_with_prefix"],
607*61c4878aSAndroid Build Coastguard Worker    srcs: [":pw_rpc_echo_proto_with_prefix"],
608*61c4878aSAndroid Build Coastguard Worker    out: ["pw_rpc/echo.rpc.pwpb.h"],
609*61c4878aSAndroid Build Coastguard Worker}
610*61c4878aSAndroid Build Coastguard Worker
611*61c4878aSAndroid Build Coastguard Workergenrule {
612*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_pwpb_proto_header",
613*61c4878aSAndroid Build Coastguard Worker    defaults: ["pw_rpc_generate_pwpb_proto_with_prefix"],
614*61c4878aSAndroid Build Coastguard Worker    srcs: [":pw_rpc_echo_proto_with_prefix"],
615*61c4878aSAndroid Build Coastguard Worker    out: ["pw_rpc/echo.pwpb.h"],
616*61c4878aSAndroid Build Coastguard Worker}
617*61c4878aSAndroid Build Coastguard Worker
618*61c4878aSAndroid Build Coastguard Workercc_library_static {
619*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_echo_service_pwpb",
620*61c4878aSAndroid Build Coastguard Worker    cpp_std: "c++20",
621*61c4878aSAndroid Build Coastguard Worker    vendor_available: true,
622*61c4878aSAndroid Build Coastguard Worker    host_supported: true,
623*61c4878aSAndroid Build Coastguard Worker    export_include_dirs: ["public/pw_rpc"],
624*61c4878aSAndroid Build Coastguard Worker    generated_headers: [
625*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_pwpb_proto_header",
626*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_pwpb_rpc_header",
627*61c4878aSAndroid Build Coastguard Worker    ],
628*61c4878aSAndroid Build Coastguard Worker    export_generated_headers: [
629*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_pwpb_proto_header",
630*61c4878aSAndroid Build Coastguard Worker        "pw_rpc_echo_pwpb_rpc_header",
631*61c4878aSAndroid Build Coastguard Worker    ],
632*61c4878aSAndroid Build Coastguard Worker}
633*61c4878aSAndroid Build Coastguard Worker
634*61c4878aSAndroid Build Coastguard Workerpython_library_host {
635*61c4878aSAndroid Build Coastguard Worker    name: "pw_rpc_internal_packet_py_lib",
636*61c4878aSAndroid Build Coastguard Worker    srcs: [
637*61c4878aSAndroid Build Coastguard Worker        ":pw_rpc_internal_packet_py",
638*61c4878aSAndroid Build Coastguard Worker    ],
639*61c4878aSAndroid Build Coastguard Worker    pkg_path: "pw_rpc/internal",
640*61c4878aSAndroid Build Coastguard Worker}
641