Add all protos to tool_files

This is a followup to aosp/2776434 that added a proto dep to one of the
genrules. `libperfetto_client_experimental` depends on several other
generated headers, so we need to identify the implicit deps of the other
genrules as well.

Implementation details
- Create a "root" filegroup for every proto_library. The srcs to this
  will be the .proto files
- Replace the srcs of the cpp and h generating genrules with the "root"
  filegroup
- For the cpp and h generating genrules, add the "root" filegroup of
  target.proto_deps and target.transitive_proto_deps to `srcs`.
  This ensures that these transitive .proto dependencies get copied to
  the execution sandbox when these modules are built with sandboxing
  turned on in Soong. `srcs` was chosen instead of `tool_files` because
  the latter requires a --proto_path specific to Soong's sandbox impl.
  `outs` will ensure that extraneous generated files do not get
  propagated to rdeps.

Bug: 305049201
Bug: 304495403

Test: tools/gen_android_bp
Test: mmma external/perfetto (Soong)
Test: GENRULE_SANDBOXING=true m libperfetto_client_experimental (Soong
with sandboxing turned on).
Test: b clean --expunge && b build
//external/perfetto:libperfetto_client_experimental --config=android
(Bazel)

Change-Id: I88b420a98a6e72d14d2fe426d0d90f1481cdf9bf
diff --git a/Android.bp b/Android.bp
index f074854..bfa3740 100644
--- a/Android.bp
+++ b/Android.bp
@@ -2522,16 +2522,26 @@
 }
 
 // GN: //protos/perfetto/bigtrace:lite
-genrule {
-    name: "perfetto_protos_perfetto_bigtrace_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_bigtrace_lite",
     srcs: [
         "protos/perfetto/bigtrace/orchestrator.proto",
         "protos/perfetto/bigtrace/worker.proto",
     ],
+}
+
+// GN: //protos/perfetto/bigtrace:lite
+genrule {
+    name: "perfetto_protos_perfetto_bigtrace_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_bigtrace_lite",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_processor_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_bigtrace_lite)",
     out: [
         "external/perfetto/protos/perfetto/bigtrace/orchestrator.pb.cc",
         "external/perfetto/protos/perfetto/bigtrace/worker.pb.cc",
@@ -2542,13 +2552,14 @@
 genrule {
     name: "perfetto_protos_perfetto_bigtrace_lite_gen_headers",
     srcs: [
-        "protos/perfetto/bigtrace/orchestrator.proto",
-        "protos/perfetto/bigtrace/worker.proto",
+        ":perfetto_protos_perfetto_bigtrace_lite",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_processor_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_bigtrace_lite)",
     out: [
         "external/perfetto/protos/perfetto/bigtrace/orchestrator.pb.h",
         "external/perfetto/protos/perfetto/bigtrace/worker.pb.h",
@@ -2560,8 +2571,8 @@
 }
 
 // GN: //protos/perfetto/common:cpp
-genrule {
-    name: "perfetto_protos_perfetto_common_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_common_cpp",
     srcs: [
         "protos/perfetto/common/android_energy_consumer_descriptor.proto",
         "protos/perfetto/common/android_log_constants.proto",
@@ -2580,11 +2591,19 @@
         "protos/perfetto/common/tracing_service_state.proto",
         "protos/perfetto/common/track_event_descriptor.proto",
     ],
+}
+
+// GN: //protos/perfetto/common:cpp
+genrule {
+    name: "perfetto_protos_perfetto_common_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_common_cpp)",
     out: [
         "external/perfetto/protos/perfetto/common/android_energy_consumer_descriptor.gen.cc",
         "external/perfetto/protos/perfetto/common/android_log_constants.gen.cc",
@@ -2609,28 +2628,13 @@
 genrule {
     name: "perfetto_protos_perfetto_common_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/common/android_energy_consumer_descriptor.proto",
-        "protos/perfetto/common/android_log_constants.proto",
-        "protos/perfetto/common/builtin_clock.proto",
-        "protos/perfetto/common/commit_data_request.proto",
-        "protos/perfetto/common/data_source_descriptor.proto",
-        "protos/perfetto/common/descriptor.proto",
-        "protos/perfetto/common/ftrace_descriptor.proto",
-        "protos/perfetto/common/gpu_counter_descriptor.proto",
-        "protos/perfetto/common/interceptor_descriptor.proto",
-        "protos/perfetto/common/observable_events.proto",
-        "protos/perfetto/common/perf_events.proto",
-        "protos/perfetto/common/sys_stats_counters.proto",
-        "protos/perfetto/common/trace_stats.proto",
-        "protos/perfetto/common/tracing_service_capabilities.proto",
-        "protos/perfetto/common/tracing_service_state.proto",
-        "protos/perfetto/common/track_event_descriptor.proto",
+        ":perfetto_protos_perfetto_common_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_common_cpp)",
     out: [
         "external/perfetto/protos/perfetto/common/android_energy_consumer_descriptor.gen.h",
         "external/perfetto/protos/perfetto/common/android_log_constants.gen.h",
@@ -2656,8 +2660,8 @@
 }
 
 // GN: //protos/perfetto/common:lite
-genrule {
-    name: "perfetto_protos_perfetto_common_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_common_lite",
     srcs: [
         "protos/perfetto/common/android_energy_consumer_descriptor.proto",
         "protos/perfetto/common/android_log_constants.proto",
@@ -2676,10 +2680,18 @@
         "protos/perfetto/common/tracing_service_state.proto",
         "protos/perfetto/common/track_event_descriptor.proto",
     ],
+}
+
+// GN: //protos/perfetto/common:lite
+genrule {
+    name: "perfetto_protos_perfetto_common_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_common_lite)",
     out: [
         "external/perfetto/protos/perfetto/common/android_energy_consumer_descriptor.pb.cc",
         "external/perfetto/protos/perfetto/common/android_log_constants.pb.cc",
@@ -2704,27 +2716,12 @@
 genrule {
     name: "perfetto_protos_perfetto_common_lite_gen_headers",
     srcs: [
-        "protos/perfetto/common/android_energy_consumer_descriptor.proto",
-        "protos/perfetto/common/android_log_constants.proto",
-        "protos/perfetto/common/builtin_clock.proto",
-        "protos/perfetto/common/commit_data_request.proto",
-        "protos/perfetto/common/data_source_descriptor.proto",
-        "protos/perfetto/common/descriptor.proto",
-        "protos/perfetto/common/ftrace_descriptor.proto",
-        "protos/perfetto/common/gpu_counter_descriptor.proto",
-        "protos/perfetto/common/interceptor_descriptor.proto",
-        "protos/perfetto/common/observable_events.proto",
-        "protos/perfetto/common/perf_events.proto",
-        "protos/perfetto/common/sys_stats_counters.proto",
-        "protos/perfetto/common/trace_stats.proto",
-        "protos/perfetto/common/tracing_service_capabilities.proto",
-        "protos/perfetto/common/tracing_service_state.proto",
-        "protos/perfetto/common/track_event_descriptor.proto",
+        ":perfetto_protos_perfetto_common_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_common_lite)",
     out: [
         "external/perfetto/protos/perfetto/common/android_energy_consumer_descriptor.pb.h",
         "external/perfetto/protos/perfetto/common/android_log_constants.pb.h",
@@ -2750,8 +2747,8 @@
 }
 
 // GN: //protos/perfetto/common:zero
-genrule {
-    name: "perfetto_protos_perfetto_common_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_common_zero",
     srcs: [
         "protos/perfetto/common/android_energy_consumer_descriptor.proto",
         "protos/perfetto/common/android_log_constants.proto",
@@ -2770,11 +2767,19 @@
         "protos/perfetto/common/tracing_service_state.proto",
         "protos/perfetto/common/track_event_descriptor.proto",
     ],
+}
+
+// GN: //protos/perfetto/common:zero
+genrule {
+    name: "perfetto_protos_perfetto_common_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_common_zero)",
     out: [
         "external/perfetto/protos/perfetto/common/android_energy_consumer_descriptor.pbzero.cc",
         "external/perfetto/protos/perfetto/common/android_log_constants.pbzero.cc",
@@ -2799,28 +2804,13 @@
 genrule {
     name: "perfetto_protos_perfetto_common_zero_gen_headers",
     srcs: [
-        "protos/perfetto/common/android_energy_consumer_descriptor.proto",
-        "protos/perfetto/common/android_log_constants.proto",
-        "protos/perfetto/common/builtin_clock.proto",
-        "protos/perfetto/common/commit_data_request.proto",
-        "protos/perfetto/common/data_source_descriptor.proto",
-        "protos/perfetto/common/descriptor.proto",
-        "protos/perfetto/common/ftrace_descriptor.proto",
-        "protos/perfetto/common/gpu_counter_descriptor.proto",
-        "protos/perfetto/common/interceptor_descriptor.proto",
-        "protos/perfetto/common/observable_events.proto",
-        "protos/perfetto/common/perf_events.proto",
-        "protos/perfetto/common/sys_stats_counters.proto",
-        "protos/perfetto/common/trace_stats.proto",
-        "protos/perfetto/common/tracing_service_capabilities.proto",
-        "protos/perfetto/common/tracing_service_state.proto",
-        "protos/perfetto/common/track_event_descriptor.proto",
+        ":perfetto_protos_perfetto_common_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_common_zero)",
     out: [
         "external/perfetto/protos/perfetto/common/android_energy_consumer_descriptor.pbzero.h",
         "external/perfetto/protos/perfetto/common/android_log_constants.pbzero.h",
@@ -2846,8 +2836,8 @@
 }
 
 // GN: //protos/perfetto/config/android:cpp
-genrule {
-    name: "perfetto_protos_perfetto_config_android_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_android_cpp",
     srcs: [
         "protos/perfetto/config/android/android_game_intervention_list_config.proto",
         "protos/perfetto/config/android/android_log_config.proto",
@@ -2859,11 +2849,20 @@
         "protos/perfetto/config/android/surfaceflinger_layers_config.proto",
         "protos/perfetto/config/android/surfaceflinger_transactions_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/android:cpp
+genrule {
+    name: "perfetto_protos_perfetto_config_android_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_android_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.gen.cc",
         "external/perfetto/protos/perfetto/config/android/android_log_config.gen.cc",
@@ -2875,30 +2874,20 @@
         "external/perfetto/protos/perfetto/config/android/surfaceflinger_layers_config.gen.cc",
         "external/perfetto/protos/perfetto/config/android/surfaceflinger_transactions_config.gen.cc",
     ],
-    tool_files: [
-        "protos/perfetto/common/android_log_constants.proto",
-    ],
 }
 
 // GN: //protos/perfetto/config/android:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_android_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/android/android_game_intervention_list_config.proto",
-        "protos/perfetto/config/android/android_log_config.proto",
-        "protos/perfetto/config/android/android_polled_state_config.proto",
-        "protos/perfetto/config/android/android_sdk_sysprop_guard_config.proto",
-        "protos/perfetto/config/android/android_system_property_config.proto",
-        "protos/perfetto/config/android/network_trace_config.proto",
-        "protos/perfetto/config/android/packages_list_config.proto",
-        "protos/perfetto/config/android/surfaceflinger_layers_config.proto",
-        "protos/perfetto/config/android/surfaceflinger_transactions_config.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_android_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.gen.h",
         "external/perfetto/protos/perfetto/config/android/android_log_config.gen.h",
@@ -2914,14 +2903,11 @@
         ".",
         "protos",
     ],
-    tool_files: [
-        "protos/perfetto/common/android_log_constants.proto",
-    ],
 }
 
 // GN: //protos/perfetto/config/android:lite
-genrule {
-    name: "perfetto_protos_perfetto_config_android_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_android_lite",
     srcs: [
         "protos/perfetto/config/android/android_game_intervention_list_config.proto",
         "protos/perfetto/config/android/android_log_config.proto",
@@ -2933,10 +2919,19 @@
         "protos/perfetto/config/android/surfaceflinger_layers_config.proto",
         "protos/perfetto/config/android/surfaceflinger_transactions_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/android:lite
+genrule {
+    name: "perfetto_protos_perfetto_config_android_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_android_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_android_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.pb.cc",
         "external/perfetto/protos/perfetto/config/android/android_log_config.pb.cc",
@@ -2948,29 +2943,19 @@
         "external/perfetto/protos/perfetto/config/android/surfaceflinger_layers_config.pb.cc",
         "external/perfetto/protos/perfetto/config/android/surfaceflinger_transactions_config.pb.cc",
     ],
-    tool_files: [
-        "protos/perfetto/common/android_log_constants.proto",
-    ],
 }
 
 // GN: //protos/perfetto/config/android:lite
 genrule {
     name: "perfetto_protos_perfetto_config_android_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/android/android_game_intervention_list_config.proto",
-        "protos/perfetto/config/android/android_log_config.proto",
-        "protos/perfetto/config/android/android_polled_state_config.proto",
-        "protos/perfetto/config/android/android_sdk_sysprop_guard_config.proto",
-        "protos/perfetto/config/android/android_system_property_config.proto",
-        "protos/perfetto/config/android/network_trace_config.proto",
-        "protos/perfetto/config/android/packages_list_config.proto",
-        "protos/perfetto/config/android/surfaceflinger_layers_config.proto",
-        "protos/perfetto/config/android/surfaceflinger_transactions_config.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_android_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_android_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.pb.h",
         "external/perfetto/protos/perfetto/config/android/android_log_config.pb.h",
@@ -2986,14 +2971,11 @@
         ".",
         "protos",
     ],
-    tool_files: [
-        "protos/perfetto/common/android_log_constants.proto",
-    ],
 }
 
 // GN: //protos/perfetto/config/android:zero
-genrule {
-    name: "perfetto_protos_perfetto_config_android_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_android_zero",
     srcs: [
         "protos/perfetto/config/android/android_game_intervention_list_config.proto",
         "protos/perfetto/config/android/android_log_config.proto",
@@ -3005,11 +2987,20 @@
         "protos/perfetto/config/android/surfaceflinger_layers_config.proto",
         "protos/perfetto/config/android/surfaceflinger_transactions_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/android:zero
+genrule {
+    name: "perfetto_protos_perfetto_config_android_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_android_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_android_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.pbzero.cc",
         "external/perfetto/protos/perfetto/config/android/android_log_config.pbzero.cc",
@@ -3021,30 +3012,20 @@
         "external/perfetto/protos/perfetto/config/android/surfaceflinger_layers_config.pbzero.cc",
         "external/perfetto/protos/perfetto/config/android/surfaceflinger_transactions_config.pbzero.cc",
     ],
-    tool_files: [
-        "protos/perfetto/common/android_log_constants.proto",
-    ],
 }
 
 // GN: //protos/perfetto/config/android:zero
 genrule {
     name: "perfetto_protos_perfetto_config_android_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/android/android_game_intervention_list_config.proto",
-        "protos/perfetto/config/android/android_log_config.proto",
-        "protos/perfetto/config/android/android_polled_state_config.proto",
-        "protos/perfetto/config/android/android_sdk_sysprop_guard_config.proto",
-        "protos/perfetto/config/android/android_system_property_config.proto",
-        "protos/perfetto/config/android/network_trace_config.proto",
-        "protos/perfetto/config/android/packages_list_config.proto",
-        "protos/perfetto/config/android/surfaceflinger_layers_config.proto",
-        "protos/perfetto/config/android/surfaceflinger_transactions_config.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_android_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_android_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.pbzero.h",
         "external/perfetto/protos/perfetto/config/android/android_log_config.pbzero.h",
@@ -3060,14 +3041,11 @@
         ".",
         "protos",
     ],
-    tool_files: [
-        "protos/perfetto/common/android_log_constants.proto",
-    ],
 }
 
 // GN: //protos/perfetto/config:cpp
-genrule {
-    name: "perfetto_protos_perfetto_config_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_cpp",
     srcs: [
         "protos/perfetto/config/chrome/chrome_config.proto",
         "protos/perfetto/config/chrome/scenario_config.proto",
@@ -3077,11 +3055,32 @@
         "protos/perfetto/config/test_config.proto",
         "protos/perfetto/config/trace_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config:cpp
+genrule {
+    name: "perfetto_protos_perfetto_config_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/chrome/chrome_config.gen.cc",
         "external/perfetto/protos/perfetto/config/chrome/scenario_config.gen.cc",
@@ -3097,19 +3096,26 @@
 genrule {
     name: "perfetto_protos_perfetto_config_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/chrome/chrome_config.proto",
-        "protos/perfetto/config/chrome/scenario_config.proto",
-        "protos/perfetto/config/data_source_config.proto",
-        "protos/perfetto/config/interceptor_config.proto",
-        "protos/perfetto/config/stress_test_config.proto",
-        "protos/perfetto/config/test_config.proto",
-        "protos/perfetto/config/trace_config.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/chrome/chrome_config.gen.h",
         "external/perfetto/protos/perfetto/config/chrome/scenario_config.gen.h",
@@ -3187,16 +3193,24 @@
 }
 
 // GN: //protos/perfetto/config/ftrace:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_config_ftrace_cpp",
+    srcs: [
+        "protos/perfetto/config/ftrace/ftrace_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/ftrace:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_ftrace_cpp_gen",
     srcs: [
-        "protos/perfetto/config/ftrace/ftrace_config.proto",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_ftrace_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/ftrace/ftrace_config.gen.cc",
     ],
@@ -3206,13 +3220,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_ftrace_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/ftrace/ftrace_config.proto",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_ftrace_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/ftrace/ftrace_config.gen.h",
     ],
@@ -3223,15 +3237,23 @@
 }
 
 // GN: //protos/perfetto/config/ftrace:lite
+filegroup {
+    name: "perfetto_protos_perfetto_config_ftrace_lite",
+    srcs: [
+        "protos/perfetto/config/ftrace/ftrace_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/ftrace:lite
 genrule {
     name: "perfetto_protos_perfetto_config_ftrace_lite_gen",
     srcs: [
-        "protos/perfetto/config/ftrace/ftrace_config.proto",
+        ":perfetto_protos_perfetto_config_ftrace_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_ftrace_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/ftrace/ftrace_config.pb.cc",
     ],
@@ -3241,12 +3263,12 @@
 genrule {
     name: "perfetto_protos_perfetto_config_ftrace_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/ftrace/ftrace_config.proto",
+        ":perfetto_protos_perfetto_config_ftrace_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_ftrace_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/ftrace/ftrace_config.pb.h",
     ],
@@ -3257,16 +3279,24 @@
 }
 
 // GN: //protos/perfetto/config/ftrace:zero
+filegroup {
+    name: "perfetto_protos_perfetto_config_ftrace_zero",
+    srcs: [
+        "protos/perfetto/config/ftrace/ftrace_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/ftrace:zero
 genrule {
     name: "perfetto_protos_perfetto_config_ftrace_zero_gen",
     srcs: [
-        "protos/perfetto/config/ftrace/ftrace_config.proto",
+        ":perfetto_protos_perfetto_config_ftrace_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_ftrace_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/ftrace/ftrace_config.pbzero.cc",
     ],
@@ -3276,13 +3306,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_ftrace_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/ftrace/ftrace_config.proto",
+        ":perfetto_protos_perfetto_config_ftrace_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_ftrace_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/ftrace/ftrace_config.pbzero.h",
     ],
@@ -3293,17 +3323,25 @@
 }
 
 // GN: //protos/perfetto/config/gpu:cpp
-genrule {
-    name: "perfetto_protos_perfetto_config_gpu_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_gpu_cpp",
     srcs: [
         "protos/perfetto/config/gpu/gpu_counter_config.proto",
         "protos/perfetto/config/gpu/vulkan_memory_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/gpu:cpp
+genrule {
+    name: "perfetto_protos_perfetto_config_gpu_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_gpu_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/gpu/gpu_counter_config.gen.cc",
         "external/perfetto/protos/perfetto/config/gpu/vulkan_memory_config.gen.cc",
@@ -3314,14 +3352,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_gpu_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/gpu/gpu_counter_config.proto",
-        "protos/perfetto/config/gpu/vulkan_memory_config.proto",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_gpu_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/gpu/gpu_counter_config.gen.h",
         "external/perfetto/protos/perfetto/config/gpu/vulkan_memory_config.gen.h",
@@ -3333,16 +3370,24 @@
 }
 
 // GN: //protos/perfetto/config/gpu:lite
-genrule {
-    name: "perfetto_protos_perfetto_config_gpu_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_gpu_lite",
     srcs: [
         "protos/perfetto/config/gpu/gpu_counter_config.proto",
         "protos/perfetto/config/gpu/vulkan_memory_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/gpu:lite
+genrule {
+    name: "perfetto_protos_perfetto_config_gpu_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_config_gpu_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_gpu_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/gpu/gpu_counter_config.pb.cc",
         "external/perfetto/protos/perfetto/config/gpu/vulkan_memory_config.pb.cc",
@@ -3353,13 +3398,12 @@
 genrule {
     name: "perfetto_protos_perfetto_config_gpu_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/gpu/gpu_counter_config.proto",
-        "protos/perfetto/config/gpu/vulkan_memory_config.proto",
+        ":perfetto_protos_perfetto_config_gpu_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_gpu_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/gpu/gpu_counter_config.pb.h",
         "external/perfetto/protos/perfetto/config/gpu/vulkan_memory_config.pb.h",
@@ -3371,17 +3415,25 @@
 }
 
 // GN: //protos/perfetto/config/gpu:zero
-genrule {
-    name: "perfetto_protos_perfetto_config_gpu_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_gpu_zero",
     srcs: [
         "protos/perfetto/config/gpu/gpu_counter_config.proto",
         "protos/perfetto/config/gpu/vulkan_memory_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/gpu:zero
+genrule {
+    name: "perfetto_protos_perfetto_config_gpu_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_config_gpu_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_gpu_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/gpu/gpu_counter_config.pbzero.cc",
         "external/perfetto/protos/perfetto/config/gpu/vulkan_memory_config.pbzero.cc",
@@ -3392,14 +3444,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_gpu_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/gpu/gpu_counter_config.proto",
-        "protos/perfetto/config/gpu/vulkan_memory_config.proto",
+        ":perfetto_protos_perfetto_config_gpu_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_gpu_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/gpu/gpu_counter_config.pbzero.h",
         "external/perfetto/protos/perfetto/config/gpu/vulkan_memory_config.pbzero.h",
@@ -3411,16 +3462,24 @@
 }
 
 // GN: //protos/perfetto/config/inode_file:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_config_inode_file_cpp",
+    srcs: [
+        "protos/perfetto/config/inode_file/inode_file_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/inode_file:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_inode_file_cpp_gen",
     srcs: [
-        "protos/perfetto/config/inode_file/inode_file_config.proto",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_inode_file_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/inode_file/inode_file_config.gen.cc",
     ],
@@ -3430,13 +3489,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_inode_file_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/inode_file/inode_file_config.proto",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_inode_file_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/inode_file/inode_file_config.gen.h",
     ],
@@ -3447,15 +3506,23 @@
 }
 
 // GN: //protos/perfetto/config/inode_file:lite
+filegroup {
+    name: "perfetto_protos_perfetto_config_inode_file_lite",
+    srcs: [
+        "protos/perfetto/config/inode_file/inode_file_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/inode_file:lite
 genrule {
     name: "perfetto_protos_perfetto_config_inode_file_lite_gen",
     srcs: [
-        "protos/perfetto/config/inode_file/inode_file_config.proto",
+        ":perfetto_protos_perfetto_config_inode_file_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_inode_file_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/inode_file/inode_file_config.pb.cc",
     ],
@@ -3465,12 +3532,12 @@
 genrule {
     name: "perfetto_protos_perfetto_config_inode_file_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/inode_file/inode_file_config.proto",
+        ":perfetto_protos_perfetto_config_inode_file_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_inode_file_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/inode_file/inode_file_config.pb.h",
     ],
@@ -3481,16 +3548,24 @@
 }
 
 // GN: //protos/perfetto/config/inode_file:zero
+filegroup {
+    name: "perfetto_protos_perfetto_config_inode_file_zero",
+    srcs: [
+        "protos/perfetto/config/inode_file/inode_file_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/inode_file:zero
 genrule {
     name: "perfetto_protos_perfetto_config_inode_file_zero_gen",
     srcs: [
-        "protos/perfetto/config/inode_file/inode_file_config.proto",
+        ":perfetto_protos_perfetto_config_inode_file_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_inode_file_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/inode_file/inode_file_config.pbzero.cc",
     ],
@@ -3500,13 +3575,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_inode_file_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/inode_file/inode_file_config.proto",
+        ":perfetto_protos_perfetto_config_inode_file_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_inode_file_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/inode_file/inode_file_config.pbzero.h",
     ],
@@ -3517,16 +3592,25 @@
 }
 
 // GN: //protos/perfetto/config/interceptors:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_config_interceptors_cpp",
+    srcs: [
+        "protos/perfetto/config/interceptors/console_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/interceptors:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_interceptors_cpp_gen",
     srcs: [
-        "protos/perfetto/config/interceptors/console_config.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_interceptors_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/interceptors/console_config.gen.cc",
     ],
@@ -3536,13 +3620,14 @@
 genrule {
     name: "perfetto_protos_perfetto_config_interceptors_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/interceptors/console_config.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_interceptors_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/interceptors/console_config.gen.h",
     ],
@@ -3553,15 +3638,24 @@
 }
 
 // GN: //protos/perfetto/config/interceptors:lite
+filegroup {
+    name: "perfetto_protos_perfetto_config_interceptors_lite",
+    srcs: [
+        "protos/perfetto/config/interceptors/console_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/interceptors:lite
 genrule {
     name: "perfetto_protos_perfetto_config_interceptors_lite_gen",
     srcs: [
-        "protos/perfetto/config/interceptors/console_config.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_interceptors_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_interceptors_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/interceptors/console_config.pb.cc",
     ],
@@ -3571,12 +3665,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_interceptors_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/interceptors/console_config.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_interceptors_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_interceptors_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/interceptors/console_config.pb.h",
     ],
@@ -3587,16 +3682,25 @@
 }
 
 // GN: //protos/perfetto/config/interceptors:zero
+filegroup {
+    name: "perfetto_protos_perfetto_config_interceptors_zero",
+    srcs: [
+        "protos/perfetto/config/interceptors/console_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/interceptors:zero
 genrule {
     name: "perfetto_protos_perfetto_config_interceptors_zero_gen",
     srcs: [
-        "protos/perfetto/config/interceptors/console_config.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_interceptors_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_interceptors_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/interceptors/console_config.pbzero.cc",
     ],
@@ -3606,13 +3710,14 @@
 genrule {
     name: "perfetto_protos_perfetto_config_interceptors_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/interceptors/console_config.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_interceptors_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_interceptors_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/interceptors/console_config.pbzero.h",
     ],
@@ -3623,8 +3728,8 @@
 }
 
 // GN: //protos/perfetto/config:lite
-genrule {
-    name: "perfetto_protos_perfetto_config_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_lite",
     srcs: [
         "protos/perfetto/config/chrome/chrome_config.proto",
         "protos/perfetto/config/chrome/scenario_config.proto",
@@ -3634,10 +3739,31 @@
         "protos/perfetto/config/test_config.proto",
         "protos/perfetto/config/trace_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config:lite
+genrule {
+    name: "perfetto_protos_perfetto_config_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_android_lite",
+        ":perfetto_protos_perfetto_config_ftrace_lite",
+        ":perfetto_protos_perfetto_config_gpu_lite",
+        ":perfetto_protos_perfetto_config_inode_file_lite",
+        ":perfetto_protos_perfetto_config_interceptors_lite",
+        ":perfetto_protos_perfetto_config_lite",
+        ":perfetto_protos_perfetto_config_power_lite",
+        ":perfetto_protos_perfetto_config_process_stats_lite",
+        ":perfetto_protos_perfetto_config_profiling_lite",
+        ":perfetto_protos_perfetto_config_statsd_lite",
+        ":perfetto_protos_perfetto_config_sys_stats_lite",
+        ":perfetto_protos_perfetto_config_system_info_lite",
+        ":perfetto_protos_perfetto_config_track_event_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/chrome/chrome_config.pb.cc",
         "external/perfetto/protos/perfetto/config/chrome/scenario_config.pb.cc",
@@ -3653,18 +3779,25 @@
 genrule {
     name: "perfetto_protos_perfetto_config_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/chrome/chrome_config.proto",
-        "protos/perfetto/config/chrome/scenario_config.proto",
-        "protos/perfetto/config/data_source_config.proto",
-        "protos/perfetto/config/interceptor_config.proto",
-        "protos/perfetto/config/stress_test_config.proto",
-        "protos/perfetto/config/test_config.proto",
-        "protos/perfetto/config/trace_config.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_android_lite",
+        ":perfetto_protos_perfetto_config_ftrace_lite",
+        ":perfetto_protos_perfetto_config_gpu_lite",
+        ":perfetto_protos_perfetto_config_inode_file_lite",
+        ":perfetto_protos_perfetto_config_interceptors_lite",
+        ":perfetto_protos_perfetto_config_lite",
+        ":perfetto_protos_perfetto_config_power_lite",
+        ":perfetto_protos_perfetto_config_process_stats_lite",
+        ":perfetto_protos_perfetto_config_profiling_lite",
+        ":perfetto_protos_perfetto_config_statsd_lite",
+        ":perfetto_protos_perfetto_config_sys_stats_lite",
+        ":perfetto_protos_perfetto_config_system_info_lite",
+        ":perfetto_protos_perfetto_config_track_event_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/chrome/chrome_config.pb.h",
         "external/perfetto/protos/perfetto/config/chrome/scenario_config.pb.h",
@@ -3681,16 +3814,24 @@
 }
 
 // GN: //protos/perfetto/config/power:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_config_power_cpp",
+    srcs: [
+        "protos/perfetto/config/power/android_power_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/power:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_power_cpp_gen",
     srcs: [
-        "protos/perfetto/config/power/android_power_config.proto",
+        ":perfetto_protos_perfetto_config_power_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_power_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/power/android_power_config.gen.cc",
     ],
@@ -3700,13 +3841,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_power_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/power/android_power_config.proto",
+        ":perfetto_protos_perfetto_config_power_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_power_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/power/android_power_config.gen.h",
     ],
@@ -3717,15 +3858,23 @@
 }
 
 // GN: //protos/perfetto/config/power:lite
+filegroup {
+    name: "perfetto_protos_perfetto_config_power_lite",
+    srcs: [
+        "protos/perfetto/config/power/android_power_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/power:lite
 genrule {
     name: "perfetto_protos_perfetto_config_power_lite_gen",
     srcs: [
-        "protos/perfetto/config/power/android_power_config.proto",
+        ":perfetto_protos_perfetto_config_power_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_power_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/power/android_power_config.pb.cc",
     ],
@@ -3735,12 +3884,12 @@
 genrule {
     name: "perfetto_protos_perfetto_config_power_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/power/android_power_config.proto",
+        ":perfetto_protos_perfetto_config_power_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_power_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/power/android_power_config.pb.h",
     ],
@@ -3751,16 +3900,24 @@
 }
 
 // GN: //protos/perfetto/config/power:zero
+filegroup {
+    name: "perfetto_protos_perfetto_config_power_zero",
+    srcs: [
+        "protos/perfetto/config/power/android_power_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/power:zero
 genrule {
     name: "perfetto_protos_perfetto_config_power_zero_gen",
     srcs: [
-        "protos/perfetto/config/power/android_power_config.proto",
+        ":perfetto_protos_perfetto_config_power_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_power_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/power/android_power_config.pbzero.cc",
     ],
@@ -3770,13 +3927,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_power_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/power/android_power_config.proto",
+        ":perfetto_protos_perfetto_config_power_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_power_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/power/android_power_config.pbzero.h",
     ],
@@ -3787,16 +3944,24 @@
 }
 
 // GN: //protos/perfetto/config/process_stats:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_config_process_stats_cpp",
+    srcs: [
+        "protos/perfetto/config/process_stats/process_stats_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/process_stats:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_process_stats_cpp_gen",
     srcs: [
-        "protos/perfetto/config/process_stats/process_stats_config.proto",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_process_stats_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/process_stats/process_stats_config.gen.cc",
     ],
@@ -3806,13 +3971,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_process_stats_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/process_stats/process_stats_config.proto",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_process_stats_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/process_stats/process_stats_config.gen.h",
     ],
@@ -3823,15 +3988,23 @@
 }
 
 // GN: //protos/perfetto/config/process_stats:lite
+filegroup {
+    name: "perfetto_protos_perfetto_config_process_stats_lite",
+    srcs: [
+        "protos/perfetto/config/process_stats/process_stats_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/process_stats:lite
 genrule {
     name: "perfetto_protos_perfetto_config_process_stats_lite_gen",
     srcs: [
-        "protos/perfetto/config/process_stats/process_stats_config.proto",
+        ":perfetto_protos_perfetto_config_process_stats_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_process_stats_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/process_stats/process_stats_config.pb.cc",
     ],
@@ -3841,12 +4014,12 @@
 genrule {
     name: "perfetto_protos_perfetto_config_process_stats_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/process_stats/process_stats_config.proto",
+        ":perfetto_protos_perfetto_config_process_stats_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_process_stats_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/process_stats/process_stats_config.pb.h",
     ],
@@ -3857,16 +4030,24 @@
 }
 
 // GN: //protos/perfetto/config/process_stats:zero
+filegroup {
+    name: "perfetto_protos_perfetto_config_process_stats_zero",
+    srcs: [
+        "protos/perfetto/config/process_stats/process_stats_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/process_stats:zero
 genrule {
     name: "perfetto_protos_perfetto_config_process_stats_zero_gen",
     srcs: [
-        "protos/perfetto/config/process_stats/process_stats_config.proto",
+        ":perfetto_protos_perfetto_config_process_stats_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_process_stats_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/process_stats/process_stats_config.pbzero.cc",
     ],
@@ -3876,13 +4057,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_process_stats_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/process_stats/process_stats_config.proto",
+        ":perfetto_protos_perfetto_config_process_stats_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_process_stats_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/process_stats/process_stats_config.pbzero.h",
     ],
@@ -3893,18 +4074,27 @@
 }
 
 // GN: //protos/perfetto/config/profiling:cpp
-genrule {
-    name: "perfetto_protos_perfetto_config_profiling_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_profiling_cpp",
     srcs: [
         "protos/perfetto/config/profiling/heapprofd_config.proto",
         "protos/perfetto/config/profiling/java_hprof_config.proto",
         "protos/perfetto/config/profiling/perf_event_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/profiling:cpp
+genrule {
+    name: "perfetto_protos_perfetto_config_profiling_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_profiling_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/profiling/heapprofd_config.gen.cc",
         "external/perfetto/protos/perfetto/config/profiling/java_hprof_config.gen.cc",
@@ -3916,15 +4106,14 @@
 genrule {
     name: "perfetto_protos_perfetto_config_profiling_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/profiling/heapprofd_config.proto",
-        "protos/perfetto/config/profiling/java_hprof_config.proto",
-        "protos/perfetto/config/profiling/perf_event_config.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_profiling_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/profiling/heapprofd_config.gen.h",
         "external/perfetto/protos/perfetto/config/profiling/java_hprof_config.gen.h",
@@ -3937,17 +4126,26 @@
 }
 
 // GN: //protos/perfetto/config/profiling:lite
-genrule {
-    name: "perfetto_protos_perfetto_config_profiling_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_profiling_lite",
     srcs: [
         "protos/perfetto/config/profiling/heapprofd_config.proto",
         "protos/perfetto/config/profiling/java_hprof_config.proto",
         "protos/perfetto/config/profiling/perf_event_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/profiling:lite
+genrule {
+    name: "perfetto_protos_perfetto_config_profiling_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_profiling_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_profiling_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/profiling/heapprofd_config.pb.cc",
         "external/perfetto/protos/perfetto/config/profiling/java_hprof_config.pb.cc",
@@ -3959,14 +4157,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_profiling_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/profiling/heapprofd_config.proto",
-        "protos/perfetto/config/profiling/java_hprof_config.proto",
-        "protos/perfetto/config/profiling/perf_event_config.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_profiling_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_profiling_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/profiling/heapprofd_config.pb.h",
         "external/perfetto/protos/perfetto/config/profiling/java_hprof_config.pb.h",
@@ -3979,18 +4176,27 @@
 }
 
 // GN: //protos/perfetto/config/profiling:zero
-genrule {
-    name: "perfetto_protos_perfetto_config_profiling_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_profiling_zero",
     srcs: [
         "protos/perfetto/config/profiling/heapprofd_config.proto",
         "protos/perfetto/config/profiling/java_hprof_config.proto",
         "protos/perfetto/config/profiling/perf_event_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/profiling:zero
+genrule {
+    name: "perfetto_protos_perfetto_config_profiling_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_profiling_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_profiling_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/profiling/heapprofd_config.pbzero.cc",
         "external/perfetto/protos/perfetto/config/profiling/java_hprof_config.pbzero.cc",
@@ -4002,15 +4208,14 @@
 genrule {
     name: "perfetto_protos_perfetto_config_profiling_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/profiling/heapprofd_config.proto",
-        "protos/perfetto/config/profiling/java_hprof_config.proto",
-        "protos/perfetto/config/profiling/perf_event_config.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_profiling_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_profiling_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/profiling/heapprofd_config.pbzero.h",
         "external/perfetto/protos/perfetto/config/profiling/java_hprof_config.pbzero.h",
@@ -4023,17 +4228,25 @@
 }
 
 // GN: //protos/perfetto/config/statsd:cpp
-genrule {
-    name: "perfetto_protos_perfetto_config_statsd_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_statsd_cpp",
     srcs: [
         "protos/perfetto/config/statsd/atom_ids.proto",
         "protos/perfetto/config/statsd/statsd_tracing_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/statsd:cpp
+genrule {
+    name: "perfetto_protos_perfetto_config_statsd_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_statsd_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/statsd/atom_ids.gen.cc",
         "external/perfetto/protos/perfetto/config/statsd/statsd_tracing_config.gen.cc",
@@ -4044,14 +4257,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_statsd_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/statsd/atom_ids.proto",
-        "protos/perfetto/config/statsd/statsd_tracing_config.proto",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_statsd_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/statsd/atom_ids.gen.h",
         "external/perfetto/protos/perfetto/config/statsd/statsd_tracing_config.gen.h",
@@ -4063,16 +4275,24 @@
 }
 
 // GN: //protos/perfetto/config/statsd:lite
-genrule {
-    name: "perfetto_protos_perfetto_config_statsd_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_statsd_lite",
     srcs: [
         "protos/perfetto/config/statsd/atom_ids.proto",
         "protos/perfetto/config/statsd/statsd_tracing_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/statsd:lite
+genrule {
+    name: "perfetto_protos_perfetto_config_statsd_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_config_statsd_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_statsd_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/statsd/atom_ids.pb.cc",
         "external/perfetto/protos/perfetto/config/statsd/statsd_tracing_config.pb.cc",
@@ -4083,13 +4303,12 @@
 genrule {
     name: "perfetto_protos_perfetto_config_statsd_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/statsd/atom_ids.proto",
-        "protos/perfetto/config/statsd/statsd_tracing_config.proto",
+        ":perfetto_protos_perfetto_config_statsd_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_statsd_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/statsd/atom_ids.pb.h",
         "external/perfetto/protos/perfetto/config/statsd/statsd_tracing_config.pb.h",
@@ -4101,17 +4320,25 @@
 }
 
 // GN: //protos/perfetto/config/statsd:zero
-genrule {
-    name: "perfetto_protos_perfetto_config_statsd_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_statsd_zero",
     srcs: [
         "protos/perfetto/config/statsd/atom_ids.proto",
         "protos/perfetto/config/statsd/statsd_tracing_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config/statsd:zero
+genrule {
+    name: "perfetto_protos_perfetto_config_statsd_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_config_statsd_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_statsd_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/statsd/atom_ids.pbzero.cc",
         "external/perfetto/protos/perfetto/config/statsd/statsd_tracing_config.pbzero.cc",
@@ -4122,14 +4349,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_statsd_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/statsd/atom_ids.proto",
-        "protos/perfetto/config/statsd/statsd_tracing_config.proto",
+        ":perfetto_protos_perfetto_config_statsd_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_statsd_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/statsd/atom_ids.pbzero.h",
         "external/perfetto/protos/perfetto/config/statsd/statsd_tracing_config.pbzero.h",
@@ -4141,16 +4367,25 @@
 }
 
 // GN: //protos/perfetto/config/sys_stats:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_config_sys_stats_cpp",
+    srcs: [
+        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/sys_stats:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_sys_stats_cpp_gen",
     srcs: [
-        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_sys_stats_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/sys_stats/sys_stats_config.gen.cc",
     ],
@@ -4160,13 +4395,14 @@
 genrule {
     name: "perfetto_protos_perfetto_config_sys_stats_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_sys_stats_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/sys_stats/sys_stats_config.gen.h",
     ],
@@ -4177,15 +4413,24 @@
 }
 
 // GN: //protos/perfetto/config/sys_stats:lite
+filegroup {
+    name: "perfetto_protos_perfetto_config_sys_stats_lite",
+    srcs: [
+        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/sys_stats:lite
 genrule {
     name: "perfetto_protos_perfetto_config_sys_stats_lite_gen",
     srcs: [
-        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_sys_stats_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_sys_stats_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/sys_stats/sys_stats_config.pb.cc",
     ],
@@ -4195,12 +4440,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_sys_stats_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_sys_stats_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_sys_stats_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/sys_stats/sys_stats_config.pb.h",
     ],
@@ -4211,16 +4457,25 @@
 }
 
 // GN: //protos/perfetto/config/sys_stats:zero
+filegroup {
+    name: "perfetto_protos_perfetto_config_sys_stats_zero",
+    srcs: [
+        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/sys_stats:zero
 genrule {
     name: "perfetto_protos_perfetto_config_sys_stats_zero_gen",
     srcs: [
-        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_sys_stats_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_sys_stats_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/sys_stats/sys_stats_config.pbzero.cc",
     ],
@@ -4230,13 +4485,14 @@
 genrule {
     name: "perfetto_protos_perfetto_config_sys_stats_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_sys_stats_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_sys_stats_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/sys_stats/sys_stats_config.pbzero.h",
     ],
@@ -4247,16 +4503,25 @@
 }
 
 // GN: //protos/perfetto/config/system_info:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_config_system_info_cpp",
+    srcs: [
+        "protos/perfetto/config/system_info/system_info.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/system_info:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_system_info_cpp_gen",
     srcs: [
-        "protos/perfetto/config/system_info/system_info.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_system_info_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/system_info/system_info.gen.cc",
     ],
@@ -4266,13 +4531,14 @@
 genrule {
     name: "perfetto_protos_perfetto_config_system_info_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/system_info/system_info.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_system_info_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/system_info/system_info.gen.h",
     ],
@@ -4283,15 +4549,24 @@
 }
 
 // GN: //protos/perfetto/config/system_info:lite
+filegroup {
+    name: "perfetto_protos_perfetto_config_system_info_lite",
+    srcs: [
+        "protos/perfetto/config/system_info/system_info.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/system_info:lite
 genrule {
     name: "perfetto_protos_perfetto_config_system_info_lite_gen",
     srcs: [
-        "protos/perfetto/config/system_info/system_info.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_system_info_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_system_info_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/system_info/system_info.pb.cc",
     ],
@@ -4301,12 +4576,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_system_info_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/system_info/system_info.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_system_info_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_system_info_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/system_info/system_info.pb.h",
     ],
@@ -4317,16 +4593,25 @@
 }
 
 // GN: //protos/perfetto/config/system_info:zero
+filegroup {
+    name: "perfetto_protos_perfetto_config_system_info_zero",
+    srcs: [
+        "protos/perfetto/config/system_info/system_info.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/system_info:zero
 genrule {
     name: "perfetto_protos_perfetto_config_system_info_zero_gen",
     srcs: [
-        "protos/perfetto/config/system_info/system_info.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_system_info_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_system_info_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/system_info/system_info.pbzero.cc",
     ],
@@ -4336,13 +4621,14 @@
 genrule {
     name: "perfetto_protos_perfetto_config_system_info_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/system_info/system_info.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_system_info_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_system_info_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/system_info/system_info.pbzero.h",
     ],
@@ -4353,16 +4639,24 @@
 }
 
 // GN: //protos/perfetto/config/track_event:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_config_track_event_cpp",
+    srcs: [
+        "protos/perfetto/config/track_event/track_event_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/track_event:cpp
 genrule {
     name: "perfetto_protos_perfetto_config_track_event_cpp_gen",
     srcs: [
-        "protos/perfetto/config/track_event/track_event_config.proto",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_track_event_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/track_event/track_event_config.gen.cc",
     ],
@@ -4372,13 +4666,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_track_event_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/config/track_event/track_event_config.proto",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_track_event_cpp)",
     out: [
         "external/perfetto/protos/perfetto/config/track_event/track_event_config.gen.h",
     ],
@@ -4389,15 +4683,23 @@
 }
 
 // GN: //protos/perfetto/config/track_event:lite
+filegroup {
+    name: "perfetto_protos_perfetto_config_track_event_lite",
+    srcs: [
+        "protos/perfetto/config/track_event/track_event_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/track_event:lite
 genrule {
     name: "perfetto_protos_perfetto_config_track_event_lite_gen",
     srcs: [
-        "protos/perfetto/config/track_event/track_event_config.proto",
+        ":perfetto_protos_perfetto_config_track_event_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_track_event_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/track_event/track_event_config.pb.cc",
     ],
@@ -4407,12 +4709,12 @@
 genrule {
     name: "perfetto_protos_perfetto_config_track_event_lite_gen_headers",
     srcs: [
-        "protos/perfetto/config/track_event/track_event_config.proto",
+        ":perfetto_protos_perfetto_config_track_event_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_track_event_lite)",
     out: [
         "external/perfetto/protos/perfetto/config/track_event/track_event_config.pb.h",
     ],
@@ -4423,16 +4725,24 @@
 }
 
 // GN: //protos/perfetto/config/track_event:zero
+filegroup {
+    name: "perfetto_protos_perfetto_config_track_event_zero",
+    srcs: [
+        "protos/perfetto/config/track_event/track_event_config.proto",
+    ],
+}
+
+// GN: //protos/perfetto/config/track_event:zero
 genrule {
     name: "perfetto_protos_perfetto_config_track_event_zero_gen",
     srcs: [
-        "protos/perfetto/config/track_event/track_event_config.proto",
+        ":perfetto_protos_perfetto_config_track_event_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_track_event_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/track_event/track_event_config.pbzero.cc",
     ],
@@ -4442,13 +4752,13 @@
 genrule {
     name: "perfetto_protos_perfetto_config_track_event_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/track_event/track_event_config.proto",
+        ":perfetto_protos_perfetto_config_track_event_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_track_event_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/track_event/track_event_config.pbzero.h",
     ],
@@ -4459,8 +4769,8 @@
 }
 
 // GN: //protos/perfetto/config:zero
-genrule {
-    name: "perfetto_protos_perfetto_config_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_config_zero",
     srcs: [
         "protos/perfetto/config/chrome/chrome_config.proto",
         "protos/perfetto/config/chrome/scenario_config.proto",
@@ -4470,11 +4780,32 @@
         "protos/perfetto/config/test_config.proto",
         "protos/perfetto/config/trace_config.proto",
     ],
+}
+
+// GN: //protos/perfetto/config:zero
+genrule {
+    name: "perfetto_protos_perfetto_config_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_android_zero",
+        ":perfetto_protos_perfetto_config_ftrace_zero",
+        ":perfetto_protos_perfetto_config_gpu_zero",
+        ":perfetto_protos_perfetto_config_inode_file_zero",
+        ":perfetto_protos_perfetto_config_interceptors_zero",
+        ":perfetto_protos_perfetto_config_power_zero",
+        ":perfetto_protos_perfetto_config_process_stats_zero",
+        ":perfetto_protos_perfetto_config_profiling_zero",
+        ":perfetto_protos_perfetto_config_statsd_zero",
+        ":perfetto_protos_perfetto_config_sys_stats_zero",
+        ":perfetto_protos_perfetto_config_system_info_zero",
+        ":perfetto_protos_perfetto_config_track_event_zero",
+        ":perfetto_protos_perfetto_config_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/chrome/chrome_config.pbzero.cc",
         "external/perfetto/protos/perfetto/config/chrome/scenario_config.pbzero.cc",
@@ -4490,19 +4821,26 @@
 genrule {
     name: "perfetto_protos_perfetto_config_zero_gen_headers",
     srcs: [
-        "protos/perfetto/config/chrome/chrome_config.proto",
-        "protos/perfetto/config/chrome/scenario_config.proto",
-        "protos/perfetto/config/data_source_config.proto",
-        "protos/perfetto/config/interceptor_config.proto",
-        "protos/perfetto/config/stress_test_config.proto",
-        "protos/perfetto/config/test_config.proto",
-        "protos/perfetto/config/trace_config.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_android_zero",
+        ":perfetto_protos_perfetto_config_ftrace_zero",
+        ":perfetto_protos_perfetto_config_gpu_zero",
+        ":perfetto_protos_perfetto_config_inode_file_zero",
+        ":perfetto_protos_perfetto_config_interceptors_zero",
+        ":perfetto_protos_perfetto_config_power_zero",
+        ":perfetto_protos_perfetto_config_process_stats_zero",
+        ":perfetto_protos_perfetto_config_profiling_zero",
+        ":perfetto_protos_perfetto_config_statsd_zero",
+        ":perfetto_protos_perfetto_config_sys_stats_zero",
+        ":perfetto_protos_perfetto_config_system_info_zero",
+        ":perfetto_protos_perfetto_config_track_event_zero",
+        ":perfetto_protos_perfetto_config_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_config_zero)",
     out: [
         "external/perfetto/protos/perfetto/config/chrome/chrome_config.pbzero.h",
         "external/perfetto/protos/perfetto/config/chrome/scenario_config.pbzero.h",
@@ -4519,17 +4857,39 @@
 }
 
 // GN: //protos/perfetto/ipc:cpp
-genrule {
-    name: "perfetto_protos_perfetto_ipc_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_ipc_cpp",
     srcs: [
         "protos/perfetto/ipc/consumer_port.proto",
         "protos/perfetto/ipc/producer_port.proto",
     ],
+}
+
+// GN: //protos/perfetto/ipc:cpp
+genrule {
+    name: "perfetto_protos_perfetto_ipc_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+        ":perfetto_protos_perfetto_ipc_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_ipc_cpp)",
     out: [
         "external/perfetto/protos/perfetto/ipc/consumer_port.gen.cc",
         "external/perfetto/protos/perfetto/ipc/producer_port.gen.cc",
@@ -4540,14 +4900,27 @@
 genrule {
     name: "perfetto_protos_perfetto_ipc_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/ipc/consumer_port.proto",
-        "protos/perfetto/ipc/producer_port.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+        ":perfetto_protos_perfetto_ipc_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_ipc_cpp)",
     out: [
         "external/perfetto/protos/perfetto/ipc/consumer_port.gen.h",
         "external/perfetto/protos/perfetto/ipc/producer_port.gen.h",
@@ -4559,17 +4932,41 @@
 }
 
 // GN: //protos/perfetto/ipc:ipc
-genrule {
-    name: "perfetto_protos_perfetto_ipc_ipc_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_ipc_ipc",
     srcs: [
         "protos/perfetto/ipc/consumer_port.proto",
         "protos/perfetto/ipc/producer_port.proto",
     ],
+}
+
+// GN: //protos/perfetto/ipc:ipc
+genrule {
+    name: "perfetto_protos_perfetto_ipc_ipc_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+        ":perfetto_protos_perfetto_ipc_cpp",
+        ":perfetto_protos_perfetto_ipc_ipc",
+        ":perfetto_protos_perfetto_ipc_wire_protocol_cpp",
+    ],
     tools: [
         "aprotoc",
         "ipc_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location ipc_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location ipc_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_ipc_ipc)",
     out: [
         "external/perfetto/protos/perfetto/ipc/consumer_port.ipc.cc",
         "external/perfetto/protos/perfetto/ipc/producer_port.ipc.cc",
@@ -4580,14 +4977,29 @@
 genrule {
     name: "perfetto_protos_perfetto_ipc_ipc_gen_headers",
     srcs: [
-        "protos/perfetto/ipc/consumer_port.proto",
-        "protos/perfetto/ipc/producer_port.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+        ":perfetto_protos_perfetto_ipc_cpp",
+        ":perfetto_protos_perfetto_ipc_ipc",
+        ":perfetto_protos_perfetto_ipc_wire_protocol_cpp",
     ],
     tools: [
         "aprotoc",
         "ipc_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location ipc_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location ipc_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_ipc_ipc)",
     out: [
         "external/perfetto/protos/perfetto/ipc/consumer_port.ipc.h",
         "external/perfetto/protos/perfetto/ipc/producer_port.ipc.h",
@@ -4599,16 +5011,24 @@
 }
 
 // GN: //protos/perfetto/ipc:wire_protocol_cpp
+filegroup {
+    name: "perfetto_protos_perfetto_ipc_wire_protocol_cpp",
+    srcs: [
+        "protos/perfetto/ipc/wire_protocol.proto",
+    ],
+}
+
+// GN: //protos/perfetto/ipc:wire_protocol_cpp
 genrule {
     name: "perfetto_protos_perfetto_ipc_wire_protocol_cpp_gen",
     srcs: [
-        "protos/perfetto/ipc/wire_protocol.proto",
+        ":perfetto_protos_perfetto_ipc_wire_protocol_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_ipc_wire_protocol_cpp)",
     out: [
         "external/perfetto/protos/perfetto/ipc/wire_protocol.gen.cc",
     ],
@@ -4618,13 +5038,13 @@
 genrule {
     name: "perfetto_protos_perfetto_ipc_wire_protocol_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/ipc/wire_protocol.proto",
+        ":perfetto_protos_perfetto_ipc_wire_protocol_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_ipc_wire_protocol_cpp)",
     out: [
         "external/perfetto/protos/perfetto/ipc/wire_protocol.gen.h",
     ],
@@ -4638,6 +5058,7 @@
 genrule {
     name: "perfetto_protos_perfetto_metrics_chrome_descriptor",
     srcs: [
+        ":libprotobuf-internal-descriptor-proto",
         "protos/perfetto/metrics/android/ad_services_metric.proto",
         "protos/perfetto/metrics/android/android_blocking_call.proto",
         "protos/perfetto/metrics/android/android_blocking_calls_cuj_metric.proto",
@@ -4849,8 +5270,8 @@
 }
 
 // GN: //protos/perfetto/trace/android:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_android_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_android_cpp",
     srcs: [
         "protos/perfetto/trace/android/android_game_intervention_list.proto",
         "protos/perfetto/trace/android/android_log.proto",
@@ -4866,11 +5287,20 @@
         "protos/perfetto/trace/android/surfaceflinger_layers.proto",
         "protos/perfetto/trace/android/surfaceflinger_transactions.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/android:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_android_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_android_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_android_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.gen.cc",
         "external/perfetto/protos/perfetto/trace/android/android_log.gen.cc",
@@ -4892,25 +5322,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_android_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/android/android_game_intervention_list.proto",
-        "protos/perfetto/trace/android/android_log.proto",
-        "protos/perfetto/trace/android/android_system_property.proto",
-        "protos/perfetto/trace/android/camera_event.proto",
-        "protos/perfetto/trace/android/frame_timeline_event.proto",
-        "protos/perfetto/trace/android/gpu_mem_event.proto",
-        "protos/perfetto/trace/android/graphics_frame_event.proto",
-        "protos/perfetto/trace/android/initial_display_state.proto",
-        "protos/perfetto/trace/android/network_trace.proto",
-        "protos/perfetto/trace/android/packages_list.proto",
-        "protos/perfetto/trace/android/surfaceflinger_common.proto",
-        "protos/perfetto/trace/android/surfaceflinger_layers.proto",
-        "protos/perfetto/trace/android/surfaceflinger_transactions.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_android_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_android_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.gen.h",
         "external/perfetto/protos/perfetto/trace/android/android_log.gen.h",
@@ -4933,8 +5352,8 @@
 }
 
 // GN: //protos/perfetto/trace/android:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_android_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_android_lite",
     srcs: [
         "protos/perfetto/trace/android/android_game_intervention_list.proto",
         "protos/perfetto/trace/android/android_log.proto",
@@ -4950,10 +5369,19 @@
         "protos/perfetto/trace/android/surfaceflinger_layers.proto",
         "protos/perfetto/trace/android/surfaceflinger_transactions.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/android:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_android_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_android_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_android_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.pb.cc",
         "external/perfetto/protos/perfetto/trace/android/android_log.pb.cc",
@@ -4975,24 +5403,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_android_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/android/android_game_intervention_list.proto",
-        "protos/perfetto/trace/android/android_log.proto",
-        "protos/perfetto/trace/android/android_system_property.proto",
-        "protos/perfetto/trace/android/camera_event.proto",
-        "protos/perfetto/trace/android/frame_timeline_event.proto",
-        "protos/perfetto/trace/android/gpu_mem_event.proto",
-        "protos/perfetto/trace/android/graphics_frame_event.proto",
-        "protos/perfetto/trace/android/initial_display_state.proto",
-        "protos/perfetto/trace/android/network_trace.proto",
-        "protos/perfetto/trace/android/packages_list.proto",
-        "protos/perfetto/trace/android/surfaceflinger_common.proto",
-        "protos/perfetto/trace/android/surfaceflinger_layers.proto",
-        "protos/perfetto/trace/android/surfaceflinger_transactions.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_android_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_android_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.pb.h",
         "external/perfetto/protos/perfetto/trace/android/android_log.pb.h",
@@ -5033,8 +5450,8 @@
 }
 
 // GN: //protos/perfetto/trace/android:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_android_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_android_zero",
     srcs: [
         "protos/perfetto/trace/android/android_game_intervention_list.proto",
         "protos/perfetto/trace/android/android_log.proto",
@@ -5050,11 +5467,20 @@
         "protos/perfetto/trace/android/surfaceflinger_layers.proto",
         "protos/perfetto/trace/android/surfaceflinger_transactions.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/android:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_android_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_android_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_android_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/android/android_log.pbzero.cc",
@@ -5076,25 +5502,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_android_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/android/android_game_intervention_list.proto",
-        "protos/perfetto/trace/android/android_log.proto",
-        "protos/perfetto/trace/android/android_system_property.proto",
-        "protos/perfetto/trace/android/camera_event.proto",
-        "protos/perfetto/trace/android/frame_timeline_event.proto",
-        "protos/perfetto/trace/android/gpu_mem_event.proto",
-        "protos/perfetto/trace/android/graphics_frame_event.proto",
-        "protos/perfetto/trace/android/initial_display_state.proto",
-        "protos/perfetto/trace/android/network_trace.proto",
-        "protos/perfetto/trace/android/packages_list.proto",
-        "protos/perfetto/trace/android/surfaceflinger_common.proto",
-        "protos/perfetto/trace/android/surfaceflinger_layers.proto",
-        "protos/perfetto/trace/android/surfaceflinger_transactions.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_android_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_android_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.pbzero.h",
         "external/perfetto/protos/perfetto/trace/android/android_log.pbzero.h",
@@ -5117,18 +5532,26 @@
 }
 
 // GN: //protos/perfetto/trace/chrome:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_chrome_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_chrome_cpp",
     srcs: [
         "protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
         "protos/perfetto/trace/chrome/chrome_metadata.proto",
         "protos/perfetto/trace/chrome/chrome_trace_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/chrome:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_chrome_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_chrome_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_chrome_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.gen.cc",
         "external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.gen.cc",
@@ -5140,15 +5563,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_chrome_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
-        "protos/perfetto/trace/chrome/chrome_metadata.proto",
-        "protos/perfetto/trace/chrome/chrome_trace_event.proto",
+        ":perfetto_protos_perfetto_trace_chrome_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_chrome_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.gen.h",
         "external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.gen.h",
@@ -5161,17 +5582,25 @@
 }
 
 // GN: //protos/perfetto/trace/chrome:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_chrome_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_chrome_lite",
     srcs: [
         "protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
         "protos/perfetto/trace/chrome/chrome_metadata.proto",
         "protos/perfetto/trace/chrome/chrome_trace_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/chrome:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_chrome_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_chrome_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_chrome_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.pb.cc",
         "external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pb.cc",
@@ -5183,14 +5612,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_chrome_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
-        "protos/perfetto/trace/chrome/chrome_metadata.proto",
-        "protos/perfetto/trace/chrome/chrome_trace_event.proto",
+        ":perfetto_protos_perfetto_trace_chrome_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_chrome_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.pb.h",
         "external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pb.h",
@@ -5203,18 +5630,26 @@
 }
 
 // GN: //protos/perfetto/trace/chrome:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_chrome_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_chrome_zero",
     srcs: [
         "protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
         "protos/perfetto/trace/chrome/chrome_metadata.proto",
         "protos/perfetto/trace/chrome/chrome_trace_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/chrome:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_chrome_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_chrome_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_chrome_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pbzero.cc",
@@ -5226,15 +5661,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_chrome_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
-        "protos/perfetto/trace/chrome/chrome_metadata.proto",
-        "protos/perfetto/trace/chrome/chrome_trace_event.proto",
+        ":perfetto_protos_perfetto_trace_chrome_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_chrome_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.pbzero.h",
         "external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pbzero.h",
@@ -5456,18 +5889,26 @@
 }
 
 // GN: //protos/perfetto/trace/etw:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_etw_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_etw_cpp",
     srcs: [
         "protos/perfetto/trace/etw/etw.proto",
         "protos/perfetto/trace/etw/etw_event.proto",
         "protos/perfetto/trace/etw/etw_event_bundle.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/etw:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_etw_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_etw_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_etw_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/etw/etw.gen.cc",
         "external/perfetto/protos/perfetto/trace/etw/etw_event.gen.cc",
@@ -5479,15 +5920,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_etw_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/etw/etw.proto",
-        "protos/perfetto/trace/etw/etw_event.proto",
-        "protos/perfetto/trace/etw/etw_event_bundle.proto",
+        ":perfetto_protos_perfetto_trace_etw_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_etw_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/etw/etw.gen.h",
         "external/perfetto/protos/perfetto/trace/etw/etw_event.gen.h",
@@ -5500,17 +5939,25 @@
 }
 
 // GN: //protos/perfetto/trace/etw:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_etw_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_etw_lite",
     srcs: [
         "protos/perfetto/trace/etw/etw.proto",
         "protos/perfetto/trace/etw/etw_event.proto",
         "protos/perfetto/trace/etw/etw_event_bundle.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/etw:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_etw_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_etw_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_etw_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/etw/etw.pb.cc",
         "external/perfetto/protos/perfetto/trace/etw/etw_event.pb.cc",
@@ -5522,14 +5969,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_etw_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/etw/etw.proto",
-        "protos/perfetto/trace/etw/etw_event.proto",
-        "protos/perfetto/trace/etw/etw_event_bundle.proto",
+        ":perfetto_protos_perfetto_trace_etw_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_etw_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/etw/etw.pb.h",
         "external/perfetto/protos/perfetto/trace/etw/etw_event.pb.h",
@@ -5542,18 +5987,26 @@
 }
 
 // GN: //protos/perfetto/trace/etw:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_etw_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_etw_zero",
     srcs: [
         "protos/perfetto/trace/etw/etw.proto",
         "protos/perfetto/trace/etw/etw_event.proto",
         "protos/perfetto/trace/etw/etw_event_bundle.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/etw:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_etw_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_etw_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_etw_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/etw/etw.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/etw/etw_event.pbzero.cc",
@@ -5565,15 +6018,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_etw_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/etw/etw.proto",
-        "protos/perfetto/trace/etw/etw_event.proto",
-        "protos/perfetto/trace/etw/etw_event_bundle.proto",
+        ":perfetto_protos_perfetto_trace_etw_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_etw_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/etw/etw.pbzero.h",
         "external/perfetto/protos/perfetto/trace/etw/etw_event.pbzero.h",
@@ -5586,16 +6037,24 @@
 }
 
 // GN: //protos/perfetto/trace/filesystem:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_trace_filesystem_cpp",
+    srcs: [
+        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/filesystem:cpp
 genrule {
     name: "perfetto_protos_perfetto_trace_filesystem_cpp_gen",
     srcs: [
-        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+        ":perfetto_protos_perfetto_trace_filesystem_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_filesystem_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/filesystem/inode_file_map.gen.cc",
     ],
@@ -5605,13 +6064,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_filesystem_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+        ":perfetto_protos_perfetto_trace_filesystem_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_filesystem_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/filesystem/inode_file_map.gen.h",
     ],
@@ -5622,15 +6081,23 @@
 }
 
 // GN: //protos/perfetto/trace/filesystem:lite
+filegroup {
+    name: "perfetto_protos_perfetto_trace_filesystem_lite",
+    srcs: [
+        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/filesystem:lite
 genrule {
     name: "perfetto_protos_perfetto_trace_filesystem_lite_gen",
     srcs: [
-        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+        ":perfetto_protos_perfetto_trace_filesystem_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_filesystem_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/filesystem/inode_file_map.pb.cc",
     ],
@@ -5640,12 +6107,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_filesystem_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+        ":perfetto_protos_perfetto_trace_filesystem_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_filesystem_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/filesystem/inode_file_map.pb.h",
     ],
@@ -5656,16 +6123,24 @@
 }
 
 // GN: //protos/perfetto/trace/filesystem:zero
+filegroup {
+    name: "perfetto_protos_perfetto_trace_filesystem_zero",
+    srcs: [
+        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/filesystem:zero
 genrule {
     name: "perfetto_protos_perfetto_trace_filesystem_zero_gen",
     srcs: [
-        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+        ":perfetto_protos_perfetto_trace_filesystem_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_filesystem_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/filesystem/inode_file_map.pbzero.cc",
     ],
@@ -5675,13 +6150,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_filesystem_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/filesystem/inode_file_map.proto",
+        ":perfetto_protos_perfetto_trace_filesystem_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_filesystem_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/filesystem/inode_file_map.pbzero.h",
     ],
@@ -5692,8 +6167,8 @@
 }
 
 // GN: //protos/perfetto/trace/ftrace:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_ftrace_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_ftrace_cpp",
     srcs: [
         "protos/perfetto/trace/ftrace/android_fs.proto",
         "protos/perfetto/trace/ftrace/binder.proto",
@@ -5762,11 +6237,19 @@
         "protos/perfetto/trace/ftrace/vmscan.proto",
         "protos/perfetto/trace/ftrace/workqueue.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/ftrace:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_ftrace_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_ftrace_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ftrace_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/ftrace/android_fs.gen.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/binder.gen.cc",
@@ -5841,78 +6324,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_ftrace_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/ftrace/android_fs.proto",
-        "protos/perfetto/trace/ftrace/binder.proto",
-        "protos/perfetto/trace/ftrace/block.proto",
-        "protos/perfetto/trace/ftrace/cgroup.proto",
-        "protos/perfetto/trace/ftrace/clk.proto",
-        "protos/perfetto/trace/ftrace/cma.proto",
-        "protos/perfetto/trace/ftrace/compaction.proto",
-        "protos/perfetto/trace/ftrace/cpuhp.proto",
-        "protos/perfetto/trace/ftrace/cros_ec.proto",
-        "protos/perfetto/trace/ftrace/dma_fence.proto",
-        "protos/perfetto/trace/ftrace/dmabuf_heap.proto",
-        "protos/perfetto/trace/ftrace/dpu.proto",
-        "protos/perfetto/trace/ftrace/drm.proto",
-        "protos/perfetto/trace/ftrace/ext4.proto",
-        "protos/perfetto/trace/ftrace/f2fs.proto",
-        "protos/perfetto/trace/ftrace/fastrpc.proto",
-        "protos/perfetto/trace/ftrace/fence.proto",
-        "protos/perfetto/trace/ftrace/filemap.proto",
-        "protos/perfetto/trace/ftrace/ftrace.proto",
-        "protos/perfetto/trace/ftrace/ftrace_event.proto",
-        "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
-        "protos/perfetto/trace/ftrace/ftrace_stats.proto",
-        "protos/perfetto/trace/ftrace/g2d.proto",
-        "protos/perfetto/trace/ftrace/generic.proto",
-        "protos/perfetto/trace/ftrace/gpu_mem.proto",
-        "protos/perfetto/trace/ftrace/gpu_scheduler.proto",
-        "protos/perfetto/trace/ftrace/hyp.proto",
-        "protos/perfetto/trace/ftrace/i2c.proto",
-        "protos/perfetto/trace/ftrace/ion.proto",
-        "protos/perfetto/trace/ftrace/ipi.proto",
-        "protos/perfetto/trace/ftrace/irq.proto",
-        "protos/perfetto/trace/ftrace/kmem.proto",
-        "protos/perfetto/trace/ftrace/kvm.proto",
-        "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
-        "protos/perfetto/trace/ftrace/lwis.proto",
-        "protos/perfetto/trace/ftrace/mali.proto",
-        "protos/perfetto/trace/ftrace/mdss.proto",
-        "protos/perfetto/trace/ftrace/mm_event.proto",
-        "protos/perfetto/trace/ftrace/net.proto",
-        "protos/perfetto/trace/ftrace/oom.proto",
-        "protos/perfetto/trace/ftrace/panel.proto",
-        "protos/perfetto/trace/ftrace/power.proto",
-        "protos/perfetto/trace/ftrace/printk.proto",
-        "protos/perfetto/trace/ftrace/raw_syscalls.proto",
-        "protos/perfetto/trace/ftrace/regulator.proto",
-        "protos/perfetto/trace/ftrace/samsung.proto",
-        "protos/perfetto/trace/ftrace/sched.proto",
-        "protos/perfetto/trace/ftrace/scm.proto",
-        "protos/perfetto/trace/ftrace/sde.proto",
-        "protos/perfetto/trace/ftrace/signal.proto",
-        "protos/perfetto/trace/ftrace/skb.proto",
-        "protos/perfetto/trace/ftrace/sock.proto",
-        "protos/perfetto/trace/ftrace/sync.proto",
-        "protos/perfetto/trace/ftrace/synthetic.proto",
-        "protos/perfetto/trace/ftrace/systrace.proto",
-        "protos/perfetto/trace/ftrace/task.proto",
-        "protos/perfetto/trace/ftrace/tcp.proto",
-        "protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
-        "protos/perfetto/trace/ftrace/thermal.proto",
-        "protos/perfetto/trace/ftrace/trusty.proto",
-        "protos/perfetto/trace/ftrace/ufs.proto",
-        "protos/perfetto/trace/ftrace/v4l2.proto",
-        "protos/perfetto/trace/ftrace/virtio_gpu.proto",
-        "protos/perfetto/trace/ftrace/virtio_video.proto",
-        "protos/perfetto/trace/ftrace/vmscan.proto",
-        "protos/perfetto/trace/ftrace/workqueue.proto",
+        ":perfetto_protos_perfetto_trace_ftrace_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ftrace_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/ftrace/android_fs.gen.h",
         "external/perfetto/protos/perfetto/trace/ftrace/binder.gen.h",
@@ -5988,8 +6406,8 @@
 }
 
 // GN: //protos/perfetto/trace/ftrace:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_ftrace_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_ftrace_lite",
     srcs: [
         "protos/perfetto/trace/ftrace/android_fs.proto",
         "protos/perfetto/trace/ftrace/binder.proto",
@@ -6058,10 +6476,18 @@
         "protos/perfetto/trace/ftrace/vmscan.proto",
         "protos/perfetto/trace/ftrace/workqueue.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/ftrace:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_ftrace_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_ftrace_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ftrace_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/ftrace/android_fs.pb.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/binder.pb.cc",
@@ -6136,77 +6562,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_ftrace_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/ftrace/android_fs.proto",
-        "protos/perfetto/trace/ftrace/binder.proto",
-        "protos/perfetto/trace/ftrace/block.proto",
-        "protos/perfetto/trace/ftrace/cgroup.proto",
-        "protos/perfetto/trace/ftrace/clk.proto",
-        "protos/perfetto/trace/ftrace/cma.proto",
-        "protos/perfetto/trace/ftrace/compaction.proto",
-        "protos/perfetto/trace/ftrace/cpuhp.proto",
-        "protos/perfetto/trace/ftrace/cros_ec.proto",
-        "protos/perfetto/trace/ftrace/dma_fence.proto",
-        "protos/perfetto/trace/ftrace/dmabuf_heap.proto",
-        "protos/perfetto/trace/ftrace/dpu.proto",
-        "protos/perfetto/trace/ftrace/drm.proto",
-        "protos/perfetto/trace/ftrace/ext4.proto",
-        "protos/perfetto/trace/ftrace/f2fs.proto",
-        "protos/perfetto/trace/ftrace/fastrpc.proto",
-        "protos/perfetto/trace/ftrace/fence.proto",
-        "protos/perfetto/trace/ftrace/filemap.proto",
-        "protos/perfetto/trace/ftrace/ftrace.proto",
-        "protos/perfetto/trace/ftrace/ftrace_event.proto",
-        "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
-        "protos/perfetto/trace/ftrace/ftrace_stats.proto",
-        "protos/perfetto/trace/ftrace/g2d.proto",
-        "protos/perfetto/trace/ftrace/generic.proto",
-        "protos/perfetto/trace/ftrace/gpu_mem.proto",
-        "protos/perfetto/trace/ftrace/gpu_scheduler.proto",
-        "protos/perfetto/trace/ftrace/hyp.proto",
-        "protos/perfetto/trace/ftrace/i2c.proto",
-        "protos/perfetto/trace/ftrace/ion.proto",
-        "protos/perfetto/trace/ftrace/ipi.proto",
-        "protos/perfetto/trace/ftrace/irq.proto",
-        "protos/perfetto/trace/ftrace/kmem.proto",
-        "protos/perfetto/trace/ftrace/kvm.proto",
-        "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
-        "protos/perfetto/trace/ftrace/lwis.proto",
-        "protos/perfetto/trace/ftrace/mali.proto",
-        "protos/perfetto/trace/ftrace/mdss.proto",
-        "protos/perfetto/trace/ftrace/mm_event.proto",
-        "protos/perfetto/trace/ftrace/net.proto",
-        "protos/perfetto/trace/ftrace/oom.proto",
-        "protos/perfetto/trace/ftrace/panel.proto",
-        "protos/perfetto/trace/ftrace/power.proto",
-        "protos/perfetto/trace/ftrace/printk.proto",
-        "protos/perfetto/trace/ftrace/raw_syscalls.proto",
-        "protos/perfetto/trace/ftrace/regulator.proto",
-        "protos/perfetto/trace/ftrace/samsung.proto",
-        "protos/perfetto/trace/ftrace/sched.proto",
-        "protos/perfetto/trace/ftrace/scm.proto",
-        "protos/perfetto/trace/ftrace/sde.proto",
-        "protos/perfetto/trace/ftrace/signal.proto",
-        "protos/perfetto/trace/ftrace/skb.proto",
-        "protos/perfetto/trace/ftrace/sock.proto",
-        "protos/perfetto/trace/ftrace/sync.proto",
-        "protos/perfetto/trace/ftrace/synthetic.proto",
-        "protos/perfetto/trace/ftrace/systrace.proto",
-        "protos/perfetto/trace/ftrace/task.proto",
-        "protos/perfetto/trace/ftrace/tcp.proto",
-        "protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
-        "protos/perfetto/trace/ftrace/thermal.proto",
-        "protos/perfetto/trace/ftrace/trusty.proto",
-        "protos/perfetto/trace/ftrace/ufs.proto",
-        "protos/perfetto/trace/ftrace/v4l2.proto",
-        "protos/perfetto/trace/ftrace/virtio_gpu.proto",
-        "protos/perfetto/trace/ftrace/virtio_video.proto",
-        "protos/perfetto/trace/ftrace/vmscan.proto",
-        "protos/perfetto/trace/ftrace/workqueue.proto",
+        ":perfetto_protos_perfetto_trace_ftrace_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ftrace_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/ftrace/android_fs.pb.h",
         "external/perfetto/protos/perfetto/trace/ftrace/binder.pb.h",
@@ -6282,8 +6643,8 @@
 }
 
 // GN: //protos/perfetto/trace/ftrace:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_ftrace_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_ftrace_zero",
     srcs: [
         "protos/perfetto/trace/ftrace/android_fs.proto",
         "protos/perfetto/trace/ftrace/binder.proto",
@@ -6352,11 +6713,19 @@
         "protos/perfetto/trace/ftrace/vmscan.proto",
         "protos/perfetto/trace/ftrace/workqueue.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/ftrace:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_ftrace_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_ftrace_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ftrace_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/ftrace/android_fs.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/binder.pbzero.cc",
@@ -6431,78 +6800,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_ftrace_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/ftrace/android_fs.proto",
-        "protos/perfetto/trace/ftrace/binder.proto",
-        "protos/perfetto/trace/ftrace/block.proto",
-        "protos/perfetto/trace/ftrace/cgroup.proto",
-        "protos/perfetto/trace/ftrace/clk.proto",
-        "protos/perfetto/trace/ftrace/cma.proto",
-        "protos/perfetto/trace/ftrace/compaction.proto",
-        "protos/perfetto/trace/ftrace/cpuhp.proto",
-        "protos/perfetto/trace/ftrace/cros_ec.proto",
-        "protos/perfetto/trace/ftrace/dma_fence.proto",
-        "protos/perfetto/trace/ftrace/dmabuf_heap.proto",
-        "protos/perfetto/trace/ftrace/dpu.proto",
-        "protos/perfetto/trace/ftrace/drm.proto",
-        "protos/perfetto/trace/ftrace/ext4.proto",
-        "protos/perfetto/trace/ftrace/f2fs.proto",
-        "protos/perfetto/trace/ftrace/fastrpc.proto",
-        "protos/perfetto/trace/ftrace/fence.proto",
-        "protos/perfetto/trace/ftrace/filemap.proto",
-        "protos/perfetto/trace/ftrace/ftrace.proto",
-        "protos/perfetto/trace/ftrace/ftrace_event.proto",
-        "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
-        "protos/perfetto/trace/ftrace/ftrace_stats.proto",
-        "protos/perfetto/trace/ftrace/g2d.proto",
-        "protos/perfetto/trace/ftrace/generic.proto",
-        "protos/perfetto/trace/ftrace/gpu_mem.proto",
-        "protos/perfetto/trace/ftrace/gpu_scheduler.proto",
-        "protos/perfetto/trace/ftrace/hyp.proto",
-        "protos/perfetto/trace/ftrace/i2c.proto",
-        "protos/perfetto/trace/ftrace/ion.proto",
-        "protos/perfetto/trace/ftrace/ipi.proto",
-        "protos/perfetto/trace/ftrace/irq.proto",
-        "protos/perfetto/trace/ftrace/kmem.proto",
-        "protos/perfetto/trace/ftrace/kvm.proto",
-        "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
-        "protos/perfetto/trace/ftrace/lwis.proto",
-        "protos/perfetto/trace/ftrace/mali.proto",
-        "protos/perfetto/trace/ftrace/mdss.proto",
-        "protos/perfetto/trace/ftrace/mm_event.proto",
-        "protos/perfetto/trace/ftrace/net.proto",
-        "protos/perfetto/trace/ftrace/oom.proto",
-        "protos/perfetto/trace/ftrace/panel.proto",
-        "protos/perfetto/trace/ftrace/power.proto",
-        "protos/perfetto/trace/ftrace/printk.proto",
-        "protos/perfetto/trace/ftrace/raw_syscalls.proto",
-        "protos/perfetto/trace/ftrace/regulator.proto",
-        "protos/perfetto/trace/ftrace/samsung.proto",
-        "protos/perfetto/trace/ftrace/sched.proto",
-        "protos/perfetto/trace/ftrace/scm.proto",
-        "protos/perfetto/trace/ftrace/sde.proto",
-        "protos/perfetto/trace/ftrace/signal.proto",
-        "protos/perfetto/trace/ftrace/skb.proto",
-        "protos/perfetto/trace/ftrace/sock.proto",
-        "protos/perfetto/trace/ftrace/sync.proto",
-        "protos/perfetto/trace/ftrace/synthetic.proto",
-        "protos/perfetto/trace/ftrace/systrace.proto",
-        "protos/perfetto/trace/ftrace/task.proto",
-        "protos/perfetto/trace/ftrace/tcp.proto",
-        "protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
-        "protos/perfetto/trace/ftrace/thermal.proto",
-        "protos/perfetto/trace/ftrace/trusty.proto",
-        "protos/perfetto/trace/ftrace/ufs.proto",
-        "protos/perfetto/trace/ftrace/v4l2.proto",
-        "protos/perfetto/trace/ftrace/virtio_gpu.proto",
-        "protos/perfetto/trace/ftrace/virtio_video.proto",
-        "protos/perfetto/trace/ftrace/vmscan.proto",
-        "protos/perfetto/trace/ftrace/workqueue.proto",
+        ":perfetto_protos_perfetto_trace_ftrace_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ftrace_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/ftrace/android_fs.pbzero.h",
         "external/perfetto/protos/perfetto/trace/ftrace/binder.pbzero.h",
@@ -6578,8 +6882,8 @@
 }
 
 // GN: //protos/perfetto/trace/gpu:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_gpu_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_gpu_cpp",
     srcs: [
         "protos/perfetto/trace/gpu/gpu_counter_event.proto",
         "protos/perfetto/trace/gpu/gpu_log.proto",
@@ -6587,11 +6891,20 @@
         "protos/perfetto/trace/gpu/vulkan_api_event.proto",
         "protos/perfetto/trace/gpu/vulkan_memory_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/gpu:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_gpu_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_gpu_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_gpu_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/gpu/gpu_counter_event.gen.cc",
         "external/perfetto/protos/perfetto/trace/gpu/gpu_log.gen.cc",
@@ -6605,17 +6918,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_gpu_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/gpu/gpu_counter_event.proto",
-        "protos/perfetto/trace/gpu/gpu_log.proto",
-        "protos/perfetto/trace/gpu/gpu_render_stage_event.proto",
-        "protos/perfetto/trace/gpu/vulkan_api_event.proto",
-        "protos/perfetto/trace/gpu/vulkan_memory_event.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_gpu_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_gpu_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/gpu/gpu_counter_event.gen.h",
         "external/perfetto/protos/perfetto/trace/gpu/gpu_log.gen.h",
@@ -6630,8 +6940,8 @@
 }
 
 // GN: //protos/perfetto/trace/gpu:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_gpu_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_gpu_lite",
     srcs: [
         "protos/perfetto/trace/gpu/gpu_counter_event.proto",
         "protos/perfetto/trace/gpu/gpu_log.proto",
@@ -6639,10 +6949,19 @@
         "protos/perfetto/trace/gpu/vulkan_api_event.proto",
         "protos/perfetto/trace/gpu/vulkan_memory_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/gpu:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_gpu_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_gpu_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_gpu_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/gpu/gpu_counter_event.pb.cc",
         "external/perfetto/protos/perfetto/trace/gpu/gpu_log.pb.cc",
@@ -6656,16 +6975,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_gpu_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/gpu/gpu_counter_event.proto",
-        "protos/perfetto/trace/gpu/gpu_log.proto",
-        "protos/perfetto/trace/gpu/gpu_render_stage_event.proto",
-        "protos/perfetto/trace/gpu/vulkan_api_event.proto",
-        "protos/perfetto/trace/gpu/vulkan_memory_event.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_gpu_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_gpu_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/gpu/gpu_counter_event.pb.h",
         "external/perfetto/protos/perfetto/trace/gpu/gpu_log.pb.h",
@@ -6680,8 +6996,8 @@
 }
 
 // GN: //protos/perfetto/trace/gpu:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_gpu_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_gpu_zero",
     srcs: [
         "protos/perfetto/trace/gpu/gpu_counter_event.proto",
         "protos/perfetto/trace/gpu/gpu_log.proto",
@@ -6689,11 +7005,20 @@
         "protos/perfetto/trace/gpu/vulkan_api_event.proto",
         "protos/perfetto/trace/gpu/vulkan_memory_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/gpu:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_gpu_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_gpu_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_gpu_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/gpu/gpu_counter_event.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/gpu/gpu_log.pbzero.cc",
@@ -6707,17 +7032,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_gpu_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/gpu/gpu_counter_event.proto",
-        "protos/perfetto/trace/gpu/gpu_log.proto",
-        "protos/perfetto/trace/gpu/gpu_render_stage_event.proto",
-        "protos/perfetto/trace/gpu/vulkan_api_event.proto",
-        "protos/perfetto/trace/gpu/vulkan_memory_event.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_gpu_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_gpu_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/gpu/gpu_counter_event.pbzero.h",
         "external/perfetto/protos/perfetto/trace/gpu/gpu_log.pbzero.h",
@@ -6732,16 +7054,29 @@
 }
 
 // GN: //protos/perfetto/trace/interned_data:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_trace_interned_data_cpp",
+    srcs: [
+        "protos/perfetto/trace/interned_data/interned_data.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/interned_data:cpp
 genrule {
     name: "perfetto_protos_perfetto_trace_interned_data_cpp_gen",
     srcs: [
-        "protos/perfetto/trace/interned_data/interned_data.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_android_cpp",
+        ":perfetto_protos_perfetto_trace_gpu_cpp",
+        ":perfetto_protos_perfetto_trace_interned_data_cpp",
+        ":perfetto_protos_perfetto_trace_profiling_cpp",
+        ":perfetto_protos_perfetto_trace_track_event_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_interned_data_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/interned_data/interned_data.gen.cc",
     ],
@@ -6751,13 +7086,18 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_interned_data_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/interned_data/interned_data.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_android_cpp",
+        ":perfetto_protos_perfetto_trace_gpu_cpp",
+        ":perfetto_protos_perfetto_trace_interned_data_cpp",
+        ":perfetto_protos_perfetto_trace_profiling_cpp",
+        ":perfetto_protos_perfetto_trace_track_event_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_interned_data_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/interned_data/interned_data.gen.h",
     ],
@@ -6768,15 +7108,28 @@
 }
 
 // GN: //protos/perfetto/trace/interned_data:lite
+filegroup {
+    name: "perfetto_protos_perfetto_trace_interned_data_lite",
+    srcs: [
+        "protos/perfetto/trace/interned_data/interned_data.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/interned_data:lite
 genrule {
     name: "perfetto_protos_perfetto_trace_interned_data_lite_gen",
     srcs: [
-        "protos/perfetto/trace/interned_data/interned_data.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_android_lite",
+        ":perfetto_protos_perfetto_trace_gpu_lite",
+        ":perfetto_protos_perfetto_trace_interned_data_lite",
+        ":perfetto_protos_perfetto_trace_profiling_lite",
+        ":perfetto_protos_perfetto_trace_track_event_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_interned_data_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/interned_data/interned_data.pb.cc",
     ],
@@ -6786,12 +7139,17 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_interned_data_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/interned_data/interned_data.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_android_lite",
+        ":perfetto_protos_perfetto_trace_gpu_lite",
+        ":perfetto_protos_perfetto_trace_interned_data_lite",
+        ":perfetto_protos_perfetto_trace_profiling_lite",
+        ":perfetto_protos_perfetto_trace_track_event_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_interned_data_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/interned_data/interned_data.pb.h",
     ],
@@ -6802,16 +7160,29 @@
 }
 
 // GN: //protos/perfetto/trace/interned_data:zero
+filegroup {
+    name: "perfetto_protos_perfetto_trace_interned_data_zero",
+    srcs: [
+        "protos/perfetto/trace/interned_data/interned_data.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/interned_data:zero
 genrule {
     name: "perfetto_protos_perfetto_trace_interned_data_zero_gen",
     srcs: [
-        "protos/perfetto/trace/interned_data/interned_data.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_android_zero",
+        ":perfetto_protos_perfetto_trace_gpu_zero",
+        ":perfetto_protos_perfetto_trace_interned_data_zero",
+        ":perfetto_protos_perfetto_trace_profiling_zero",
+        ":perfetto_protos_perfetto_trace_track_event_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_interned_data_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/interned_data/interned_data.pbzero.cc",
     ],
@@ -6821,13 +7192,18 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_interned_data_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/interned_data/interned_data.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_android_zero",
+        ":perfetto_protos_perfetto_trace_gpu_zero",
+        ":perfetto_protos_perfetto_trace_interned_data_zero",
+        ":perfetto_protos_perfetto_trace_profiling_zero",
+        ":perfetto_protos_perfetto_trace_track_event_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_interned_data_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/interned_data/interned_data.pbzero.h",
     ],
@@ -6838,19 +7214,41 @@
 }
 
 // GN: //protos/perfetto/trace:minimal_cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_minimal_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_minimal_cpp",
     srcs: [
         "protos/perfetto/trace/clock_snapshot.proto",
         "protos/perfetto/trace/system_info.proto",
         "protos/perfetto/trace/trace_uuid.proto",
         "protos/perfetto/trace/trigger.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace:minimal_cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_minimal_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+        ":perfetto_protos_perfetto_trace_minimal_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_minimal_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/clock_snapshot.gen.cc",
         "external/perfetto/protos/perfetto/trace/system_info.gen.cc",
@@ -6863,16 +7261,27 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_minimal_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/clock_snapshot.proto",
-        "protos/perfetto/trace/system_info.proto",
-        "protos/perfetto/trace/trace_uuid.proto",
-        "protos/perfetto/trace/trigger.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+        ":perfetto_protos_perfetto_trace_minimal_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_minimal_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/clock_snapshot.gen.h",
         "external/perfetto/protos/perfetto/trace/system_info.gen.h",
@@ -6886,18 +7295,40 @@
 }
 
 // GN: //protos/perfetto/trace:minimal_lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_minimal_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_minimal_lite",
     srcs: [
         "protos/perfetto/trace/clock_snapshot.proto",
         "protos/perfetto/trace/system_info.proto",
         "protos/perfetto/trace/trace_uuid.proto",
         "protos/perfetto/trace/trigger.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace:minimal_lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_minimal_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_android_lite",
+        ":perfetto_protos_perfetto_config_ftrace_lite",
+        ":perfetto_protos_perfetto_config_gpu_lite",
+        ":perfetto_protos_perfetto_config_inode_file_lite",
+        ":perfetto_protos_perfetto_config_interceptors_lite",
+        ":perfetto_protos_perfetto_config_lite",
+        ":perfetto_protos_perfetto_config_power_lite",
+        ":perfetto_protos_perfetto_config_process_stats_lite",
+        ":perfetto_protos_perfetto_config_profiling_lite",
+        ":perfetto_protos_perfetto_config_statsd_lite",
+        ":perfetto_protos_perfetto_config_sys_stats_lite",
+        ":perfetto_protos_perfetto_config_system_info_lite",
+        ":perfetto_protos_perfetto_config_track_event_lite",
+        ":perfetto_protos_perfetto_trace_minimal_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_minimal_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/clock_snapshot.pb.cc",
         "external/perfetto/protos/perfetto/trace/system_info.pb.cc",
@@ -6910,15 +7341,26 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_minimal_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/clock_snapshot.proto",
-        "protos/perfetto/trace/system_info.proto",
-        "protos/perfetto/trace/trace_uuid.proto",
-        "protos/perfetto/trace/trigger.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_android_lite",
+        ":perfetto_protos_perfetto_config_ftrace_lite",
+        ":perfetto_protos_perfetto_config_gpu_lite",
+        ":perfetto_protos_perfetto_config_inode_file_lite",
+        ":perfetto_protos_perfetto_config_interceptors_lite",
+        ":perfetto_protos_perfetto_config_lite",
+        ":perfetto_protos_perfetto_config_power_lite",
+        ":perfetto_protos_perfetto_config_process_stats_lite",
+        ":perfetto_protos_perfetto_config_profiling_lite",
+        ":perfetto_protos_perfetto_config_statsd_lite",
+        ":perfetto_protos_perfetto_config_sys_stats_lite",
+        ":perfetto_protos_perfetto_config_system_info_lite",
+        ":perfetto_protos_perfetto_config_track_event_lite",
+        ":perfetto_protos_perfetto_trace_minimal_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_minimal_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/clock_snapshot.pb.h",
         "external/perfetto/protos/perfetto/trace/system_info.pb.h",
@@ -6932,19 +7374,41 @@
 }
 
 // GN: //protos/perfetto/trace:minimal_zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_minimal_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_minimal_zero",
     srcs: [
         "protos/perfetto/trace/clock_snapshot.proto",
         "protos/perfetto/trace/system_info.proto",
         "protos/perfetto/trace/trace_uuid.proto",
         "protos/perfetto/trace/trigger.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace:minimal_zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_minimal_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_android_zero",
+        ":perfetto_protos_perfetto_config_ftrace_zero",
+        ":perfetto_protos_perfetto_config_gpu_zero",
+        ":perfetto_protos_perfetto_config_inode_file_zero",
+        ":perfetto_protos_perfetto_config_interceptors_zero",
+        ":perfetto_protos_perfetto_config_power_zero",
+        ":perfetto_protos_perfetto_config_process_stats_zero",
+        ":perfetto_protos_perfetto_config_profiling_zero",
+        ":perfetto_protos_perfetto_config_statsd_zero",
+        ":perfetto_protos_perfetto_config_sys_stats_zero",
+        ":perfetto_protos_perfetto_config_system_info_zero",
+        ":perfetto_protos_perfetto_config_track_event_zero",
+        ":perfetto_protos_perfetto_config_zero",
+        ":perfetto_protos_perfetto_trace_minimal_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_minimal_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/clock_snapshot.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/system_info.pbzero.cc",
@@ -6957,16 +7421,27 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_minimal_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/clock_snapshot.proto",
-        "protos/perfetto/trace/system_info.proto",
-        "protos/perfetto/trace/trace_uuid.proto",
-        "protos/perfetto/trace/trigger.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_android_zero",
+        ":perfetto_protos_perfetto_config_ftrace_zero",
+        ":perfetto_protos_perfetto_config_gpu_zero",
+        ":perfetto_protos_perfetto_config_inode_file_zero",
+        ":perfetto_protos_perfetto_config_interceptors_zero",
+        ":perfetto_protos_perfetto_config_power_zero",
+        ":perfetto_protos_perfetto_config_process_stats_zero",
+        ":perfetto_protos_perfetto_config_profiling_zero",
+        ":perfetto_protos_perfetto_config_statsd_zero",
+        ":perfetto_protos_perfetto_config_sys_stats_zero",
+        ":perfetto_protos_perfetto_config_system_info_zero",
+        ":perfetto_protos_perfetto_config_track_event_zero",
+        ":perfetto_protos_perfetto_config_zero",
+        ":perfetto_protos_perfetto_trace_minimal_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_minimal_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/clock_snapshot.pbzero.h",
         "external/perfetto/protos/perfetto/trace/system_info.pbzero.h",
@@ -6980,8 +7455,8 @@
 }
 
 // GN: //protos/perfetto/trace:non_minimal_cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_non_minimal_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_non_minimal_cpp",
     srcs: [
         "protos/perfetto/trace/extension_descriptor.proto",
         "protos/perfetto/trace/memory_graph.proto",
@@ -6992,11 +7467,50 @@
         "protos/perfetto/trace/trace_packet_defaults.proto",
         "protos/perfetto/trace/ui_state.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace:non_minimal_cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_non_minimal_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+        ":perfetto_protos_perfetto_trace_android_cpp",
+        ":perfetto_protos_perfetto_trace_chrome_cpp",
+        ":perfetto_protos_perfetto_trace_etw_cpp",
+        ":perfetto_protos_perfetto_trace_filesystem_cpp",
+        ":perfetto_protos_perfetto_trace_ftrace_cpp",
+        ":perfetto_protos_perfetto_trace_gpu_cpp",
+        ":perfetto_protos_perfetto_trace_interned_data_cpp",
+        ":perfetto_protos_perfetto_trace_minimal_cpp",
+        ":perfetto_protos_perfetto_trace_non_minimal_cpp",
+        ":perfetto_protos_perfetto_trace_perfetto_cpp",
+        ":perfetto_protos_perfetto_trace_power_cpp",
+        ":perfetto_protos_perfetto_trace_profiling_cpp",
+        ":perfetto_protos_perfetto_trace_ps_cpp",
+        ":perfetto_protos_perfetto_trace_statsd_cpp",
+        ":perfetto_protos_perfetto_trace_sys_stats_cpp",
+        ":perfetto_protos_perfetto_trace_system_info_cpp",
+        ":perfetto_protos_perfetto_trace_track_event_cpp",
+        ":perfetto_protos_perfetto_trace_translation_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_non_minimal_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/extension_descriptor.gen.cc",
         "external/perfetto/protos/perfetto/trace/memory_graph.gen.cc",
@@ -7013,20 +7527,44 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_non_minimal_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/extension_descriptor.proto",
-        "protos/perfetto/trace/memory_graph.proto",
-        "protos/perfetto/trace/test_event.proto",
-        "protos/perfetto/trace/test_extensions.proto",
-        "protos/perfetto/trace/trace.proto",
-        "protos/perfetto/trace/trace_packet.proto",
-        "protos/perfetto/trace/trace_packet_defaults.proto",
-        "protos/perfetto/trace/ui_state.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_config_android_cpp",
+        ":perfetto_protos_perfetto_config_cpp",
+        ":perfetto_protos_perfetto_config_ftrace_cpp",
+        ":perfetto_protos_perfetto_config_gpu_cpp",
+        ":perfetto_protos_perfetto_config_inode_file_cpp",
+        ":perfetto_protos_perfetto_config_interceptors_cpp",
+        ":perfetto_protos_perfetto_config_power_cpp",
+        ":perfetto_protos_perfetto_config_process_stats_cpp",
+        ":perfetto_protos_perfetto_config_profiling_cpp",
+        ":perfetto_protos_perfetto_config_statsd_cpp",
+        ":perfetto_protos_perfetto_config_sys_stats_cpp",
+        ":perfetto_protos_perfetto_config_system_info_cpp",
+        ":perfetto_protos_perfetto_config_track_event_cpp",
+        ":perfetto_protos_perfetto_trace_android_cpp",
+        ":perfetto_protos_perfetto_trace_chrome_cpp",
+        ":perfetto_protos_perfetto_trace_etw_cpp",
+        ":perfetto_protos_perfetto_trace_filesystem_cpp",
+        ":perfetto_protos_perfetto_trace_ftrace_cpp",
+        ":perfetto_protos_perfetto_trace_gpu_cpp",
+        ":perfetto_protos_perfetto_trace_interned_data_cpp",
+        ":perfetto_protos_perfetto_trace_minimal_cpp",
+        ":perfetto_protos_perfetto_trace_non_minimal_cpp",
+        ":perfetto_protos_perfetto_trace_perfetto_cpp",
+        ":perfetto_protos_perfetto_trace_power_cpp",
+        ":perfetto_protos_perfetto_trace_profiling_cpp",
+        ":perfetto_protos_perfetto_trace_ps_cpp",
+        ":perfetto_protos_perfetto_trace_statsd_cpp",
+        ":perfetto_protos_perfetto_trace_sys_stats_cpp",
+        ":perfetto_protos_perfetto_trace_system_info_cpp",
+        ":perfetto_protos_perfetto_trace_track_event_cpp",
+        ":perfetto_protos_perfetto_trace_translation_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_non_minimal_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/extension_descriptor.gen.h",
         "external/perfetto/protos/perfetto/trace/memory_graph.gen.h",
@@ -7044,8 +7582,8 @@
 }
 
 // GN: //protos/perfetto/trace:non_minimal_lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_non_minimal_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_non_minimal_lite",
     srcs: [
         "protos/perfetto/trace/extension_descriptor.proto",
         "protos/perfetto/trace/memory_graph.proto",
@@ -7056,10 +7594,49 @@
         "protos/perfetto/trace/trace_packet_defaults.proto",
         "protos/perfetto/trace/ui_state.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace:non_minimal_lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_non_minimal_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_android_lite",
+        ":perfetto_protos_perfetto_config_ftrace_lite",
+        ":perfetto_protos_perfetto_config_gpu_lite",
+        ":perfetto_protos_perfetto_config_inode_file_lite",
+        ":perfetto_protos_perfetto_config_interceptors_lite",
+        ":perfetto_protos_perfetto_config_lite",
+        ":perfetto_protos_perfetto_config_power_lite",
+        ":perfetto_protos_perfetto_config_process_stats_lite",
+        ":perfetto_protos_perfetto_config_profiling_lite",
+        ":perfetto_protos_perfetto_config_statsd_lite",
+        ":perfetto_protos_perfetto_config_sys_stats_lite",
+        ":perfetto_protos_perfetto_config_system_info_lite",
+        ":perfetto_protos_perfetto_config_track_event_lite",
+        ":perfetto_protos_perfetto_trace_android_lite",
+        ":perfetto_protos_perfetto_trace_chrome_lite",
+        ":perfetto_protos_perfetto_trace_etw_lite",
+        ":perfetto_protos_perfetto_trace_filesystem_lite",
+        ":perfetto_protos_perfetto_trace_ftrace_lite",
+        ":perfetto_protos_perfetto_trace_gpu_lite",
+        ":perfetto_protos_perfetto_trace_interned_data_lite",
+        ":perfetto_protos_perfetto_trace_minimal_lite",
+        ":perfetto_protos_perfetto_trace_non_minimal_lite",
+        ":perfetto_protos_perfetto_trace_perfetto_lite",
+        ":perfetto_protos_perfetto_trace_power_lite",
+        ":perfetto_protos_perfetto_trace_profiling_lite",
+        ":perfetto_protos_perfetto_trace_ps_lite",
+        ":perfetto_protos_perfetto_trace_statsd_lite",
+        ":perfetto_protos_perfetto_trace_sys_stats_lite",
+        ":perfetto_protos_perfetto_trace_system_info_lite",
+        ":perfetto_protos_perfetto_trace_track_event_lite",
+        ":perfetto_protos_perfetto_trace_translation_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_non_minimal_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/extension_descriptor.pb.cc",
         "external/perfetto/protos/perfetto/trace/memory_graph.pb.cc",
@@ -7076,19 +7653,43 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_non_minimal_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/extension_descriptor.proto",
-        "protos/perfetto/trace/memory_graph.proto",
-        "protos/perfetto/trace/test_event.proto",
-        "protos/perfetto/trace/test_extensions.proto",
-        "protos/perfetto/trace/trace.proto",
-        "protos/perfetto/trace/trace_packet.proto",
-        "protos/perfetto/trace/trace_packet_defaults.proto",
-        "protos/perfetto/trace/ui_state.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_config_android_lite",
+        ":perfetto_protos_perfetto_config_ftrace_lite",
+        ":perfetto_protos_perfetto_config_gpu_lite",
+        ":perfetto_protos_perfetto_config_inode_file_lite",
+        ":perfetto_protos_perfetto_config_interceptors_lite",
+        ":perfetto_protos_perfetto_config_lite",
+        ":perfetto_protos_perfetto_config_power_lite",
+        ":perfetto_protos_perfetto_config_process_stats_lite",
+        ":perfetto_protos_perfetto_config_profiling_lite",
+        ":perfetto_protos_perfetto_config_statsd_lite",
+        ":perfetto_protos_perfetto_config_sys_stats_lite",
+        ":perfetto_protos_perfetto_config_system_info_lite",
+        ":perfetto_protos_perfetto_config_track_event_lite",
+        ":perfetto_protos_perfetto_trace_android_lite",
+        ":perfetto_protos_perfetto_trace_chrome_lite",
+        ":perfetto_protos_perfetto_trace_etw_lite",
+        ":perfetto_protos_perfetto_trace_filesystem_lite",
+        ":perfetto_protos_perfetto_trace_ftrace_lite",
+        ":perfetto_protos_perfetto_trace_gpu_lite",
+        ":perfetto_protos_perfetto_trace_interned_data_lite",
+        ":perfetto_protos_perfetto_trace_minimal_lite",
+        ":perfetto_protos_perfetto_trace_non_minimal_lite",
+        ":perfetto_protos_perfetto_trace_perfetto_lite",
+        ":perfetto_protos_perfetto_trace_power_lite",
+        ":perfetto_protos_perfetto_trace_profiling_lite",
+        ":perfetto_protos_perfetto_trace_ps_lite",
+        ":perfetto_protos_perfetto_trace_statsd_lite",
+        ":perfetto_protos_perfetto_trace_sys_stats_lite",
+        ":perfetto_protos_perfetto_trace_system_info_lite",
+        ":perfetto_protos_perfetto_trace_track_event_lite",
+        ":perfetto_protos_perfetto_trace_translation_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_non_minimal_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/extension_descriptor.pb.h",
         "external/perfetto/protos/perfetto/trace/memory_graph.pb.h",
@@ -7106,8 +7707,8 @@
 }
 
 // GN: //protos/perfetto/trace:non_minimal_zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_non_minimal_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_non_minimal_zero",
     srcs: [
         "protos/perfetto/trace/extension_descriptor.proto",
         "protos/perfetto/trace/memory_graph.proto",
@@ -7118,11 +7719,50 @@
         "protos/perfetto/trace/trace_packet_defaults.proto",
         "protos/perfetto/trace/ui_state.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace:non_minimal_zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_non_minimal_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_android_zero",
+        ":perfetto_protos_perfetto_config_ftrace_zero",
+        ":perfetto_protos_perfetto_config_gpu_zero",
+        ":perfetto_protos_perfetto_config_inode_file_zero",
+        ":perfetto_protos_perfetto_config_interceptors_zero",
+        ":perfetto_protos_perfetto_config_power_zero",
+        ":perfetto_protos_perfetto_config_process_stats_zero",
+        ":perfetto_protos_perfetto_config_profiling_zero",
+        ":perfetto_protos_perfetto_config_statsd_zero",
+        ":perfetto_protos_perfetto_config_sys_stats_zero",
+        ":perfetto_protos_perfetto_config_system_info_zero",
+        ":perfetto_protos_perfetto_config_track_event_zero",
+        ":perfetto_protos_perfetto_config_zero",
+        ":perfetto_protos_perfetto_trace_android_zero",
+        ":perfetto_protos_perfetto_trace_chrome_zero",
+        ":perfetto_protos_perfetto_trace_etw_zero",
+        ":perfetto_protos_perfetto_trace_filesystem_zero",
+        ":perfetto_protos_perfetto_trace_ftrace_zero",
+        ":perfetto_protos_perfetto_trace_gpu_zero",
+        ":perfetto_protos_perfetto_trace_interned_data_zero",
+        ":perfetto_protos_perfetto_trace_minimal_zero",
+        ":perfetto_protos_perfetto_trace_non_minimal_zero",
+        ":perfetto_protos_perfetto_trace_perfetto_zero",
+        ":perfetto_protos_perfetto_trace_power_zero",
+        ":perfetto_protos_perfetto_trace_profiling_zero",
+        ":perfetto_protos_perfetto_trace_ps_zero",
+        ":perfetto_protos_perfetto_trace_statsd_zero",
+        ":perfetto_protos_perfetto_trace_sys_stats_zero",
+        ":perfetto_protos_perfetto_trace_system_info_zero",
+        ":perfetto_protos_perfetto_trace_track_event_zero",
+        ":perfetto_protos_perfetto_trace_translation_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_non_minimal_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/extension_descriptor.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/memory_graph.pbzero.cc",
@@ -7139,20 +7779,44 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_non_minimal_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/extension_descriptor.proto",
-        "protos/perfetto/trace/memory_graph.proto",
-        "protos/perfetto/trace/test_event.proto",
-        "protos/perfetto/trace/test_extensions.proto",
-        "protos/perfetto/trace/trace.proto",
-        "protos/perfetto/trace/trace_packet.proto",
-        "protos/perfetto/trace/trace_packet_defaults.proto",
-        "protos/perfetto/trace/ui_state.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_config_android_zero",
+        ":perfetto_protos_perfetto_config_ftrace_zero",
+        ":perfetto_protos_perfetto_config_gpu_zero",
+        ":perfetto_protos_perfetto_config_inode_file_zero",
+        ":perfetto_protos_perfetto_config_interceptors_zero",
+        ":perfetto_protos_perfetto_config_power_zero",
+        ":perfetto_protos_perfetto_config_process_stats_zero",
+        ":perfetto_protos_perfetto_config_profiling_zero",
+        ":perfetto_protos_perfetto_config_statsd_zero",
+        ":perfetto_protos_perfetto_config_sys_stats_zero",
+        ":perfetto_protos_perfetto_config_system_info_zero",
+        ":perfetto_protos_perfetto_config_track_event_zero",
+        ":perfetto_protos_perfetto_config_zero",
+        ":perfetto_protos_perfetto_trace_android_zero",
+        ":perfetto_protos_perfetto_trace_chrome_zero",
+        ":perfetto_protos_perfetto_trace_etw_zero",
+        ":perfetto_protos_perfetto_trace_filesystem_zero",
+        ":perfetto_protos_perfetto_trace_ftrace_zero",
+        ":perfetto_protos_perfetto_trace_gpu_zero",
+        ":perfetto_protos_perfetto_trace_interned_data_zero",
+        ":perfetto_protos_perfetto_trace_minimal_zero",
+        ":perfetto_protos_perfetto_trace_non_minimal_zero",
+        ":perfetto_protos_perfetto_trace_perfetto_zero",
+        ":perfetto_protos_perfetto_trace_power_zero",
+        ":perfetto_protos_perfetto_trace_profiling_zero",
+        ":perfetto_protos_perfetto_trace_ps_zero",
+        ":perfetto_protos_perfetto_trace_statsd_zero",
+        ":perfetto_protos_perfetto_trace_sys_stats_zero",
+        ":perfetto_protos_perfetto_trace_system_info_zero",
+        ":perfetto_protos_perfetto_trace_track_event_zero",
+        ":perfetto_protos_perfetto_trace_translation_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_non_minimal_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/extension_descriptor.pbzero.h",
         "external/perfetto/protos/perfetto/trace/memory_graph.pbzero.h",
@@ -7170,17 +7834,25 @@
 }
 
 // GN: //protos/perfetto/trace/perfetto:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_perfetto_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_perfetto_cpp",
     srcs: [
         "protos/perfetto/trace/perfetto/perfetto_metatrace.proto",
         "protos/perfetto/trace/perfetto/tracing_service_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/perfetto:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_perfetto_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_perfetto_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_perfetto_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/perfetto/perfetto_metatrace.gen.cc",
         "external/perfetto/protos/perfetto/trace/perfetto/tracing_service_event.gen.cc",
@@ -7191,14 +7863,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_perfetto_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/perfetto/perfetto_metatrace.proto",
-        "protos/perfetto/trace/perfetto/tracing_service_event.proto",
+        ":perfetto_protos_perfetto_trace_perfetto_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_perfetto_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/perfetto/perfetto_metatrace.gen.h",
         "external/perfetto/protos/perfetto/trace/perfetto/tracing_service_event.gen.h",
@@ -7210,16 +7881,24 @@
 }
 
 // GN: //protos/perfetto/trace/perfetto:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_perfetto_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_perfetto_lite",
     srcs: [
         "protos/perfetto/trace/perfetto/perfetto_metatrace.proto",
         "protos/perfetto/trace/perfetto/tracing_service_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/perfetto:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_perfetto_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_perfetto_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_perfetto_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/perfetto/perfetto_metatrace.pb.cc",
         "external/perfetto/protos/perfetto/trace/perfetto/tracing_service_event.pb.cc",
@@ -7230,13 +7909,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_perfetto_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/perfetto/perfetto_metatrace.proto",
-        "protos/perfetto/trace/perfetto/tracing_service_event.proto",
+        ":perfetto_protos_perfetto_trace_perfetto_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_perfetto_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/perfetto/perfetto_metatrace.pb.h",
         "external/perfetto/protos/perfetto/trace/perfetto/tracing_service_event.pb.h",
@@ -7248,17 +7926,25 @@
 }
 
 // GN: //protos/perfetto/trace/perfetto:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_perfetto_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_perfetto_zero",
     srcs: [
         "protos/perfetto/trace/perfetto/perfetto_metatrace.proto",
         "protos/perfetto/trace/perfetto/tracing_service_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/perfetto:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_perfetto_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_perfetto_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_perfetto_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/perfetto/perfetto_metatrace.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/perfetto/tracing_service_event.pbzero.cc",
@@ -7269,14 +7955,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_perfetto_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/perfetto/perfetto_metatrace.proto",
-        "protos/perfetto/trace/perfetto/tracing_service_event.proto",
+        ":perfetto_protos_perfetto_trace_perfetto_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_perfetto_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/perfetto/perfetto_metatrace.pbzero.h",
         "external/perfetto/protos/perfetto/trace/perfetto/tracing_service_event.pbzero.h",
@@ -7288,19 +7973,28 @@
 }
 
 // GN: //protos/perfetto/trace/power:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_power_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_power_cpp",
     srcs: [
         "protos/perfetto/trace/power/android_energy_estimation_breakdown.proto",
         "protos/perfetto/trace/power/android_entity_state_residency.proto",
         "protos/perfetto/trace/power/battery_counters.proto",
         "protos/perfetto/trace/power/power_rails.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/power:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_power_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_power_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_power_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/power/android_energy_estimation_breakdown.gen.cc",
         "external/perfetto/protos/perfetto/trace/power/android_entity_state_residency.gen.cc",
@@ -7313,16 +8007,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_power_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/power/android_energy_estimation_breakdown.proto",
-        "protos/perfetto/trace/power/android_entity_state_residency.proto",
-        "protos/perfetto/trace/power/battery_counters.proto",
-        "protos/perfetto/trace/power/power_rails.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_power_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_power_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/power/android_energy_estimation_breakdown.gen.h",
         "external/perfetto/protos/perfetto/trace/power/android_entity_state_residency.gen.h",
@@ -7336,18 +8028,27 @@
 }
 
 // GN: //protos/perfetto/trace/power:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_power_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_power_lite",
     srcs: [
         "protos/perfetto/trace/power/android_energy_estimation_breakdown.proto",
         "protos/perfetto/trace/power/android_entity_state_residency.proto",
         "protos/perfetto/trace/power/battery_counters.proto",
         "protos/perfetto/trace/power/power_rails.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/power:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_power_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_power_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_power_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/power/android_energy_estimation_breakdown.pb.cc",
         "external/perfetto/protos/perfetto/trace/power/android_entity_state_residency.pb.cc",
@@ -7360,15 +8061,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_power_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/power/android_energy_estimation_breakdown.proto",
-        "protos/perfetto/trace/power/android_entity_state_residency.proto",
-        "protos/perfetto/trace/power/battery_counters.proto",
-        "protos/perfetto/trace/power/power_rails.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_power_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_power_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/power/android_energy_estimation_breakdown.pb.h",
         "external/perfetto/protos/perfetto/trace/power/android_entity_state_residency.pb.h",
@@ -7382,19 +8081,28 @@
 }
 
 // GN: //protos/perfetto/trace/power:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_power_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_power_zero",
     srcs: [
         "protos/perfetto/trace/power/android_energy_estimation_breakdown.proto",
         "protos/perfetto/trace/power/android_entity_state_residency.proto",
         "protos/perfetto/trace/power/battery_counters.proto",
         "protos/perfetto/trace/power/power_rails.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/power:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_power_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_power_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_power_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/power/android_energy_estimation_breakdown.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/power/android_entity_state_residency.pbzero.cc",
@@ -7407,16 +8115,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_power_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/power/android_energy_estimation_breakdown.proto",
-        "protos/perfetto/trace/power/android_entity_state_residency.proto",
-        "protos/perfetto/trace/power/battery_counters.proto",
-        "protos/perfetto/trace/power/power_rails.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_power_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_power_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/power/android_energy_estimation_breakdown.pbzero.h",
         "external/perfetto/protos/perfetto/trace/power/android_entity_state_residency.pbzero.h",
@@ -7430,17 +8136,26 @@
 }
 
 // GN: //protos/perfetto/trace_processor:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_processor_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_processor_lite",
     srcs: [
         "protos/perfetto/trace_processor/metatrace_categories.proto",
         "protos/perfetto/trace_processor/stack.proto",
         "protos/perfetto/trace_processor/trace_processor.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace_processor:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_processor_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_processor_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_processor_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace_processor/metatrace_categories.pb.cc",
         "external/perfetto/protos/perfetto/trace_processor/stack.pb.cc",
@@ -7452,14 +8167,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_processor_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace_processor/metatrace_categories.proto",
-        "protos/perfetto/trace_processor/stack.proto",
-        "protos/perfetto/trace_processor/trace_processor.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_processor_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_processor_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace_processor/metatrace_categories.pb.h",
         "external/perfetto/protos/perfetto/trace_processor/stack.pb.h",
@@ -7472,16 +8186,24 @@
 }
 
 // GN: //protos/perfetto/trace_processor:metrics_impl_zero
+filegroup {
+    name: "perfetto_protos_perfetto_trace_processor_metrics_impl_zero",
+    srcs: [
+        "protos/perfetto/trace_processor/metrics_impl.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace_processor:metrics_impl_zero
 genrule {
     name: "perfetto_protos_perfetto_trace_processor_metrics_impl_zero_gen",
     srcs: [
-        "protos/perfetto/trace_processor/metrics_impl.proto",
+        ":perfetto_protos_perfetto_trace_processor_metrics_impl_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_processor_metrics_impl_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace_processor/metrics_impl.pbzero.cc",
     ],
@@ -7491,13 +8213,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_processor_metrics_impl_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace_processor/metrics_impl.proto",
+        ":perfetto_protos_perfetto_trace_processor_metrics_impl_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_processor_metrics_impl_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace_processor/metrics_impl.pbzero.h",
     ],
@@ -7508,18 +8230,27 @@
 }
 
 // GN: //protos/perfetto/trace_processor:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_processor_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_processor_zero",
     srcs: [
         "protos/perfetto/trace_processor/metatrace_categories.proto",
         "protos/perfetto/trace_processor/stack.proto",
         "protos/perfetto/trace_processor/trace_processor.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace_processor:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_processor_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_processor_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_processor_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace_processor/metatrace_categories.pbzero.cc",
         "external/perfetto/protos/perfetto/trace_processor/stack.pbzero.cc",
@@ -7531,15 +8262,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_processor_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace_processor/metatrace_categories.proto",
-        "protos/perfetto/trace_processor/stack.proto",
-        "protos/perfetto/trace_processor/trace_processor.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_processor_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_processor_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace_processor/metatrace_categories.pbzero.h",
         "external/perfetto/protos/perfetto/trace_processor/stack.pbzero.h",
@@ -7552,8 +8282,8 @@
 }
 
 // GN: //protos/perfetto/trace/profiling:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_profiling_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_profiling_cpp",
     srcs: [
         "protos/perfetto/trace/profiling/deobfuscation.proto",
         "protos/perfetto/trace/profiling/heap_graph.proto",
@@ -7561,11 +8291,20 @@
         "protos/perfetto/trace/profiling/profile_packet.proto",
         "protos/perfetto/trace/profiling/smaps.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/profiling:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_profiling_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_profiling_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_profiling_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/profiling/deobfuscation.gen.cc",
         "external/perfetto/protos/perfetto/trace/profiling/heap_graph.gen.cc",
@@ -7579,17 +8318,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_profiling_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/profiling/deobfuscation.proto",
-        "protos/perfetto/trace/profiling/heap_graph.proto",
-        "protos/perfetto/trace/profiling/profile_common.proto",
-        "protos/perfetto/trace/profiling/profile_packet.proto",
-        "protos/perfetto/trace/profiling/smaps.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_profiling_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_profiling_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/profiling/deobfuscation.gen.h",
         "external/perfetto/protos/perfetto/trace/profiling/heap_graph.gen.h",
@@ -7604,8 +8340,8 @@
 }
 
 // GN: //protos/perfetto/trace/profiling:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_profiling_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_profiling_lite",
     srcs: [
         "protos/perfetto/trace/profiling/deobfuscation.proto",
         "protos/perfetto/trace/profiling/heap_graph.proto",
@@ -7613,10 +8349,19 @@
         "protos/perfetto/trace/profiling/profile_packet.proto",
         "protos/perfetto/trace/profiling/smaps.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/profiling:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_profiling_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_profiling_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_profiling_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/profiling/deobfuscation.pb.cc",
         "external/perfetto/protos/perfetto/trace/profiling/heap_graph.pb.cc",
@@ -7630,16 +8375,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_profiling_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/profiling/deobfuscation.proto",
-        "protos/perfetto/trace/profiling/heap_graph.proto",
-        "protos/perfetto/trace/profiling/profile_common.proto",
-        "protos/perfetto/trace/profiling/profile_packet.proto",
-        "protos/perfetto/trace/profiling/smaps.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_profiling_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_profiling_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/profiling/deobfuscation.pb.h",
         "external/perfetto/protos/perfetto/trace/profiling/heap_graph.pb.h",
@@ -7654,8 +8396,8 @@
 }
 
 // GN: //protos/perfetto/trace/profiling:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_profiling_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_profiling_zero",
     srcs: [
         "protos/perfetto/trace/profiling/deobfuscation.proto",
         "protos/perfetto/trace/profiling/heap_graph.proto",
@@ -7663,11 +8405,20 @@
         "protos/perfetto/trace/profiling/profile_packet.proto",
         "protos/perfetto/trace/profiling/smaps.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/profiling:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_profiling_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_profiling_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_profiling_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/profiling/deobfuscation.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/profiling/heap_graph.pbzero.cc",
@@ -7681,17 +8432,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_profiling_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/profiling/deobfuscation.proto",
-        "protos/perfetto/trace/profiling/heap_graph.proto",
-        "protos/perfetto/trace/profiling/profile_common.proto",
-        "protos/perfetto/trace/profiling/profile_packet.proto",
-        "protos/perfetto/trace/profiling/smaps.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_profiling_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_profiling_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/profiling/deobfuscation.pbzero.h",
         "external/perfetto/protos/perfetto/trace/profiling/heap_graph.pbzero.h",
@@ -7706,17 +8454,25 @@
 }
 
 // GN: //protos/perfetto/trace/ps:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_ps_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_ps_cpp",
     srcs: [
         "protos/perfetto/trace/ps/process_stats.proto",
         "protos/perfetto/trace/ps/process_tree.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/ps:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_ps_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_ps_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ps_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/ps/process_stats.gen.cc",
         "external/perfetto/protos/perfetto/trace/ps/process_tree.gen.cc",
@@ -7727,14 +8483,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_ps_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/ps/process_stats.proto",
-        "protos/perfetto/trace/ps/process_tree.proto",
+        ":perfetto_protos_perfetto_trace_ps_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ps_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/ps/process_stats.gen.h",
         "external/perfetto/protos/perfetto/trace/ps/process_tree.gen.h",
@@ -7746,16 +8501,24 @@
 }
 
 // GN: //protos/perfetto/trace/ps:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_ps_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_ps_lite",
     srcs: [
         "protos/perfetto/trace/ps/process_stats.proto",
         "protos/perfetto/trace/ps/process_tree.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/ps:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_ps_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_ps_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ps_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/ps/process_stats.pb.cc",
         "external/perfetto/protos/perfetto/trace/ps/process_tree.pb.cc",
@@ -7766,13 +8529,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_ps_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/ps/process_stats.proto",
-        "protos/perfetto/trace/ps/process_tree.proto",
+        ":perfetto_protos_perfetto_trace_ps_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ps_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/ps/process_stats.pb.h",
         "external/perfetto/protos/perfetto/trace/ps/process_tree.pb.h",
@@ -7784,17 +8546,25 @@
 }
 
 // GN: //protos/perfetto/trace/ps:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_ps_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_ps_zero",
     srcs: [
         "protos/perfetto/trace/ps/process_stats.proto",
         "protos/perfetto/trace/ps/process_tree.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/ps:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_ps_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_ps_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ps_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/ps/process_stats.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/ps/process_tree.pbzero.cc",
@@ -7805,14 +8575,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_ps_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/ps/process_stats.proto",
-        "protos/perfetto/trace/ps/process_tree.proto",
+        ":perfetto_protos_perfetto_trace_ps_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_ps_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/ps/process_stats.pbzero.h",
         "external/perfetto/protos/perfetto/trace/ps/process_tree.pbzero.h",
@@ -7824,16 +8593,25 @@
 }
 
 // GN: //protos/perfetto/trace/statsd:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_trace_statsd_cpp",
+    srcs: [
+        "protos/perfetto/trace/statsd/statsd_atom.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/statsd:cpp
 genrule {
     name: "perfetto_protos_perfetto_trace_statsd_cpp_gen",
     srcs: [
-        "protos/perfetto/trace/statsd/statsd_atom.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_statsd_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_statsd_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/statsd/statsd_atom.gen.cc",
     ],
@@ -7843,13 +8621,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_statsd_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/statsd/statsd_atom.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_statsd_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_statsd_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/statsd/statsd_atom.gen.h",
     ],
@@ -7860,15 +8639,24 @@
 }
 
 // GN: //protos/perfetto/trace/statsd:lite
+filegroup {
+    name: "perfetto_protos_perfetto_trace_statsd_lite",
+    srcs: [
+        "protos/perfetto/trace/statsd/statsd_atom.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/statsd:lite
 genrule {
     name: "perfetto_protos_perfetto_trace_statsd_lite_gen",
     srcs: [
-        "protos/perfetto/trace/statsd/statsd_atom.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_statsd_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_statsd_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/statsd/statsd_atom.pb.cc",
     ],
@@ -7878,12 +8666,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_statsd_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/statsd/statsd_atom.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_statsd_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_statsd_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/statsd/statsd_atom.pb.h",
     ],
@@ -7894,16 +8683,25 @@
 }
 
 // GN: //protos/perfetto/trace/statsd:zero
+filegroup {
+    name: "perfetto_protos_perfetto_trace_statsd_zero",
+    srcs: [
+        "protos/perfetto/trace/statsd/statsd_atom.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/statsd:zero
 genrule {
     name: "perfetto_protos_perfetto_trace_statsd_zero_gen",
     srcs: [
-        "protos/perfetto/trace/statsd/statsd_atom.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_statsd_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_statsd_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/statsd/statsd_atom.pbzero.cc",
     ],
@@ -7913,13 +8711,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_statsd_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/statsd/statsd_atom.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_statsd_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_statsd_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/statsd/statsd_atom.pbzero.h",
     ],
@@ -7930,16 +8729,25 @@
 }
 
 // GN: //protos/perfetto/trace/sys_stats:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_trace_sys_stats_cpp",
+    srcs: [
+        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/sys_stats:cpp
 genrule {
     name: "perfetto_protos_perfetto_trace_sys_stats_cpp_gen",
     srcs: [
-        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_sys_stats_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_sys_stats_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/sys_stats/sys_stats.gen.cc",
     ],
@@ -7949,13 +8757,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_sys_stats_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+        ":perfetto_protos_perfetto_common_cpp",
+        ":perfetto_protos_perfetto_trace_sys_stats_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_sys_stats_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/sys_stats/sys_stats.gen.h",
     ],
@@ -7966,15 +8775,24 @@
 }
 
 // GN: //protos/perfetto/trace/sys_stats:lite
+filegroup {
+    name: "perfetto_protos_perfetto_trace_sys_stats_lite",
+    srcs: [
+        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/sys_stats:lite
 genrule {
     name: "perfetto_protos_perfetto_trace_sys_stats_lite_gen",
     srcs: [
-        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_sys_stats_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_sys_stats_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/sys_stats/sys_stats.pb.cc",
     ],
@@ -7984,12 +8802,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_sys_stats_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+        ":perfetto_protos_perfetto_common_lite",
+        ":perfetto_protos_perfetto_trace_sys_stats_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_sys_stats_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/sys_stats/sys_stats.pb.h",
     ],
@@ -8000,16 +8819,25 @@
 }
 
 // GN: //protos/perfetto/trace/sys_stats:zero
+filegroup {
+    name: "perfetto_protos_perfetto_trace_sys_stats_zero",
+    srcs: [
+        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/sys_stats:zero
 genrule {
     name: "perfetto_protos_perfetto_trace_sys_stats_zero_gen",
     srcs: [
-        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_sys_stats_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_sys_stats_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/sys_stats/sys_stats.pbzero.cc",
     ],
@@ -8019,13 +8847,14 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_sys_stats_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/sys_stats/sys_stats.proto",
+        ":perfetto_protos_perfetto_common_zero",
+        ":perfetto_protos_perfetto_trace_sys_stats_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_sys_stats_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/sys_stats/sys_stats.pbzero.h",
     ],
@@ -8036,16 +8865,24 @@
 }
 
 // GN: //protos/perfetto/trace/system_info:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_trace_system_info_cpp",
+    srcs: [
+        "protos/perfetto/trace/system_info/cpu_info.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/system_info:cpp
 genrule {
     name: "perfetto_protos_perfetto_trace_system_info_cpp_gen",
     srcs: [
-        "protos/perfetto/trace/system_info/cpu_info.proto",
+        ":perfetto_protos_perfetto_trace_system_info_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_system_info_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/system_info/cpu_info.gen.cc",
     ],
@@ -8055,13 +8892,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_system_info_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/system_info/cpu_info.proto",
+        ":perfetto_protos_perfetto_trace_system_info_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_system_info_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/system_info/cpu_info.gen.h",
     ],
@@ -8072,15 +8909,23 @@
 }
 
 // GN: //protos/perfetto/trace/system_info:lite
+filegroup {
+    name: "perfetto_protos_perfetto_trace_system_info_lite",
+    srcs: [
+        "protos/perfetto/trace/system_info/cpu_info.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/system_info:lite
 genrule {
     name: "perfetto_protos_perfetto_trace_system_info_lite_gen",
     srcs: [
-        "protos/perfetto/trace/system_info/cpu_info.proto",
+        ":perfetto_protos_perfetto_trace_system_info_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_system_info_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/system_info/cpu_info.pb.cc",
     ],
@@ -8090,12 +8935,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_system_info_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/system_info/cpu_info.proto",
+        ":perfetto_protos_perfetto_trace_system_info_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_system_info_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/system_info/cpu_info.pb.h",
     ],
@@ -8106,16 +8951,24 @@
 }
 
 // GN: //protos/perfetto/trace/system_info:zero
+filegroup {
+    name: "perfetto_protos_perfetto_trace_system_info_zero",
+    srcs: [
+        "protos/perfetto/trace/system_info/cpu_info.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/system_info:zero
 genrule {
     name: "perfetto_protos_perfetto_trace_system_info_zero_gen",
     srcs: [
-        "protos/perfetto/trace/system_info/cpu_info.proto",
+        ":perfetto_protos_perfetto_trace_system_info_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_system_info_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/system_info/cpu_info.pbzero.cc",
     ],
@@ -8125,13 +8978,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_system_info_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/system_info/cpu_info.proto",
+        ":perfetto_protos_perfetto_trace_system_info_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_system_info_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/system_info/cpu_info.pbzero.h",
     ],
@@ -8142,8 +8995,8 @@
 }
 
 // GN: //protos/perfetto/trace/track_event:cpp
-genrule {
-    name: "perfetto_protos_perfetto_trace_track_event_cpp_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_track_event_cpp",
     srcs: [
         "protos/perfetto/trace/track_event/chrome_active_processes.proto",
         "protos/perfetto/trace/track_event/chrome_application_state_info.proto",
@@ -8173,11 +9026,19 @@
         "protos/perfetto/trace/track_event/track_descriptor.proto",
         "protos/perfetto/trace/track_event/track_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/track_event:cpp
+genrule {
+    name: "perfetto_protos_perfetto_trace_track_event_cpp_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_track_event_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_track_event_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/track_event/chrome_active_processes.gen.cc",
         "external/perfetto/protos/perfetto/trace/track_event/chrome_application_state_info.gen.cc",
@@ -8213,39 +9074,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_track_event_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/track_event/chrome_active_processes.proto",
-        "protos/perfetto/trace/track_event/chrome_application_state_info.proto",
-        "protos/perfetto/trace/track_event/chrome_compositor_scheduler_state.proto",
-        "protos/perfetto/trace/track_event/chrome_content_settings_event_info.proto",
-        "protos/perfetto/trace/track_event/chrome_frame_reporter.proto",
-        "protos/perfetto/trace/track_event/chrome_histogram_sample.proto",
-        "protos/perfetto/trace/track_event/chrome_keyed_service.proto",
-        "protos/perfetto/trace/track_event/chrome_latency_info.proto",
-        "protos/perfetto/trace/track_event/chrome_legacy_ipc.proto",
-        "protos/perfetto/trace/track_event/chrome_message_pump.proto",
-        "protos/perfetto/trace/track_event/chrome_mojo_event_info.proto",
-        "protos/perfetto/trace/track_event/chrome_process_descriptor.proto",
-        "protos/perfetto/trace/track_event/chrome_renderer_scheduler_state.proto",
-        "protos/perfetto/trace/track_event/chrome_thread_descriptor.proto",
-        "protos/perfetto/trace/track_event/chrome_user_event.proto",
-        "protos/perfetto/trace/track_event/chrome_window_handle_event_info.proto",
-        "protos/perfetto/trace/track_event/counter_descriptor.proto",
-        "protos/perfetto/trace/track_event/debug_annotation.proto",
-        "protos/perfetto/trace/track_event/log_message.proto",
-        "protos/perfetto/trace/track_event/process_descriptor.proto",
-        "protos/perfetto/trace/track_event/range_of_interest.proto",
-        "protos/perfetto/trace/track_event/screenshot.proto",
-        "protos/perfetto/trace/track_event/source_location.proto",
-        "protos/perfetto/trace/track_event/task_execution.proto",
-        "protos/perfetto/trace/track_event/thread_descriptor.proto",
-        "protos/perfetto/trace/track_event/track_descriptor.proto",
-        "protos/perfetto/trace/track_event/track_event.proto",
+        ":perfetto_protos_perfetto_trace_track_event_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_track_event_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/track_event/chrome_active_processes.gen.h",
         "external/perfetto/protos/perfetto/trace/track_event/chrome_application_state_info.gen.h",
@@ -8323,8 +9158,8 @@
 }
 
 // GN: //protos/perfetto/trace/track_event:lite
-genrule {
-    name: "perfetto_protos_perfetto_trace_track_event_lite_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_track_event_lite",
     srcs: [
         "protos/perfetto/trace/track_event/chrome_active_processes.proto",
         "protos/perfetto/trace/track_event/chrome_application_state_info.proto",
@@ -8354,10 +9189,18 @@
         "protos/perfetto/trace/track_event/track_descriptor.proto",
         "protos/perfetto/trace/track_event/track_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/track_event:lite
+genrule {
+    name: "perfetto_protos_perfetto_trace_track_event_lite_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_track_event_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_track_event_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/track_event/chrome_active_processes.pb.cc",
         "external/perfetto/protos/perfetto/trace/track_event/chrome_application_state_info.pb.cc",
@@ -8393,38 +9236,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_track_event_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/track_event/chrome_active_processes.proto",
-        "protos/perfetto/trace/track_event/chrome_application_state_info.proto",
-        "protos/perfetto/trace/track_event/chrome_compositor_scheduler_state.proto",
-        "protos/perfetto/trace/track_event/chrome_content_settings_event_info.proto",
-        "protos/perfetto/trace/track_event/chrome_frame_reporter.proto",
-        "protos/perfetto/trace/track_event/chrome_histogram_sample.proto",
-        "protos/perfetto/trace/track_event/chrome_keyed_service.proto",
-        "protos/perfetto/trace/track_event/chrome_latency_info.proto",
-        "protos/perfetto/trace/track_event/chrome_legacy_ipc.proto",
-        "protos/perfetto/trace/track_event/chrome_message_pump.proto",
-        "protos/perfetto/trace/track_event/chrome_mojo_event_info.proto",
-        "protos/perfetto/trace/track_event/chrome_process_descriptor.proto",
-        "protos/perfetto/trace/track_event/chrome_renderer_scheduler_state.proto",
-        "protos/perfetto/trace/track_event/chrome_thread_descriptor.proto",
-        "protos/perfetto/trace/track_event/chrome_user_event.proto",
-        "protos/perfetto/trace/track_event/chrome_window_handle_event_info.proto",
-        "protos/perfetto/trace/track_event/counter_descriptor.proto",
-        "protos/perfetto/trace/track_event/debug_annotation.proto",
-        "protos/perfetto/trace/track_event/log_message.proto",
-        "protos/perfetto/trace/track_event/process_descriptor.proto",
-        "protos/perfetto/trace/track_event/range_of_interest.proto",
-        "protos/perfetto/trace/track_event/screenshot.proto",
-        "protos/perfetto/trace/track_event/source_location.proto",
-        "protos/perfetto/trace/track_event/task_execution.proto",
-        "protos/perfetto/trace/track_event/thread_descriptor.proto",
-        "protos/perfetto/trace/track_event/track_descriptor.proto",
-        "protos/perfetto/trace/track_event/track_event.proto",
+        ":perfetto_protos_perfetto_trace_track_event_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_track_event_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/track_event/chrome_active_processes.pb.h",
         "external/perfetto/protos/perfetto/trace/track_event/chrome_application_state_info.pb.h",
@@ -8461,8 +9278,8 @@
 }
 
 // GN: //protos/perfetto/trace/track_event:zero
-genrule {
-    name: "perfetto_protos_perfetto_trace_track_event_zero_gen",
+filegroup {
+    name: "perfetto_protos_perfetto_trace_track_event_zero",
     srcs: [
         "protos/perfetto/trace/track_event/chrome_active_processes.proto",
         "protos/perfetto/trace/track_event/chrome_application_state_info.proto",
@@ -8492,11 +9309,19 @@
         "protos/perfetto/trace/track_event/track_descriptor.proto",
         "protos/perfetto/trace/track_event/track_event.proto",
     ],
+}
+
+// GN: //protos/perfetto/trace/track_event:zero
+genrule {
+    name: "perfetto_protos_perfetto_trace_track_event_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_track_event_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_track_event_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/track_event/chrome_active_processes.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/track_event/chrome_application_state_info.pbzero.cc",
@@ -8532,39 +9357,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_track_event_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/track_event/chrome_active_processes.proto",
-        "protos/perfetto/trace/track_event/chrome_application_state_info.proto",
-        "protos/perfetto/trace/track_event/chrome_compositor_scheduler_state.proto",
-        "protos/perfetto/trace/track_event/chrome_content_settings_event_info.proto",
-        "protos/perfetto/trace/track_event/chrome_frame_reporter.proto",
-        "protos/perfetto/trace/track_event/chrome_histogram_sample.proto",
-        "protos/perfetto/trace/track_event/chrome_keyed_service.proto",
-        "protos/perfetto/trace/track_event/chrome_latency_info.proto",
-        "protos/perfetto/trace/track_event/chrome_legacy_ipc.proto",
-        "protos/perfetto/trace/track_event/chrome_message_pump.proto",
-        "protos/perfetto/trace/track_event/chrome_mojo_event_info.proto",
-        "protos/perfetto/trace/track_event/chrome_process_descriptor.proto",
-        "protos/perfetto/trace/track_event/chrome_renderer_scheduler_state.proto",
-        "protos/perfetto/trace/track_event/chrome_thread_descriptor.proto",
-        "protos/perfetto/trace/track_event/chrome_user_event.proto",
-        "protos/perfetto/trace/track_event/chrome_window_handle_event_info.proto",
-        "protos/perfetto/trace/track_event/counter_descriptor.proto",
-        "protos/perfetto/trace/track_event/debug_annotation.proto",
-        "protos/perfetto/trace/track_event/log_message.proto",
-        "protos/perfetto/trace/track_event/process_descriptor.proto",
-        "protos/perfetto/trace/track_event/range_of_interest.proto",
-        "protos/perfetto/trace/track_event/screenshot.proto",
-        "protos/perfetto/trace/track_event/source_location.proto",
-        "protos/perfetto/trace/track_event/task_execution.proto",
-        "protos/perfetto/trace/track_event/thread_descriptor.proto",
-        "protos/perfetto/trace/track_event/track_descriptor.proto",
-        "protos/perfetto/trace/track_event/track_event.proto",
+        ":perfetto_protos_perfetto_trace_track_event_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_track_event_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/track_event/chrome_active_processes.pbzero.h",
         "external/perfetto/protos/perfetto/trace/track_event/chrome_application_state_info.pbzero.h",
@@ -8601,16 +9400,24 @@
 }
 
 // GN: //protos/perfetto/trace/translation:cpp
+filegroup {
+    name: "perfetto_protos_perfetto_trace_translation_cpp",
+    srcs: [
+        "protos/perfetto/trace/translation/translation_table.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/translation:cpp
 genrule {
     name: "perfetto_protos_perfetto_trace_translation_cpp_gen",
     srcs: [
-        "protos/perfetto/trace/translation/translation_table.proto",
+        ":perfetto_protos_perfetto_trace_translation_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_translation_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/translation/translation_table.gen.cc",
     ],
@@ -8620,13 +9427,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_translation_cpp_gen_headers",
     srcs: [
-        "protos/perfetto/trace/translation/translation_table.proto",
+        ":perfetto_protos_perfetto_trace_translation_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_translation_cpp)",
     out: [
         "external/perfetto/protos/perfetto/trace/translation/translation_table.gen.h",
     ],
@@ -8637,15 +9444,23 @@
 }
 
 // GN: //protos/perfetto/trace/translation:lite
+filegroup {
+    name: "perfetto_protos_perfetto_trace_translation_lite",
+    srcs: [
+        "protos/perfetto/trace/translation/translation_table.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/translation:lite
 genrule {
     name: "perfetto_protos_perfetto_trace_translation_lite_gen",
     srcs: [
-        "protos/perfetto/trace/translation/translation_table.proto",
+        ":perfetto_protos_perfetto_trace_translation_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_translation_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/translation/translation_table.pb.cc",
     ],
@@ -8655,12 +9470,12 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_translation_lite_gen_headers",
     srcs: [
-        "protos/perfetto/trace/translation/translation_table.proto",
+        ":perfetto_protos_perfetto_trace_translation_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_translation_lite)",
     out: [
         "external/perfetto/protos/perfetto/trace/translation/translation_table.pb.h",
     ],
@@ -8671,16 +9486,24 @@
 }
 
 // GN: //protos/perfetto/trace/translation:zero
+filegroup {
+    name: "perfetto_protos_perfetto_trace_translation_zero",
+    srcs: [
+        "protos/perfetto/trace/translation/translation_table.proto",
+    ],
+}
+
+// GN: //protos/perfetto/trace/translation:zero
 genrule {
     name: "perfetto_protos_perfetto_trace_translation_zero_gen",
     srcs: [
-        "protos/perfetto/trace/translation/translation_table.proto",
+        ":perfetto_protos_perfetto_trace_translation_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_translation_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/translation/translation_table.pbzero.cc",
     ],
@@ -8690,13 +9513,13 @@
 genrule {
     name: "perfetto_protos_perfetto_trace_translation_zero_gen_headers",
     srcs: [
-        "protos/perfetto/trace/translation/translation_table.proto",
+        ":perfetto_protos_perfetto_trace_translation_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_perfetto_trace_translation_zero)",
     out: [
         "external/perfetto/protos/perfetto/trace/translation/translation_table.pbzero.h",
     ],
@@ -8749,16 +9572,24 @@
 }
 
 // GN: //protos/third_party/pprof:zero
+filegroup {
+    name: "perfetto_protos_third_party_pprof_zero",
+    srcs: [
+        "protos/third_party/pprof/profile.proto",
+    ],
+}
+
+// GN: //protos/third_party/pprof:zero
 genrule {
     name: "perfetto_protos_third_party_pprof_zero_gen",
     srcs: [
-        "protos/third_party/pprof/profile.proto",
+        ":perfetto_protos_third_party_pprof_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_third_party_pprof_zero)",
     out: [
         "external/perfetto/protos/third_party/pprof/profile.pbzero.cc",
     ],
@@ -8768,13 +9599,13 @@
 genrule {
     name: "perfetto_protos_third_party_pprof_zero_gen_headers",
     srcs: [
-        "protos/third_party/pprof/profile.proto",
+        ":perfetto_protos_third_party_pprof_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_third_party_pprof_zero)",
     out: [
         "external/perfetto/protos/third_party/pprof/profile.pbzero.h",
     ],
@@ -8785,17 +9616,25 @@
 }
 
 // GN: //protos/third_party/statsd:config_zero
-genrule {
-    name: "perfetto_protos_third_party_statsd_config_zero_gen",
+filegroup {
+    name: "perfetto_protos_third_party_statsd_config_zero",
     srcs: [
         "protos/third_party/statsd/shell_config.proto",
         "protos/third_party/statsd/shell_data.proto",
     ],
+}
+
+// GN: //protos/third_party/statsd:config_zero
+genrule {
+    name: "perfetto_protos_third_party_statsd_config_zero_gen",
+    srcs: [
+        ":perfetto_protos_third_party_statsd_config_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_third_party_statsd_config_zero)",
     out: [
         "external/perfetto/protos/third_party/statsd/shell_config.pbzero.cc",
         "external/perfetto/protos/third_party/statsd/shell_data.pbzero.cc",
@@ -8806,14 +9645,13 @@
 genrule {
     name: "perfetto_protos_third_party_statsd_config_zero_gen_headers",
     srcs: [
-        "protos/third_party/statsd/shell_config.proto",
-        "protos/third_party/statsd/shell_data.proto",
+        ":perfetto_protos_third_party_statsd_config_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_third_party_statsd_config_zero)",
     out: [
         "external/perfetto/protos/third_party/statsd/shell_config.pbzero.h",
         "external/perfetto/protos/third_party/statsd/shell_data.pbzero.h",
@@ -9059,18 +9897,26 @@
 }
 
 // GN: //src/ipc:test_messages_cpp
-genrule {
-    name: "perfetto_src_ipc_test_messages_cpp_gen",
+filegroup {
+    name: "perfetto_src_ipc_test_messages_cpp",
     srcs: [
         "src/ipc/test/client_unittest_messages.proto",
         "src/ipc/test/deferred_unittest_messages.proto",
         "src/ipc/test/greeter_service.proto",
     ],
+}
+
+// GN: //src/ipc:test_messages_cpp
+genrule {
+    name: "perfetto_src_ipc_test_messages_cpp_gen",
+    srcs: [
+        ":perfetto_src_ipc_test_messages_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_ipc_test_messages_cpp)",
     out: [
         "external/perfetto/src/ipc/test/client_unittest_messages.gen.cc",
         "external/perfetto/src/ipc/test/deferred_unittest_messages.gen.cc",
@@ -9082,15 +9928,13 @@
 genrule {
     name: "perfetto_src_ipc_test_messages_cpp_gen_headers",
     srcs: [
-        "src/ipc/test/client_unittest_messages.proto",
-        "src/ipc/test/deferred_unittest_messages.proto",
-        "src/ipc/test/greeter_service.proto",
+        ":perfetto_src_ipc_test_messages_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_ipc_test_messages_cpp)",
     out: [
         "external/perfetto/src/ipc/test/client_unittest_messages.gen.h",
         "external/perfetto/src/ipc/test/deferred_unittest_messages.gen.h",
@@ -9103,18 +9947,28 @@
 }
 
 // GN: //src/ipc:test_messages_ipc
-genrule {
-    name: "perfetto_src_ipc_test_messages_ipc_gen",
+filegroup {
+    name: "perfetto_src_ipc_test_messages_ipc",
     srcs: [
         "src/ipc/test/client_unittest_messages.proto",
         "src/ipc/test/deferred_unittest_messages.proto",
         "src/ipc/test/greeter_service.proto",
     ],
+}
+
+// GN: //src/ipc:test_messages_ipc
+genrule {
+    name: "perfetto_src_ipc_test_messages_ipc_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_ipc_wire_protocol_cpp",
+        ":perfetto_src_ipc_test_messages_cpp",
+        ":perfetto_src_ipc_test_messages_ipc",
+    ],
     tools: [
         "aprotoc",
         "ipc_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location ipc_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location ipc_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_ipc_test_messages_ipc)",
     out: [
         "external/perfetto/src/ipc/test/client_unittest_messages.ipc.cc",
         "external/perfetto/src/ipc/test/deferred_unittest_messages.ipc.cc",
@@ -9126,15 +9980,15 @@
 genrule {
     name: "perfetto_src_ipc_test_messages_ipc_gen_headers",
     srcs: [
-        "src/ipc/test/client_unittest_messages.proto",
-        "src/ipc/test/deferred_unittest_messages.proto",
-        "src/ipc/test/greeter_service.proto",
+        ":perfetto_protos_perfetto_ipc_wire_protocol_cpp",
+        ":perfetto_src_ipc_test_messages_cpp",
+        ":perfetto_src_ipc_test_messages_ipc",
     ],
     tools: [
         "aprotoc",
         "ipc_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location ipc_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location ipc_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_ipc_test_messages_ipc)",
     out: [
         "external/perfetto/src/ipc/test/client_unittest_messages.ipc.h",
         "external/perfetto/src/ipc/test/deferred_unittest_messages.ipc.h",
@@ -9225,16 +10079,24 @@
 }
 
 // GN: //src/perfetto_cmd:protos_cpp
+filegroup {
+    name: "perfetto_src_perfetto_cmd_protos_cpp",
+    srcs: [
+        "src/perfetto_cmd/perfetto_cmd_state.proto",
+    ],
+}
+
+// GN: //src/perfetto_cmd:protos_cpp
 genrule {
     name: "perfetto_src_perfetto_cmd_protos_cpp_gen",
     srcs: [
-        "src/perfetto_cmd/perfetto_cmd_state.proto",
+        ":perfetto_src_perfetto_cmd_protos_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_perfetto_cmd_protos_cpp)",
     out: [
         "external/perfetto/src/perfetto_cmd/perfetto_cmd_state.gen.cc",
     ],
@@ -9244,13 +10106,13 @@
 genrule {
     name: "perfetto_src_perfetto_cmd_protos_cpp_gen_headers",
     srcs: [
-        "src/perfetto_cmd/perfetto_cmd_state.proto",
+        ":perfetto_src_perfetto_cmd_protos_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_perfetto_cmd_protos_cpp)",
     out: [
         "external/perfetto/src/perfetto_cmd/perfetto_cmd_state.gen.h",
     ],
@@ -9720,8 +10582,8 @@
 }
 
 // GN: //src/protozero:testing_messages_cpp
-genrule {
-    name: "perfetto_src_protozero_testing_messages_cpp_gen",
+filegroup {
+    name: "perfetto_src_protozero_testing_messages_cpp",
     srcs: [
         "src/protozero/test/example_proto/extensions.proto",
         "src/protozero/test/example_proto/library.proto",
@@ -9729,11 +10591,19 @@
         "src/protozero/test/example_proto/test_messages.proto",
         "src/protozero/test/example_proto/upper_import.proto",
     ],
+}
+
+// GN: //src/protozero:testing_messages_cpp
+genrule {
+    name: "perfetto_src_protozero_testing_messages_cpp_gen",
+    srcs: [
+        ":perfetto_src_protozero_testing_messages_cpp",
+    ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_protozero_testing_messages_cpp)",
     out: [
         "external/perfetto/src/protozero/test/example_proto/extensions.gen.cc",
         "external/perfetto/src/protozero/test/example_proto/library.gen.cc",
@@ -9747,17 +10617,13 @@
 genrule {
     name: "perfetto_src_protozero_testing_messages_cpp_gen_headers",
     srcs: [
-        "src/protozero/test/example_proto/extensions.proto",
-        "src/protozero/test/example_proto/library.proto",
-        "src/protozero/test/example_proto/library_internals/galaxies.proto",
-        "src/protozero/test/example_proto/test_messages.proto",
-        "src/protozero/test/example_proto/upper_import.proto",
+        ":perfetto_src_protozero_testing_messages_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_protozero_testing_messages_cpp)",
     out: [
         "external/perfetto/src/protozero/test/example_proto/extensions.gen.h",
         "external/perfetto/src/protozero/test/example_proto/library.gen.h",
@@ -9772,8 +10638,8 @@
 }
 
 // GN: //src/protozero:testing_messages_lite
-genrule {
-    name: "perfetto_src_protozero_testing_messages_lite_gen",
+filegroup {
+    name: "perfetto_src_protozero_testing_messages_lite",
     srcs: [
         "src/protozero/test/example_proto/extensions.proto",
         "src/protozero/test/example_proto/library.proto",
@@ -9781,10 +10647,18 @@
         "src/protozero/test/example_proto/test_messages.proto",
         "src/protozero/test/example_proto/upper_import.proto",
     ],
+}
+
+// GN: //src/protozero:testing_messages_lite
+genrule {
+    name: "perfetto_src_protozero_testing_messages_lite_gen",
+    srcs: [
+        ":perfetto_src_protozero_testing_messages_lite",
+    ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_src_protozero_testing_messages_lite)",
     out: [
         "external/perfetto/src/protozero/test/example_proto/extensions.pb.cc",
         "external/perfetto/src/protozero/test/example_proto/library.pb.cc",
@@ -9798,16 +10672,12 @@
 genrule {
     name: "perfetto_src_protozero_testing_messages_lite_gen_headers",
     srcs: [
-        "src/protozero/test/example_proto/extensions.proto",
-        "src/protozero/test/example_proto/library.proto",
-        "src/protozero/test/example_proto/library_internals/galaxies.proto",
-        "src/protozero/test/example_proto/test_messages.proto",
-        "src/protozero/test/example_proto/upper_import.proto",
+        ":perfetto_src_protozero_testing_messages_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_src_protozero_testing_messages_lite)",
     out: [
         "external/perfetto/src/protozero/test/example_proto/extensions.pb.h",
         "external/perfetto/src/protozero/test/example_proto/library.pb.h",
@@ -9822,8 +10692,8 @@
 }
 
 // GN: //src/protozero:testing_messages_zero
-genrule {
-    name: "perfetto_src_protozero_testing_messages_zero_gen",
+filegroup {
+    name: "perfetto_src_protozero_testing_messages_zero",
     srcs: [
         "src/protozero/test/example_proto/extensions.proto",
         "src/protozero/test/example_proto/library.proto",
@@ -9831,11 +10701,19 @@
         "src/protozero/test/example_proto/test_messages.proto",
         "src/protozero/test/example_proto/upper_import.proto",
     ],
+}
+
+// GN: //src/protozero:testing_messages_zero
+genrule {
+    name: "perfetto_src_protozero_testing_messages_zero_gen",
+    srcs: [
+        ":perfetto_src_protozero_testing_messages_zero",
+    ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_src_protozero_testing_messages_zero)",
     out: [
         "external/perfetto/src/protozero/test/example_proto/extensions.pbzero.cc",
         "external/perfetto/src/protozero/test/example_proto/library.pbzero.cc",
@@ -9849,17 +10727,13 @@
 genrule {
     name: "perfetto_src_protozero_testing_messages_zero_gen_headers",
     srcs: [
-        "src/protozero/test/example_proto/extensions.proto",
-        "src/protozero/test/example_proto/library.proto",
-        "src/protozero/test/example_proto/library_internals/galaxies.proto",
-        "src/protozero/test/example_proto/test_messages.proto",
-        "src/protozero/test/example_proto/upper_import.proto",
+        ":perfetto_src_protozero_testing_messages_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_src_protozero_testing_messages_zero)",
     out: [
         "external/perfetto/src/protozero/test/example_proto/extensions.pbzero.h",
         "external/perfetto/src/protozero/test/example_proto/library.pbzero.h",
@@ -11660,16 +12534,24 @@
 }
 
 // GN: //src/traced/probes/ftrace:test_messages_cpp
+filegroup {
+    name: "perfetto_src_traced_probes_ftrace_test_messages_cpp",
+    srcs: [
+        "src/traced/probes/ftrace/test/test_messages.proto",
+    ],
+}
+
+// GN: //src/traced/probes/ftrace:test_messages_cpp
 genrule {
     name: "perfetto_src_traced_probes_ftrace_test_messages_cpp_gen",
     srcs: [
-        "src/traced/probes/ftrace/test/test_messages.proto",
+        ":perfetto_src_traced_probes_ftrace_test_messages_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_traced_probes_ftrace_test_messages_cpp)",
     out: [
         "external/perfetto/src/traced/probes/ftrace/test/test_messages.gen.cc",
     ],
@@ -11679,13 +12561,13 @@
 genrule {
     name: "perfetto_src_traced_probes_ftrace_test_messages_cpp_gen_headers",
     srcs: [
-        "src/traced/probes/ftrace/test/test_messages.proto",
+        ":perfetto_src_traced_probes_ftrace_test_messages_cpp",
     ],
     tools: [
         "aprotoc",
         "perfetto_src_protozero_protoc_plugin_cppgen_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location perfetto_src_protozero_protoc_plugin_cppgen_plugin) --plugin_out=wrapper_namespace=gen:$(genDir)/external/perfetto/ $(locations :perfetto_src_traced_probes_ftrace_test_messages_cpp)",
     out: [
         "external/perfetto/src/traced/probes/ftrace/test/test_messages.gen.h",
     ],
@@ -11696,15 +12578,23 @@
 }
 
 // GN: //src/traced/probes/ftrace:test_messages_lite
+filegroup {
+    name: "perfetto_src_traced_probes_ftrace_test_messages_lite",
+    srcs: [
+        "src/traced/probes/ftrace/test/test_messages.proto",
+    ],
+}
+
+// GN: //src/traced/probes/ftrace:test_messages_lite
 genrule {
     name: "perfetto_src_traced_probes_ftrace_test_messages_lite_gen",
     srcs: [
-        "src/traced/probes/ftrace/test/test_messages.proto",
+        ":perfetto_src_traced_probes_ftrace_test_messages_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_src_traced_probes_ftrace_test_messages_lite)",
     out: [
         "external/perfetto/src/traced/probes/ftrace/test/test_messages.pb.cc",
     ],
@@ -11714,12 +12604,12 @@
 genrule {
     name: "perfetto_src_traced_probes_ftrace_test_messages_lite_gen_headers",
     srcs: [
-        "src/traced/probes/ftrace/test/test_messages.proto",
+        ":perfetto_src_traced_probes_ftrace_test_messages_lite",
     ],
     tools: [
         "aprotoc",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --cpp_out=lite=true:$(genDir)/external/perfetto/ $(locations :perfetto_src_traced_probes_ftrace_test_messages_lite)",
     out: [
         "external/perfetto/src/traced/probes/ftrace/test/test_messages.pb.h",
     ],
@@ -11730,16 +12620,24 @@
 }
 
 // GN: //src/traced/probes/ftrace:test_messages_zero
+filegroup {
+    name: "perfetto_src_traced_probes_ftrace_test_messages_zero",
+    srcs: [
+        "src/traced/probes/ftrace/test/test_messages.proto",
+    ],
+}
+
+// GN: //src/traced/probes/ftrace:test_messages_zero
 genrule {
     name: "perfetto_src_traced_probes_ftrace_test_messages_zero_gen",
     srcs: [
-        "src/traced/probes/ftrace/test/test_messages.proto",
+        ":perfetto_src_traced_probes_ftrace_test_messages_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_src_traced_probes_ftrace_test_messages_zero)",
     out: [
         "external/perfetto/src/traced/probes/ftrace/test/test_messages.pbzero.cc",
     ],
@@ -11749,13 +12647,13 @@
 genrule {
     name: "perfetto_src_traced_probes_ftrace_test_messages_zero_gen_headers",
     srcs: [
-        "src/traced/probes/ftrace/test/test_messages.proto",
+        ":perfetto_src_traced_probes_ftrace_test_messages_zero",
     ],
     tools: [
         "aprotoc",
         "protozero_plugin",
     ],
-    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(in)",
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_src_traced_probes_ftrace_test_messages_zero)",
     out: [
         "external/perfetto/src/traced/probes/ftrace/test/test_messages.pbzero.h",
     ],