jansvoboda11 created this revision.
jansvoboda11 added reviewers: benlangmuir, Bigcheese.
Herald added a subscriber: ributzka.
Herald added a project: All.
jansvoboda11 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

The dependency scanner assumes immutable file system. In that context, we don't 
need to repeatedly validate PCM input files. This patch avoids that by using 
the existing `-fmodules-validate-once-per-build-session` mechanism.

Depends on D150318 <https://reviews.llvm.org/D150318>.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D150319

Files:
  clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h
  clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp
  clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp


Index: clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
===================================================================
--- clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
+++ clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
@@ -182,6 +182,12 @@
     ScanInstance.getFrontendOpts().ModulesShareFileManager = false;
     ScanInstance.getHeaderSearchOpts().ModuleFormat = "raw";
 
+    ScanInstance.getHeaderSearchOpts().ModulesValidateOncePerBuildSession =
+        true;
+    // FIXME: Consider diagnosing when this overwrites existing timestamp.
+    ScanInstance.getHeaderSearchOpts().BuildSessionTimestamp =
+        Service.getBuildSessionTimestamp();
+
     ScanInstance.setFileManager(FileMgr);
     // Support for virtual file system overlays.
     FileMgr->setVirtualFileSystem(createVFSFromCompilerInvocation(
Index: clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp
===================================================================
--- clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp
+++ clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp
@@ -9,15 +9,21 @@
 #include "clang/Tooling/DependencyScanning/DependencyScanningService.h"
 #include "llvm/Support/TargetSelect.h"
 
+#include <chrono>
+
 using namespace clang;
 using namespace tooling;
 using namespace dependencies;
 
 DependencyScanningService::DependencyScanningService(
     ScanningMode Mode, ScanningOutputFormat Format, bool OptimizeArgs,
-    bool EagerLoadModules)
+    bool EagerLoadModules, uint64_t BuildSessionTimestamp)
     : Mode(Mode), Format(Format), OptimizeArgs(OptimizeArgs),
-      EagerLoadModules(EagerLoadModules) {
+      EagerLoadModules(EagerLoadModules),
+      BuildSessionTimestamp(
+          BuildSessionTimestamp != 0
+              ? BuildSessionTimestamp
+              : std::chrono::system_clock::now().time_since_epoch().count()) {
   // Initialize targets for object file support.
   llvm::InitializeAllTargets();
   llvm::InitializeAllTargetMCs();
Index: 
clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h
===================================================================
--- clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h
+++ clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h
@@ -50,7 +50,8 @@
 public:
   DependencyScanningService(ScanningMode Mode, ScanningOutputFormat Format,
                             bool OptimizeArgs = false,
-                            bool EagerLoadModules = false);
+                            bool EagerLoadModules = false,
+                            uint64_t BuildSessionTimestamp = 0);
 
   ScanningMode getMode() const { return Mode; }
 
@@ -60,6 +61,8 @@
 
   bool shouldEagerLoadModules() const { return EagerLoadModules; }
 
+  uint64_t getBuildSessionTimestamp() const { return BuildSessionTimestamp; }
+
   DependencyScanningFilesystemSharedCache &getSharedCache() {
     return SharedCache;
   }
@@ -73,6 +76,8 @@
   bool OptimizeArgs;
   /// Whether to set up command-lines to load PCM files eagerly.
   bool EagerLoadModules;
+  /// The build session timestamp.
+  uint64_t BuildSessionTimestamp;
   /// The global file system cache.
   DependencyScanningFilesystemSharedCache SharedCache;
 };


Index: clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
===================================================================
--- clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
+++ clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
@@ -182,6 +182,12 @@
     ScanInstance.getFrontendOpts().ModulesShareFileManager = false;
     ScanInstance.getHeaderSearchOpts().ModuleFormat = "raw";
 
+    ScanInstance.getHeaderSearchOpts().ModulesValidateOncePerBuildSession =
+        true;
+    // FIXME: Consider diagnosing when this overwrites existing timestamp.
+    ScanInstance.getHeaderSearchOpts().BuildSessionTimestamp =
+        Service.getBuildSessionTimestamp();
+
     ScanInstance.setFileManager(FileMgr);
     // Support for virtual file system overlays.
     FileMgr->setVirtualFileSystem(createVFSFromCompilerInvocation(
Index: clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp
===================================================================
--- clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp
+++ clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp
@@ -9,15 +9,21 @@
 #include "clang/Tooling/DependencyScanning/DependencyScanningService.h"
 #include "llvm/Support/TargetSelect.h"
 
+#include <chrono>
+
 using namespace clang;
 using namespace tooling;
 using namespace dependencies;
 
 DependencyScanningService::DependencyScanningService(
     ScanningMode Mode, ScanningOutputFormat Format, bool OptimizeArgs,
-    bool EagerLoadModules)
+    bool EagerLoadModules, uint64_t BuildSessionTimestamp)
     : Mode(Mode), Format(Format), OptimizeArgs(OptimizeArgs),
-      EagerLoadModules(EagerLoadModules) {
+      EagerLoadModules(EagerLoadModules),
+      BuildSessionTimestamp(
+          BuildSessionTimestamp != 0
+              ? BuildSessionTimestamp
+              : std::chrono::system_clock::now().time_since_epoch().count()) {
   // Initialize targets for object file support.
   llvm::InitializeAllTargets();
   llvm::InitializeAllTargetMCs();
Index: clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h
===================================================================
--- clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h
+++ clang/include/clang/Tooling/DependencyScanning/DependencyScanningService.h
@@ -50,7 +50,8 @@
 public:
   DependencyScanningService(ScanningMode Mode, ScanningOutputFormat Format,
                             bool OptimizeArgs = false,
-                            bool EagerLoadModules = false);
+                            bool EagerLoadModules = false,
+                            uint64_t BuildSessionTimestamp = 0);
 
   ScanningMode getMode() const { return Mode; }
 
@@ -60,6 +61,8 @@
 
   bool shouldEagerLoadModules() const { return EagerLoadModules; }
 
+  uint64_t getBuildSessionTimestamp() const { return BuildSessionTimestamp; }
+
   DependencyScanningFilesystemSharedCache &getSharedCache() {
     return SharedCache;
   }
@@ -73,6 +76,8 @@
   bool OptimizeArgs;
   /// Whether to set up command-lines to load PCM files eagerly.
   bool EagerLoadModules;
+  /// The build session timestamp.
+  uint64_t BuildSessionTimestamp;
   /// The global file system cache.
   DependencyScanningFilesystemSharedCache SharedCache;
 };
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D150319: [clang][deps... Jan Svoboda via Phabricator via cfe-commits

Reply via email to