From 9aa4b3309c35d842e2b1a04172745a5e34a3c445 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sun, 24 Apr 2016 17:12:34 +0200 Subject: [PATCH] Added "yosys -D ALL" --- kernel/driver.cc | 23 +++++++++++++++++------ kernel/log.cc | 4 ++++ kernel/log.h | 1 + 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/kernel/driver.cc b/kernel/driver.cc index 0844eaa2e..45cdd461d 100644 --- a/kernel/driver.cc +++ b/kernel/driver.cc @@ -216,6 +216,7 @@ int main(int argc, char **argv) printf(" -D [:]\n"); printf(" dump the design when printing the specified log header to a file.\n"); printf(" yosys_dump_.il is used as filename if none is specified.\n"); + printf(" Use 'ALL' as to dump at every header.\n"); printf("\n"); printf(" -V\n"); printf(" print version information and exit\n"); @@ -322,13 +323,23 @@ int main(int argc, char **argv) case 'D': { auto args = split_tokens(optarg, ":"); - if (GetSize(args) == 1) - args.push_back("yosys_dump_" + args[0] + ".il"); - if (GetSize(args) != 2) { - fprintf(stderr, "Invalid number of tokens in -D.\n"); - exit(1); + if (!args.empty() && args[0] == "ALL") { + if (GetSize(args) != 1) { + fprintf(stderr, "Invalid number of tokens in -D ALL.\n"); + exit(1); + } + log_hdump_all = true; + } else { + if (!args.empty() && !args[0].empty() && args[0].back() == '.') + args[0].pop_back(); + if (GetSize(args) == 1) + args.push_back("yosys_dump_" + args[0] + ".il"); + if (GetSize(args) != 2) { + fprintf(stderr, "Invalid number of tokens in -D.\n"); + exit(1); + } + log_hdump[args[0]].insert(args[1]); } - log_hdump[args[0]].insert(args[1]); } break; default: diff --git a/kernel/log.cc b/kernel/log.cc index f2b343dff..fe84184a5 100644 --- a/kernel/log.cc +++ b/kernel/log.cc @@ -41,6 +41,7 @@ YOSYS_NAMESPACE_BEGIN std::vector log_files; std::vector log_streams; std::map> log_hdump; +bool log_hdump_all = false; FILE *log_errfile = NULL; SHA1 *log_hasher = NULL; @@ -159,6 +160,9 @@ void logv_header(RTLIL::Design *design, const char *format, va_list ap) logv(format, ap); log_flush(); + if (log_hdump_all) + log_hdump[header_id].insert("yosys_dump_" + header_id + ".il"); + 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()); diff --git a/kernel/log.h b/kernel/log.h index 6090f8273..c265bae42 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -48,6 +48,7 @@ struct log_cmd_error_exception { }; extern std::vector log_files; extern std::vector log_streams; extern std::map> log_hdump; +extern bool log_hdump_all; extern FILE *log_errfile; extern SHA1 *log_hasher; -- 2.30.2