//===-- "main" function of libc-hdrgen ------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// #include "Generator.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/CommandLine.h" #include "llvm/TableGen/Main.h" #include #include namespace { llvm::cl::opt HeaderDefFile("def", llvm::cl::desc("Path to the .h.def file."), llvm::cl::value_desc(""), llvm::cl::Required); llvm::cl::opt StandardHeader( "header", llvm::cl::desc("The standard header file which is to be generated."), llvm::cl::value_desc("
")); llvm::cl::list EntrypointNamesOption( "e", llvm::cl::value_desc(""), llvm::cl::desc( "Each --e is one entrypoint (generated from entrypoints.txt)"), llvm::cl::OneOrMore); llvm::cl::list ReplacementValues( "args", llvm::cl::desc("Command separated = pairs."), llvm::cl::value_desc("[,name=value]")); void ParseArgValuePairs(std::unordered_map &Map) { for (std::string &R : ReplacementValues) { auto Pair = llvm::StringRef(R).split('='); Map[std::string(Pair.first)] = std::string(Pair.second); } } } // anonymous namespace namespace llvm_libc { bool HeaderGeneratorMain(llvm::raw_ostream &OS, llvm::RecordKeeper &Records) { std::unordered_map ArgMap; ParseArgValuePairs(ArgMap); Generator G(HeaderDefFile, EntrypointNamesOption, StandardHeader, ArgMap); G.generate(OS, Records); return false; } } // namespace llvm_libc int main(int argc, char *argv[]) { llvm::cl::ParseCommandLineOptions(argc, argv); return TableGenMain(argv[0], &llvm_libc::HeaderGeneratorMain); }