13#ifndef LLVM_CLANG_FRONTEND_UTILS_H
14#define LLVM_CLANG_FRONTEND_UTILS_H
20#include "llvm/ADT/ArrayRef.h"
21#include "llvm/ADT/IntrusiveRefCntPtr.h"
22#include "llvm/ADT/StringMap.h"
23#include "llvm/ADT/StringRef.h"
24#include "llvm/ADT/StringSet.h"
25#include "llvm/Support/FileCollector.h"
26#include "llvm/Support/VirtualFileSystem.h"
30#include <system_error>
37class CompilerInstance;
38class CompilerInvocation;
39class DiagnosticsEngine;
40class ExternalSemaSource;
42class PCHContainerReader;
45class PreprocessorOptions;
46class PreprocessorOutputOptions;
51 const PCHContainerReader &PCHContainerRdr,
52 const FrontendOptions &FEOpts);
56 const PreprocessorOutputOptions &Opts);
75 bool IsSystem,
bool IsModuleFile,
bool IsMissing);
89 bool IsSystem,
bool IsModuleFile,
98 llvm::StringSet<> Seen;
99 std::vector<std::string> Dependencies;
117 bool IsModuleFile,
bool IsMissing)
final;
120 return CanonicalSystemHeaders;
129 std::string OutputFile;
130 std::vector<std::string> Targets;
131 bool IncludeSystemHeaders;
132 bool CanonicalSystemHeaders;
134 bool AddMissingHeaderDeps;
135 bool SeenMissingHeader;
136 bool IncludeModuleFiles;
138 unsigned InputFileIndex;
145 bool HasErrors =
false;
146 llvm::StringSet<> Seen;
147 llvm::vfs::YAMLVFSWriter VFSWriter;
148 llvm::FileCollector::PathCanonicalizer Canonicalizer;
150 std::error_code copyToRoot(StringRef Src, StringRef Dst = {});
154 : DestDir(
std::move(DestDir)) {}
162 VFSWriter.addFileMapping(VPath, RPath);
190 const DependencyOutputOptions &DepOpts,
191 bool ShowAllHeaders =
false,
192 StringRef OutputPath = {},
193 bool ShowDepth =
true,
bool MSStyle =
false);
197IntrusiveRefCntPtr<ExternalSemaSource>
199 IntrusiveRefCntPtr<ExternalSemaSource> &Reader);
242std::unique_ptr<CompilerInvocation>
Defines the Diagnostic-related interfaces.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Reads an AST files chain containing the contents of a translation unit.
An interface for collecting the dependencies of a compilation.
bool addDependency(StringRef Filename)
Return true if the filename was added to the list of dependencies, false otherwise.
virtual void attachToPreprocessor(Preprocessor &PP)
ArrayRef< std::string > getDependencies() const
virtual void finishedMainFile(DiagnosticsEngine &Diags)
Called when the end of the main file is reached.
virtual void attachToASTReader(ASTReader &R)
virtual ~DependencyCollector()
virtual void maybeAddDependency(StringRef Filename, bool FromModule, bool IsSystem, bool IsModuleFile, FileManager *FileMgr, bool IsMissing)
Add a dependency Filename if it has not been seen before and sawDependency() returns true.
virtual bool shouldCanonicalizeSystemDependencies()
Return true if system files should be canonicalized.
virtual bool needSystemDependencies()
Return true if system files should be passed to sawDependency().
virtual bool sawDependency(StringRef Filename, bool FromModule, bool IsSystem, bool IsModuleFile, bool IsMissing)
Called when a new file is seen.
Builds a dependency file when attached to a Preprocessor (for includes) and ASTReader (for module imp...
void outputDependencyFile(llvm::raw_ostream &OS)
void attachToPreprocessor(Preprocessor &PP) override
void finishedMainFile(DiagnosticsEngine &Diags) override
Called when the end of the main file is reached.
bool needSystemDependencies() final
Return true if system files should be passed to sawDependency().
bool sawDependency(StringRef Filename, bool FromModule, bool IsSystem, bool IsModuleFile, bool IsMissing) final
Called when a new file is seen.
bool shouldCanonicalizeSystemDependencies() override
Return true if system files should be canonicalized.
DependencyOutputOptions - Options for controlling the compiler dependency file generation.
Concrete class used by the front-end to report problems and issues.
Implements support for file system lookup, file system caching, and directory search management.
Collects the dependencies for imported modules into a directory.
void attachToASTReader(ASTReader &R) override
~ModuleDependencyCollector() override
virtual void addFileMapping(StringRef VPath, StringRef RPath)
void attachToPreprocessor(Preprocessor &PP) override
virtual void addFile(StringRef Filename, StringRef FileDst={})
virtual bool insertSeen(StringRef Filename)
virtual void writeFileMap()
ModuleDependencyCollector(std::string DestDir)
Engages in a tight little dance with the lexer to efficiently preprocess tokens.
IntrusiveRefCntPtr< ExternalSemaSource > createChainedIncludesSource(CompilerInstance &CI, IntrusiveRefCntPtr< ExternalSemaSource > &Reader)
The ChainedIncludesSource class converts headers to chained PCHs in memory, mainly for testing.
std::unique_ptr< CompilerInvocation > createInvocation(ArrayRef< const char * > Args, CreateInvocationOptions Opts={})
Interpret clang arguments in preparation to parse a file.
void DoPrintPreprocessedInput(Preprocessor &PP, raw_ostream *OS, const PreprocessorOutputOptions &Opts)
DoPrintPreprocessedInput - Implement -E mode.
DependencyOutputFormat
DependencyOutputFormat - Format for the compiler dependency file.
void AttachHeaderIncludeGen(Preprocessor &PP, const DependencyOutputOptions &DepOpts, bool ShowAllHeaders=false, StringRef OutputPath={}, bool ShowDepth=true, bool MSStyle=false)
AttachHeaderIncludeGen - Create a header include list generator, and attach it to the given preproces...
void InitializePreprocessor(Preprocessor &PP, const PreprocessorOptions &PPOpts, const PCHContainerReader &PCHContainerRdr, const FrontendOptions &FEOpts)
InitializePreprocessor - Initialize the preprocessor getting it and the environment ready to process ...
void AttachDependencyGraphGen(Preprocessor &PP, StringRef OutputFile, StringRef SysRoot)
AttachDependencyGraphGen - Create a dependency graph generator, and attach it to the given preprocess...
Optional inputs to createInvocation.
IntrusiveRefCntPtr< DiagnosticsEngine > Diags
Receives diagnostics encountered while parsing command-line flags.
bool ProbePrecompiled
Allow the driver to probe the filesystem for PCH files.
bool RecoverOnError
Whether to attempt to produce a non-null (possibly incorrect) invocation if any errors were encounter...
IntrusiveRefCntPtr< llvm::vfs::FileSystem > VFS
Used e.g.
std::vector< std::string > * CC1Args
If set, the target is populated with the cc1 args produced by the driver.