blob: 6462b3bb74496ea5756d72c9f0edd528c7f5f242 [file] [log] [blame]
Peter Collingbournebee583f2011-10-06 13:03:08 +00001//===- TableGen.cpp - Top-Level TableGen implementation for Clang ---------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the main function for Clang's TableGen.
11//
12//===----------------------------------------------------------------------===//
13
14#include "ClangASTNodesEmitter.h"
15#include "ClangAttrEmitter.h"
16#include "ClangDiagnosticsEmitter.h"
17#include "ClangSACheckersEmitter.h"
18#include "NeonEmitter.h"
19#include "OptParserEmitter.h"
20
21#include "llvm/Support/CommandLine.h"
22#include "llvm/Support/PrettyStackTrace.h"
23#include "llvm/Support/Signals.h"
24#include "llvm/TableGen/Error.h"
25#include "llvm/TableGen/Main.h"
26#include "llvm/TableGen/Record.h"
27#include "llvm/TableGen/TableGenAction.h"
28
29using namespace llvm;
30
31enum ActionType {
32 GenClangAttrClasses,
33 GenClangAttrImpl,
34 GenClangAttrList,
35 GenClangAttrPCHRead,
36 GenClangAttrPCHWrite,
37 GenClangAttrSpellingList,
38 GenClangAttrLateParsedList,
DeLesley Hutchinsceec3062012-01-20 22:37:06 +000039 GenClangAttrTemplateInstantiate,
Peter Collingbournebee583f2011-10-06 13:03:08 +000040 GenClangDiagsDefs,
41 GenClangDiagGroups,
42 GenClangDiagsIndexName,
43 GenClangDeclNodes,
44 GenClangStmtNodes,
45 GenClangSACheckers,
46 GenOptParserDefs, GenOptParserImpl,
47 GenArmNeon,
48 GenArmNeonSema,
49 GenArmNeonTest
50};
51
52namespace {
53 cl::opt<ActionType>
54 Action(cl::desc("Action to perform:"),
55 cl::values(clEnumValN(GenOptParserDefs, "gen-opt-parser-defs",
56 "Generate option definitions"),
57 clEnumValN(GenOptParserImpl, "gen-opt-parser-impl",
58 "Generate option parser implementation"),
59 clEnumValN(GenClangAttrClasses, "gen-clang-attr-classes",
60 "Generate clang attribute clases"),
61 clEnumValN(GenClangAttrImpl, "gen-clang-attr-impl",
62 "Generate clang attribute implementations"),
63 clEnumValN(GenClangAttrList, "gen-clang-attr-list",
64 "Generate a clang attribute list"),
65 clEnumValN(GenClangAttrPCHRead, "gen-clang-attr-pch-read",
66 "Generate clang PCH attribute reader"),
67 clEnumValN(GenClangAttrPCHWrite, "gen-clang-attr-pch-write",
68 "Generate clang PCH attribute writer"),
69 clEnumValN(GenClangAttrSpellingList,
70 "gen-clang-attr-spelling-list",
71 "Generate a clang attribute spelling list"),
72 clEnumValN(GenClangAttrLateParsedList,
73 "gen-clang-attr-late-parsed-list",
74 "Generate a clang attribute LateParsed list"),
DeLesley Hutchinsceec3062012-01-20 22:37:06 +000075 clEnumValN(GenClangAttrTemplateInstantiate,
76 "gen-clang-attr-template-instantiate",
77 "Generate a clang template instantiate code"),
Peter Collingbournebee583f2011-10-06 13:03:08 +000078 clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs",
79 "Generate Clang diagnostics definitions"),
80 clEnumValN(GenClangDiagGroups, "gen-clang-diag-groups",
81 "Generate Clang diagnostic groups"),
82 clEnumValN(GenClangDiagsIndexName,
83 "gen-clang-diags-index-name",
84 "Generate Clang diagnostic name index"),
85 clEnumValN(GenClangDeclNodes, "gen-clang-decl-nodes",
86 "Generate Clang AST declaration nodes"),
87 clEnumValN(GenClangStmtNodes, "gen-clang-stmt-nodes",
88 "Generate Clang AST statement nodes"),
89 clEnumValN(GenClangSACheckers, "gen-clang-sa-checkers",
90 "Generate Clang Static Analyzer checkers"),
91 clEnumValN(GenArmNeon, "gen-arm-neon",
92 "Generate arm_neon.h for clang"),
93 clEnumValN(GenArmNeonSema, "gen-arm-neon-sema",
94 "Generate ARM NEON sema support for clang"),
95 clEnumValN(GenArmNeonTest, "gen-arm-neon-test",
96 "Generate ARM NEON tests for clang"),
97 clEnumValEnd));
98
99 cl::opt<std::string>
100 ClangComponent("clang-component",
101 cl::desc("Only use warnings from specified component"),
102 cl::value_desc("component"), cl::Hidden);
Peter Collingbournebee583f2011-10-06 13:03:08 +0000103
104class ClangTableGenAction : public TableGenAction {
105public:
106 bool operator()(raw_ostream &OS, RecordKeeper &Records) {
107 switch (Action) {
108 case GenClangAttrClasses:
109 ClangAttrClassEmitter(Records).run(OS);
110 break;
111 case GenClangAttrImpl:
112 ClangAttrImplEmitter(Records).run(OS);
113 break;
114 case GenClangAttrList:
115 ClangAttrListEmitter(Records).run(OS);
116 break;
117 case GenClangAttrPCHRead:
118 ClangAttrPCHReadEmitter(Records).run(OS);
119 break;
120 case GenClangAttrPCHWrite:
121 ClangAttrPCHWriteEmitter(Records).run(OS);
122 break;
123 case GenClangAttrSpellingList:
124 ClangAttrSpellingListEmitter(Records).run(OS);
125 break;
126 case GenClangAttrLateParsedList:
127 ClangAttrLateParsedListEmitter(Records).run(OS);
128 break;
DeLesley Hutchinsceec3062012-01-20 22:37:06 +0000129 case GenClangAttrTemplateInstantiate:
130 ClangAttrTemplateInstantiateEmitter(Records).run(OS);
131 break;
Peter Collingbournebee583f2011-10-06 13:03:08 +0000132 case GenClangDiagsDefs:
133 ClangDiagsDefsEmitter(Records, ClangComponent).run(OS);
134 break;
135 case GenClangDiagGroups:
136 ClangDiagGroupsEmitter(Records).run(OS);
137 break;
138 case GenClangDiagsIndexName:
139 ClangDiagsIndexNameEmitter(Records).run(OS);
140 break;
141 case GenClangDeclNodes:
142 ClangASTNodesEmitter(Records, "Decl", "Decl").run(OS);
143 ClangDeclContextEmitter(Records).run(OS);
144 break;
145 case GenClangStmtNodes:
146 ClangASTNodesEmitter(Records, "Stmt", "").run(OS);
147 break;
148 case GenClangSACheckers:
149 ClangSACheckersEmitter(Records).run(OS);
150 break;
151 case GenOptParserDefs:
152 OptParserEmitter(Records, true).run(OS);
153 break;
154 case GenOptParserImpl:
155 OptParserEmitter(Records, false).run(OS);
156 break;
157 case GenArmNeon:
158 NeonEmitter(Records).run(OS);
159 break;
160 case GenArmNeonSema:
161 NeonEmitter(Records).runHeader(OS);
162 break;
163 case GenArmNeonTest:
164 NeonEmitter(Records).runTests(OS);
165 break;
Peter Collingbournebee583f2011-10-06 13:03:08 +0000166 }
167
168 return false;
169 }
170};
David Blaikie68e081d2011-12-20 02:48:34 +0000171}
Peter Collingbournebee583f2011-10-06 13:03:08 +0000172
173int main(int argc, char **argv) {
174 sys::PrintStackTraceOnErrorSignal();
175 PrettyStackTraceProgram X(argc, argv);
176 cl::ParseCommandLineOptions(argc, argv);
177
178 ClangTableGenAction Action;
179 return TableGenMain(argv[0], Action);
180}