[libcxx-commits] [PATCH] D84045: [libcxx][lit] Add a new executor to collect test binaries

Alexander Richardson via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jul 17 09:46:21 PDT 2020


arichardson created this revision.
arichardson added reviewers: libc++, ldionne.
Herald added subscribers: libcxx-commits, dexonsmith.
Herald added a project: libc++.
Herald added 1 blocking reviewer(s): libc++.

I originally added this executor for the old test format to the CHERI fork
of libc++ to gather all test binaries in one directory. This change is a
simple port of the executor to the new format.

This is mostly useful for debugging and performing analysis on the compiled
binaries or copying them in bulk to a remote server. Using this executor
also helped me discover the bug fixed in https://reviews.llvm.org/D84040.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D84045

Files:
  libcxx/utils/copy_files.py


Index: libcxx/utils/copy_files.py
===================================================================
--- /dev/null
+++ libcxx/utils/copy_files.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python3
+#===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+#===----------------------------------------------------------------------===##
+
+"""copy_files.py is a utility for collecting test binaries (possibly with code signing) in a given directory."""
+
+import argparse
+import os
+import subprocess
+import sys
+
+
+def main():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--execdir', type=str, required=True)
+    parser.add_argument('--output-dir', type=str, required=True)
+    parser.add_argument('--codesign_identity', type=str, required=False, default=None)
+    parser.add_argument('--env', type=str, nargs='*', required=False, default=dict())
+    (args, remaining) = parser.parse_known_args(sys.argv[1:])
+
+    if len(remaining) < 2:
+        sys.stderr.write('Missing actual commands to run')
+        exit(1)
+    commandLine = remaining[1:] # Skip the '--'
+
+    # Do any necessary codesigning.
+    if args.codesign_identity:
+        exe = commandLine[0]
+        rc = subprocess.call(['xcrun', 'codesign', '-f', '-s', args.codesign_identity, exe], env={})
+        if rc != 0:
+            sys.stderr.write('Failed to codesign: ' + exe)
+            return rc
+
+    # Copy the executable to the output directory
+    target_dir = args.output_dir
+    print("Copying", args.execdir, "to", target_dir, flush=True)
+    if not os.path.isdir(target_dir):
+        os.makedirs(target_dir)
+    subprocess.check_call(["cp", "-av", args.execdir, target_dir])
+
+if __name__ == '__main__':
+    exit(main())


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D84045.278816.patch
Type: text/x-patch
Size: 1962 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20200717/b8a3bf34/attachment.bin>


More information about the libcxx-commits mailing list