aboutsummaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2022-08-15 12:15:00 +0200
committergatecat <gatecat@ds0.me>2022-08-15 12:15:00 +0200
commit47da562600315f99b4de269a056f00b9d14ed62f (patch)
treeb37560d794e161140162a8d1a8da749874026d63 /generic
parentb653e39991429dc3350447f8b69030c454dd2ba7 (diff)
downloadnextpnr-47da562600315f99b4de269a056f00b9d14ed62f.tar.gz
nextpnr-47da562600315f99b4de269a056f00b9d14ed62f.tar.bz2
nextpnr-47da562600315f99b4de269a056f00b9d14ed62f.zip
viaduct: Allow passing command line options to uarch with -o
Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to 'generic')
-rw-r--r--generic/main.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/generic/main.cc b/generic/main.cc
index d08ae381..3ee1c790 100644
--- a/generic/main.cc
+++ b/generic/main.cc
@@ -49,6 +49,8 @@ po::options_description GenericCommandHandler::getArchOptions()
po::options_description specific("Architecture specific options");
specific.add_options()("uarch", po::value<std::string>(), uarch_help.c_str());
specific.add_options()("no-iobs", "disable automatic IO buffer insertion");
+ specific.add_options()("vopt,o", po::value<std::vector<std::string>>(), "options to pass to the viaduct uarch");
+
return specific;
}
@@ -68,6 +70,16 @@ std::unique_ptr<Context> GenericCommandHandler::createContext(dict<std::string,
if (vm.count("uarch")) {
std::string uarch_name = vm["uarch"].as<std::string>();
dict<std::string, std::string> args; // TODO
+ if (vm.count("vopt")) {
+ std::vector<std::string> options = vm["vopt"].as<std::vector<std::string>>();
+ for (const auto &opt : options) {
+ size_t epos = opt.find('=');
+ if (epos == std::string::npos)
+ args[opt] = "";
+ else
+ args[opt.substr(0, epos)] = opt.substr(epos + 1);
+ }
+ }
auto uarch = ViaductArch::create(uarch_name, args);
if (!uarch) {
std::string all_uarches = ViaductArch::list();
@@ -75,6 +87,8 @@ std::unique_ptr<Context> GenericCommandHandler::createContext(dict<std::string,
}
ctx->uarch = std::move(uarch);
ctx->uarch->init(ctx.get());
+ } else if (vm.count("vopt")) {
+ log_error("Viaduct options passed in non-viaduct mode!\n");
}
return ctx;
}