Files
2022-08-10 09:49:24 +02:00

69 lines
2.2 KiB
C++

#pragma once
/*
* This file is distributed under the MIT License. See LICENSE.md for details.
*/
#include <string>
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/PluginLoader.h"
#include "revng/Pipes/PipelineManager.h"
namespace revng::pipes {
class ToolCLOptions {
private:
llvm::cl::list<std::string> InputPipeline;
llvm::cl::opt<std::string> ModelOverride;
llvm::cl::list<std::string> EnablingFlags;
llvm::cl::opt<std::string> ExecutionDirectory;
llvm::cl::alias A1;
public:
ToolCLOptions(llvm::cl::OptionCategory &Category) :
InputPipeline("P", llvm::cl::desc("<Pipeline>"), llvm::cl::cat(Category)),
ModelOverride("m",
llvm::cl::desc("Load the model from a provided file"),
llvm::cl::cat(Category),
llvm::cl::init("")),
EnablingFlags("f",
llvm::cl::desc("list of pipeline enabling flags"),
llvm::cl::cat(Category)),
ExecutionDirectory("resume",
llvm::cl::desc("Directory from which all containers "
"will be loaded before everything else "
"and to which it will be store after "
"everything else"),
llvm::cl::cat(Category)),
A1("l",
llvm::cl::desc("Alias for --load"),
llvm::cl::aliasopt(llvm::LoadOpt),
llvm::cl::cat(Category))
{}
llvm::Error
overrideModel(llvm::StringRef ModelOverride, PipelineManager &Manager) {
const auto &Name = ModelGlobalName;
auto *Model(cantFail(Manager.context().getGlobal<ModelGlobal>(Name)));
return Model->loadFromDisk(ModelOverride);
}
llvm::Expected<revng::pipes::PipelineManager> makeManager() {
auto Manager = revng::pipes::PipelineManager::create(InputPipeline,
EnablingFlags,
ExecutionDirectory);
if (not Manager)
return Manager;
if (not ModelOverride.empty())
if (auto Err = overrideModel(ModelOverride, *Manager); Err)
return std::move(Err);
return Manager;
}
};
} // namespace revng::pipes