[lldb] Support specifying a custom libcxx for the API tests

This patch combines D129166 (to always pick the just-built libc++) and
D132257 (to allow customizing the libc++ for testing). The common goal
is to avoid picking up an unexpected libc++ for testing.

Differential revision: https://reviews.llvm.org/D132263
This commit is contained in:
Jonas Devlieghere 2022-08-19 15:14:15 -07:00
parent 9e51cbac9e
commit cc0b5ebf7f
No known key found for this signature in database
GPG Key ID: 49CC0BD90FDEED4D
6 changed files with 35 additions and 20 deletions

View File

@ -121,8 +121,9 @@ class Builder:
return []
def getLibCxxArgs(self):
if configuration.hermetic_libcxx:
return ["USE_HERMETIC_LIBCPP=1"]
if configuration.libcxx_include_dir and configuration.libcxx_library_dir:
return ["LIBCPP_INCLUDE_DIR={}".format(configuration.libcxx_include_dir),
"LIBCPP_LIBRARY_DIR={}".format(configuration.libcxx_library_dir)]
return []
def _getDebugInfoArgs(self, debug_info):

View File

@ -124,8 +124,8 @@ all_tests = set()
# LLDB library directory.
lldb_libs_dir = None
# Force us to use the just-built libcxx
hermetic_libcxx = False
libcxx_include_dir = None
libcxx_library_dir = None
# A plugin whose tests will be enabled, like intel-pt.
enabled_plugins = []

View File

@ -280,10 +280,17 @@ def parseOptionsAndInitTestdirs():
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')
configuration.libcxx_include_dir = args.libcxx_include_dir
configuration.libcxx_library_dir = args.libcxx_library_dir
if args.libcxx_include_dir or args.libcxx_library_dir:
if args.lldb_platform_name:
logging.warning('Custom libc++ is not supported for remote runs: ignoring --libcxx arguments')
elif args.libcxx_include_dir and args.libcxx_library_dir:
configuration.libcxx_include_dir = args.libcxx_include_dir
configuration.libcxx_library_dir = args.libcxx_library_dir
else:
logging.error('Custom libc++ requires both --libcxx-include-dir and --libcxx-library-dir')
sys.exit(-1)
if args.channels:
lldbtest_config.channels = args.channels

View File

@ -43,8 +43,8 @@ def create_parser():
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.'''))
group.add_argument('--libcxx-include-dir', help=textwrap.dedent('Specify the path to a custom libc++ include directory. Must be used in conjunction with --libcxx-library-dir.'))
group.add_argument('--libcxx-library-dir', help=textwrap.dedent('Specify the path to a custom libc++ library directory. Must be used in conjunction with --libcxx-include-dir.'))
# FIXME? This won't work for different extra flags according to each arch.
group.add_argument(
'-E',

View File

@ -388,16 +388,21 @@ endif
ifeq (1,$(USE_LIBCPP))
CXXFLAGS += -DLLDB_USING_LIBCPP
ifeq "$(OS)" "Android"
# Nothing to do, this is already handled in
# Android.rules.
ifneq ($(and $(LIBCPP_INCLUDE_DIR), $(LIBCPP_LIBRARY_DIR)),)
CXXFLAGS += -nostdlib++ -nostdinc++ -cxx-isystem $(LIBCPP_INCLUDE_DIR)
LDFLAGS += -L$(LLVM_LIBS_DIR) -Wl,-rpath,$(LIBCPP_LIBRARY_DIR) -lc++
else
CXXFLAGS += -stdlib=libc++
LDFLAGS += -stdlib=libc++
endif
ifneq (,$(filter $(OS), FreeBSD Linux NetBSD))
ifneq (,$(LLVM_LIBS_DIR))
LDFLAGS += -Wl,-rpath,$(LLVM_LIBS_DIR)
ifeq "$(OS)" "Android"
# Nothing to do, this is already handled in
# Android.rules.
else
CXXFLAGS += -stdlib=libc++
LDFLAGS += -stdlib=libc++
endif
ifneq (,$(filter $(OS), FreeBSD Linux NetBSD))
ifneq (,$(LLVM_LIBS_DIR))
LDFLAGS += -Wl,-rpath,$(LLVM_LIBS_DIR)
endif
endif
endif
endif

View File

@ -172,7 +172,9 @@ if is_configured('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']
if is_configured('llvm_include_dir') and is_configured('llvm_libs_dir'):
dotest_cmd += ['--libcxx-include-dir', os.path.join(config.llvm_include_dir, 'c++', 'v1')]
dotest_cmd += ['--libcxx-library-dir', config.llvm_libs_dir]
# Forward ASan-specific environment variables to tests, as a test may load an
# ASan-ified dylib.