This revision was automatically updated to reflect the committed changes.
Closed by commit rGcb0eb9d8dd5a: [test] Fix LLDB tests with just-built libcxx
when using a target directory. (authored by rupprecht).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D133973/new/
https://reviews.llvm.org/D133973
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
lldb/test/API/lit.site.cfg.py.in
lldb/test/CMakeLists.txt
lldb/utils/lldb-dotest/CMakeLists.txt
lldb/utils/lldb-dotest/lldb-dotest.in
Index: lldb/utils/lldb-dotest/lldb-dotest.in
===================================================================
--- lldb/utils/lldb-dotest/lldb-dotest.in
+++ lldb/utils/lldb-dotest/lldb-dotest.in
@@ -13,6 +13,10 @@
lldb_framework_dir = "@LLDB_FRAMEWORK_DIR_CONFIGURED@"
lldb_libs_dir = "@LLDB_LIBS_DIR_CONFIGURED@"
llvm_tools_dir = "@LLVM_TOOLS_DIR_CONFIGURED@"
+has_libcxx = @LLDB_HAS_LIBCXX@
+libcxx_libs_dir = "@LIBCXX_LIBRARY_DIR@"
+libcxx_include_dir = "@LIBCXX_GENERATED_INCLUDE_DIR@"
+libcxx_include_target_dir = "@LIBCXX_GENERATED_INCLUDE_TARGET_DIR@"
if __name__ == '__main__':
wrapper_args = sys.argv[1:]
@@ -31,6 +35,11 @@
cmd.extend(['--dsymutil', dsymutil])
cmd.extend(['--lldb-libs-dir', lldb_libs_dir])
cmd.extend(['--llvm-tools-dir', llvm_tools_dir])
+ if has_libcxx:
+ cmd.extend(['--libcxx-include-dir', libcxx_include_dir])
+ if libcxx_include_target_dir:
+ cmd.extend(['--libcxx-include-target-dir', libcxx_include_target_dir])
+ cmd.extend(['--libcxx-library-dir', libcxx_libs_dir])
if lldb_framework_dir:
cmd.extend(['--framework', lldb_framework_dir])
if lldb_build_intel_pt == "1":
Index: lldb/utils/lldb-dotest/CMakeLists.txt
===================================================================
--- lldb/utils/lldb-dotest/CMakeLists.txt
+++ lldb/utils/lldb-dotest/CMakeLists.txt
@@ -9,8 +9,21 @@
llvm_canonicalize_cmake_booleans(
LLDB_BUILD_INTEL_PT
+ LLDB_HAS_LIBCXX
)
+if ("libcxx" IN_LIST LLVM_ENABLE_RUNTIMES)
+ set(LLDB_HAS_LIBCXX ON)
+ if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+ set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+ set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
+ set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
+ else()
+ set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
+ set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
+ endif()
+endif()
+
set(LLVM_TOOLS_DIR "${LLVM_TOOLS_BINARY_DIR}")
set(vars
LLDB_TEST_COMMON_ARGS
@@ -23,8 +36,13 @@
LLDB_TEST_DSYMUTIL
LLDB_LIBS_DIR
LLVM_TOOLS_DIR
+ LIBCXX_LIBRARY_DIR
+ LIBCXX_GENERATED_INCLUDE_DIR
+ LIBCXX_GENERATED_INCLUDE_TARGET_DIR
)
+llvm_canonicalize_cmake_booleans(LLDB_HAS_LIBCXX)
+
# Generate lldb-dotest Python driver script for each build mode.
if(LLDB_BUILT_STANDALONE)
set(config_types ".")
Index: lldb/test/CMakeLists.txt
===================================================================
--- lldb/test/CMakeLists.txt
+++ lldb/test/CMakeLists.txt
@@ -97,6 +97,14 @@
if (TARGET libcxx OR ("libcxx" IN_LIST LLVM_ENABLE_RUNTIMES))
set(LLDB_HAS_LIBCXX ON)
+ if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+ set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE})
+ set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
+ set(LIBCXX_GENERATED_INCLUDE_TARGET_DIR "${LLVM_BINARY_DIR}/include/${LLVM_DEFAULT_TARGET_TRIPLE}/c++/v1")
+ else()
+ set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
+ set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
+ endif()
add_lldb_test_dependency(cxx)
endif()
Index: lldb/test/API/lit.site.cfg.py.in
===================================================================
--- lldb/test/API/lit.site.cfg.py.in
+++ lldb/test/API/lit.site.cfg.py.in
@@ -32,6 +32,9 @@
config.test_compiler = lit_config.substitute('@LLDB_TEST_COMPILER@')
config.dsymutil = lit_config.substitute('@LLDB_TEST_DSYMUTIL@')
config.has_libcxx = @LLDB_HAS_LIBCXX@
+config.libcxx_libs_dir = "@LIBCXX_LIBRARY_DIR@"
+config.libcxx_include_dir = "@LIBCXX_GENERATED_INCLUDE_DIR@"
+config.libcxx_include_target_dir = "@LIBCXX_GENERATED_INCLUDE_TARGET_DIR@"
# 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")
Index: lldb/test/API/lit.cfg.py
===================================================================
--- lldb/test/API/lit.cfg.py
+++ lldb/test/API/lit.cfg.py
@@ -173,9 +173,11 @@
# If we have a just-built libcxx, prefer it over the system one.
if is_configured('has_libcxx') and config.has_libcxx:
if platform.system() != 'Windows':
- 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]
+ if is_configured('libcxx_include_dir') and is_configured('libcxx_libs_dir'):
+ dotest_cmd += ['--libcxx-include-dir', config.libcxx_include_dir]
+ if is_configured('libcxx_include_target_dir'):
+ dotest_cmd += ['--libcxx-include-target-dir', config.libcxx_include_target_dir]
+ dotest_cmd += ['--libcxx-library-dir', config.libcxx_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
@@ -408,7 +408,10 @@
ifeq (1,$(USE_LIBCPP))
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++
+ ifneq "$(LIBCPP_INCLUDE_TARGET_DIR)" ""
+ CXXFLAGS += -cxx-isystem $(LIBCPP_INCLUDE_TARGET_DIR)
+ endif
+ LDFLAGS += -L$(LIBCPP_LIBRARY_DIR) -Wl,-rpath,$(LIBCPP_LIBRARY_DIR) -lc++
else
ifeq "$(OS)" "Android"
# Nothing to do, this is already handled in
@@ -430,7 +433,10 @@
ifeq ($(or $(USE_LIBSTDCPP), $(USE_LIBCPP), $(USE_SYSTEM_STDLIB)),)
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++
+ ifneq "$(LIBCPP_INCLUDE_TARGET_DIR)" ""
+ CXXFLAGS += -cxx-isystem $(LIBCPP_INCLUDE_TARGET_DIR)
+ endif
+ LDFLAGS += -L$(LIBCPP_LIBRARY_DIR) -Wl,-rpath,$(LIBCPP_LIBRARY_DIR) -lc++
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,12 @@
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('--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.'))
+ 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-include-target-dir', help=textwrap.dedent(
+ 'Specify the path to a custom libc++ include target directory to use in addition to --libcxx-include-dir. Optional.'))
+ 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,17 +280,15 @@
logging.warning('No valid FileCheck executable; some tests may fail...')
logging.warning('(Double-check the --llvm-tools-dir argument to dotest.py)')
- 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:
+ elif not (args.libcxx_include_dir and args.libcxx_library_dir):
logging.error('Custom libc++ requires both --libcxx-include-dir and --libcxx-library-dir')
sys.exit(-1)
+ configuration.libcxx_include_dir = args.libcxx_include_dir
+ configuration.libcxx_include_target_dir = args.libcxx_include_target_dir
+ configuration.libcxx_library_dir = args.libcxx_library_dir
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,6 +124,7 @@
lldb_libs_dir = None
libcxx_include_dir = None
+libcxx_include_target_dir = None
libcxx_library_dir = None
# A plugin whose tests will be enabled, like intel-pt.
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
@@ -122,8 +122,12 @@
def getLibCxxArgs(self):
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)]
+ libcpp_args = ["LIBCPP_INCLUDE_DIR={}".format(configuration.libcxx_include_dir),
+ "LIBCPP_LIBRARY_DIR={}".format(configuration.libcxx_library_dir)]
+ if configuration.libcxx_include_target_dir:
+ libcpp_args.append("LIBCPP_INCLUDE_TARGET_DIR={}".format(
+ configuration.libcxx_include_target_dir))
+ return libcpp_args
return []
def _getDebugInfoArgs(self, debug_info):
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits