9#ifndef LLVM_CLANG_TOOLING_DEPENDENCYSCANNING_MODULEDEPCOLLECTOR_H
10#define LLVM_CLANG_TOOLING_DEPENDENCYSCANNING_MODULEDEPCOLLECTOR_H
19#include "llvm/ADT/DenseMap.h"
20#include "llvm/ADT/StringSet.h"
21#include "llvm/Support/raw_ostream.h"
24#include <unordered_map>
28namespace dependencies {
30class DependencyActionController;
31class DependencyConsumer;
63 std::tie(Other.ModuleName, Other.ContextHash);
68 std::tie(Other.ModuleName, Other.ContextHash);
161 StringRef FileName,
bool IsAngled,
164 StringRef RelativePath,
const Module *Imported,
167 const Module *Imported)
override;
175 llvm::SetVector<const Module *> DirectModularDeps;
177 void handleImport(
const Module *Imported);
191 std::optional<ModuleID> handleTopLevelModule(
const Module *M);
213 bool EagerLoadModules,
bool IsStdModuleP1689Format);
232 std::string MainFile;
234 std::string ContextHash;
237 std::vector<std::string> FileDeps;
239 llvm::MapVector<const Module *, std::unique_ptr<ModuleDeps>> ModularDeps;
242 llvm::DenseMap<ModuleID, ModuleDeps *> ModuleDepsByID;
244 llvm::MapVector<const Module *, PrebuiltModuleDep> DirectPrebuiltModularDeps;
246 std::unique_ptr<DependencyOutputOptions> Opts;
252 bool EagerLoadModules;
255 bool IsStdModuleP1689Format;
257 std::optional<P1689ModuleInfo> ProvidedStdCXXModule;
258 std::vector<P1689ModuleInfo> RequiredStdCXXModules;
261 bool isPrebuiltModule(
const Module *M);
264 void addFileDep(StringRef Path);
266 void addFileDep(
ModuleDeps &MD, StringRef Path);
299template <>
struct DenseMapInfo<
clang::tooling::dependencies::ModuleID> {
306 return hash_combine(ID.ModuleName, ID.ContextHash);
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the PPCallbacks interface.
static std::string getName(const CallEvent &Call)
Defines the SourceManager interface.
Reads an AST files chain containing the contents of a translation unit.
Represents a character-granular source range.
CompilerInstance - Helper class for managing a single instance of the Clang compiler.
Helper class for holding the data necessary to invoke the compiler.
An interface for collecting the dependencies of a compilation.
An opaque identifier used by SourceManager which refers to a source file (MemoryBuffer) along with it...
Record the location of an inclusion directive, such as an #include or #import statement.
Describes a module or submodule.
This interface provides a way to observe the actions of the preprocessor as it does its thing.
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
Encodes a location in the source.
Token - This structure provides full information about a lexed token.
The base class of the type hierarchy.
CharacteristicKind
Indicates whether a file or directory holds normal user code, system code, or system code which is im...
@ C
Languages that the frontend can parse and compile.
YAML serialization mapping.