TableGen.cpp revision 243830
1226586Sdim//===- TableGen.cpp - Top-Level TableGen implementation for Clang ---------===// 2226586Sdim// 3226586Sdim// The LLVM Compiler Infrastructure 4226586Sdim// 5226586Sdim// This file is distributed under the University of Illinois Open Source 6226586Sdim// License. See LICENSE.TXT for details. 7226586Sdim// 8226586Sdim//===----------------------------------------------------------------------===// 9226586Sdim// 10226586Sdim// This file contains the main function for Clang's TableGen. 11226586Sdim// 12226586Sdim//===----------------------------------------------------------------------===// 13226586Sdim 14239462Sdim#include "TableGenBackends.h" // Declares all backends. 15226586Sdim 16226586Sdim#include "llvm/Support/CommandLine.h" 17226586Sdim#include "llvm/Support/PrettyStackTrace.h" 18226586Sdim#include "llvm/Support/Signals.h" 19226586Sdim#include "llvm/TableGen/Error.h" 20226586Sdim#include "llvm/TableGen/Main.h" 21226586Sdim#include "llvm/TableGen/Record.h" 22226586Sdim 23226586Sdimusing namespace llvm; 24239462Sdimusing namespace clang; 25226586Sdim 26226586Sdimenum ActionType { 27226586Sdim GenClangAttrClasses, 28226586Sdim GenClangAttrImpl, 29226586Sdim GenClangAttrList, 30226586Sdim GenClangAttrPCHRead, 31226586Sdim GenClangAttrPCHWrite, 32226586Sdim GenClangAttrSpellingList, 33226586Sdim GenClangAttrLateParsedList, 34234353Sdim GenClangAttrTemplateInstantiate, 35234353Sdim GenClangAttrParsedAttrList, 36234353Sdim GenClangAttrParsedAttrKinds, 37226586Sdim GenClangDiagsDefs, 38226586Sdim GenClangDiagGroups, 39226586Sdim GenClangDiagsIndexName, 40239462Sdim GenClangCommentNodes, 41226586Sdim GenClangDeclNodes, 42226586Sdim GenClangStmtNodes, 43226586Sdim GenClangSACheckers, 44243830Sdim GenClangCommentHTMLTags, 45243830Sdim GenClangCommentHTMLTagsProperties, 46243830Sdim GenClangCommentCommandInfo, 47226586Sdim GenOptParserDefs, GenOptParserImpl, 48226586Sdim GenArmNeon, 49226586Sdim GenArmNeonSema, 50226586Sdim GenArmNeonTest 51226586Sdim}; 52226586Sdim 53226586Sdimnamespace { 54226586Sdim cl::opt<ActionType> 55226586Sdim Action(cl::desc("Action to perform:"), 56226586Sdim cl::values(clEnumValN(GenOptParserDefs, "gen-opt-parser-defs", 57226586Sdim "Generate option definitions"), 58226586Sdim clEnumValN(GenOptParserImpl, "gen-opt-parser-impl", 59226586Sdim "Generate option parser implementation"), 60226586Sdim clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes", 61226586Sdim "Generate clang attribute clases"), 62226586Sdim clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl", 63226586Sdim "Generate clang attribute implementations"), 64226586Sdim clEnumValN(GenClangAttrList, "gen-clang-attr-list", 65226586Sdim "Generate a clang attribute list"), 66226586Sdim clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read", 67226586Sdim "Generate clang PCH attribute reader"), 68226586Sdim clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write", 69226586Sdim "Generate clang PCH attribute writer"), 70226586Sdim clEnumValN(GenClangAttrSpellingList, 71226586Sdim "gen-clang-attr-spelling-list", 72226586Sdim "Generate a clang attribute spelling list"), 73226586Sdim clEnumValN(GenClangAttrLateParsedList, 74226586Sdim "gen-clang-attr-late-parsed-list", 75226586Sdim "Generate a clang attribute LateParsed list"), 76234353Sdim clEnumValN(GenClangAttrTemplateInstantiate, 77234353Sdim "gen-clang-attr-template-instantiate", 78234353Sdim "Generate a clang template instantiate code"), 79234353Sdim clEnumValN(GenClangAttrParsedAttrList, 80234353Sdim "gen-clang-attr-parsed-attr-list", 81234353Sdim "Generate a clang parsed attribute list"), 82234353Sdim clEnumValN(GenClangAttrParsedAttrKinds, 83234353Sdim "gen-clang-attr-parsed-attr-kinds", 84234353Sdim "Generate a clang parsed attribute kinds"), 85226586Sdim clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs", 86226586Sdim "Generate Clang diagnostics definitions"), 87226586Sdim clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups", 88226586Sdim "Generate Clang diagnostic groups"), 89226586Sdim clEnumValN(GenClangDiagsIndexName, 90226586Sdim "gen-clang-diags-index-name", 91226586Sdim "Generate Clang diagnostic name index"), 92239462Sdim clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes", 93239462Sdim "Generate Clang AST comment nodes"), 94226586Sdim clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes", 95226586Sdim "Generate Clang AST declaration nodes"), 96226586Sdim clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes", 97226586Sdim "Generate Clang AST statement nodes"), 98226586Sdim clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers", 99226586Sdim "Generate Clang Static Analyzer checkers"), 100243830Sdim clEnumValN(GenClangCommentHTMLTags, 101243830Sdim "gen-clang-comment-html-tags", 102243830Sdim "Generate efficient matchers for HTML tag " 103243830Sdim "names that are used in documentation comments"), 104243830Sdim clEnumValN(GenClangCommentHTMLTagsProperties, 105243830Sdim "gen-clang-comment-html-tags-properties", 106243830Sdim "Generate efficient matchers for HTML tag " 107243830Sdim "properties"), 108243830Sdim clEnumValN(GenClangCommentCommandInfo, 109243830Sdim "gen-clang-comment-command-info", 110243830Sdim "Generate list of commands that are used in " 111243830Sdim "documentation comments"), 112226586Sdim clEnumValN(GenArmNeon, "gen-arm-neon", 113226586Sdim "Generate arm_neon.h for clang"), 114226586Sdim clEnumValN(GenArmNeonSema, "gen-arm-neon-sema", 115226586Sdim "Generate ARM NEON sema support for clang"), 116226586Sdim clEnumValN(GenArmNeonTest, "gen-arm-neon-test", 117226586Sdim "Generate ARM NEON tests for clang"), 118226586Sdim clEnumValEnd)); 119226586Sdim 120226586Sdim cl::opt<std::string> 121226586Sdim ClangComponent("clang-component", 122226586Sdim cl::desc("Only use warnings from specified component"), 123226586Sdim cl::value_desc("component"), cl::Hidden); 124226586Sdim 125243830Sdimbool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) { 126243830Sdim switch (Action) { 127243830Sdim case GenClangAttrClasses: 128243830Sdim EmitClangAttrClass(Records, OS); 129243830Sdim break; 130243830Sdim case GenClangAttrImpl: 131243830Sdim EmitClangAttrImpl(Records, OS); 132243830Sdim break; 133243830Sdim case GenClangAttrList: 134243830Sdim EmitClangAttrList(Records, OS); 135243830Sdim break; 136243830Sdim case GenClangAttrPCHRead: 137243830Sdim EmitClangAttrPCHRead(Records, OS); 138243830Sdim break; 139243830Sdim case GenClangAttrPCHWrite: 140243830Sdim EmitClangAttrPCHWrite(Records, OS); 141243830Sdim break; 142243830Sdim case GenClangAttrSpellingList: 143243830Sdim EmitClangAttrSpellingList(Records, OS); 144243830Sdim break; 145243830Sdim case GenClangAttrLateParsedList: 146243830Sdim EmitClangAttrLateParsedList(Records, OS); 147243830Sdim break; 148243830Sdim case GenClangAttrTemplateInstantiate: 149243830Sdim EmitClangAttrTemplateInstantiate(Records, OS); 150243830Sdim break; 151243830Sdim case GenClangAttrParsedAttrList: 152243830Sdim EmitClangAttrParsedAttrList(Records, OS); 153243830Sdim break; 154243830Sdim case GenClangAttrParsedAttrKinds: 155243830Sdim EmitClangAttrParsedAttrKinds(Records, OS); 156243830Sdim break; 157243830Sdim case GenClangDiagsDefs: 158243830Sdim EmitClangDiagsDefs(Records, OS, ClangComponent); 159243830Sdim break; 160243830Sdim case GenClangDiagGroups: 161243830Sdim EmitClangDiagGroups(Records, OS); 162243830Sdim break; 163243830Sdim case GenClangDiagsIndexName: 164243830Sdim EmitClangDiagsIndexName(Records, OS); 165243830Sdim break; 166243830Sdim case GenClangCommentNodes: 167243830Sdim EmitClangASTNodes(Records, OS, "Comment", ""); 168243830Sdim break; 169243830Sdim case GenClangDeclNodes: 170243830Sdim EmitClangASTNodes(Records, OS, "Decl", "Decl"); 171243830Sdim EmitClangDeclContext(Records, OS); 172243830Sdim break; 173243830Sdim case GenClangStmtNodes: 174243830Sdim EmitClangASTNodes(Records, OS, "Stmt", ""); 175243830Sdim break; 176243830Sdim case GenClangSACheckers: 177243830Sdim EmitClangSACheckers(Records, OS); 178243830Sdim break; 179243830Sdim case GenClangCommentHTMLTags: 180243830Sdim EmitClangCommentHTMLTags(Records, OS); 181243830Sdim break; 182243830Sdim case GenClangCommentHTMLTagsProperties: 183243830Sdim EmitClangCommentHTMLTagsProperties(Records, OS); 184243830Sdim break; 185243830Sdim case GenClangCommentCommandInfo: 186243830Sdim EmitClangCommentCommandInfo(Records, OS); 187243830Sdim break; 188243830Sdim case GenOptParserDefs: 189243830Sdim EmitOptParser(Records, OS, true); 190243830Sdim break; 191243830Sdim case GenOptParserImpl: 192243830Sdim EmitOptParser(Records, OS, false); 193243830Sdim break; 194243830Sdim case GenArmNeon: 195243830Sdim EmitNeon(Records, OS); 196243830Sdim break; 197243830Sdim case GenArmNeonSema: 198243830Sdim EmitNeonSema(Records, OS); 199243830Sdim break; 200243830Sdim case GenArmNeonTest: 201243830Sdim EmitNeonTest(Records, OS); 202243830Sdim break; 203243830Sdim } 204226586Sdim 205243830Sdim return false; 206234353Sdim} 207243830Sdim} 208226586Sdim 209226586Sdimint main(int argc, char **argv) { 210226586Sdim sys::PrintStackTraceOnErrorSignal(); 211226586Sdim PrettyStackTraceProgram X(argc, argv); 212226586Sdim cl::ParseCommandLineOptions(argc, argv); 213226586Sdim 214243830Sdim return TableGenMain(argv[0], &ClangTableGenMain); 215226586Sdim} 216