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 using ToolExecutor::execute;
51 execute(llvm::ArrayRef<
52 std::pair<std::unique_ptr<FrontendActionFactory>, ArgumentsAdjuster>>
55 ExecutionContext *getExecutionContext() override { return &Context; };
57 ToolResults *getToolResults() override { return Results.get(); }
59 void mapVirtualFile(StringRef FilePath, StringRef Content) override {
60 OverlayFiles[FilePath] = Content;
64 // Used to store the parser when the executor is initialized with parser.
65 llvm::Optional<CommonOptionsParser> OptionsParser;
66 const CompilationDatabase &Compilations;
67 std::unique_ptr<ToolResults> Results;
68 ExecutionContext Context;
69 llvm::StringMap<std::string> OverlayFiles;
73 } // end namespace tooling
74 } // end namespace clang
76 #endif // LLVM_CLANG_TOOLING_ALLTUSEXECUTION_H