clang 22.0.0git
clang::tooling::dependencies::DependencyScanningTool Class Reference

The high-level implementation of the dependency discovery tool that runs on an individual worker thread. More...

#include "clang/Tooling/DependencyScanning/DependencyScanningTool.h"

Public Member Functions

 DependencyScanningTool (DependencyScanningService &Service, llvm::IntrusiveRefCntPtr< llvm::vfs::FileSystem > FS=llvm::vfs::createPhysicalFileSystem())
 Construct a dependency scanning tool.
llvm::Expected< std::string > getDependencyFile (const std::vector< std::string > &CommandLine, StringRef CWD)
 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.
llvm::Expected< P1689RulegetP1689ModuleDependencyFile (const clang::tooling::CompileCommand &Command, StringRef CWD, std::string &MakeformatOutput, std::string &MakeformatOutputPath)
 Collect the module dependency in P1689 format for C++20 named modules.
llvm::Expected< P1689RulegetP1689ModuleDependencyFile (const clang::tooling::CompileCommand &Command, StringRef CWD)
llvm::Expected< TranslationUnitDepsgetTranslationUnitDependencies (const std::vector< std::string > &CommandLine, StringRef CWD, const llvm::DenseSet< ModuleID > &AlreadySeen, 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< TranslationUnitDepsgetModuleDependencies (StringRef ModuleName, const std::vector< std::string > &CommandLine, StringRef CWD, const llvm::DenseSet< ModuleID > &AlreadySeen, 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 initializeCompilerInstanceWithContext (StringRef CWD, const std::vector< std::string > &CommandLine)
 The following three methods provide a new interface to perform by name dependency scan.
llvm::Expected< TranslationUnitDepscomputeDependenciesByNameWithContext (StringRef ModuleName, const llvm::DenseSet< ModuleID > &AlreadySeen, LookupModuleOutputCallback LookupModuleOutput)
 Computes the dependeny for the module named ModuleName.
llvm::Error finalizeCompilerInstanceWithContext ()
 This method finializes the compiler instance.
llvm::vfs::FileSystem & getWorkerVFS () const

Detailed Description

The high-level implementation of the dependency discovery tool that runs on an individual worker thread.

Definition at line 87 of file DependencyScanningTool.h.

Constructor & Destructor Documentation

◆ DependencyScanningTool()

DependencyScanningTool::DependencyScanningTool ( DependencyScanningService & Service,
llvm::IntrusiveRefCntPtr< llvm::vfs::FileSystem > FS = llvm::vfs::createPhysicalFileSystem() )

Construct a dependency scanning tool.

Parameters
ServiceThe parent service. Must outlive the tool.
FSThe filesystem for the tool to use. Defaults to the physical FS.

Definition at line 17 of file DependencyScanningTool.cpp.

Member Function Documentation

◆ computeDependenciesByNameWithContext()

llvm::Expected< TranslationUnitDeps > DependencyScanningTool::computeDependenciesByNameWithContext ( StringRef ModuleName,
const llvm::DenseSet< ModuleID > & AlreadySeen,
LookupModuleOutputCallback LookupModuleOutput )

Computes the dependeny for the module named ModuleName.

Parameters
ModuleNameThe name of the module for which this method computes . dependencies.
AlreadySeenThis 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.
LookupModuleOutputThis function is called to fill in "-fmodule-file=", "-o" and other output arguments for dependencies.
Returns
An instance of TranslationUnitDeps if the scan is successful. Otherwise it returns an error.

Definition at line 187 of file DependencyScanningTool.cpp.

References clang::Result, and clang::tooling::dependencies::FullDependencyConsumer::takeTranslationUnitDeps().

◆ finalizeCompilerInstanceWithContext()

llvm::Error DependencyScanningTool::finalizeCompilerInstanceWithContext ( )

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.

Returns
Error if an error occured during finalization.

Definition at line 200 of file DependencyScanningTool.cpp.

◆ getDependencyFile()

llvm::Expected< std::string > DependencyScanningTool::getDependencyFile ( const std::vector< std::string > & CommandLine,
StringRef CWD )

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.

Returns
A StringError with the diagnostic output if clang errors occurred, dependency file contents otherwise.

Definition at line 74 of file DependencyScanningTool.cpp.

References clang::Result.

◆ getModuleDependencies()

llvm::Expected< TranslationUnitDeps > DependencyScanningTool::getModuleDependencies ( StringRef ModuleName,
const std::vector< std::string > & CommandLine,
StringRef CWD,
const llvm::DenseSet< ModuleID > & AlreadySeen,
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 159 of file DependencyScanningTool.cpp.

References clang::Error, clang::Result, and clang::tooling::dependencies::FullDependencyConsumer::takeTranslationUnitDeps().

◆ getP1689ModuleDependencyFile() [1/2]

llvm::Expected< P1689Rule > clang::tooling::dependencies::DependencyScanningTool::getP1689ModuleDependencyFile ( const clang::tooling::CompileCommand & Command,
StringRef CWD )
inline

Definition at line 122 of file DependencyScanningTool.h.

References getP1689ModuleDependencyFile().

◆ getP1689ModuleDependencyFile() [2/2]

llvm::Expected< P1689Rule > DependencyScanningTool::getP1689ModuleDependencyFile ( const clang::tooling::CompileCommand & Command,
StringRef CWD,
std::string & MakeformatOutput,
std::string & MakeformatOutputPath )

Collect the module dependency in P1689 format for C++20 named modules.

Parameters
MakeformatOutputThe output parameter for dependency information in make format if the command line requires to generate make-format dependency information by -MD -MF <dep_file>.
MakeformatOutputPathThe output parameter for the path to
MakeformatOutput.
Returns
A StringError with the diagnostic output if clang errors occurred, P1689 dependency format rules otherwise.

Definition at line 87 of file DependencyScanningTool.cpp.

References clang::Make, and clang::Result.

Referenced by getP1689ModuleDependencyFile().

◆ getTranslationUnitDependencies()

llvm::Expected< TranslationUnitDeps > DependencyScanningTool::getTranslationUnitDependencies ( const std::vector< std::string > & CommandLine,
StringRef CWD,
const llvm::DenseSet< ModuleID > & AlreadySeen,
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.

Parameters
AlreadySeenThis 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.
LookupModuleOutputThis function is called to fill in "-fmodule-file=", "-o" and other output arguments for dependencies.
TUBufferOptional memory buffer for translation unit input. If TUBuffer is nullopt, the input should be included in the Commandline already.
Returns
a StringError with the diagnostic output if clang errors occurred, TranslationUnitDeps otherwise.

Definition at line 143 of file DependencyScanningTool.cpp.

References clang::Result, and clang::tooling::dependencies::FullDependencyConsumer::takeTranslationUnitDeps().

◆ getWorkerVFS()

llvm::vfs::FileSystem & clang::tooling::dependencies::DependencyScanningTool::getWorkerVFS ( ) const
inline

Definition at line 203 of file DependencyScanningTool.h.

◆ initializeCompilerInstanceWithContext()

llvm::Error DependencyScanningTool::initializeCompilerInstanceWithContext ( StringRef CWD,
const std::vector< 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.

Parameters
CWDThe current working directory used during the scan.
CommandLineThe commandline used for the scan.
Returns
Error if the initializaiton fails.

Definition at line 181 of file DependencyScanningTool.cpp.


The documentation for this class was generated from the following files: