aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/log.cc
diff options
context:
space:
mode:
authorAndrew Zonenberg <azonenberg@drawersteak.com>2016-04-22 19:07:55 -0700
committerAndrew Zonenberg <azonenberg@drawersteak.com>2016-04-22 19:07:55 -0700
commitab11f2aa701f4ff7a8df98d2a4158ea1f661a205 (patch)
treed2c8e2b82b7cca57127bd9dd54d3eb40386a88f7 /kernel/log.cc
parentd90c1e952256dc00d070863835e061d73e4bc6b3 (diff)
parent7311be4028a9caad5a0fac1a3433220b4233ef84 (diff)
downloadyosys-ab11f2aa701f4ff7a8df98d2a4158ea1f661a205.tar.gz
yosys-ab11f2aa701f4ff7a8df98d2a4158ea1f661a205.tar.bz2
yosys-ab11f2aa701f4ff7a8df98d2a4158ea1f661a205.zip
Merge https://github.com/cliffordwolf/yosys
Diffstat (limited to 'kernel/log.cc')
-rw-r--r--kernel/log.cc20
1 files changed, 15 insertions, 5 deletions
diff --git a/kernel/log.cc b/kernel/log.cc
index 4f395c751..f2b343dff 100644
--- a/kernel/log.cc
+++ b/kernel/log.cc
@@ -40,6 +40,7 @@ YOSYS_NAMESPACE_BEGIN
std::vector<FILE*> log_files;
std::vector<std::ostream*> log_streams;
+std::map<std::string, std::set<std::string>> log_hdump;
FILE *log_errfile = NULL;
SHA1 *log_hasher = NULL;
@@ -136,7 +137,7 @@ void logv(const char *format, va_list ap)
*f << str;
}
-void logv_header(const char *format, va_list ap)
+void logv_header(RTLIL::Design *design, const char *format, va_list ap)
{
bool pop_errfile = false;
@@ -149,12 +150,21 @@ void logv_header(const char *format, va_list ap)
pop_errfile = true;
}
+ std::string header_id;
+
for (int c : header_count)
- log("%d.", c);
- log(" ");
+ header_id += stringf("%s%d", header_id.empty() ? "" : ".", c);
+
+ log("%s. ", header_id.c_str());
logv(format, ap);
log_flush();
+ if (log_hdump.count(header_id) && design != nullptr)
+ for (auto &filename : log_hdump.at(header_id)) {
+ log("Dumping current design to '%s'.\n", filename.c_str());
+ Pass::call(design, {"dump", "-o", filename});
+ }
+
if (pop_errfile)
log_files.pop_back();
}
@@ -206,11 +216,11 @@ void log(const char *format, ...)
va_end(ap);
}
-void log_header(const char *format, ...)
+void log_header(RTLIL::Design *design, const char *format, ...)
{
va_list ap;
va_start(ap, format);
- logv_header(format, ap);
+ logv_header(design, format, ap);
va_end(ap);
}