diff --git a/llvm/utils/lit/lit/LitConfig.py b/llvm/utils/lit/lit/LitConfig.py --- a/llvm/utils/lit/lit/LitConfig.py +++ b/llvm/utils/lit/lit/LitConfig.py @@ -21,7 +21,7 @@ """ def __init__(self, progname, path, quiet, - useValgrind, valgrindLeakCheck, valgrindArgs, + useValgrind, valgrindLeakCheck, valgrindArgs, runPrefix, noExecute, debug, isWindows, order, params, config_prefix = None, maxIndividualTestTime = 0, @@ -35,6 +35,7 @@ self.useValgrind = bool(useValgrind) self.valgrindLeakCheck = bool(valgrindLeakCheck) self.valgrindUserArgs = list(valgrindArgs) + self.runPrefix = str(runPrefix) self.noExecute = noExecute self.debug = debug self.isWindows = bool(isWindows) diff --git a/llvm/utils/lit/lit/LitTestCase.py b/llvm/utils/lit/lit/LitTestCase.py --- a/llvm/utils/lit/lit/LitTestCase.py +++ b/llvm/utils/lit/lit/LitTestCase.py @@ -49,6 +49,7 @@ useValgrind=False, valgrindLeakCheck=False, valgrindArgs=[], + runPrefix='', noExecute=False, debug=False, isWindows=windows, diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -1058,6 +1058,9 @@ # run on clang with no real loss. command = litConfig.valgrindArgs + command + if litConfig.runPrefix: + command = litConfig.runPrefix.split() + command + try: out, err, exitCode = lit.util.executeCommand(command, cwd=cwd, env=test.config.environment, diff --git a/llvm/utils/lit/lit/cl_arguments.py b/llvm/utils/lit/lit/cl_arguments.py --- a/llvm/utils/lit/lit/cl_arguments.py +++ b/llvm/utils/lit/lit/cl_arguments.py @@ -108,6 +108,12 @@ help="Specify an extra argument for valgrind", action="append", default=[]) + execution_group.add_argument("--run-prefix", + dest="runPrefix", + default='', + metavar="PREFIX", + help="Prefix test invocations with the given tool. This is typically " + "used to run cross-compiled tests within a simulator tool.") execution_group.add_argument("--time-tests", help="Track elapsed wall time for each test", action="store_true") diff --git a/llvm/utils/lit/lit/formats/googletest.py b/llvm/utils/lit/lit/formats/googletest.py --- a/llvm/utils/lit/lit/formats/googletest.py +++ b/llvm/utils/lit/lit/formats/googletest.py @@ -129,6 +129,9 @@ if litConfig.useValgrind: cmd = litConfig.valgrindArgs + cmd + if litConfig.runPrefix: + cmd = litConfig.runPrefix.split() + cmd + if litConfig.noExecute: return lit.Test.PASS, '' diff --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py --- a/llvm/utils/lit/lit/main.py +++ b/llvm/utils/lit/lit/main.py @@ -34,6 +34,7 @@ useValgrind=opts.useValgrind, valgrindLeakCheck=opts.valgrindLeakCheck, valgrindArgs=opts.valgrindArgs, + runPrefix=opts.runPrefix, noExecute=opts.noExecute, debug=opts.debug, isWindows=is_windows, diff --git a/llvm/utils/lit/tests/unit/TestRunner.py b/llvm/utils/lit/tests/unit/TestRunner.py --- a/llvm/utils/lit/tests/unit/TestRunner.py +++ b/llvm/utils/lit/tests/unit/TestRunner.py @@ -30,6 +30,7 @@ useValgrind=False, valgrindLeakCheck=False, valgrindArgs=[], + runPrefix='', noExecute=False, debug=False, isWindows=(