//===-- The main header generation class ------------------------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// #ifndef LLVM_LIBC_UTILS_HDRGEN_GENERATOR_H #define LLVM_LIBC_UTILS_HDRGEN_GENERATOR_H #include "Command.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include #include #include namespace llvm { class raw_ostream; class RecordKeeper; } // namespace llvm namespace llvm_libc { class Command; class Generator { llvm::StringRef HeaderDefFile; const std::vector &EntrypointNameList; llvm::StringRef StdHeader; std::unordered_map &ArgMap; std::unique_ptr IncludeFileCmd; std::unique_ptr PublicAPICmd; Command *getCommandHandler(llvm::StringRef CommandName); void parseCommandArgs(llvm::StringRef ArgStr, ArgVector &Args); void printError(llvm::StringRef Msg); public: Generator(const std::string &DefFile, const std::vector &EN, const std::string &Header, std::unordered_map &Map) : HeaderDefFile(DefFile), EntrypointNameList(EN), StdHeader(Header), ArgMap(Map) {} void generate(llvm::raw_ostream &OS, llvm::RecordKeeper &Records); }; } // namespace llvm_libc #endif // LLVM_LIBC_UTILS_HDRGEN_GENERATOR_H