/// \file Main.cpp /// \brief // // This file is distributed under the MIT License. See LICENSE.md for details. // #include #include "llvm/Support/CommandLine.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/raw_ostream.h" #include "revng/Model/ToolHelpers.h" #include "revng/Support/MetaAddress/YAMLTraits.h" #include "revng/Support/YAMLTraits.h" #include "revng/TupleTree/TupleTreeDiff.h" using namespace llvm; static cl::OptionCategory ThisToolCategory("Tool options", ""); static cl::opt PathModel(cl::Positional, cl::cat(ThisToolCategory), cl::desc(""), cl::init("-"), cl::value_desc("model")); static cl::opt DiffPath(cl::Positional, cl::cat(ThisToolCategory), cl::desc(""), cl::value_desc("model")); static ModelOutputOptions Options(ThisToolCategory); int main(int Argc, char *Argv[]) { cl::HideUnrelatedOptions({ &ThisToolCategory }); cl::ParseCommandLineOptions(Argc, Argv); ExitOnError ExitOnError; auto Model = ModelInModule::load(PathModel); if (not Model) ExitOnError(Model.takeError()); auto Diff = deserializeFile>(DiffPath); if (not Diff) ExitOnError(Diff.takeError()); Diff->apply(Model->getModel()); auto DesiredOutput = Options.getDesiredOutput(Model->hasModule()); ExitOnError(Model->save(Options.getPath(), DesiredOutput)); return EXIT_SUCCESS; }