//===- yaml2obj - Convert YAML to a binary object file --------------------===// // // 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 program takes a YAML description of an object file and outputs the // binary equivalent. // // This is used for writing tests that require binary files. // //===----------------------------------------------------------------------===// #include "llvm/ObjectYAML/yaml2obj.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ObjectYAML/ObjectYAML.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/InitLLVM.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/WithColor.h" #include "llvm/Support/YAMLTraits.h" #include "llvm/Support/raw_ostream.h" #include using namespace llvm; static cl::opt Input(cl::Positional, cl::desc(""), cl::init("-")); cl::opt DocNum("docnum", cl::init(1), cl::desc("Read specified document from input (default = 1)")); static cl::opt OutputFilename("o", cl::desc("Output filename"), cl::value_desc("filename")); int main(int argc, char **argv) { InitLLVM X(argc, argv); cl::ParseCommandLineOptions(argc, argv); if (OutputFilename.empty()) OutputFilename = "-"; auto ErrHandler = [](const Twine &Msg) { WithColor::error(errs(), "yaml2obj") << Msg << "\n"; }; std::error_code EC; std::unique_ptr Out( new ToolOutputFile(OutputFilename, EC, sys::fs::OF_None)); if (EC) { ErrHandler("failed to open '" + OutputFilename + "': " + EC.message()); return 1; } ErrorOr> Buf = MemoryBuffer::getFileOrSTDIN(Input); if (!Buf) return 1; yaml::Input YIn(Buf.get()->getBuffer()); if (!convertYAML(YIn, Out->os(), ErrHandler, DocNum)) return 1; Out->keep(); Out->os().flush(); return 0; }