2015-03-14 04:55:07 +08:00
|
|
|
# -*- Python -*-
|
|
|
|
|
|
|
|
import os
|
|
|
|
import platform
|
|
|
|
import re
|
|
|
|
import subprocess
|
|
|
|
import locale
|
|
|
|
|
|
|
|
import lit.formats
|
|
|
|
import lit.util
|
|
|
|
|
|
|
|
# Configuration file for the 'lit' test runner.
|
|
|
|
|
|
|
|
# name: The name of this test suite.
|
|
|
|
config.name = 'lldb'
|
|
|
|
|
|
|
|
# testFormat: The test format to use to interpret tests.
|
|
|
|
#
|
|
|
|
# For now we require '&&' between commands, until they get globally killed and
|
|
|
|
# the test runner updated.
|
|
|
|
execute_external = (platform.system() != 'Windows'
|
|
|
|
or lit_config.getBashPath() not in [None, ""])
|
|
|
|
config.test_format = lit.formats.ShTest(execute_external)
|
|
|
|
|
|
|
|
# suffixes: We only support unit tests
|
|
|
|
config.suffixes = []
|
|
|
|
|
|
|
|
# test_source_root: The root path where tests are located.
|
|
|
|
config.test_source_root = os.path.dirname(__file__)
|
|
|
|
|
|
|
|
# test_exec_root: The root path where tests should be run.
|
|
|
|
lldb_obj_root = getattr(config, 'lldb_obj_root', None)
|
|
|
|
if lldb_obj_root is not None:
|
|
|
|
config.test_exec_root = os.path.join(lldb_obj_root, 'lit')
|
|
|
|
|
|
|
|
# Set llvm_{src,obj}_root for use by others.
|
|
|
|
config.llvm_src_root = getattr(config, 'llvm_src_root', None)
|
|
|
|
config.llvm_obj_root = getattr(config, 'llvm_obj_root', None)
|
|
|
|
|
|
|
|
# Tweak the PATH to include the tools dir and the scripts dir.
|
|
|
|
if lldb_obj_root is not None:
|
|
|
|
llvm_tools_dir = getattr(config, 'llvm_tools_dir', None)
|
|
|
|
if not llvm_tools_dir:
|
|
|
|
lit_config.fatal('No LLVM tools dir set!')
|
|
|
|
path = os.path.pathsep.join((llvm_tools_dir, config.environment['PATH']))
|
|
|
|
path = os.path.pathsep.join((os.path.join(getattr(config, 'llvm_src_root', None),'test','Scripts'),path))
|
|
|
|
|
|
|
|
config.environment['PATH'] = path
|
|
|
|
|
|
|
|
llvm_libs_dir = getattr(config, 'llvm_libs_dir', None)
|
|
|
|
if not llvm_libs_dir:
|
|
|
|
lit_config.fatal('No LLVM libs dir set!')
|
|
|
|
path = os.path.pathsep.join((llvm_libs_dir,
|
|
|
|
config.environment.get('LD_LIBRARY_PATH','')))
|
|
|
|
config.environment['LD_LIBRARY_PATH'] = path
|
|
|
|
|
|
|
|
# Propagate LLVM_SRC_ROOT into the environment.
|
|
|
|
config.environment['LLVM_SRC_ROOT'] = getattr(config, 'llvm_src_root', '')
|
|
|
|
|
|
|
|
# Propagate PYTHON_EXECUTABLE into the environment
|
|
|
|
config.environment['PYTHON_EXECUTABLE'] = getattr(config, 'python_executable',
|
|
|
|
'')
|
|
|
|
###
|
|
|
|
|
|
|
|
# Check that the object root is known.
|
|
|
|
if config.test_exec_root is None:
|
|
|
|
# Otherwise, we haven't loaded the site specific configuration (the user is
|
|
|
|
# probably trying to run on a test file directly, and either the site
|
|
|
|
# configuration hasn't been created by the build system, or we are in an
|
|
|
|
# out-of-tree build situation).
|
|
|
|
|
|
|
|
# Check for 'lldb_site_config' user parameter, and use that if available.
|
|
|
|
site_cfg = lit_config.params.get('lldb_site_config', None)
|
|
|
|
if site_cfg and os.path.exists(site_cfg):
|
|
|
|
lit_config.load_config(config, site_cfg)
|
|
|
|
raise SystemExit
|
|
|
|
|
|
|
|
# Try to detect the situation where we are using an out-of-tree build by
|
|
|
|
# looking for 'llvm-config'.
|
|
|
|
#
|
|
|
|
# FIXME: I debated (i.e., wrote and threw away) adding logic to
|
|
|
|
# automagically generate the lit.site.cfg if we are in some kind of fresh
|
|
|
|
# build situation. This means knowing how to invoke the build system though,
|
|
|
|
# and I decided it was too much magic. We should solve this by just having
|
|
|
|
# the .cfg files generated during the configuration step.
|
|
|
|
|
|
|
|
llvm_config = lit.util.which('llvm-config', config.environment['PATH'])
|
|
|
|
if not llvm_config:
|
|
|
|
lit_config.fatal('No site specific configuration available!')
|
|
|
|
|
|
|
|
# Get the source and object roots.
|
|
|
|
llvm_src_root = lit.util.capture(['llvm-config', '--src-root']).strip()
|
|
|
|
llvm_obj_root = lit.util.capture(['llvm-config', '--obj-root']).strip()
|
|
|
|
lldb_src_root = os.path.join(llvm_src_root, "tools", "lldb")
|
|
|
|
lldb_obj_root = os.path.join(llvm_obj_root, "tools", "lldb")
|
|
|
|
|
|
|
|
# Validate that we got a tree which points to here, using the standard
|
|
|
|
# tools/lldb layout.
|
|
|
|
this_src_root = os.path.dirname(config.test_source_root)
|
|
|
|
if os.path.realpath(lldb_src_root) != os.path.realpath(this_src_root):
|
|
|
|
lit_config.fatal('No site specific configuration available!')
|
|
|
|
|
|
|
|
# Check that the site specific configuration exists.
|
|
|
|
site_cfg = os.path.join(lldb_obj_root, 'test', 'lit.site.cfg')
|
|
|
|
if not os.path.exists(site_cfg):
|
|
|
|
lit_config.fatal(
|
|
|
|
'No site specific configuration available! You may need to '
|
|
|
|
'run "make test" in your lldb build directory.')
|
|
|
|
|
|
|
|
# Okay, that worked. Notify the user of the automagic, and reconfigure.
|
|
|
|
lit_config.note('using out-of-tree build at %r' % lldb_obj_root)
|
|
|
|
lit_config.load_config(config, site_cfg)
|
|
|
|
raise SystemExit
|
|
|
|
|
[LIT] First pass of LLDB LIT support
Summary:
This patch supplies basic infrastructure for LLDB to use LIT, and ports a few basic test cases from the LLDB test suite into LIT.
With this patch the LLDB lit system is not capable or intended to fully replace the existing LLDB test suite, but this first patch enables people to write lit tests for LLDB.
The lit substitution for %cc and %cxx default to the host compiler unless the CMake option LLDB_TEST_CLANG is On, in which case the in-tree clang will be used.
The target check-lldb-lit will run all lit tests including the lit-based executor for the unit tests. Alternatively there is a target generated for each subdirectory under the lit directory, so check-lldb-unit and check-lldb-expr will run just the tests under their respective directories.
The ported tests are not removed from the existing suite, and should not be until such a time when the lit runner is mature and in use by bots and workflows.
Reviewers: zturner, labath, jingham, tfiala
Subscribers: beanz, mgorny, lldb-commits
Differential Revision: https://reviews.llvm.org/D24591
llvm-svn: 281651
2016-09-16 04:13:55 +08:00
|
|
|
# Register substitutions
|
|
|
|
config.substitutions.append(('%python', config.python_executable))
|
|
|
|
|
|
|
|
debugserver = lit.util.which('debugserver', llvm_tools_dir)
|
|
|
|
lldb = lit.util.which('lldb', llvm_tools_dir)
|
|
|
|
|
|
|
|
if not os.path.exists(config.cc):
|
|
|
|
config.cc = lit.util.which(config.cc, llvm_tools_dir)
|
|
|
|
|
|
|
|
if not os.path.exists(config.cxx):
|
|
|
|
config.cxx = lit.util.which(config.cxx, llvm_tools_dir)
|
|
|
|
|
|
|
|
if platform.system() in ['Darwin']:
|
|
|
|
try:
|
|
|
|
out = lit.util.capture(['xcrun', '--show-sdk-path']).strip()
|
|
|
|
res = 0
|
|
|
|
except OSError:
|
|
|
|
res = -1
|
|
|
|
if res == 0 and out:
|
|
|
|
sdk_path = out
|
|
|
|
lit_config.note('using SDKROOT: %r' % sdk_path)
|
|
|
|
config.cc += " -isysroot %s" % sdk_path
|
|
|
|
config.cxx += " -isysroot %s" % sdk_path
|
|
|
|
|
|
|
|
config.substitutions.append(('%cc', config.cc))
|
|
|
|
config.substitutions.append(('%cxx', config.cxx))
|
|
|
|
|
|
|
|
config.substitutions.append(('%lldb', lldb))
|
2016-10-07 10:26:41 +08:00
|
|
|
|
|
|
|
if debugserver is not None:
|
|
|
|
config.substitutions.append(('%debugserver', debugserver))
|
[LIT] First pass of LLDB LIT support
Summary:
This patch supplies basic infrastructure for LLDB to use LIT, and ports a few basic test cases from the LLDB test suite into LIT.
With this patch the LLDB lit system is not capable or intended to fully replace the existing LLDB test suite, but this first patch enables people to write lit tests for LLDB.
The lit substitution for %cc and %cxx default to the host compiler unless the CMake option LLDB_TEST_CLANG is On, in which case the in-tree clang will be used.
The target check-lldb-lit will run all lit tests including the lit-based executor for the unit tests. Alternatively there is a target generated for each subdirectory under the lit directory, so check-lldb-unit and check-lldb-expr will run just the tests under their respective directories.
The ported tests are not removed from the existing suite, and should not be until such a time when the lit runner is mature and in use by bots and workflows.
Reviewers: zturner, labath, jingham, tfiala
Subscribers: beanz, mgorny, lldb-commits
Differential Revision: https://reviews.llvm.org/D24591
llvm-svn: 281651
2016-09-16 04:13:55 +08:00
|
|
|
|
|
|
|
for pattern in [r"\bFileCheck\b",
|
|
|
|
r"\| \bnot\b"]:
|
|
|
|
tool_match = re.match(r"^(\\)?((\| )?)\W+b([0-9A-Za-z-_]+)\\b\W*$",
|
|
|
|
pattern)
|
|
|
|
tool_pipe = tool_match.group(2)
|
|
|
|
tool_name = tool_match.group(4)
|
|
|
|
tool_path = lit.util.which(tool_name, config.llvm_tools_dir)
|
|
|
|
if not tool_path:
|
|
|
|
# Warn, but still provide a substitution.
|
|
|
|
lit_config.note(
|
|
|
|
'Did not find ' + tool_name + ' in ' + config.llvm_tools_dir)
|
|
|
|
config.substitutions.append((pattern, tool_pipe + tool_path))
|
|
|
|
|
2015-03-14 04:55:07 +08:00
|
|
|
# Shell execution
|
|
|
|
if platform.system() not in ['Windows'] or lit_config.getBashPath() != '':
|
|
|
|
config.available_features.add('shell')
|
|
|
|
|
|
|
|
# Running on Darwin OS
|
|
|
|
if platform.system() in ['Darwin']:
|
[LIT] First pass of LLDB LIT support
Summary:
This patch supplies basic infrastructure for LLDB to use LIT, and ports a few basic test cases from the LLDB test suite into LIT.
With this patch the LLDB lit system is not capable or intended to fully replace the existing LLDB test suite, but this first patch enables people to write lit tests for LLDB.
The lit substitution for %cc and %cxx default to the host compiler unless the CMake option LLDB_TEST_CLANG is On, in which case the in-tree clang will be used.
The target check-lldb-lit will run all lit tests including the lit-based executor for the unit tests. Alternatively there is a target generated for each subdirectory under the lit directory, so check-lldb-unit and check-lldb-expr will run just the tests under their respective directories.
The ported tests are not removed from the existing suite, and should not be until such a time when the lit runner is mature and in use by bots and workflows.
Reviewers: zturner, labath, jingham, tfiala
Subscribers: beanz, mgorny, lldb-commits
Differential Revision: https://reviews.llvm.org/D24591
llvm-svn: 281651
2016-09-16 04:13:55 +08:00
|
|
|
config.available_features.add('darwin')
|
2015-03-14 04:55:07 +08:00
|
|
|
config.available_features.add('system-linker-mach-o')
|
|
|
|
|
|
|
|
# Running on ELF based *nix
|
|
|
|
if platform.system() in ['FreeBSD', 'Linux']:
|
|
|
|
config.available_features.add('system-linker-elf')
|
[LIT] First pass of LLDB LIT support
Summary:
This patch supplies basic infrastructure for LLDB to use LIT, and ports a few basic test cases from the LLDB test suite into LIT.
With this patch the LLDB lit system is not capable or intended to fully replace the existing LLDB test suite, but this first patch enables people to write lit tests for LLDB.
The lit substitution for %cc and %cxx default to the host compiler unless the CMake option LLDB_TEST_CLANG is On, in which case the in-tree clang will be used.
The target check-lldb-lit will run all lit tests including the lit-based executor for the unit tests. Alternatively there is a target generated for each subdirectory under the lit directory, so check-lldb-unit and check-lldb-expr will run just the tests under their respective directories.
The ported tests are not removed from the existing suite, and should not be until such a time when the lit runner is mature and in use by bots and workflows.
Reviewers: zturner, labath, jingham, tfiala
Subscribers: beanz, mgorny, lldb-commits
Differential Revision: https://reviews.llvm.org/D24591
llvm-svn: 281651
2016-09-16 04:13:55 +08:00
|
|
|
if platform.system() in ['FreeBSD']:
|
|
|
|
config.available_features.add('freebsd')
|
|
|
|
else:
|
|
|
|
config.available_features.add('linux')
|
|
|
|
|
|
|
|
if platform.system() in ['Windows']:
|
|
|
|
config.available_features.add('windows')
|
|
|
|
|
|
|
|
if re.match(r'^arm(hf.*-linux)|(.*-linux-gnuabihf)', config.target_triple):
|
|
|
|
config.available_features.add("armhf-linux")
|
|
|
|
|
|
|
|
if re.match(r'icc', config.cc):
|
|
|
|
config.available_features.add("compiler-icc")
|
|
|
|
elif re.match(r'clang', config.cc):
|
|
|
|
config.available_features.add("compiler-clang")
|
|
|
|
elif re.match(r'gcc', config.cc):
|
|
|
|
config.available_features.add("compiler-gcc")
|
|
|
|
elif re.match(r'cl', config.cc):
|
|
|
|
config.available_features.add("compiler-msvc")
|
2015-03-14 04:55:07 +08:00
|
|
|
|
|
|
|
# llvm-config knows whether it is compiled with asserts (and)
|
|
|
|
# whether we are operating in release/debug mode.
|
|
|
|
import subprocess
|
|
|
|
try:
|
|
|
|
llvm_config_cmd = \
|
|
|
|
subprocess.Popen([os.path.join(llvm_tools_dir, 'llvm-config'),
|
|
|
|
'--build-mode', '--assertion-mode', '--targets-built'],
|
|
|
|
stdout = subprocess.PIPE)
|
|
|
|
except OSError as why:
|
|
|
|
print("Could not find llvm-config in " + llvm_tools_dir)
|
|
|
|
exit(42)
|
|
|
|
|
|
|
|
llvm_config_output = llvm_config_cmd.stdout.read().decode('utf_8')
|
|
|
|
llvm_config_output_list = llvm_config_output.split("\n")
|
|
|
|
|
|
|
|
if re.search(r'DEBUG', llvm_config_output_list[0]):
|
|
|
|
config.available_features.add('debug')
|
|
|
|
if re.search(r'ON', llvm_config_output_list[1]):
|
|
|
|
config.available_features.add('asserts')
|
|
|
|
if re.search(r'ARM', llvm_config_output_list[2]):
|
|
|
|
config.available_features.add('arm')
|
|
|
|
if re.search(r'Mips', llvm_config_output_list[2]):
|
|
|
|
config.available_features.add('mips')
|
|
|
|
if re.search(r'X86', llvm_config_output_list[2]):
|
|
|
|
config.available_features.add('x86')
|
|
|
|
llvm_config_cmd.wait()
|