blob: 00c799249c90532689818a2c718a9796c6f42cae [file]
// Copyright 2025 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
package {
default_applicable_licenses: ["external_pigweed_license"],
}
// This rule deviates from the standard genrules in pw_rpc/Android.bp to handle
// the legacy structure of pw_log. While standard rules assume a two-level
// directory depth (module/file.proto), pw_log is three levels deep
// (pw_log/proto/log.proto). This rule explicitly adds
// :pw_log_log_proto_with_prefix as a dependency and injects the correct
// include path to resolve it.
genrule_defaults {
name: "pw_snapshot_generate_pwpb_header",
cmd: "in_files=($(in)); proto_files=(); proto_path_args=(); " +
"for f in \"$${in_files[@]}\"; do " +
"if [[ \"$${f##*.}\" == \"proto\" ]]; then " +
"proto_path_args+=(\"--proto-path=$$(dirname $$(dirname $${f})) \"); " +
"proto_files+=(\"$${f}\"); fi; done; " +
"python3 $(location pw_protobuf_compiler_py) " +
"--proto-path=external/protobuf/src/ " +
"--proto-path=$$(dirname $$(dirname $$(dirname $(location :pw_log_log_proto_with_prefix)))) " +
"--plugin-path=$(location pw_protobuf_plugin_py) " +
"--out-dir=$(genDir) " +
"$${proto_path_args[@]}" +
"--language pwpb " +
"--sources $${proto_files[@]} " +
"--no-experimental-proto3-optional " +
"--no-experimental-editions " +
"--pwpb-no-oneof-callbacks " +
"--protoc=$(location aprotoc)",
tools: [
"aprotoc",
"pw_protobuf_compiler_py",
"pw_protobuf_plugin_py",
],
srcs: [
":pw_log_log_proto_with_prefix",
],
}
genrule_defaults {
name: "pw_snapshot_generate_rpc_pwpb_header",
cmd: "in_files=($(in)); proto_files=(); proto_path_args=(); " +
"for f in \"$${in_files[@]}\"; do " +
"if [[ \"$${f##*.}\" == \"proto\" ]]; then " +
"proto_path_args+=(\"--proto-path=$$(dirname $$(dirname $${f})) \"); " +
"proto_files+=(\"$${f}\"); fi; done; " +
"python3 $(location pw_protobuf_compiler_py) " +
"--proto-path=external/protobuf/src/ " +
"--proto-path=$$(dirname $$(dirname $$(dirname $(location :pw_log_log_proto_with_prefix)))) " +
"--plugin-path=$(location pw_rpc_plugin_pwpb_py) " +
"--out-dir=$(genDir) " +
"$${proto_path_args[@]}" +
"--language pwpb_rpc " +
"--sources $${proto_files[@]} " +
"--no-experimental-proto3-optional " +
"--no-experimental-editions " +
"--pwpb-no-oneof-callbacks " +
"--protoc=$(location aprotoc)",
tools: [
"aprotoc",
"pw_protobuf_compiler_py",
"pw_rpc_plugin_pwpb_py",
],
srcs: [
":pw_log_log_proto_with_prefix",
],
}
// Expose pw_snapshot/snapshot.proto
filegroup {
name: "pw_snapshot_proto_src",
srcs: [
":libprotobuf-internal-protos",
":pw_chrono_protos",
":pw_cpu_exception_cortex_m_protos",
":pw_log_log_proto_with_prefix",
":pw_metric_protos",
":pw_protobuf_common_proto",
":pw_snapshot_metadata_proto_with_prefix",
":pw_thread_protos",
":pw_tokenizer_proto_options_proto",
"pw_snapshot_protos/snapshot.proto",
],
}
genrule {
name: "pw_snapshot_pwpb_rpc_header",
defaults: ["pw_snapshot_generate_rpc_pwpb_header"],
srcs: [
":pw_snapshot_proto_src",
],
out: [
"pw_snapshot_protos/snapshot.rpc.pwpb.h",
],
}
genrule {
name: "pw_snapshot_pwpb_proto_header",
defaults: ["pw_snapshot_generate_pwpb_header"],
srcs: [
":pw_snapshot_proto_src",
],
out: [
"pw_snapshot_protos/snapshot.pwpb.h",
],
}
// Expose pw_snapshot/snapshot_metadata.proto
genrule {
name: "pw_snapshot_metadata_proto_with_prefix",
defaults: ["pw_rpc_add_prefix_to_proto"],
srcs: [
"pw_snapshot_protos/snapshot_metadata.proto",
],
out: [
"pw_snapshot_metadata_proto/snapshot_metadata.proto",
],
}
genrule {
name: "pw_snapshot_metadata_pwpb_rpc_header",
defaults: ["pw_rpc_generate_rpc_pwpb_header_with_prefix_and_protobuf"],
srcs: [
":libprotobuf-internal-protos",
":pw_snapshot_metadata_proto_with_prefix",
":pw_tokenizer_proto_options_proto",
],
out: [
"pw_snapshot_metadata_proto/snapshot_metadata.rpc.pwpb.h",
],
}
genrule {
name: "pw_snapshot_metadata_pwpb_proto_header",
defaults: ["pw_rpc_generate_pwpb_header_with_prefix_and_protobuf"],
srcs: [
":libprotobuf-internal-protos",
":pw_snapshot_metadata_proto_with_prefix",
":pw_tokenizer_proto_options_proto",
],
out: ["pw_snapshot_metadata_proto/snapshot_metadata.pwpb.h"],
}
cc_library {
name: "pw_snapshot_service_pwpb",
defaults: [
"pw_android_common_target_support",
"pw_android_cpp_version",
],
export_include_dirs: ["public/pw_snapshot"],
generated_headers: [
"pw_chrono_pwpb_header",
"pw_cpu_exception_cortex_m_pwpb_proto_header",
"pw_cpu_exception_cortex_m_pwpb_rpc_header",
"pw_log_log_proto_pwpb_h",
"pw_log_log_rpc_pwpb_h",
"pw_metric_pwpb_proto_header",
"pw_metric_pwpb_rpc_header",
"pw_protobuf_protos_common_pwpb_h",
"pw_snapshot_metadata_pwpb_proto_header",
"pw_snapshot_metadata_pwpb_rpc_header",
"pw_snapshot_pwpb_proto_header",
"pw_snapshot_pwpb_rpc_header",
"pw_thread_pwpb_proto_header",
"pw_thread_pwpb_rpc_header",
"pw_tokenizer_proto_options_pwpb_h",
],
export_generated_headers: [
"pw_chrono_pwpb_header",
"pw_cpu_exception_cortex_m_pwpb_proto_header",
"pw_cpu_exception_cortex_m_pwpb_rpc_header",
"pw_log_log_proto_pwpb_h",
"pw_log_log_rpc_pwpb_h",
"pw_metric_pwpb_proto_header",
"pw_metric_pwpb_rpc_header",
"pw_protobuf_protos_common_pwpb_h",
"pw_snapshot_metadata_pwpb_proto_header",
"pw_snapshot_metadata_pwpb_rpc_header",
"pw_snapshot_pwpb_proto_header",
"pw_snapshot_pwpb_rpc_header",
"pw_thread_pwpb_proto_header",
"pw_thread_pwpb_rpc_header",
"pw_tokenizer_proto_options_pwpb_h",
],
}
rust_protobuf {
name: "libpw_snapshot_proto_rs",
crate_name: "pw_snapshot_proto",
protos: [
"pw_snapshot_protos/snapshot.proto",
],
source_stem: "pw_snapshot_source",
exported_include_dirs: ["."],
proto_flags: [
"-I external/protobuf/src",
// Ugly hacks since rust_protobuf doesn't have an equivalent of Bazel's
// proto_library import_prefix.
"-I $OUT_DIR/soong/.intermediates/external/pigweed/pw_chrono/pw_chrono_protos/gen",
"-I $OUT_DIR/soong/.intermediates/external/pigweed/pw_log/pw_log_log_proto_with_prefix/gen/",
"-I $OUT_DIR/soong/.intermediates/external/pigweed/pw_snapshot/pw_snapshot_metadata_proto_with_prefix/gen/",
"-I external/pigweed/pw_protobuf",
],
rustlibs: [
"libprotobuf",
"libpw_chrono_proto_rs",
"libpw_cpu_exception_cortex_m_proto_rs",
"libpw_log_proto_rs",
"libpw_metric_proto_rs",
"libpw_snapshot_metadata_proto_rs",
"libpw_thread_proto_rs",
"libpw_tokenizer_proto_rs",
],
vendor_available: true,
}
rust_protobuf {
name: "libpw_snapshot_metadata_proto_rs",
crate_name: "pw_snapshot_metadata_proto",
protos: [":pw_snapshot_metadata_proto_with_prefix"],
source_stem: "pw_snapshot_metadata_source",
exported_include_dirs: ["."],
proto_flags: ["-I external/protobuf/src"],
rustlibs: ["libpw_tokenizer_proto_rs"],
vendor_available: true,
}