Merge "Specify implicit deps of a genrule" into main
diff --git a/Android.bp b/Android.bp
index d668c2b..87e01a1 100644
--- a/Android.bp
+++ b/Android.bp
@@ -2842,6 +2842,9 @@
         "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
@@ -2878,6 +2881,9 @@
         ".",
         "protos",
     ],
+    tool_files: [
+        "protos/perfetto/common/android_log_constants.proto",
+    ],
 }
 
 // GN: //protos/perfetto/config/android:lite
@@ -2909,6 +2915,9 @@
         "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
@@ -2944,6 +2953,9 @@
         ".",
         "protos",
     ],
+    tool_files: [
+        "protos/perfetto/common/android_log_constants.proto",
+    ],
 }
 
 // GN: //protos/perfetto/config/android:zero
@@ -2976,6 +2988,9 @@
         "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
@@ -3012,6 +3027,9 @@
         ".",
         "protos",
     ],
+    tool_files: [
+        "protos/perfetto/common/android_log_constants.proto",
+    ],
 }
 
 // GN: //protos/perfetto/config:cpp
diff --git a/tools/gen_android_bp b/tools/gen_android_bp
index 552c7d3..176a8d5 100755
--- a/tools/gen_android_bp
+++ b/tools/gen_android_bp
@@ -182,6 +182,15 @@
 # The directory where the generated perfetto_build_flags.h will be copied into.
 buildflags_dir = 'include/perfetto/base/build_configs/android_tree'
 
+# Map of protos to transitive proto deps
+# When generating Android.bp files, these transitive deps will be added to
+# `tool_files` so that aprotoc can run inside a sandbox.
+# TODO(b/304495403): This should not be manually generated
+proto_to_transitive_proto_deps = {
+    'protos/perfetto/config/android/android_log_config.proto': [
+        'protos/perfetto/common/android_log_constants.proto',
+    ],
+}
 
 def enumerate_data_deps():
   with open(os.path.join(ROOT_DIR, 'tools', 'test_data.txt')) as f:
@@ -745,11 +754,20 @@
   blueprint.add_module(source_module)
   source_module.srcs.update(
       gn_utils.label_to_path(src) for src in target.sources)
+  # Add the imported proto file as a tool_file dep so that this action can be
+  # sandboxed.
+  tool_files = []
+  for proto, transitive_proto_deps in proto_to_transitive_proto_deps.items():
+    if proto in source_module.srcs:
+      tool_files.extend(transitive_proto_deps)
+
+  source_module.tool_files = tool_files
 
   header_module = Module('genrule', source_module_name + '_headers',
                          target.name)
   blueprint.add_module(header_module)
   header_module.srcs = set(source_module.srcs)
+  header_module.tool_files = tool_files
 
   # TODO(primiano): at some point we should remove this. This was introduced
   # by aosp/1108421 when adding "protos/" to .proto include paths, in order to