[llvm] 51b4a7e - [sanitizer] Use COMPILER_RT_EMULATOR with gtests
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 25 15:41:27 PDT 2021
Author: Vitaly Buka
Date: 2021-04-25T15:41:13-07:00
New Revision: 51b4a7ef52aa5c1877bb63a23724ac74dd9fc953
URL: https://github.com/llvm/llvm-project/commit/51b4a7ef52aa5c1877bb63a23724ac74dd9fc953
DIFF: https://github.com/llvm/llvm-project/commit/51b4a7ef52aa5c1877bb63a23724ac74dd9fc953.diff
LOG: [sanitizer] Use COMPILER_RT_EMULATOR with gtests
Reviewed By: morehouse
Differential Revision: https://reviews.llvm.org/D100998
Added:
Modified:
compiler-rt/unittests/lit.common.unit.cfg.py
compiler-rt/unittests/lit.common.unit.configured.in
llvm/utils/lit/lit/formats/googletest.py
Removed:
################################################################################
diff --git a/compiler-rt/unittests/lit.common.unit.cfg.py b/compiler-rt/unittests/lit.common.unit.cfg.py
index fba034ae4fce..4cf5bf736052 100644
--- a/compiler-rt/unittests/lit.common.unit.cfg.py
+++ b/compiler-rt/unittests/lit.common.unit.cfg.py
@@ -8,9 +8,21 @@
import lit.formats
+# Copied from libcxx's config.py
+def get_lit_conf(name, default=None):
+ # Allow overriding on the command line using --param=<name>=<val>
+ val = lit_config.params.get(name, None)
+ if val is None:
+ val = getattr(config, name, None)
+ if val is None:
+ val = default
+ return val
+
+emulator = get_lit_conf('emulator', None)
+
# Setup test format
llvm_build_mode = getattr(config, "llvm_build_mode", "Debug")
-config.test_format = lit.formats.GoogleTest(llvm_build_mode, "Test")
+config.test_format = lit.formats.GoogleTest(llvm_build_mode, "Test", emulator)
# Setup test suffixes.
config.suffixes = []
diff --git a/compiler-rt/unittests/lit.common.unit.configured.in b/compiler-rt/unittests/lit.common.unit.configured.in
index d959d43989ca..29e1615ff28d 100644
--- a/compiler-rt/unittests/lit.common.unit.configured.in
+++ b/compiler-rt/unittests/lit.common.unit.configured.in
@@ -12,6 +12,7 @@ config.host_arch = "@HOST_ARCH@"
config.host_os = "@HOST_OS@"
config.llvm_lib_dir = "@LLVM_LIBRARY_DIR@"
config.gwp_asan = @COMPILER_RT_HAS_GWP_ASAN_PYBOOL@
+config.emulator = "@COMPILER_RT_EMULATOR@"
# LLVM tools dir and build mode can be passed in lit parameters,
# so try to apply substitution.
diff --git a/llvm/utils/lit/lit/formats/googletest.py b/llvm/utils/lit/lit/formats/googletest.py
index 059eb99762e9..0fe8a5148e57 100644
--- a/llvm/utils/lit/lit/formats/googletest.py
+++ b/llvm/utils/lit/lit/formats/googletest.py
@@ -1,5 +1,6 @@
from __future__ import absolute_import
import os
+import shlex
import subprocess
import sys
@@ -11,7 +12,7 @@
kIsWindows = sys.platform in ['win32', 'cygwin']
class GoogleTest(TestFormat):
- def __init__(self, test_sub_dirs, test_suffix):
+ def __init__(self, test_sub_dirs, test_suffix, run_under = []):
self.test_sub_dirs = str(test_sub_dirs).split(';')
# On Windows, assume tests will also end in '.exe'.
@@ -21,6 +22,7 @@ def __init__(self, test_sub_dirs, test_suffix):
# Also check for .py files for testing purposes.
self.test_suffixes = {exe_suffix, test_suffix + '.py'}
+ self.run_under = run_under
def getGTestTests(self, path, litConfig, localConfig):
"""getGTestTests(path) - [name]
@@ -32,7 +34,7 @@ def getGTestTests(self, path, litConfig, localConfig):
litConfig: LitConfig instance
localConfig: TestingConfig instance"""
- list_test_cmd = self.maybeAddPythonToCmd([path, '--gtest_list_tests'])
+ list_test_cmd = self.prepareCmd([path, '--gtest_list_tests'])
try:
output = subprocess.check_output(list_test_cmd,
@@ -113,7 +115,7 @@ def execute(self, test, litConfig):
testName = namePrefix + '/' + testName
cmd = [testPath, '--gtest_filter=' + testName]
- cmd = self.maybeAddPythonToCmd(cmd)
+ cmd = self.prepareCmd(cmd)
if litConfig.useValgrind:
cmd = litConfig.valgrindArgs + cmd
@@ -141,13 +143,20 @@ def execute(self, test, litConfig):
return lit.Test.PASS,''
- def maybeAddPythonToCmd(self, cmd):
- """Insert the python exe into the command if cmd[0] ends in .py
+ def prepareCmd(self, cmd):
+ """Insert interpreter if needed.
+ It inserts the python exe into the command if cmd[0] ends in .py or caller
+ specified run_under.
We cannot rely on the system to interpret shebang lines for us on
Windows, so add the python executable to the command if this is a .py
script.
"""
if cmd[0].endswith('.py'):
- return [sys.executable] + cmd
+ cmd = [sys.executable] + cmd
+ if self.run_under:
+ if isinstance(self.run_under, list):
+ cmd = self.run_under + cmd
+ else:
+ cmd = shlex.split(self.run_under) + cmd
return cmd
More information about the llvm-commits
mailing list