test_build_dir = None
# The clang module cache directory used by lldb.
-module_cache_dir = None
+lldb_module_cache_dir = None
+# The clang module cache directory used by clang.
+clang_module_cache_dir = None
# The only directory to scan for tests. If multiple test directories are
# specified, and an exclusive test subdirectory is specified, the latter option
configuration.lldb_platform_working_dir = args.lldb_platform_working_dir
if args.test_build_dir:
configuration.test_build_dir = args.test_build_dir
- if args.module_cache_dir:
- configuration.module_cache_dir = args.module_cache_dir
+ if args.lldb_module_cache_dir:
+ configuration.lldb_module_cache_dir = args.lldb_module_cache_dir
else:
- configuration.module_cache_dir = os.path.join(configuration.test_build_dir,
- 'module-cache-lldb')
+ configuration.lldb_module_cache_dir = os.path.join(
+ configuration.test_build_dir, 'module-cache-lldb')
+ if args.clang_module_cache_dir:
+ configuration.clang_module_cache_dir = args.clang_module_cache_dir
+ else:
+ configuration.clang_module_cache_dir = os.path.join(
+ configuration.test_build_dir, 'module-cache-clang')
+
+ os.environ['CLANG_MODULE_CACHE_DIR'] = configuration.clang_module_cache_dir
# Gather all the dirs passed on the command line.
if len(args.args) > 0:
default='lldb-test-build.noindex',
help='The root build directory for the tests. It will be removed before running.')
group.add_argument(
- '--module-cache-dir',
- dest='module_cache_dir',
+ '--lldb-module-cache-dir',
+ dest='lldb_module_cache_dir',
metavar='The clang module cache directory used by LLDB',
- help='The clang module cache directory used by LLDB. This is not the one used by the makefiles. Defaults to <test build directory>/module-cache-lldb.')
+ help='The clang module cache directory used by LLDB. Defaults to <test build directory>/module-cache-lldb.')
+ group.add_argument(
+ '--clang-module-cache-dir',
+ dest='clang_module_cache_dir',
+ metavar='The clang module cache directory used by Clang',
+ help='The clang module cache directory used in the Make files by Clang while building tests. Defaults to <test build directory>/module-cache-clang.')
# Configuration options
group = parser.add_argument_group('Remote platform options')
"settings set plugin.process.gdb-remote.packet-timeout 60",
'settings set symbols.clang-modules-cache-path "{}"'.format(
- configuration.module_cache_dir),
+ configuration.lldb_module_cache_dir),
"settings set use-color false",
]
# Make sure that a sanitizer LLDB's environment doesn't get passed on.
CFLAGS += -gsplit-dwarf
endif
-# Use a shared module cache when building in the default test build directory.
-CLANG_MODULE_CACHE_DIR := $(shell echo "$(BUILDDIR)" | sed $(QUOTE)s/lldb-test-build.noindex.*/lldb-test-build.noindex\/module-cache-clang/$(QUOTE))
-
-ifeq "$(findstring lldb-test-build.noindex, $(BUILDDIR))" ""
-CLANG_MODULE_CACHE_DIR := $(BUILDDIR)/module-cache
-$(warning failed to set the shared clang module cache dir)
-endif
-
MODULE_BASE_FLAGS := -fmodules -gmodules -fmodules-cache-path=$(CLANG_MODULE_CACHE_DIR)
MANDATORY_MODULE_BUILD_CFLAGS := $(MODULE_BASE_FLAGS) -gmodules
# Build flags for building with C++ modules.
return "SDKROOT={}".format(os.environ["SDKROOT"])
return "";
+def getModuleCacheSpec():
+ """
+ Helper function to return the key-value string to specify the clang
+ module cache used for the make system.
+ """
+ if "CLANG_MODULE_CACHE_DIR" in os.environ:
+ return "CLANG_MODULE_CACHE_DIR={}".format(
+ os.environ["CLANG_MODULE_CACHE_DIR"])
+ return "";
+
def getCmdLine(d):
"""
Helper function to return a properly formatted command line argument(s)
getCCSpec(compiler),
getDsymutilSpec(),
getSDKRootSpec(),
+ getModuleCacheSpec(),
getCmdLine(dictionary)])
runBuildCommands(commands, sender=sender)
getCCSpec(compiler),
getDsymutilSpec(),
getSDKRootSpec(),
+ getModuleCacheSpec(),
getCmdLine(dictionary)])
runBuildCommands(commands, sender=sender)
getCCSpec(compiler),
getDsymutilSpec(),
getSDKRootSpec(),
+ getModuleCacheSpec(),
getCmdLine(dictionary)])
runBuildCommands(commands, sender=sender)
getCCSpec(compiler),
getDsymutilSpec(),
getSDKRootSpec(),
+ getModuleCacheSpec(),
getCmdLine(dictionary)])
lldbtest.system(commands, sender=sender)
import os
import platform
import shlex
+import shutil
import lit.formats
lit_config.warning("unable to inject shared library path on '{}'".format(
platform.system()))
+# Clean the module caches in the test build directory. This is necessary in an
+# incremental build whenever clang changes underneath, so doing it once per
+# lit.py invocation is close enough.
+for cachedir in [config.clang_module_cache, config.lldb_module_cache]:
+ if os.path.isdir(cachedir):
+ print("Deleting module cache at %s."%cachedir)
+ shutil.rmtree(cachedir)
+
# Build dotest command.
dotest_cmd = [config.dotest_path]
dotest_cmd.extend(config.dotest_args_str.split(';'))
dotest_cmd += ['--build-dir', config.lldb_build_directory]
if config.lldb_module_cache:
- dotest_cmd += ['--module-cache-dir', config.lldb_module_cache]
+ dotest_cmd += ['--lldb-module-cache-dir', config.lldb_module_cache]
+
+if config.clang_module_cache:
+ dotest_cmd += ['--clang-module-cache-dir', config.clang_module_cache]
# Load LLDB test format.
sys.path.append(os.path.join(config.lldb_src_root, "test", "API"))
config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
config.target_triple = "@TARGET_TRIPLE@"
config.lldb_build_directory = "@LLDB_TEST_BUILD_DIRECTORY@"
-config.lldb_module_cache = "@LLDB_TEST_MODULE_CACHE_LLDB@"
-config.clang_module_cache = "@LLDB_TEST_MODULE_CACHE_CLANG@"
config.python_executable = "@PYTHON_EXECUTABLE@"
config.dotest_path = "@LLDB_SOURCE_DIR@/test/API/dotest.py"
config.dotest_args_str = "@LLDB_DOTEST_ARGS@"
config.lldb_disable_python = @LLDB_DISABLE_PYTHON@
config.dotest_lit_args_str = None
+# 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")
# Additional dotest arguments can be passed to lit by providing a
# semicolon-separates list: --param dotest-args="arg;arg".
add_subdirectory(API)
+# Configure and create module cache directories.
+set(LLDB_TEST_MODULE_CACHE_LLDB "${LLDB_TEST_BUILD_DIRECTORY}/module-cache-lldb" CACHE PATH "The Clang module cache used by the Clang embedded in LLDB while running tests.")
+set(LLDB_TEST_MODULE_CACHE_CLANG "${LLDB_TEST_BUILD_DIRECTORY}/module-cache-clang" CACHE PATH "The Clang module cache used by the Clang while building tests.")
+file(MAKE_DIRECTORY ${LLDB_TEST_MODULE_CACHE_LLDB})
+file(MAKE_DIRECTORY ${LLDB_TEST_MODULE_CACHE_CLANG})
+
# LLVM_BUILD_MODE is used in lit.site.cfg
if (CMAKE_CFG_INTDIR STREQUAL ".")
set(LLVM_BUILD_MODE ".")
get_property(LLDB_DOTEST_ARGS GLOBAL PROPERTY LLDB_DOTEST_ARGS_PROPERTY)
set(dotest_args_replacement ${LLVM_BUILD_MODE})
-set(LLDB_TEST_MODULE_CACHE_LLDB "${LLDB_TEST_BUILD_DIRECTORY}/module-cache-lldb" CACHE PATH "The Clang module cache used by the Clang embedded in LLDB while running tests.")
-set(LLDB_TEST_MODULE_CACHE_CLANG "${LLDB_TEST_BUILD_DIRECTORY}/module-cache-clang" CACHE PATH "The Clang module cache used by the Clang while building tests.")
if(LLDB_BUILT_STANDALONE)
# In paths to our build-tree, replace CMAKE_CFG_INTDIR with our configuration name placeholder.
# incremental build whenever clang changes underneath, so doing it once per
# lit.py invocation is close enough.
for cachedir in [config.clang_module_cache, config.lldb_module_cache]:
- if os.path.isdir(cachedir):
- print("Deleting module cache at %s."%cachedir)
- shutil.rmtree(cachedir)
+ if os.path.isdir(cachedir):
+ print("Deleting module cache at %s."%cachedir)
+ shutil.rmtree(cachedir)
# Set a default per-test timeout of 10 minutes. Setting a timeout per test
# requires that killProcessAndChildren() is supported on the platform and
config.lldb_bitness = 64 if @LLDB_IS_64_BITS@ else 32
config.lldb_disable_python = @LLDB_DISABLE_PYTHON@
config.lldb_build_directory = "@LLDB_TEST_BUILD_DIRECTORY@"
-config.lldb_module_cache = "@LLDB_TEST_MODULE_CACHE_LLDB@"
-config.clang_module_cache = "@LLDB_TEST_MODULE_CACHE_CLANG@"
+# The shell tests use their own module caches.
+config.lldb_module_cache = os.path.join("@LLDB_TEST_MODULE_CACHE_LLDB@", "lldb-shell")
+config.clang_module_cache = os.path.join("@LLDB_TEST_MODULE_CACHE_CLANG@", "lldb-shell")
# Support substitution of the tools and libs dirs with user parameters. This is
# used when we can't determine the tool dir at configuration time.
config.lldb_libs_dir = config.lldb_libs_dir % lit_config.params
config.lldb_tools_dir = config.lldb_tools_dir % lit_config.params
config.lldb_lit_tools_dir = config.lldb_lit_tools_dir % lit_config.params
-
except KeyError as e:
key, = e.args
lit_config.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key))