1 //===--- Utils.h - Misc utilities for the front-end -------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This header contains miscellaneous utilities for various front-end actions. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_CLANG_FRONTEND_UTILS_H 15 #define LLVM_CLANG_FRONTEND_UTILS_H 16 17 #include "clang/Basic/Diagnostic.h" 18 #include "llvm/ADT/IntrusiveRefCntPtr.h" 19 #include "llvm/ADT/StringRef.h" 20 21 namespace llvm { 22 class raw_fd_ostream; 23 class Triple; 24 } 25 26 namespace clang { 27 class ASTConsumer; 28 class CompilerInstance; 29 class CompilerInvocation; 30 class Decl; 31 class DependencyOutputOptions; 32 class DiagnosticsEngine; 33 class DiagnosticOptions; 34 class FileManager; 35 class HeaderSearch; 36 class HeaderSearchOptions; 37 class IdentifierTable; 38 class LangOptions; 39 class Preprocessor; 40 class PreprocessorOptions; 41 class PreprocessorOutputOptions; 42 class SourceManager; 43 class Stmt; 44 class TargetInfo; 45 class FrontendOptions; 46 47 /// Apply the header search options to get given HeaderSearch object. 48 void ApplyHeaderSearchOptions(HeaderSearch &HS, 49 const HeaderSearchOptions &HSOpts, 50 const LangOptions &Lang, 51 const llvm::Triple &triple); 52 53 /// InitializePreprocessor - Initialize the preprocessor getting it and the 54 /// environment ready to process a single file. 55 void InitializePreprocessor(Preprocessor &PP, 56 const PreprocessorOptions &PPOpts, 57 const HeaderSearchOptions &HSOpts, 58 const FrontendOptions &FEOpts); 59 60 /// ProcessWarningOptions - Initialize the diagnostic client and process the 61 /// warning options specified on the command line. 62 void ProcessWarningOptions(DiagnosticsEngine &Diags, 63 const DiagnosticOptions &Opts); 64 65 /// DoPrintPreprocessedInput - Implement -E mode. 66 void DoPrintPreprocessedInput(Preprocessor &PP, raw_ostream* OS, 67 const PreprocessorOutputOptions &Opts); 68 69 /// AttachDependencyFileGen - Create a dependency file generator, and attach 70 /// it to the given preprocessor. This takes ownership of the output stream. 71 void AttachDependencyFileGen(Preprocessor &PP, 72 const DependencyOutputOptions &Opts); 73 74 /// AttachDependencyGraphGen - Create a dependency graph generator, and attach 75 /// it to the given preprocessor. 76 void AttachDependencyGraphGen(Preprocessor &PP, StringRef OutputFile, 77 StringRef SysRoot); 78 79 /// AttachHeaderIncludeGen - Create a header include list generator, and attach 80 /// it to the given preprocessor. 81 /// 82 /// \param ShowAllHeaders - If true, show all header information instead of just 83 /// headers following the predefines buffer. This is useful for making sure 84 /// includes mentioned on the command line are also reported, but differs from 85 /// the default behavior used by -H. 86 /// \param OutputPath - If non-empty, a path to write the header include 87 /// information to, instead of writing to stderr. 88 void AttachHeaderIncludeGen(Preprocessor &PP, bool ShowAllHeaders = false, 89 StringRef OutputPath = "", 90 bool ShowDepth = true); 91 92 /// CacheTokens - Cache tokens for use with PCH. Note that this requires 93 /// a seekable stream. 94 void CacheTokens(Preprocessor &PP, llvm::raw_fd_ostream* OS); 95 96 /// createInvocationFromCommandLine - Construct a compiler invocation object for 97 /// a command line argument vector. 98 /// 99 /// \return A CompilerInvocation, or 0 if none was built for the given 100 /// argument vector. 101 CompilerInvocation * 102 createInvocationFromCommandLine(ArrayRef<const char *> Args, 103 IntrusiveRefCntPtr<DiagnosticsEngine> Diags = 104 IntrusiveRefCntPtr<DiagnosticsEngine>()); 105 106 } // end namespace clang 107 108 #endif 109