ilya-biryukov created this revision.
ilya-biryukov added a reviewer: ioeric.

This allows to run clang tools in parallel on a subset of files in the
repository.


Repository:
  rC Clang

https://reviews.llvm.org/D51298

Files:
  include/clang/Tooling/AllTUsExecution.h
  lib/Tooling/AllTUsExecution.cpp


Index: lib/Tooling/AllTUsExecution.cpp
===================================================================
--- lib/Tooling/AllTUsExecution.cpp
+++ lib/Tooling/AllTUsExecution.cpp
@@ -55,15 +55,18 @@
 
 AllTUsToolExecutor::AllTUsToolExecutor(
     const CompilationDatabase &Compilations, unsigned ThreadCount,
+    std::vector<std::string> Files,
     std::shared_ptr<PCHContainerOperations> PCHContainerOps)
-    : Compilations(Compilations), Results(new ThreadSafeToolResults),
-      Context(Results.get()), ThreadCount(ThreadCount) {}
+    : Compilations(Compilations), Files(std::move(Files)),
+      Results(new ThreadSafeToolResults), Context(Results.get()),
+      ThreadCount(ThreadCount) {}
 
 AllTUsToolExecutor::AllTUsToolExecutor(
     CommonOptionsParser Options, unsigned ThreadCount,
     std::shared_ptr<PCHContainerOperations> PCHContainerOps)
     : OptionsParser(std::move(Options)),
       Compilations(OptionsParser->getCompilations()),
+      Files(OptionsParser->getSourcePathList()),
       Results(new ThreadSafeToolResults), Context(Results.get()),
       ThreadCount(ThreadCount) {}
 
@@ -90,7 +93,8 @@
     llvm::errs() << Msg.str() << "\n";
   };
 
-  auto Files = Compilations.getAllFiles();
+  std::vector<std::string> Files =
+      !this->Files.empty() ? this->Files : Compilations.getAllFiles();
   // Add a counter to track the progress.
   const std::string TotalNumStr = std::to_string(Files.size());
   unsigned Counter = 0;
Index: include/clang/Tooling/AllTUsExecution.h
===================================================================
--- include/clang/Tooling/AllTUsExecution.h
+++ include/clang/Tooling/AllTUsExecution.h
@@ -30,8 +30,11 @@
   /// Init with \p CompilationDatabase.
   /// This uses \p ThreadCount threads to exececute the actions on all files in
   /// parallel. If \p ThreadCount is 0, this uses `llvm::hardware_concurrency`.
+  /// Only processes files in \p Files. However, if \p Files is empty, will
+  /// process all the files in the compilation database.
   AllTUsToolExecutor(const CompilationDatabase &Compilations,
                      unsigned ThreadCount,
+                     std::vector<std::string> Files = {},
                      std::shared_ptr<PCHContainerOperations> PCHContainerOps =
                          std::make_shared<PCHContainerOperations>());
 
@@ -66,6 +69,9 @@
   // Used to store the parser when the executor is initialized with parser.
   llvm::Optional<CommonOptionsParser> OptionsParser;
   const CompilationDatabase &Compilations;
+  /// A list of files executor should run on. When empty, runs over all the
+  /// files in the compilation database.
+  std::vector<std::string> Files;
   std::unique_ptr<ToolResults> Results;
   ExecutionContext Context;
   llvm::StringMap<std::string> OverlayFiles;


Index: lib/Tooling/AllTUsExecution.cpp
===================================================================
--- lib/Tooling/AllTUsExecution.cpp
+++ lib/Tooling/AllTUsExecution.cpp
@@ -55,15 +55,18 @@
 
 AllTUsToolExecutor::AllTUsToolExecutor(
     const CompilationDatabase &Compilations, unsigned ThreadCount,
+    std::vector<std::string> Files,
     std::shared_ptr<PCHContainerOperations> PCHContainerOps)
-    : Compilations(Compilations), Results(new ThreadSafeToolResults),
-      Context(Results.get()), ThreadCount(ThreadCount) {}
+    : Compilations(Compilations), Files(std::move(Files)),
+      Results(new ThreadSafeToolResults), Context(Results.get()),
+      ThreadCount(ThreadCount) {}
 
 AllTUsToolExecutor::AllTUsToolExecutor(
     CommonOptionsParser Options, unsigned ThreadCount,
     std::shared_ptr<PCHContainerOperations> PCHContainerOps)
     : OptionsParser(std::move(Options)),
       Compilations(OptionsParser->getCompilations()),
+      Files(OptionsParser->getSourcePathList()),
       Results(new ThreadSafeToolResults), Context(Results.get()),
       ThreadCount(ThreadCount) {}
 
@@ -90,7 +93,8 @@
     llvm::errs() << Msg.str() << "\n";
   };
 
-  auto Files = Compilations.getAllFiles();
+  std::vector<std::string> Files =
+      !this->Files.empty() ? this->Files : Compilations.getAllFiles();
   // Add a counter to track the progress.
   const std::string TotalNumStr = std::to_string(Files.size());
   unsigned Counter = 0;
Index: include/clang/Tooling/AllTUsExecution.h
===================================================================
--- include/clang/Tooling/AllTUsExecution.h
+++ include/clang/Tooling/AllTUsExecution.h
@@ -30,8 +30,11 @@
   /// Init with \p CompilationDatabase.
   /// This uses \p ThreadCount threads to exececute the actions on all files in
   /// parallel. If \p ThreadCount is 0, this uses `llvm::hardware_concurrency`.
+  /// Only processes files in \p Files. However, if \p Files is empty, will
+  /// process all the files in the compilation database.
   AllTUsToolExecutor(const CompilationDatabase &Compilations,
                      unsigned ThreadCount,
+                     std::vector<std::string> Files = {},
                      std::shared_ptr<PCHContainerOperations> PCHContainerOps =
                          std::make_shared<PCHContainerOperations>());
 
@@ -66,6 +69,9 @@
   // Used to store the parser when the executor is initialized with parser.
   llvm::Optional<CommonOptionsParser> OptionsParser;
   const CompilationDatabase &Compilations;
+  /// A list of files executor should run on. When empty, runs over all the
+  /// files in the compilation database.
+  std::vector<std::string> Files;
   std::unique_ptr<ToolResults> Results;
   ExecutionContext Context;
   llvm::StringMap<std::string> OverlayFiles;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D51298: [Tooling] Al... Ilya Biryukov via Phabricator via cfe-commits

Reply via email to