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):
# 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 = []
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
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',
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
# 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.