1 //===-- "main" function of libc-hdrgen ------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "Generator.h" 10 11 #include "llvm/ADT/StringRef.h" 12 #include "llvm/Support/CommandLine.h" 13 #include "llvm/TableGen/Main.h" 14 15 #include <string> 16 #include <unordered_map> 17 18 namespace { 19 20 llvm::cl::opt<std::string> 21 HeaderDefFile("def", llvm::cl::desc("Path to the .h.def file."), 22 llvm::cl::value_desc("<filename>"), llvm::cl::Required); 23 llvm::cl::opt<std::string> StandardHeader( 24 "header", 25 llvm::cl::desc("The standard header file which is to be generated."), 26 llvm::cl::value_desc("<header file>")); 27 llvm::cl::list<std::string> ReplacementValues( 28 "args", llvm::cl::desc("Command separated <argument name>=<value> pairs."), 29 llvm::cl::value_desc("<name=value>[,name=value]")); 30 31 void ParseArgValuePairs(std::unordered_map<std::string, std::string> &Map) { 32 for (std::string &R : ReplacementValues) { 33 auto Pair = llvm::StringRef(R).split('='); 34 Map[std::string(Pair.first)] = std::string(Pair.second); 35 } 36 } 37 38 } // anonymous namespace 39 40 namespace llvm_libc { 41 42 bool HeaderGeneratorMain(llvm::raw_ostream &OS, llvm::RecordKeeper &Records) { 43 std::unordered_map<std::string, std::string> ArgMap; 44 ParseArgValuePairs(ArgMap); 45 Generator G(HeaderDefFile, StandardHeader, ArgMap); 46 G.generate(OS, Records); 47 48 return false; 49 } 50 51 } // namespace llvm_libc 52 53 int main(int argc, char *argv[]) { 54 llvm::cl::ParseCommandLineOptions(argc, argv); 55 return TableGenMain(argv[0], &llvm_libc::HeaderGeneratorMain); 56 } 57