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