FrontendOptions.h revision da1573f95902a42aa4d11e8f45ab98ec7e27bc28
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 34da1573f95902a42aa4d11e8f45ab98ec7e27bc28Daniel Dunbar EmitObj, ///< Emit a .o file. 359a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar FixIt, ///< Parse and apply any fixits to the source. 369a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar GeneratePCH, ///< Generate pre-compiled header. 379a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar GeneratePTH, ///< Generate pre-tokenized header. 389a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar InheritanceView, ///< View C++ inheritance for a specified class. 399a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ParseNoop, ///< Parse with noop callbacks. 409a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ParsePrintCallbacks, ///< Parse and print each callback. 419a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ParseSyntaxOnly, ///< Parse and perform semantic analysis. 42d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar PluginAction, ///< Run a plugin action, \see ActionName. 439a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar PrintDeclContext, ///< Print DeclContext and their Decls. 449a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar PrintPreprocessedInput, ///< -E mode. 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. 809b5e9ae08defd14441acca1d7d4502b933bf6c5aDaniel Dunbar unsigned ShowHelp : 1; ///< Show the -help text. 81914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned ShowMacrosInCodeCompletion : 1; ///< Show macros in code completion 82914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// results. 83914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned ShowStats : 1; ///< Show frontend performance 84914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// metrics and statistics. 85914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar unsigned ShowTimers : 1; ///< Show timers for individual 86914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// actions. 879b5e9ae08defd14441acca1d7d4502b933bf6c5aDaniel Dunbar unsigned ShowVersion : 1; ///< Show the -version text. 8826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 89fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// The input files and their types. 90fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar std::vector<std::pair<InputKind, std::string> > Inputs; 9126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 9226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar /// The output file, if any. 9326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar std::string OutputFile; 9426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 9526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar /// If given, the name for a C++ class to view the inheritance of. 9626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar std::string ViewClassInheritance; 9726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 98c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar /// A list of locations to apply fix-its at. 99c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar std::vector<ParsedSourceLocation> FixItLocations; 100c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar 101914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar /// If given, enable code completion at the provided location. 102914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar ParsedSourceLocation CodeCompletionAt; 103914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar 1049a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar /// The frontend action to perform. 1059a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar frontend::ActionKind ProgramAction; 1069a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar 107d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar /// The name of the action to run when using a plugin action. 108d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar std::string ActionName; 109d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar 110efba227cc5459554eca466aafe786b5132dcb68cDaniel Dunbar /// The list of plugins to load. 111efba227cc5459554eca466aafe786b5132dcb68cDaniel Dunbar std::vector<std::string> Plugins; 112efba227cc5459554eca466aafe786b5132dcb68cDaniel Dunbar 11326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarpublic: 11426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar FrontendOptions() { 1151be3b3bd5c983e3fc5b78db155632d2d2d6aa968Daniel Dunbar DebugCodeCompletionPrinter = 1; 11626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar DisableFree = 0; 11726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar EmptyInputOnly = 0; 1189a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar ProgramAction = frontend::ParseSyntaxOnly; 119d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar ActionName = ""; 12026266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar RelocatablePCH = 0; 1219b5e9ae08defd14441acca1d7d4502b933bf6c5aDaniel Dunbar ShowHelp = 0; 122914474ca51d202369241a81013208833a6bb3f12Daniel Dunbar ShowMacrosInCodeCompletion = 0; 12326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar ShowStats = 0; 12426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar ShowTimers = 0; 1259b5e9ae08defd14441acca1d7d4502b933bf6c5aDaniel Dunbar ShowVersion = 0; 12626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar } 127fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar 128fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// getInputKindForExtension - Return the appropriate input kind for a file 129fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// extension. For example, "c" would return IK_C. 130fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// 131fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// \return The input kind for the extension, or IK_None if the extension is 132fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar /// not recognized. 133fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar static InputKind getInputKindForExtension(llvm::StringRef Extension); 13426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar}; 13526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 13626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar} // end namespace clang 13726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar 13826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#endif 139