TableGen.cpp revision 249423
141227Sjdp//===- TableGen.cpp - Top-Level TableGen implementation for Clang ---------===// 241227Sjdp// 341227Sjdp// The LLVM Compiler Infrastructure 441227Sjdp// 541227Sjdp// This file is distributed under the University of Illinois Open Source 641227Sjdp// License. See LICENSE.TXT for details. 741227Sjdp// 841227Sjdp//===----------------------------------------------------------------------===// 941227Sjdp// 1041227Sjdp// This file contains the main function for Clang's TableGen. 1141227Sjdp// 1241227Sjdp//===----------------------------------------------------------------------===// 1341227Sjdp 1441227Sjdp#include "TableGenBackends.h" // Declares all backends. 1541227Sjdp#include "llvm/Support/CommandLine.h" 1641227Sjdp#include "llvm/Support/PrettyStackTrace.h" 1741227Sjdp#include "llvm/Support/Signals.h" 1841227Sjdp#include "llvm/TableGen/Error.h" 1941227Sjdp#include "llvm/TableGen/Main.h" 2041227Sjdp#include "llvm/TableGen/Record.h" 2141227Sjdp 2241227Sjdpusing namespace llvm; 2341227Sjdpusing namespace clang; 2441227Sjdp 2541227Sjdpenum ActionType { 2641227Sjdp GenClangAttrClasses, 2741227Sjdp GenClangAttrImpl, 2841227Sjdp GenClangAttrList, 2941227Sjdp GenClangAttrPCHRead, 3041227Sjdp GenClangAttrPCHWrite, 3141227Sjdp GenClangAttrSpellingList, 3241227Sjdp GenClangAttrSpellingListIndex, 3341227Sjdp GenClangAttrLateParsedList, 3441227Sjdp GenClangAttrTemplateInstantiate, 3541227Sjdp GenClangAttrParsedAttrList, 3641227Sjdp GenClangAttrParsedAttrKinds, 3741227Sjdp GenClangAttrDump, 3841227Sjdp GenClangDiagsDefs, 3941227Sjdp GenClangDiagGroups, 4041227Sjdp GenClangDiagsIndexName, 4141227Sjdp GenClangCommentNodes, 4279476Smarkm GenClangDeclNodes, 4341227Sjdp GenClangStmtNodes, 4479476Smarkm GenClangSACheckers, 4579476Smarkm GenClangCommentHTMLTags, 4679476Smarkm GenClangCommentHTMLTagsProperties, 4779476Smarkm GenClangCommentHTMLNamedCharacterReferences, 4879476Smarkm GenClangCommentCommandInfo, 4941227Sjdp GenClangCommentCommandList, 5079476Smarkm GenOptParserDefs, GenOptParserImpl, 5179476Smarkm GenArmNeon, 5279476Smarkm GenArmNeonSema, 5341227Sjdp GenArmNeonTest 5441227Sjdp}; 5541227Sjdp 5641227Sjdpnamespace { 5741227Sjdp cl::opt<ActionType> 5841227Sjdp Action(cl::desc("Action to perform:"), 5941227Sjdp cl::values(clEnumValN(GenOptParserDefs, "gen-opt-parser-defs", 6041227Sjdp "Generate option definitions"), 6141227Sjdp clEnumValN(GenOptParserImpl, "gen-opt-parser-impl", 6241227Sjdp "Generate option parser implementation"), 6341227Sjdp clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes", 6441227Sjdp "Generate clang attribute clases"), 6541227Sjdp clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl", 6641227Sjdp "Generate clang attribute implementations"), 6741227Sjdp clEnumValN(GenClangAttrList, "gen-clang-attr-list", 6841227Sjdp "Generate a clang attribute list"), 6941227Sjdp clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read", 7041227Sjdp "Generate clang PCH attribute reader"), 7141227Sjdp clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write", 7241227Sjdp "Generate clang PCH attribute writer"), 7341227Sjdp clEnumValN(GenClangAttrSpellingList, 7441227Sjdp "gen-clang-attr-spelling-list", 7541227Sjdp "Generate a clang attribute spelling list"), 7641227Sjdp clEnumValN(GenClangAttrSpellingListIndex, 7741227Sjdp "gen-clang-attr-spelling-index", 7841227Sjdp "Generate a clang attribute spelling index"), 7941227Sjdp clEnumValN(GenClangAttrLateParsedList, 8041227Sjdp "gen-clang-attr-late-parsed-list", 8141227Sjdp "Generate a clang attribute LateParsed list"), 8241227Sjdp clEnumValN(GenClangAttrTemplateInstantiate, 8341227Sjdp "gen-clang-attr-template-instantiate", 8441227Sjdp "Generate a clang template instantiate code"), 8541227Sjdp clEnumValN(GenClangAttrParsedAttrList, 8641227Sjdp "gen-clang-attr-parsed-attr-list", 8741227Sjdp "Generate a clang parsed attribute list"), 8841227Sjdp clEnumValN(GenClangAttrParsedAttrKinds, 8941227Sjdp "gen-clang-attr-parsed-attr-kinds", 9041227Sjdp "Generate a clang parsed attribute kinds"), 9141227Sjdp clEnumValN(GenClangAttrDump, "gen-clang-attr-dump", 9241227Sjdp "Generate clang attribute dumper"), 9341227Sjdp clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs", 9441227Sjdp "Generate Clang diagnostics definitions"), 9541227Sjdp clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups", 9641227Sjdp "Generate Clang diagnostic groups"), 9741227Sjdp clEnumValN(GenClangDiagsIndexName, 9841227Sjdp "gen-clang-diags-index-name", 9941227Sjdp "Generate Clang diagnostic name index"), 10041227Sjdp clEnumValN(GenClangCommentNodes, "gen-clang-comment-nodes", 10141227Sjdp "Generate Clang AST comment nodes"), 10241227Sjdp clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes", 10341227Sjdp "Generate Clang AST declaration nodes"), 10441227Sjdp clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes", 10541227Sjdp "Generate Clang AST statement nodes"), 10641227Sjdp clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers", 10741227Sjdp "Generate Clang Static Analyzer checkers"), 10841227Sjdp clEnumValN(GenClangCommentHTMLTags, 10941227Sjdp "gen-clang-comment-html-tags", 11041227Sjdp "Generate efficient matchers for HTML tag " 11141227Sjdp "names that are used in documentation comments"), 11241227Sjdp clEnumValN(GenClangCommentHTMLTagsProperties, 11341227Sjdp "gen-clang-comment-html-tags-properties", 11441227Sjdp "Generate efficient matchers for HTML tag " 11541227Sjdp "properties"), 11641227Sjdp clEnumValN(GenClangCommentHTMLNamedCharacterReferences, 11741227Sjdp "gen-clang-comment-html-named-character-references", 11841227Sjdp "Generate function to translate named character " 11941227Sjdp "references to UTF-8 sequences"), 12041227Sjdp clEnumValN(GenClangCommentCommandInfo, 12141227Sjdp "gen-clang-comment-command-info", 12241227Sjdp "Generate command properties for commands that " 12341227Sjdp "are used in documentation comments"), 12441227Sjdp clEnumValN(GenClangCommentCommandList, 12541227Sjdp "gen-clang-comment-command-list", 12641227Sjdp "Generate list of commands that are used in " 12741227Sjdp "documentation comments"), 12841227Sjdp clEnumValN(GenArmNeon, "gen-arm-neon", 12941227Sjdp "Generate arm_neon.h for clang"), 13041227Sjdp clEnumValN(GenArmNeonSema, "gen-arm-neon-sema", 13141227Sjdp "Generate ARM NEON sema support for clang"), 13241227Sjdp clEnumValN(GenArmNeonTest, "gen-arm-neon-test", 13341227Sjdp "Generate ARM NEON tests for clang"), 13441227Sjdp clEnumValEnd)); 13541227Sjdp 13641227Sjdp cl::opt<std::string> 13741227Sjdp ClangComponent("clang-component", 13841227Sjdp cl::desc("Only use warnings from specified component"), 13941227Sjdp cl::value_desc("component"), cl::Hidden); 14041227Sjdp 14141227Sjdpbool ClangTableGenMain(raw_ostream &OS, RecordKeeper &Records) { 14241227Sjdp switch (Action) { 14341227Sjdp case GenClangAttrClasses: 14441227Sjdp EmitClangAttrClass(Records, OS); 14541227Sjdp break; 14641227Sjdp case GenClangAttrImpl: 14741227Sjdp EmitClangAttrImpl(Records, OS); 14841227Sjdp break; 14941227Sjdp case GenClangAttrList: 15041227Sjdp EmitClangAttrList(Records, OS); 15141227Sjdp break; 15241227Sjdp case GenClangAttrPCHRead: 15341227Sjdp EmitClangAttrPCHRead(Records, OS); 15441227Sjdp break; 15541227Sjdp case GenClangAttrPCHWrite: 15641227Sjdp EmitClangAttrPCHWrite(Records, OS); 15741227Sjdp break; 15841227Sjdp case GenClangAttrSpellingList: 15941227Sjdp EmitClangAttrSpellingList(Records, OS); 16041227Sjdp break; 16141227Sjdp case GenClangAttrSpellingListIndex: 16241227Sjdp EmitClangAttrSpellingListIndex(Records, OS); 16341227Sjdp break; 16441227Sjdp case GenClangAttrLateParsedList: 16541227Sjdp EmitClangAttrLateParsedList(Records, OS); 16641227Sjdp break; 16741227Sjdp case GenClangAttrTemplateInstantiate: 16841227Sjdp EmitClangAttrTemplateInstantiate(Records, OS); 16941227Sjdp break; 17041227Sjdp case GenClangAttrParsedAttrList: 17141227Sjdp EmitClangAttrParsedAttrList(Records, OS); 17241227Sjdp break; 17341227Sjdp case GenClangAttrParsedAttrKinds: 17441227Sjdp EmitClangAttrParsedAttrKinds(Records, OS); 17541227Sjdp break; 17641227Sjdp case GenClangAttrDump: 17741227Sjdp EmitClangAttrDump(Records, OS); 17841227Sjdp break; 17941227Sjdp case GenClangDiagsDefs: 18041227Sjdp EmitClangDiagsDefs(Records, OS, ClangComponent); 18141227Sjdp break; 18241227Sjdp case GenClangDiagGroups: 18341227Sjdp EmitClangDiagGroups(Records, OS); 18441227Sjdp break; 18541227Sjdp case GenClangDiagsIndexName: 18641227Sjdp EmitClangDiagsIndexName(Records, OS); 18741227Sjdp break; 18841227Sjdp case GenClangCommentNodes: 18941227Sjdp EmitClangASTNodes(Records, OS, "Comment", ""); 19041227Sjdp break; 19141227Sjdp case GenClangDeclNodes: 19241227Sjdp EmitClangASTNodes(Records, OS, "Decl", "Decl"); 19341227Sjdp EmitClangDeclContext(Records, OS); 19441227Sjdp break; 19541227Sjdp case GenClangStmtNodes: 19641227Sjdp EmitClangASTNodes(Records, OS, "Stmt", ""); 19741227Sjdp break; 19841227Sjdp case GenClangSACheckers: 19941227Sjdp EmitClangSACheckers(Records, OS); 20041227Sjdp break; 20179476Smarkm case GenClangCommentHTMLTags: 20241227Sjdp EmitClangCommentHTMLTags(Records, OS); 20379476Smarkm break; 20441227Sjdp case GenClangCommentHTMLTagsProperties: 20579476Smarkm EmitClangCommentHTMLTagsProperties(Records, OS); 20679476Smarkm break; 20741227Sjdp case GenClangCommentHTMLNamedCharacterReferences: 20841227Sjdp EmitClangCommentHTMLNamedCharacterReferences(Records, OS); 20941227Sjdp break; 21079476Smarkm case GenClangCommentCommandInfo: 21141227Sjdp EmitClangCommentCommandInfo(Records, OS); 21279476Smarkm break; 21341227Sjdp case GenClangCommentCommandList: 21479476Smarkm EmitClangCommentCommandList(Records, OS); 21579476Smarkm break; 21679476Smarkm case GenOptParserDefs: 21779476Smarkm EmitOptParser(Records, OS, true); 21879476Smarkm break; 21979476Smarkm case GenOptParserImpl: 22079476Smarkm EmitOptParser(Records, OS, false); 22179476Smarkm break; 22279476Smarkm case GenArmNeon: 22379476Smarkm EmitNeon(Records, OS); 22479476Smarkm break; 22579476Smarkm case GenArmNeonSema: 22679476Smarkm EmitNeonSema(Records, OS); 22779476Smarkm break; 22879476Smarkm case GenArmNeonTest: 22979476Smarkm EmitNeonTest(Records, OS); 23079476Smarkm break; 23179476Smarkm } 23279476Smarkm 23341227Sjdp return false; 23479476Smarkm} 23541227Sjdp} 23679476Smarkm 23779476Smarkmint main(int argc, char **argv) { 23879476Smarkm sys::PrintStackTraceOnErrorSignal(); 23941227Sjdp PrettyStackTraceProgram X(argc, argv); 24041227Sjdp cl::ParseCommandLineOptions(argc, argv); 24141227Sjdp 24279476Smarkm return TableGenMain(argv[0], &ClangTableGenMain); 24341227Sjdp} 24479476Smarkm