diff --git a/lldb/packages/Python/lldbsuite/test/builders/builder.py b/lldb/packages/Python/lldbsuite/test/builders/builder.py --- a/lldb/packages/Python/lldbsuite/test/builders/builder.py +++ b/lldb/packages/Python/lldbsuite/test/builders/builder.py @@ -120,6 +120,11 @@ configuration.clang_module_cache_dir)] return [] + def getLibCxxArgs(self): + if configuration.hermetic_libcxx: + return ["USE_HERMETIC_LIBCPP=1"] + return [] + def _getDebugInfoArgs(self, debug_info): if debug_info is None: return [] @@ -142,7 +147,7 @@ self.getArchCFlags(architecture), self.getArchSpec(architecture), self.getCCSpec(compiler), self.getExtraMakeArgs(), self.getSDKRootSpec(), self.getModuleCacheSpec(), - self.getCmdLine(dictionary)] + self.getLibCxxArgs(), self.getCmdLine(dictionary)] command = list(itertools.chain(*command_parts)) return command diff --git a/lldb/packages/Python/lldbsuite/test/configuration.py b/lldb/packages/Python/lldbsuite/test/configuration.py --- a/lldb/packages/Python/lldbsuite/test/configuration.py +++ b/lldb/packages/Python/lldbsuite/test/configuration.py @@ -124,6 +124,9 @@ # LLDB library directory. lldb_libs_dir = None +# Force us to use the just-built libcxx +hermetic_libcxx = False + # A plugin whose tests will be enabled, like intel-pt. enabled_plugins = [] diff --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py --- a/lldb/packages/Python/lldbsuite/test/dotest.py +++ b/lldb/packages/Python/lldbsuite/test/dotest.py @@ -281,6 +281,11 @@ logging.warning('No valid FileCheck executable; some tests may fail...') logging.warning('(Double-check the --llvm-tools-dir argument to dotest.py)') + configuration.hermetic_libcxx = args.hermetic_libcxx + if configuration.hermetic_libcxx and args.lldb_platform_name: + configuration.hermetic_libcxx = False + logging.warning('Hermetic libc++ is not supported for remote runs: ignoring --hermetic-libcxx') + if args.channels: lldbtest_config.channels = args.channels diff --git a/lldb/packages/Python/lldbsuite/test/dotest_args.py b/lldb/packages/Python/lldbsuite/test/dotest_args.py --- a/lldb/packages/Python/lldbsuite/test/dotest_args.py +++ b/lldb/packages/Python/lldbsuite/test/dotest_args.py @@ -43,6 +43,8 @@ if sys.platform == 'darwin': group.add_argument('--apple-sdk', metavar='apple_sdk', dest='apple_sdk', default="", help=textwrap.dedent( '''Specify the name of the Apple SDK (macosx, macosx.internal, iphoneos, iphoneos.internal, or path to SDK) and use the appropriate tools from that SDK's toolchain.''')) + group.add_argument('--hermetic-libcxx', action='store_true', help=textwrap.dedent( + '''Force the just-built libcxx to be used for the libc++ formatter tests.''')) # FIXME? This won't work for different extra flags according to each arch. group.add_argument( '-E', diff --git a/lldb/test/API/lit.cfg.py b/lldb/test/API/lit.cfg.py --- a/lldb/test/API/lit.cfg.py +++ b/lldb/test/API/lit.cfg.py @@ -158,14 +158,22 @@ if is_configured('dotest_args_str'): dotest_cmd.extend(config.dotest_args_str.split(';')) -# Library path may be needed to locate just-built clang. +# Library path may be needed to locate just-built clang and libcxx. if is_configured('llvm_libs_dir'): dotest_cmd += ['--env', 'LLVM_LIBS_DIR=' + config.llvm_libs_dir] +# Include path may be needed to locate just-built libcxx. +if is_configured('llvm_include_dir'): + dotest_cmd += ['--env', 'LLVM_INCLUDE_DIR=' + config.llvm_include_dir] + # This path may be needed to locate required llvm tools if is_configured('llvm_tools_dir'): dotest_cmd += ['--env', 'LLVM_TOOLS_DIR=' + config.llvm_tools_dir] +# If we have a just-built libcxx, prefer it over the system one. +if is_configured('has_libcxx') and platform.system() != 'Windows': + dotest_cmd += ['--hermetic-libcxx'] + # Forward ASan-specific environment variables to tests, as a test may load an # ASan-ified dylib. for env_var in ('ASAN_OPTIONS', 'DYLD_INSERT_LIBRARIES'): diff --git a/lldb/test/API/lit.site.cfg.py.in b/lldb/test/API/lit.site.cfg.py.in --- a/lldb/test/API/lit.site.cfg.py.in +++ b/lldb/test/API/lit.site.cfg.py.in @@ -4,6 +4,7 @@ config.llvm_obj_root = "@LLVM_BINARY_DIR@" config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@") config.llvm_libs_dir = lit_config.substitute("@LLVM_LIBS_DIR@") +config.llvm_include_dir = lit_config.substitute("@LLVM_INCLUDE_DIR@") config.llvm_shlib_dir = lit_config.substitute("@SHLIBDIR@") config.llvm_build_mode = lit_config.substitute("@LLVM_BUILD_MODE@") config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@" @@ -29,6 +30,7 @@ config.test_arch = '@LLDB_TEST_ARCH@' config.test_compiler = lit_config.substitute('@LLDB_TEST_COMPILER@') config.dsymutil = lit_config.substitute('@LLDB_TEST_DSYMUTIL@') +config.has_libcxx = '@LLDB_HAS_LIBCXX@' # The API tests use their own module caches. config.lldb_module_cache = os.path.join("@LLDB_TEST_MODULE_CACHE_LLDB@", "lldb-api") config.clang_module_cache = os.path.join("@LLDB_TEST_MODULE_CACHE_CLANG@", "lldb-api") diff --git a/lldb/test/CMakeLists.txt b/lldb/test/CMakeLists.txt --- a/lldb/test/CMakeLists.txt +++ b/lldb/test/CMakeLists.txt @@ -127,6 +127,7 @@ # dependency as it's also possible to run the libc++ tests against the libc++ # installed on the system. if (TARGET cxx) + set(LLDB_HAS_LIBCXX ON) add_lldb_test_dependency(cxx) endif() @@ -172,6 +173,7 @@ LLDB_ENABLE_LZMA LLVM_ENABLE_ZLIB LLVM_ENABLE_SHARED_LIBS + LLDB_HAS_LIBCXX LLDB_USE_SYSTEM_DEBUGSERVER LLDB_IS_64_BITS)