cros_setup_toolchains: Add reclient toolchain inputs file

Add a remote_toolchain_inputs file next to clang as
reclient which is a replacement for Goma needs it.

This file generated here will be used by SimpleChrome based
development environment.

BUG=b:201570160
TEST=cros_setup_toolchains --create-packages

Change-Id: Ia5b65dce69bd656929ef0596c69951f165985285
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3388061
Tested-by: Manoj Gupta <manojgupta@chromium.org>
Auto-Submit: Manoj Gupta <manojgupta@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
diff --git a/scripts/cros_setup_toolchains.py b/scripts/cros_setup_toolchains.py
index 41a1df0..e4b56c2 100644
--- a/scripts/cros_setup_toolchains.py
+++ b/scripts/cros_setup_toolchains.py
@@ -1200,6 +1200,31 @@
   osutils.SafeMakedirs(os.path.join(output_dir, 'usr', target, 'usr/lib'))
 
 
+def _CreateRemoteToolchainFile(output_dir):
+  """Create a remote_toolchain_inputs file for reclient/RBE"""
+  # The inputs file lists all files/shared libraries needed to run clang.
+  # All inputs are relative to location of clang binary and one input
+  # location per line of file e.g.
+  # clang-13.elf
+  # clang++-13.elf
+  # relative/path/to/clang/resource/directory
+
+  clang_path = os.path.join(output_dir, 'usr/bin')
+  # Add needed shared libraries and internal files e.g. allowlists.
+  toolchain_inputs = ['../../lib']
+  clang_shared_dirs = glob.glob(
+      os.path.join(output_dir, 'usr/lib64/clang/*/share'))
+  for clang_dir in clang_shared_dirs:
+    toolchain_inputs.append(os.path.relpath(clang_dir, clang_path))
+
+  # Add actual clang binaries/wrappers.
+  for clang_files in glob.glob(os.path.join(clang_path, 'clang*-[0-9]*')):
+    toolchain_inputs.append(os.path.basename(clang_files))
+
+  with open(os.path.join(clang_path, 'remote_toolchain_inputs'), 'w') as f:
+    f.writelines('%s\n' % line for line in toolchain_inputs)
+
+
 def _ProcessDistroCleanups(target, output_dir):
   """Clean up the tree and remove all distro-specific requirements
 
@@ -1212,6 +1237,7 @@
   _ProcessSysrootWrappers(target, output_dir, gcc_path)
   _ProcessClangWrappers(target, output_dir)
   _CreateMainLibDir(target, output_dir)
+  _CreateRemoteToolchainFile(output_dir)
 
   osutils.RmDir(os.path.join(output_dir, 'etc'))