aboutsummaryrefslogtreecommitdiffstats
path: root/common/project.cc
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2018-08-11 13:04:51 +0200
committerMiodrag Milanovic <mmicko@gmail.com>2018-08-11 13:04:51 +0200
commitb400cd8d7326ac798c9da76de3c2a11f2d96b6a7 (patch)
tree585c647ba6728a745133693d0f7e4ea8ce5cc0e0 /common/project.cc
parente5006d4f2f767aab5c06d4e95151687a54902ad9 (diff)
downloadnextpnr-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.cc20
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");