FrontendOptions.h revision 1be3b3bd5c983e3fc5b78db155632d2d2d6aa968
126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar//===--- FrontendOptions.h --------------------------------------*- C++ -*-===// 226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// 326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// The LLVM Compiler Infrastructure 426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// 526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// This file is distributed under the University of Illinois Open Source 626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// License. See LICENSE.TXT for details. 726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// 826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar//===----------------------------------------------------------------------===// 926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 1026266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#ifndef LLVM_CLANG_FRONTEND_FRONTENDOPTIONS_H 1126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#define LLVM_CLANG_FRONTEND_FRONTENDOPTIONS_H 1226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 13c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar#include "clang/Frontend/CommandLineSourceLoc.h" 14fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar#include "llvm/ADT/StringRef.h" 1526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#include <string> 1626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#include <vector> 1726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 1826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarnamespace clang { 1926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 209a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbarnamespace frontend { 219a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar enum ActionKind { 229a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ASTDump, ///< Parse ASTs and dump them. 239a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ASTPrint, ///< Parse ASTs and print them. 249a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ASTPrintXML, ///< Parse ASTs and print them in XML. 259a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ASTView, ///< Parse ASTs and view them in Graphviz. 269a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar DumpRawTokens, ///< Dump out raw tokens. 279a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar DumpRecordLayouts, ///< Dump record layout information. 289a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar DumpTokens, ///< Dump out preprocessed tokens. 299a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitAssembly, ///< Emit a .s file. 309a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitBC, ///< Emit a .bc file. 319a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitHTML, ///< Translate input source into HTML. 329a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitLLVM, ///< Emit a .ll file. 339a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar EmitLLVMOnly, ///< Generate LLVM IR, but do not 349a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar FixIt, ///< Parse and apply any fixits to the source. 359a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar GeneratePCH, ///< Generate pre-compiled header. 369a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar GeneratePTH, ///< Generate pre-tokenized header. 379a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar InheritanceView, ///< View C++ inheritance for a specified class. 389a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ParseNoop, ///< Parse with noop callbacks. 399a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ParsePrintCallbacks, ///< Parse and print each callback. 409a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ParseSyntaxOnly, ///< Parse and perform semantic analysis. 41d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar PluginAction, ///< Run a plugin action, \see ActionName. 429a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar PrintDeclContext, ///< Print DeclContext and their Decls. 439a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar PrintPreprocessedInput, ///< -E mode. 449a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RewriteBlocks, ///< ObjC->C Rewriter for Blocks. 459a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RewriteMacros, ///< Expand macros but not #includes. 469a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RewriteObjC, ///< ObjC->C Rewriter. 479a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RewriteTest, ///< Rewriter playground 489a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RunAnalysis, ///< Run one or more source code analyses. 499a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar RunPreprocessorOnly ///< Just lex, no output. 509a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar }; 519a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar} 529a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar 5326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar/// FrontendOptions - Options for controlling the behavior of the frontend. 5426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarclass FrontendOptions { 5526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarpublic: 56fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar enum InputKind { 57fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_None, 58fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_Asm, 59fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_C, 60fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_CXX, 61fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_ObjC, 62fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_ObjCXX, 63fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_PreprocessedC, 64fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_PreprocessedCXX, 65fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_PreprocessedObjC, 66fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_PreprocessedObjCXX, 67fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_OpenCL, 68fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar IK_AST 69fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar }; 70fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar 71914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned DebugCodeCompletionPrinter : 1; ///< Use the debug printer for code 72914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// completion results. 73914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned DisableFree : 1; ///< Disable memory freeing on exit. 74914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned EmptyInputOnly : 1; ///< Force input files to be treated 75914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// as if they were empty, for timing 76914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// the frontend startup. 77914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned RelocatablePCH : 1; ///< When generating PCH files, 78914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// instruct the PCH writer to create 79914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// relocatable PCH files. 80914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned ShowMacrosInCodeCompletion : 1; ///< Show macros in code completion 81914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// results. 82914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned ShowStats : 1; ///< Show frontend performance 83914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// metrics and statistics. 84914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned ShowTimers : 1; ///< Show timers for individual 85914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// actions. 8626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 87fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// The input files and their types. 88fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar std::vector<std::pair<InputKind, std::string> > Inputs; 8926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 9026266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar /// The output file, if any. 9126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar std::string OutputFile; 9226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 9326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar /// If given, the name for a C++ class to view the inheritance of. 9426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar std::string ViewClassInheritance; 9526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 96c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar /// A list of locations to apply fix-its at. 97c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar std::vector<ParsedSourceLocation> FixItLocations; 98c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar 99914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// If given, enable code completion at the provided location. 100914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar ParsedSourceLocation CodeCompletionAt; 101914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar 1029a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar /// The frontend action to perform. 1039a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar frontend::ActionKind ProgramAction; 1049a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar 105d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar /// The name of the action to run when using a plugin action. 106d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar std::string ActionName; 107d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar 10826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarpublic: 10926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar FrontendOptions() { 1101be3b3bd5c983e3fc5b78db155632d2d2d6aa968Daniel Dunbar DebugCodeCompletionPrinter = 1; 11126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar DisableFree = 0; 11226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar EmptyInputOnly = 0; 1139a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ProgramAction = frontend::ParseSyntaxOnly; 114d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar ActionName = ""; 11526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar RelocatablePCH = 0; 116914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar ShowMacrosInCodeCompletion = 0; 11726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar ShowStats = 0; 11826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar ShowTimers = 0; 11926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar } 120fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar 121fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// getInputKindForExtension - Return the appropriate input kind for a file 122fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// extension. For example, "c" would return IK_C. 123fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// 124fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// \return The input kind for the extension, or IK_None if the extension is 125fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// not recognized. 126fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar static InputKind getInputKindForExtension(llvm::StringRef Extension); 12726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar}; 12826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 12926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar} // end namespace clang 13026266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 13126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#endif 132