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