|
clang 22.0.0git
|
The high-level implementation of the dependency discovery tool that runs on an individual worker thread. More...
#include "clang/Tooling/DependencyScanningTool.h"
Public Member Functions | |
| DependencyScanningTool (dependencies::DependencyScanningService &Service, llvm::IntrusiveRefCntPtr< llvm::vfs::FileSystem > FS=llvm::vfs::createPhysicalFileSystem()) | |
| Construct a dependency scanning tool. | |
| std::optional< std::string > | getDependencyFile (ArrayRef< std::string > CommandLine, StringRef CWD, DiagnosticConsumer &DiagConsumer) |
| Print out the dependency information into a string using the dependency file format that is specified in the options (-MD is the default) and return it. | |
| std::optional< P1689Rule > | getP1689ModuleDependencyFile (const CompileCommand &Command, StringRef CWD, std::string &MakeformatOutput, std::string &MakeformatOutputPath, DiagnosticConsumer &DiagConsumer) |
| Collect the module dependency in P1689 format for C++20 named modules. | |
| std::optional< P1689Rule > | getP1689ModuleDependencyFile (const CompileCommand &Command, StringRef CWD, DiagnosticConsumer &DiagConsumer) |
| std::optional< dependencies::TranslationUnitDeps > | getTranslationUnitDependencies (ArrayRef< std::string > CommandLine, StringRef CWD, DiagnosticConsumer &DiagConsumer, const llvm::DenseSet< dependencies::ModuleID > &AlreadySeen, dependencies::LookupModuleOutputCallback LookupModuleOutput, std::optional< llvm::MemoryBufferRef > TUBuffer=std::nullopt) |
| Given a Clang driver command-line for a translation unit, gather the modular dependencies and return the information needed for explicit build. | |
| llvm::Expected< dependencies::TranslationUnitDeps > | getModuleDependencies (StringRef ModuleName, ArrayRef< std::string > CommandLine, StringRef CWD, const llvm::DenseSet< dependencies::ModuleID > &AlreadySeen, dependencies::LookupModuleOutputCallback LookupModuleOutput) |
| Given a compilation context specified via the Clang driver command-line, gather modular dependencies of module with the given name, and return the information needed for explicit build. | |
| llvm::Error | initializeCompilerInstanceWithContextOrError (StringRef CWD, ArrayRef< std::string > CommandLine) |
| The following three methods provide a new interface to perform by name dependency scan. | |
| llvm::Expected< dependencies::TranslationUnitDeps > | computeDependenciesByNameWithContextOrError (StringRef ModuleName, const llvm::DenseSet< dependencies::ModuleID > &AlreadySeen, dependencies::LookupModuleOutputCallback LookupModuleOutput) |
| Computes the dependeny for the module named ModuleName. | |
| llvm::Error | finalizeCompilerInstanceWithContextOrError () |
| This method finializes the compiler instance. | |
| llvm::vfs::FileSystem & | getWorkerVFS () const |
Static Public Member Functions | |
| static bool | initializeWorkerCIWithContextFromCommandline (clang::dependencies::DependencyScanningWorker &Worker, StringRef CWD, ArrayRef< std::string > CommandLine, DiagnosticConsumer &DC) |
| Initialize the worker's compiler instance from the commandline. | |
The high-level implementation of the dependency discovery tool that runs on an individual worker thread.
Definition at line 34 of file DependencyScanningTool.h.
| DependencyScanningTool::DependencyScanningTool | ( | dependencies::DependencyScanningService & | Service, |
| llvm::IntrusiveRefCntPtr< llvm::vfs::FileSystem > | FS = llvm::vfs::createPhysicalFileSystem() ) |
Construct a dependency scanning tool.
| Service | The parent service. Must outlive the tool. |
| FS | The filesystem for the tool to use. Defaults to the physical FS. |
Definition at line 20 of file DependencyScanningTool.cpp.
| llvm::Expected< TranslationUnitDeps > DependencyScanningTool::computeDependenciesByNameWithContextOrError | ( | StringRef | ModuleName, |
| const llvm::DenseSet< dependencies::ModuleID > & | AlreadySeen, | ||
| dependencies::LookupModuleOutputCallback | LookupModuleOutput ) |
Computes the dependeny for the module named ModuleName.
| ModuleName | The name of the module for which this method computes . dependencies. |
| AlreadySeen | This stores modules which have previously been reported. Use the same instance for all calls to this function for a single DependencyScanningTool in a single build. Note that this parameter is not part of the context because it can be shared across different worker threads and each worker thread may update it. |
| LookupModuleOutput | This function is called to fill in "-fmodule-file=", "-o" and other output arguments for dependencies. |
TranslationUnitDeps if the scan is successful. Otherwise it returns an error. Definition at line 261 of file DependencyScanningTool.cpp.
References makeErrorFromDiagnosticsOS(), and clang::dependencies::FullDependencyConsumer::takeTranslationUnitDeps().
Referenced by getModuleDependencies().
| llvm::Error DependencyScanningTool::finalizeCompilerInstanceWithContextOrError | ( | ) |
This method finializes the compiler instance.
It finalizes the diagnostics and deletes the compiler instance. Call this method once all names for a same commandline are scanned.
Definition at line 273 of file DependencyScanningTool.cpp.
References makeErrorFromDiagnosticsOS().
Referenced by getModuleDependencies().
| std::optional< std::string > DependencyScanningTool::getDependencyFile | ( | ArrayRef< std::string > | CommandLine, |
| StringRef | CWD, | ||
| DiagnosticConsumer & | DiagConsumer ) |
Print out the dependency information into a string using the dependency file format that is specified in the options (-MD is the default) and return it.
Definition at line 78 of file DependencyScanningTool.cpp.
| llvm::Expected< TranslationUnitDeps > DependencyScanningTool::getModuleDependencies | ( | StringRef | ModuleName, |
| ArrayRef< std::string > | CommandLine, | ||
| StringRef | CWD, | ||
| const llvm::DenseSet< dependencies::ModuleID > & | AlreadySeen, | ||
| dependencies::LookupModuleOutputCallback | LookupModuleOutput ) |
Given a compilation context specified via the Clang driver command-line, gather modular dependencies of module with the given name, and return the information needed for explicit build.
TODO: this method should be removed as soon as Swift and our C-APIs adopt CompilerInstanceWithContext. We are keeping it here so that it is easier to coordinate with Swift and C-API changes.
Definition at line 162 of file DependencyScanningTool.cpp.
References computeDependenciesByNameWithContextOrError(), clang::Error, finalizeCompilerInstanceWithContextOrError(), initializeCompilerInstanceWithContextOrError(), and clang::Result.
|
inline |
Definition at line 71 of file DependencyScanningTool.h.
References getP1689ModuleDependencyFile().
| std::optional< P1689Rule > DependencyScanningTool::getP1689ModuleDependencyFile | ( | const CompileCommand & | Command, |
| StringRef | CWD, | ||
| std::string & | MakeformatOutput, | ||
| std::string & | MakeformatOutputPath, | ||
| DiagnosticConsumer & | DiagConsumer ) |
Collect the module dependency in P1689 format for C++20 named modules.
| MakeformatOutput | The output parameter for dependency information in make format if the command line requires to generate make-format dependency information by -MD -MF <dep_file>. |
| MakeformatOutputPath | The output parameter for the path to |
| MakeformatOutput. |
Definition at line 91 of file DependencyScanningTool.cpp.
References clang::Make.
Referenced by getP1689ModuleDependencyFile().
| std::optional< TranslationUnitDeps > DependencyScanningTool::getTranslationUnitDependencies | ( | ArrayRef< std::string > | CommandLine, |
| StringRef | CWD, | ||
| DiagnosticConsumer & | DiagConsumer, | ||
| const llvm::DenseSet< dependencies::ModuleID > & | AlreadySeen, | ||
| dependencies::LookupModuleOutputCallback | LookupModuleOutput, | ||
| std::optional< llvm::MemoryBufferRef > | TUBuffer = std::nullopt ) |
Given a Clang driver command-line for a translation unit, gather the modular dependencies and return the information needed for explicit build.
| AlreadySeen | This stores modules which have previously been reported. Use the same instance for all calls to this function for a single DependencyScanningTool in a single build. Use a different one for different tools, and clear it between builds. |
| LookupModuleOutput | This function is called to fill in "-fmodule-file=", "-o" and other output arguments for dependencies. |
| TUBuffer | Optional memory buffer for translation unit input. If TUBuffer is nullopt, the input should be included in the Commandline already. |
Definition at line 146 of file DependencyScanningTool.cpp.
References clang::dependencies::FullDependencyConsumer::takeTranslationUnitDeps().
|
inline |
Definition at line 156 of file DependencyScanningTool.h.
| llvm::Error DependencyScanningTool::initializeCompilerInstanceWithContextOrError | ( | StringRef | CWD, |
| ArrayRef< std::string > | CommandLine ) |
The following three methods provide a new interface to perform by name dependency scan.
The new interface's intention is to improve dependency scanning performance when a sequence of name is looked up with the same current working directory and the command line.
Initializing the context and the compiler instance. This method must be called before calling computeDependenciesByNameWithContext.
| CWD | The current working directory used during the scan. |
| CommandLine | The commandline used for the scan. |
Definition at line 247 of file DependencyScanningTool.cpp.
References initializeWorkerCIWithContextFromCommandline(), makeErrorFromDiagnosticsOS(), and clang::Result.
Referenced by getModuleDependencies().
|
static |
Initialize the worker's compiler instance from the commandline.
The compiler instance only takes a -cc1 job, so this method builds the -cc1 job from the CommandLine input.
| Worker | The dependency scanning worker whose compiler instance with context is initialized. |
| CWD | The current working directory. |
| CommandLine | This command line may be a driver command or a cc1 command. |
| DC | A diagnostics consumer to report error if the initialization fails. |
Definition at line 219 of file DependencyScanningTool.cpp.
References getFirstCC1CommandLine(), and clang::dependencies::initVFSForByNameScanning().
Referenced by initializeCompilerInstanceWithContextOrError().