diff options
Diffstat (limited to 'generic')
| -rw-r--r-- | generic/main.cc | 14 | 
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;  }  | 
