1 //===--- AllTUsExecution.h - Execute actions on all TUs. -*- C++ --------*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines a tool executor that runs given actions on all TUs in the
11 // compilation database. Tool results are deuplicated by the result key.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_CLANG_TOOLING_ALLTUSEXECUTION_H
16 #define LLVM_CLANG_TOOLING_ALLTUSEXECUTION_H
18 #include "clang/Tooling/ArgumentsAdjusters.h"
19 #include "clang/Tooling/Execution.h"
24 /// Executes given frontend actions on all files/TUs in the compilation
26 class AllTUsToolExecutor : public ToolExecutor {
28 static const char *ExecutorName;
30 /// Init with \p CompilationDatabase.
31 /// This uses \p ThreadCount threads to exececute the actions on all files in
32 /// parallel. If \p ThreadCount is 0, this uses `llvm::hardware_concurrency`.
33 AllTUsToolExecutor(const CompilationDatabase &Compilations,
35 std::shared_ptr<PCHContainerOperations> PCHContainerOps =
36 std::make_shared<PCHContainerOperations>());
38 /// Init with \p CommonOptionsParser. This is expected to be used by
39 /// `createExecutorFromCommandLineArgs` based on commandline options.
41 /// The executor takes ownership of \p Options.
42 AllTUsToolExecutor(CommonOptionsParser Options, unsigned ThreadCount,
43 std::shared_ptr<PCHContainerOperations> PCHContainerOps =
44 std::make_shared<PCHContainerOperations>());
46 StringRef getExecutorName() const override { return ExecutorName; }
48 bool isSingleProcess() const override { return true; }
50 using ToolExecutor::execute;
53 execute(llvm::ArrayRef<
54 std::pair<std::unique_ptr<FrontendActionFactory>, ArgumentsAdjuster>>
57 ExecutionContext *getExecutionContext() override { return &Context; };
59 ToolResults *getToolResults() override { return Results.get(); }
61 void mapVirtualFile(StringRef FilePath, StringRef Content) override {
62 OverlayFiles[FilePath] = Content;
66 // Used to store the parser when the executor is initialized with parser.
67 llvm::Optional<CommonOptionsParser> OptionsParser;
68 const CompilationDatabase &Compilations;
69 std::unique_ptr<ToolResults> Results;
70 ExecutionContext Context;
71 llvm::StringMap<std::string> OverlayFiles;
75 extern llvm::cl::opt<std::string> Filter;
77 } // end namespace tooling
78 } // end namespace clang
80 #endif // LLVM_CLANG_TOOLING_ALLTUSEXECUTION_H