xref: /llvm-project/offload/tools/offload-tblgen/offload-tblgen.cpp (revision fd3907ccb583df99e9c19d2fe84e4e7c52d75de9)
1*fd3907ccSCallum Fare //===- offload-tblgen/offload-tblgen.cpp ----------------------------------===//
2*fd3907ccSCallum Fare //
3*fd3907ccSCallum Fare // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*fd3907ccSCallum Fare // See https://llvm.org/LICENSE.txt for license information.
5*fd3907ccSCallum Fare // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*fd3907ccSCallum Fare //
7*fd3907ccSCallum Fare //===----------------------------------------------------------------------===//
8*fd3907ccSCallum Fare //
9*fd3907ccSCallum Fare // This is a Tablegen tool that produces source files for the Offload project.
10*fd3907ccSCallum Fare // See offload/API/README.md for more information.
11*fd3907ccSCallum Fare //
12*fd3907ccSCallum Fare //===----------------------------------------------------------------------===//
13*fd3907ccSCallum Fare 
14*fd3907ccSCallum Fare #include "llvm/Support/CommandLine.h"
15*fd3907ccSCallum Fare #include "llvm/Support/InitLLVM.h"
16*fd3907ccSCallum Fare #include "llvm/TableGen/Main.h"
17*fd3907ccSCallum Fare #include "llvm/TableGen/Record.h"
18*fd3907ccSCallum Fare 
19*fd3907ccSCallum Fare #include "Generators.hpp"
20*fd3907ccSCallum Fare 
21*fd3907ccSCallum Fare namespace llvm {
22*fd3907ccSCallum Fare namespace offload {
23*fd3907ccSCallum Fare namespace tblgen {
24*fd3907ccSCallum Fare 
25*fd3907ccSCallum Fare enum ActionType {
26*fd3907ccSCallum Fare   PrintRecords,
27*fd3907ccSCallum Fare   DumpJSON,
28*fd3907ccSCallum Fare   GenAPI,
29*fd3907ccSCallum Fare   GenFuncNames,
30*fd3907ccSCallum Fare   GenImplFuncDecls,
31*fd3907ccSCallum Fare   GenEntryPoints,
32*fd3907ccSCallum Fare   GenPrintHeader,
33*fd3907ccSCallum Fare   GenExports
34*fd3907ccSCallum Fare };
35*fd3907ccSCallum Fare 
36*fd3907ccSCallum Fare namespace {
37*fd3907ccSCallum Fare cl::opt<ActionType> Action(
38*fd3907ccSCallum Fare     cl::desc("Action to perform:"),
39*fd3907ccSCallum Fare     cl::values(
40*fd3907ccSCallum Fare         clEnumValN(PrintRecords, "print-records",
41*fd3907ccSCallum Fare                    "Print all records to stdout (default)"),
42*fd3907ccSCallum Fare         clEnumValN(DumpJSON, "dump-json",
43*fd3907ccSCallum Fare                    "Dump all records as machine-readable JSON"),
44*fd3907ccSCallum Fare         clEnumValN(GenAPI, "gen-api", "Generate Offload API header contents"),
45*fd3907ccSCallum Fare         clEnumValN(GenFuncNames, "gen-func-names",
46*fd3907ccSCallum Fare                    "Generate a list of all Offload API function names"),
47*fd3907ccSCallum Fare         clEnumValN(
48*fd3907ccSCallum Fare             GenImplFuncDecls, "gen-impl-func-decls",
49*fd3907ccSCallum Fare             "Generate declarations for Offload API implementation functions"),
50*fd3907ccSCallum Fare         clEnumValN(GenEntryPoints, "gen-entry-points",
51*fd3907ccSCallum Fare                    "Generate Offload API wrapper function definitions"),
52*fd3907ccSCallum Fare         clEnumValN(GenPrintHeader, "gen-print-header",
53*fd3907ccSCallum Fare                    "Generate Offload API print header"),
54*fd3907ccSCallum Fare         clEnumValN(GenExports, "gen-exports",
55*fd3907ccSCallum Fare                    "Generate export file for the Offload library")));
56*fd3907ccSCallum Fare }
57*fd3907ccSCallum Fare 
58*fd3907ccSCallum Fare static bool OffloadTableGenMain(raw_ostream &OS, const RecordKeeper &Records) {
59*fd3907ccSCallum Fare   switch (Action) {
60*fd3907ccSCallum Fare   case PrintRecords:
61*fd3907ccSCallum Fare     OS << Records;
62*fd3907ccSCallum Fare     break;
63*fd3907ccSCallum Fare   case DumpJSON:
64*fd3907ccSCallum Fare     EmitJSON(Records, OS);
65*fd3907ccSCallum Fare     break;
66*fd3907ccSCallum Fare   case GenAPI:
67*fd3907ccSCallum Fare     EmitOffloadAPI(Records, OS);
68*fd3907ccSCallum Fare     break;
69*fd3907ccSCallum Fare   case GenFuncNames:
70*fd3907ccSCallum Fare     EmitOffloadFuncNames(Records, OS);
71*fd3907ccSCallum Fare     break;
72*fd3907ccSCallum Fare   case GenImplFuncDecls:
73*fd3907ccSCallum Fare     EmitOffloadImplFuncDecls(Records, OS);
74*fd3907ccSCallum Fare     break;
75*fd3907ccSCallum Fare   case GenEntryPoints:
76*fd3907ccSCallum Fare     EmitOffloadEntryPoints(Records, OS);
77*fd3907ccSCallum Fare     break;
78*fd3907ccSCallum Fare   case GenPrintHeader:
79*fd3907ccSCallum Fare     EmitOffloadPrintHeader(Records, OS);
80*fd3907ccSCallum Fare     break;
81*fd3907ccSCallum Fare   case GenExports:
82*fd3907ccSCallum Fare     EmitOffloadExports(Records, OS);
83*fd3907ccSCallum Fare     break;
84*fd3907ccSCallum Fare   }
85*fd3907ccSCallum Fare 
86*fd3907ccSCallum Fare   return false;
87*fd3907ccSCallum Fare }
88*fd3907ccSCallum Fare 
89*fd3907ccSCallum Fare int OffloadTblgenMain(int argc, char **argv) {
90*fd3907ccSCallum Fare   InitLLVM y(argc, argv);
91*fd3907ccSCallum Fare   cl::ParseCommandLineOptions(argc, argv);
92*fd3907ccSCallum Fare   return TableGenMain(argv[0], &OffloadTableGenMain);
93*fd3907ccSCallum Fare }
94*fd3907ccSCallum Fare } // namespace tblgen
95*fd3907ccSCallum Fare } // namespace offload
96*fd3907ccSCallum Fare } // namespace llvm
97*fd3907ccSCallum Fare 
98*fd3907ccSCallum Fare using namespace llvm;
99*fd3907ccSCallum Fare using namespace offload::tblgen;
100*fd3907ccSCallum Fare 
101*fd3907ccSCallum Fare int main(int argc, char **argv) { return OffloadTblgenMain(argc, argv); }
102