| //===-- 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 <memory> |
| #include <string> |
| #include <unordered_map> |
| |
| namespace llvm { |
| |
| class raw_ostream; |
| class RecordKeeper; |
| |
| } // namespace llvm |
| |
| namespace llvm_libc { |
| |
| class Command; |
| |
| class Generator { |
| llvm::StringRef HeaderDefFile; |
| const std::vector<std::string> &EntrypointNameList; |
| llvm::StringRef StdHeader; |
| std::unordered_map<std::string, std::string> &ArgMap; |
| |
| std::unique_ptr<Command> IncludeFileCmd; |
| std::unique_ptr<Command> 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<std::string> &EN, |
| const std::string &Header, |
| std::unordered_map<std::string, std::string> &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 |