File indexing completed on 2026-05-10 08:37:11
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLVM_CLANG_TOOLING_DEPENDENCYSCANNING_DEPENDENCYSCANNINGWORKER_H
0010 #define LLVM_CLANG_TOOLING_DEPENDENCYSCANNING_DEPENDENCYSCANNINGWORKER_H
0011
0012 #include "clang/Basic/DiagnosticOptions.h"
0013 #include "clang/Basic/FileManager.h"
0014 #include "clang/Basic/LLVM.h"
0015 #include "clang/Frontend/PCHContainerOperations.h"
0016 #include "clang/Tooling/DependencyScanning/DependencyScanningService.h"
0017 #include "clang/Tooling/DependencyScanning/ModuleDepCollector.h"
0018 #include "llvm/Support/Error.h"
0019 #include "llvm/Support/FileSystem.h"
0020 #include <optional>
0021 #include <string>
0022
0023 namespace clang {
0024
0025 class DependencyOutputOptions;
0026
0027 namespace tooling {
0028 namespace dependencies {
0029
0030 class DependencyScanningWorkerFilesystem;
0031
0032
0033
0034
0035 struct Command {
0036 std::string Executable;
0037 std::vector<std::string> Arguments;
0038 };
0039
0040 class DependencyConsumer {
0041 public:
0042 virtual ~DependencyConsumer() {}
0043
0044 virtual void handleProvidedAndRequiredStdCXXModules(
0045 std::optional<P1689ModuleInfo> Provided,
0046 std::vector<P1689ModuleInfo> Requires) {}
0047
0048 virtual void handleBuildCommand(Command Cmd) {}
0049
0050 virtual void
0051 handleDependencyOutputOpts(const DependencyOutputOptions &Opts) = 0;
0052
0053 virtual void handleFileDependency(StringRef Filename) = 0;
0054
0055 virtual void handlePrebuiltModuleDependency(PrebuiltModuleDep PMD) = 0;
0056
0057 virtual void handleModuleDependency(ModuleDeps MD) = 0;
0058
0059 virtual void handleDirectModuleDependency(ModuleID MD) = 0;
0060
0061 virtual void handleContextHash(std::string Hash) = 0;
0062 };
0063
0064
0065
0066 class DependencyActionController {
0067 public:
0068 virtual ~DependencyActionController();
0069
0070 virtual std::string lookupModuleOutput(const ModuleID &ID,
0071 ModuleOutputKind Kind) = 0;
0072 };
0073
0074
0075
0076
0077
0078
0079
0080 class DependencyScanningWorker {
0081 public:
0082 DependencyScanningWorker(DependencyScanningService &Service,
0083 llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS);
0084
0085
0086
0087
0088
0089
0090
0091
0092 bool computeDependencies(StringRef WorkingDirectory,
0093 const std::vector<std::string> &CommandLine,
0094 DependencyConsumer &DepConsumer,
0095 DependencyActionController &Controller,
0096 DiagnosticConsumer &DiagConsumer,
0097 std::optional<StringRef> ModuleName = std::nullopt);
0098
0099
0100 llvm::Error computeDependencies(
0101 StringRef WorkingDirectory, const std::vector<std::string> &CommandLine,
0102 DependencyConsumer &Consumer, DependencyActionController &Controller,
0103 std::optional<StringRef> ModuleName = std::nullopt);
0104
0105 bool shouldEagerLoadModules() const { return EagerLoadModules; }
0106
0107 llvm::vfs::FileSystem &getVFS() const { return *BaseFS; }
0108
0109 private:
0110 std::shared_ptr<PCHContainerOperations> PCHContainerOps;
0111
0112
0113
0114 llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS;
0115
0116
0117
0118 llvm::IntrusiveRefCntPtr<DependencyScanningWorkerFilesystem> DepFS;
0119 ScanningOutputFormat Format;
0120
0121 ScanningOptimizations OptimizeArgs;
0122
0123 bool EagerLoadModules;
0124 };
0125
0126 }
0127 }
0128 }
0129
0130 #endif