JDevlieghere created this revision.
JDevlieghere added reviewers: fdeazeve, aprantl, labath.
Herald added a project: All.
JDevlieghere requested review of this revision.

D129166 <https://reviews.llvm.org/D129166> was an attempt to ensure that by 
default we use the libc++ from the build dir instead of potentially picking up 
the system libc++. While I was reviewing D132257 
<https://reviews.llvm.org/D132257>, I realized that part of the patch (i.e. the 
change to `Makefile.rules`) got lost. As I was reviving the code, I realized 
that it would be relatively straightforward to merge my change with what Felipe 
was trying to achieve. Instead of telling dotest to use the libc++ form the 
build dir and computing the path to the current build's libc++  (as was the 
case in D129166 <https://reviews.llvm.org/D129166>), we can specify the libc++ 
include and library dir to dotest (as was the case in D132257 
<https://reviews.llvm.org/D132257>) and have lit compute the path to the libc++ 
in the build dir, achieving both objectives.


https://reviews.llvm.org/D132263

Files:
  lldb/packages/Python/lldbsuite/test/builders/builder.py
  lldb/packages/Python/lldbsuite/test/configuration.py
  lldb/packages/Python/lldbsuite/test/dotest.py
  lldb/packages/Python/lldbsuite/test/dotest_args.py
  lldb/packages/Python/lldbsuite/test/make/Makefile.rules
  lldb/test/API/lit.cfg.py

Index: lldb/test/API/lit.cfg.py
===================================================================
--- lldb/test/API/lit.cfg.py
+++ lldb/test/API/lit.cfg.py
@@ -172,7 +172,9 @@
 
 # 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.
Index: lldb/packages/Python/lldbsuite/test/make/Makefile.rules
===================================================================
--- lldb/packages/Python/lldbsuite/test/make/Makefile.rules
+++ lldb/packages/Python/lldbsuite/test/make/Makefile.rules
@@ -388,16 +388,21 @@
 
 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
Index: lldb/packages/Python/lldbsuite/test/dotest_args.py
===================================================================
--- lldb/packages/Python/lldbsuite/test/dotest_args.py
+++ lldb/packages/Python/lldbsuite/test/dotest_args.py
@@ -43,8 +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.'''))
+    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',
Index: lldb/packages/Python/lldbsuite/test/dotest.py
===================================================================
--- lldb/packages/Python/lldbsuite/test/dotest.py
+++ lldb/packages/Python/lldbsuite/test/dotest.py
@@ -280,10 +280,17 @@
         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
Index: lldb/packages/Python/lldbsuite/test/configuration.py
===================================================================
--- lldb/packages/Python/lldbsuite/test/configuration.py
+++ lldb/packages/Python/lldbsuite/test/configuration.py
@@ -124,8 +124,8 @@
 # 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 = []
Index: lldb/packages/Python/lldbsuite/test/builders/builder.py
===================================================================
--- lldb/packages/Python/lldbsuite/test/builders/builder.py
+++ lldb/packages/Python/lldbsuite/test/builders/builder.py
@@ -121,8 +121,9 @@
         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-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
  • [Lldb-commits]... Jonas Devlieghere via Phabricator via lldb-commits
    • [Lldb-com... Felipe de Azevedo Piovezan via Phabricator via lldb-commits
    • [Lldb-com... Jonas Devlieghere via Phabricator via lldb-commits

Reply via email to