//===- offload-tblgen/offload-tblgen.cpp ----------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This is a Tablegen tool that produces source files for the Offload project. // See offload/API/README.md for more information. // //===----------------------------------------------------------------------===// #include "llvm/Support/CommandLine.h" #include "llvm/Support/InitLLVM.h" #include "llvm/TableGen/Main.h" #include "llvm/TableGen/Record.h" #include "Generators.hpp" namespace llvm { namespace offload { namespace tblgen { enum ActionType { PrintRecords, DumpJSON, GenAPI, GenDoc, GenFuncNames, GenImplFuncDecls, GenEntryPoints, GenPrintHeader, GenExports, GenErrcodes, GenInfo, }; namespace { cl::opt Action( cl::desc("Action to perform:"), cl::values( clEnumValN(PrintRecords, "print-records", "Print all records to stdout (default)"), clEnumValN(DumpJSON, "dump-json", "Dump all records as machine-readable JSON"), clEnumValN(GenAPI, "gen-api", "Generate Offload API header contents"), clEnumValN(GenDoc, "gen-doc", "Generate Offload API documentation contents"), clEnumValN(GenFuncNames, "gen-func-names", "Generate a list of all Offload API function names"), clEnumValN( GenImplFuncDecls, "gen-impl-func-decls", "Generate declarations for Offload API implementation functions"), clEnumValN(GenEntryPoints, "gen-entry-points", "Generate Offload API wrapper function definitions"), clEnumValN(GenPrintHeader, "gen-print-header", "Generate Offload API print header"), clEnumValN(GenExports, "gen-exports", "Generate export file for the Offload library"), clEnumValN(GenErrcodes, "gen-errcodes", "Generate Offload Error Code enum"), clEnumValN(GenInfo, "gen-info", "Generate Offload Info enum"))); } static bool OffloadTableGenMain(raw_ostream &OS, const RecordKeeper &Records) { switch (Action) { case PrintRecords: OS << Records; break; case DumpJSON: EmitJSON(Records, OS); break; case GenAPI: EmitOffloadAPI(Records, OS); break; case GenDoc: EmitOffloadDoc(Records, OS); break; case GenFuncNames: EmitOffloadFuncNames(Records, OS); break; case GenImplFuncDecls: EmitOffloadImplFuncDecls(Records, OS); break; case GenEntryPoints: EmitOffloadEntryPoints(Records, OS); break; case GenPrintHeader: EmitOffloadPrintHeader(Records, OS); break; case GenExports: EmitOffloadExports(Records, OS); break; case GenErrcodes: EmitOffloadErrcodes(Records, OS); break; case GenInfo: EmitOffloadInfo(Records, OS); break; } return false; } int OffloadTblgenMain(int argc, char **argv) { InitLLVM y(argc, argv); cl::ParseCommandLineOptions(argc, argv); return TableGenMain(argv[0], &OffloadTableGenMain); } } // namespace tblgen } // namespace offload } // namespace llvm using namespace llvm; using namespace offload::tblgen; int main(int argc, char **argv) { return OffloadTblgenMain(argc, argv); }