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