diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2018-08-11 13:04:51 +0200 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2018-08-11 13:04:51 +0200 |
commit | b400cd8d7326ac798c9da76de3c2a11f2d96b6a7 (patch) | |
tree | 585c647ba6728a745133693d0f7e4ea8ce5cc0e0 /common/project.cc | |
parent | e5006d4f2f767aab5c06d4e95151687a54902ad9 (diff) | |
download | nextpnr-b400cd8d7326ac798c9da76de3c2a11f2d96b6a7.tar.gz nextpnr-b400cd8d7326ac798c9da76de3c2a11f2d96b6a7.tar.bz2 nextpnr-b400cd8d7326ac798c9da76de3c2a11f2d96b6a7.zip |
Read settings and check validity
Diffstat (limited to 'common/project.cc')
-rw-r--r-- | common/project.cc | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/common/project.cc b/common/project.cc index 8ee78c4a..b0ebe961 100644 --- a/common/project.cc +++ b/common/project.cc @@ -70,8 +70,7 @@ void ProjectHandler::save(Context *ctx, std::string filename) root.put("project.params.freq", int(ctx->target_freq / 1e6)); root.put("project.params.seed", ctx->rngstate); saveArch(ctx, root, proj.parent_path().string()); - for(auto const &item : ctx->settings) - { + for (auto const &item : ctx->settings) { std::string path = "project.settings."; path += item.first.c_str(ctx); std::replace(path.begin(), path.end(), '/', '.'); @@ -83,6 +82,19 @@ void ProjectHandler::save(Context *ctx, std::string filename) } } +void addSettings(Context *ctx, std::string path, pt::ptree sub) +{ + for (pt::ptree::value_type &v : sub) { + const std::string &key = v.first; + const boost::property_tree::ptree &subtree = v.second; + if (subtree.empty()) { + ctx->settings.emplace(ctx->id(path + key), subtree.get_value<std::string>().c_str()); + } else { + addSettings(ctx, path + key + "/", subtree); + } + } +} + std::unique_ptr<Context> ProjectHandler::load(std::string filename) { std::unique_ptr<Context> ctx; @@ -118,6 +130,10 @@ std::unique_ptr<Context> ProjectHandler::load(std::string filename) if (params.count("seed")) ctx->rngseed(params.get<uint64_t>("seed")); } + if (project.count("settings")) { + addSettings(ctx.get(), "", project.get_child("settings")); + } + loadArch(ctx.get(), root, proj.parent_path().string()); } catch (...) { log_error("Error loading project file.\n"); |