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#include "llvm/Support/CommandLine.h" 16226586Sdim#include "llvm/Support/PrettyStackTrace.h" 17226586Sdim#include "llvm/Support/Signals.h" 18226586Sdim#include "llvm/TableGen/Error.h" 19226586Sdim#include "llvm/TableGen/Main.h" 20226586Sdim#include "llvm/TableGen/Record.h" 21226586Sdim 22226586Sdimusing namespace llvm; 23239462Sdimusing namespace clang; 24226586Sdim 25226586Sdimenum ActionType { 26226586Sdim GenClangAttrClasses, 27251662Sdim GenClangAttrExprArgsList, 28226586Sdim GenClangAttrImpl, 29226586Sdim GenClangAttrList, 30226586Sdim GenClangAttrPCHRead, 31226586Sdim GenClangAttrPCHWrite, 32226586Sdim GenClangAttrSpellingList, 33249423Sdim GenClangAttrSpellingListIndex, 34226586Sdim GenClangAttrLateParsedList, 35234353Sdim GenClangAttrTemplateInstantiate, 36234353Sdim GenClangAttrParsedAttrList, 37234353Sdim GenClangAttrParsedAttrKinds, 38249423Sdim GenClangAttrDump, 39226586Sdim GenClangDiagsDefs, 40226586Sdim GenClangDiagGroups, 41226586Sdim GenClangDiagsIndexName, 42239462Sdim GenClangCommentNodes, 43226586Sdim GenClangDeclNodes, 44226586Sdim GenClangStmtNodes, 45226586Sdim GenClangSACheckers, 46243830Sdim GenClangCommentHTMLTags, 47243830Sdim GenClangCommentHTMLTagsProperties, 48249423Sdim GenClangCommentHTMLNamedCharacterReferences, 49243830Sdim GenClangCommentCommandInfo, 50249423Sdim GenClangCommentCommandList, 51226586Sdim GenOptParserDefs, GenOptParserImpl, 52226586Sdim GenArmNeon, 53226586Sdim GenArmNeonSema, 54226586Sdim GenArmNeonTest 55226586Sdim}; 56226586Sdim 57226586Sdimnamespace { 58226586Sdim cl::opt<ActionType> 59226586Sdim Action(cl::desc("Action to perform:"), 60226586Sdim cl::values(clEnumValN(GenOptParserDefs, "gen-opt-parser-defs", 61226586Sdim "Generate option definitions"), 62226586Sdim clEnumValN(GenOptParserImpl, "gen-opt-parser-impl", 63226586Sdim "Generate option parser implementation"), 64226586Sdim clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes", 65226586Sdim "Generate clang attribute clases"), 66251662Sdim clEnumValN(GenClangAttrExprArgsList, 67251662Sdim "gen-clang-attr-expr-args-list", 68251662Sdim "Generate a clang attribute expression " 69251662Sdim "arguments list"), 70226586Sdim clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl", 71226586Sdim "Generate clang attribute implementations"), 72226586Sdim clEnumValN(GenClangAttrList, "gen-clang-attr-list", 73226586Sdim "Generate a clang attribute list"), 74226586Sdim clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read", 75226586Sdim "Generate clang PCH attribute reader"), 76226586Sdim clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write", 77226586Sdim "Generate clang PCH attribute writer"), 78226586Sdim clEnumValN(GenClangAttrSpellingList, 79226586Sdim "gen-clang-attr-spelling-list", 80226586Sdim "Generate a clang attribute spelling list"), 81249423Sdim clEnumValN(GenClangAttrSpellingListIndex, 82249423Sdim "gen-clang-attr-spelling-index", 83249423Sdim "Generate a clang attribute spelling index"), 84226586Sdim clEnumValN(GenClangAttrLateParsedList, 85226586Sdim "gen-clang-attr-late-parsed-list", 86226586Sdim "Generate a clang attribute LateParsed list"), 87234353Sdim clEnumValN(GenClangAttrTemplateInstantiate, 88234353Sdim "gen-clang-attr-template-instantiate", 89234353Sdim "Generate a clang template instantiate code"), 90234353Sdim clEnumValN(GenClangAttrParsedAttrList, 91234353Sdim "gen-clang-attr-parsed-attr-list", 92234353Sdim "Generate a clang parsed attribute list"), 93234353Sdim clEnumValN(GenClangAttrParsedAttrKinds, 94234353Sdim "gen-clang-attr-parsed-attr-kinds", 95234353Sdim "Generate a clang parsed attribute kinds"), 96249423Sdim clEnumValN(GenClangAttrDump, "gen-clang-attr-dump", 97249423Sdim "Generate clang attribute dumper"), 98226586Sdim clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs", 99226586Sdim "Generate Clang diagnostics definitions"), 100226586Sdim clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups", 101226586Sdim "Generate Clang diagnostic groups"), 102226586Sdim clEnumValN(GenClangDiagsIndexName, 103226586Sdim "gen-clang-diags-index-name", 104226586Sdim "Generate Clang diagnostic name index"), 105239462Sdim clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes", 106239462Sdim "Generate Clang AST comment nodes"), 107226586Sdim clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes", 108226586Sdim "Generate Clang AST declaration nodes"), 109226586Sdim clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes", 110226586Sdim "Generate Clang AST statement nodes"), 111226586Sdim clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers", 112226586Sdim "Generate Clang Static Analyzer checkers"), 113243830Sdim clEnumValN(GenClangCommentHTMLTags, 114243830Sdim "gen-clang-comment-html-tags", 115243830Sdim "Generate efficient matchers for HTML tag " 116243830Sdim "names that are used in documentation comments"), 117243830Sdim clEnumValN(GenClangCommentHTMLTagsProperties, 118243830Sdim "gen-clang-comment-html-tags-properties", 119243830Sdim "Generate efficient matchers for HTML tag " 120243830Sdim "properties"), 121249423Sdim clEnumValN(GenClangCommentHTMLNamedCharacterReferences, 122249423Sdim "gen-clang-comment-html-named-character-references", 123249423Sdim "Generate function to translate named character " 124249423Sdim "references to UTF-8 sequences"), 125243830Sdim clEnumValN(GenClangCommentCommandInfo, 126243830Sdim "gen-clang-comment-command-info", 127249423Sdim "Generate command properties for commands that " 128249423Sdim "are used in documentation comments"), 129249423Sdim clEnumValN(GenClangCommentCommandList, 130249423Sdim "gen-clang-comment-command-list", 131243830Sdim "Generate list of commands that are used in " 132243830Sdim "documentation comments"), 133226586Sdim clEnumValN(GenArmNeon, "gen-arm-neon", 134226586Sdim "Generate arm_neon.h for clang"), 135226586Sdim clEnumValN(GenArmNeonSema, "gen-arm-neon-sema", 136226586Sdim "Generate ARM NEON sema support for clang"), 137226586Sdim clEnumValN(GenArmNeonTest, "gen-arm-neon-test", 138226586Sdim "Generate ARM NEON tests for clang"), 139226586Sdim clEnumValEnd)); 140226586Sdim 141226586Sdim cl::opt<std::string> 142226586Sdim ClangComponent("clang-component", 143226586Sdim cl::desc("Only use warnings from specified component"), 144226586Sdim cl::value_desc("component"), cl::Hidden); 145226586Sdim 146243830Sdimbool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) { 147243830Sdim switch (Action) { 148243830Sdim case GenClangAttrClasses: 149243830Sdim EmitClangAttrClass(Records, OS); 150243830Sdim break; 151251662Sdim case GenClangAttrExprArgsList: 152251662Sdim EmitClangAttrExprArgsList(Records, OS); 153251662Sdim break; 154243830Sdim case GenClangAttrImpl: 155243830Sdim EmitClangAttrImpl(Records, OS); 156243830Sdim break; 157243830Sdim case GenClangAttrList: 158243830Sdim EmitClangAttrList(Records, OS); 159243830Sdim break; 160243830Sdim case GenClangAttrPCHRead: 161243830Sdim EmitClangAttrPCHRead(Records, OS); 162243830Sdim break; 163243830Sdim case GenClangAttrPCHWrite: 164243830Sdim EmitClangAttrPCHWrite(Records, OS); 165243830Sdim break; 166243830Sdim case GenClangAttrSpellingList: 167243830Sdim EmitClangAttrSpellingList(Records, OS); 168243830Sdim break; 169249423Sdim case GenClangAttrSpellingListIndex: 170249423Sdim EmitClangAttrSpellingListIndex(Records, OS); 171249423Sdim break; 172243830Sdim case GenClangAttrLateParsedList: 173243830Sdim EmitClangAttrLateParsedList(Records, OS); 174243830Sdim break; 175243830Sdim case GenClangAttrTemplateInstantiate: 176243830Sdim EmitClangAttrTemplateInstantiate(Records, OS); 177243830Sdim break; 178243830Sdim case GenClangAttrParsedAttrList: 179243830Sdim EmitClangAttrParsedAttrList(Records, OS); 180243830Sdim break; 181243830Sdim case GenClangAttrParsedAttrKinds: 182243830Sdim EmitClangAttrParsedAttrKinds(Records, OS); 183243830Sdim break; 184249423Sdim case GenClangAttrDump: 185249423Sdim EmitClangAttrDump(Records, OS); 186249423Sdim break; 187243830Sdim case GenClangDiagsDefs: 188243830Sdim EmitClangDiagsDefs(Records, OS, ClangComponent); 189243830Sdim break; 190243830Sdim case GenClangDiagGroups: 191243830Sdim EmitClangDiagGroups(Records, OS); 192243830Sdim break; 193243830Sdim case GenClangDiagsIndexName: 194243830Sdim EmitClangDiagsIndexName(Records, OS); 195243830Sdim break; 196243830Sdim case GenClangCommentNodes: 197243830Sdim EmitClangASTNodes(Records, OS, "Comment", ""); 198243830Sdim break; 199243830Sdim case GenClangDeclNodes: 200243830Sdim EmitClangASTNodes(Records, OS, "Decl", "Decl"); 201243830Sdim EmitClangDeclContext(Records, OS); 202243830Sdim break; 203243830Sdim case GenClangStmtNodes: 204243830Sdim EmitClangASTNodes(Records, OS, "Stmt", ""); 205243830Sdim break; 206243830Sdim case GenClangSACheckers: 207243830Sdim EmitClangSACheckers(Records, OS); 208243830Sdim break; 209243830Sdim case GenClangCommentHTMLTags: 210243830Sdim EmitClangCommentHTMLTags(Records, OS); 211243830Sdim break; 212243830Sdim case GenClangCommentHTMLTagsProperties: 213243830Sdim EmitClangCommentHTMLTagsProperties(Records, OS); 214243830Sdim break; 215249423Sdim case GenClangCommentHTMLNamedCharacterReferences: 216249423Sdim EmitClangCommentHTMLNamedCharacterReferences(Records, OS); 217249423Sdim break; 218243830Sdim case GenClangCommentCommandInfo: 219243830Sdim EmitClangCommentCommandInfo(Records, OS); 220243830Sdim break; 221249423Sdim case GenClangCommentCommandList: 222249423Sdim EmitClangCommentCommandList(Records, OS); 223249423Sdim break; 224243830Sdim case GenOptParserDefs: 225243830Sdim EmitOptParser(Records, OS, true); 226243830Sdim break; 227243830Sdim case GenOptParserImpl: 228243830Sdim EmitOptParser(Records, OS, false); 229243830Sdim break; 230243830Sdim case GenArmNeon: 231243830Sdim EmitNeon(Records, OS); 232243830Sdim break; 233243830Sdim case GenArmNeonSema: 234243830Sdim EmitNeonSema(Records, OS); 235243830Sdim break; 236243830Sdim case GenArmNeonTest: 237243830Sdim EmitNeonTest(Records, OS); 238243830Sdim break; 239243830Sdim } 240226586Sdim 241243830Sdim return false; 242234353Sdim} 243243830Sdim} 244226586Sdim 245226586Sdimint main(int argc, char **argv) { 246226586Sdim sys::PrintStackTraceOnErrorSignal(); 247226586Sdim PrettyStackTraceProgram X(argc, argv); 248226586Sdim cl::ParseCommandLineOptions(argc, argv); 249226586Sdim 250243830Sdim return TableGenMain(argv[0], &ClangTableGenMain); 251226586Sdim} 252