This revision was automatically updated to reflect the committed changes.
Closed by commit rL370394: [test] Fix various module cache bugs and 
inconsistencies (authored by JDevlieghere, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D66966?vs=217948&id=217951#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66966/new/

https://reviews.llvm.org/D66966

Files:
  lldb/trunk/CMakeLists.txt
  lldb/trunk/lit/CMakeLists.txt
  lldb/trunk/lit/Settings/TestModuleCacheSanity.test
  lldb/trunk/lit/Suite/lit.cfg
  lldb/trunk/lit/Suite/lit.site.cfg.in
  lldb/trunk/lit/helper/toolchain.py
  lldb/trunk/lit/lit-lldb-init.in
  lldb/trunk/lit/lit.cfg.py
  lldb/trunk/lit/lit.site.cfg.py.in
  lldb/trunk/packages/Python/lldbsuite/test/configuration.py
  lldb/trunk/packages/Python/lldbsuite/test/dotest.py
  lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py
  lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py
  lldb/trunk/packages/Python/lldbsuite/test/sanity/TestModuleCacheSanity.py
  lldb/trunk/test/CMakeLists.txt
  lldb/trunk/utils/lldb-dotest/lldb-dotest.in

Index: lldb/trunk/test/CMakeLists.txt
===================================================================
--- lldb/trunk/test/CMakeLists.txt
+++ lldb/trunk/test/CMakeLists.txt
@@ -39,8 +39,6 @@
   --arch=${LLDB_TEST_ARCH}
   -s
   ${CMAKE_BINARY_DIR}/lldb-test-traces
-  --build-dir
-  ${CMAKE_BINARY_DIR}/lldb-test-build.noindex
   -S nm
   -u CXXFLAGS
   -u CFLAGS
Index: lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py
+++ lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py
@@ -147,6 +147,11 @@
         metavar='Test build directory',
         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',
+        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.')
 
     # Configuration options
     group = parser.add_argument_group('Remote platform options')
Index: lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py
+++ lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py
@@ -1852,9 +1852,9 @@
         Base.setUp(self)
 
         # Set the clang modules cache path used by LLDB.
-        mod_cache = os.path.join(os.environ["LLDB_BUILD"], "module-cache-lldb")
-        self.runCmd('settings set symbols.clang-modules-cache-path "%s"'
-                    % mod_cache)
+        self.runCmd(
+            'settings set symbols.clang-modules-cache-path "{}"'.format(
+                configuration.module_cache_dir))
 
         for s in self.setUpCommands():
             self.runCmd(s)
@@ -2058,13 +2058,13 @@
         if check:
             output = ""
             if self.res.GetOutput():
-              output += "\nCommand output:\n" + self.res.GetOutput()
+                output += "\nCommand output:\n" + self.res.GetOutput()
             if self.res.GetError():
-              output += "\nError output:\n" + self.res.GetError()
+                output += "\nError output:\n" + self.res.GetError()
             if msg:
-              msg += output
+                msg += output
             if cmd:
-              cmd += output
+                cmd += output
             self.assertTrue(self.res.Succeeded(),
                             msg if (msg) else CMD_MSG(cmd))
 
Index: lldb/trunk/packages/Python/lldbsuite/test/sanity/TestModuleCacheSanity.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/sanity/TestModuleCacheSanity.py
+++ lldb/trunk/packages/Python/lldbsuite/test/sanity/TestModuleCacheSanity.py
@@ -0,0 +1,22 @@
+"""
+This is a sanity check that verifies that the module cache path is set
+correctly and points inside the default test build directory.
+"""
+
+from __future__ import print_function
+
+import lldb
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+
+
+class ModuleCacheSanityTestCase(TestBase):
+
+  mydir = TestBase.compute_mydir(__file__)
+
+  NO_DEBUG_INFO_TESTCASE = True
+
+  def test(self):
+    self.expect(
+        'settings show symbols.clang-modules-cache-path',
+        substrs=['lldb-test-build.noindex', 'module-cache-lldb'])
Index: lldb/trunk/packages/Python/lldbsuite/test/configuration.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/configuration.py
+++ lldb/trunk/packages/Python/lldbsuite/test/configuration.py
@@ -106,6 +106,9 @@
 # The base directory in which the tests are being built.
 test_build_dir = None
 
+# The clang module cache directory used by lldb.
+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
 # takes precedence.
Index: lldb/trunk/packages/Python/lldbsuite/test/dotest.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/dotest.py
+++ lldb/trunk/packages/Python/lldbsuite/test/dotest.py
@@ -55,7 +55,7 @@
 def is_exe(fpath):
     """Returns true if fpath is an executable."""
     if fpath == None:
-      return False
+        return False
     return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
 
 
@@ -274,10 +274,10 @@
                     break
 
     if args.dsymutil:
-      os.environ['DSYMUTIL'] = args.dsymutil
+        os.environ['DSYMUTIL'] = args.dsymutil
     elif platform_system == 'Darwin':
-      os.environ['DSYMUTIL'] = seven.get_command_output(
-          'xcrun -find -toolchain default dsymutil')
+        os.environ['DSYMUTIL'] = seven.get_command_output(
+            'xcrun -find -toolchain default dsymutil')
 
     if args.filecheck:
         # The lldb-dotest script produced by the CMake build passes in a path
@@ -426,6 +426,11 @@
         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
+    else:
+        configuration.module_cache_dir = os.path.join(configuration.test_build_dir,
+                                                      'module-cache-lldb')
 
     # Gather all the dirs passed on the command line.
     if len(args.args) > 0:
@@ -869,16 +874,16 @@
 
     platform = lldbplatformutil.getPlatform()
     if platform == "netbsd":
-      if os.geteuid() == 0:
-        return True, "root can always write dbregs"
-      try:
-        output = subprocess.check_output(["/sbin/sysctl", "-n",
-          "security.models.extensions.user_set_dbregs"]).decode().strip()
-        if output == "1":
-          return True, "security.models.extensions.user_set_dbregs enabled"
-      except subprocess.CalledProcessError:
-        pass
-      return False, "security.models.extensions.user_set_dbregs disabled"
+        if os.geteuid() == 0:
+            return True, "root can always write dbregs"
+        try:
+            output = subprocess.check_output(["/sbin/sysctl", "-n",
+              "security.models.extensions.user_set_dbregs"]).decode().strip()
+            if output == "1":
+                return True, "security.models.extensions.user_set_dbregs enabled"
+        except subprocess.CalledProcessError:
+            pass
+        return False, "security.models.extensions.user_set_dbregs disabled"
     return True, "watchpoint support available"
 
 def checkWatchpointSupport():
Index: lldb/trunk/CMakeLists.txt
===================================================================
--- lldb/trunk/CMakeLists.txt
+++ lldb/trunk/CMakeLists.txt
@@ -71,6 +71,7 @@
 
 option(LLDB_INCLUDE_TESTS "Generate build targets for the LLDB unit tests." ${LLVM_INCLUDE_TESTS})
 if(LLDB_INCLUDE_TESTS)
+  set(LLDB_TEST_BUILD_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lldb-test-build.noindex" CACHE PATH "The build root for building tests.")
 
   # Set the path to the default lldb test executable.
   set(LLDB_DEFAULT_TEST_EXECUTABLE "${LLVM_RUNTIME_OUTPUT_INTDIR}/lldb${CMAKE_EXECUTABLE_SUFFIX}")
Index: lldb/trunk/utils/lldb-dotest/lldb-dotest.in
===================================================================
--- lldb/trunk/utils/lldb-dotest/lldb-dotest.in
+++ lldb/trunk/utils/lldb-dotest/lldb-dotest.in
@@ -3,6 +3,7 @@
 import sys
 
 dotest_path = '@LLDB_SOURCE_DIR@/test/dotest.py'
+build_dir = '@LLDB_TEST_BUILD_DIRECTORY@'
 dotest_args_str = '@LLDB_DOTEST_ARGS@'
 
 if __name__ == '__main__':
@@ -11,6 +12,7 @@
     # Build dotest.py command.
     cmd = [sys.executable, dotest_path]
     cmd.extend(dotest_args)
+    cmd.extend(['--build-dir', build_dir])
     cmd.extend(wrapper_args)
     # Invoke dotest.py and return exit code.
     print(' '.join(cmd))
Index: lldb/trunk/lit/lit-lldb-init.in
===================================================================
--- lldb/trunk/lit/lit-lldb-init.in
+++ lldb/trunk/lit/lit-lldb-init.in
@@ -2,3 +2,4 @@
 settings set symbols.enable-external-lookup false
 settings set plugin.process.gdb-remote.packet-timeout 60
 settings set interpreter.echo-comment-commands false
+settings set symbols.clang-modules-cache-path "@LLDB_TEST_MODULE_CACHE_LLDB@"
Index: lldb/trunk/lit/Settings/TestModuleCacheSanity.test
===================================================================
--- lldb/trunk/lit/Settings/TestModuleCacheSanity.test
+++ lldb/trunk/lit/Settings/TestModuleCacheSanity.test
@@ -0,0 +1,4 @@
+# This is a sanity check that verifies that the module cache path is set
+# correctly and points inside the default test build directory.
+RUN: %lldb -o 'settings show symbols.clang-modules-cache-path' | FileCheck  %s
+CHECK: lldb-test-build.noindex{{.*}}module-cache-lldb
Index: lldb/trunk/lit/Suite/lit.cfg
===================================================================
--- lldb/trunk/lit/Suite/lit.cfg
+++ lldb/trunk/lit/Suite/lit.cfg
@@ -69,6 +69,12 @@
 if config.llvm_libs_dir:
   dotest_cmd += ['--env', 'LLVM_LIBS_DIR=' + config.llvm_libs_dir]
 
+if config.lldb_build_directory:
+  dotest_cmd += ['--build-dir', config.lldb_build_directory]
+
+if config.lldb_module_cache:
+  dotest_cmd += ['--module-cache-dir', config.lldb_module_cache]
+
 # Load LLDB test format.
 sys.path.append(os.path.join(config.lldb_src_root, "lit", "Suite"))
 import lldbtest
Index: lldb/trunk/lit/Suite/lit.site.cfg.in
===================================================================
--- lldb/trunk/lit/Suite/lit.site.cfg.in
+++ lldb/trunk/lit/Suite/lit.site.cfg.in
@@ -15,6 +15,9 @@
 config.host_triple = "@LLVM_HOST_TRIPLE@"
 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/dotest.py"
 config.dotest_args_str = "@LLDB_DOTEST_ARGS@"
Index: lldb/trunk/lit/lit.site.cfg.py.in
===================================================================
--- lldb/trunk/lit/lit.site.cfg.py.in
+++ lldb/trunk/lit/lit.site.cfg.py.in
@@ -18,6 +18,9 @@
 config.host_triple = "@LLVM_HOST_TRIPLE@"
 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@"
 
 # 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.
Index: lldb/trunk/lit/helper/toolchain.py
===================================================================
--- lldb/trunk/lit/helper/toolchain.py
+++ lldb/trunk/lit/helper/toolchain.py
@@ -104,6 +104,9 @@
         flags += ['-L' + config.llvm_libs_dir,
                   '-Wl,-rpath,' + config.llvm_libs_dir]
 
+    # The clang module cache is used for building inferiors.
+    flags += ['-fmodules-cache-path={}'.format(config.clang_module_cache)]
+
     additional_tool_dirs=[]
     if config.lldb_lit_tools_dir:
         additional_tool_dirs.append(config.lldb_lit_tools_dir)
Index: lldb/trunk/lit/CMakeLists.txt
===================================================================
--- lldb/trunk/lit/CMakeLists.txt
+++ lldb/trunk/lit/CMakeLists.txt
@@ -15,6 +15,9 @@
 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.
   string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} config_runtime_output_dir ${LLVM_RUNTIME_OUTPUT_INTDIR})
Index: lldb/trunk/lit/lit.cfg.py
===================================================================
--- lldb/trunk/lit/lit.cfg.py
+++ lldb/trunk/lit/lit.cfg.py
@@ -64,13 +64,10 @@
      ('--targets-built', calculate_arch_features)
      ])
 
-# 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 i in ['module-cache-clang', 'module-cache-lldb']:
-    cachedir = os.path.join(config.lldb_libs_dir, '..',
-                            'lldb-test-build.noindex', i)
+# 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)
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to