Added "yosys -D ALL"
authorClifford Wolf <clifford@clifford.at>
Sun, 24 Apr 2016 15:12:34 +0000 (17:12 +0200)
committerClifford Wolf <clifford@clifford.at>
Sun, 24 Apr 2016 15:12:34 +0000 (17:12 +0200)
kernel/driver.cc
kernel/log.cc
kernel/log.h

index 0844eaa2e9dcf2fd818e7698c4bc4f23542aaa14..45cdd461dd06e4c82be89bd43dfcf88eb441af73 100644 (file)
@@ -216,6 +216,7 @@ int main(int argc, char **argv)
                printf("    -D <header_id>[:<filename>]\n");
                printf("        dump the design when printing the specified log header to a file.\n");
                printf("        yosys_dump_<header_id>.il is used as filename if none is specified.\n");
+               printf("        Use 'ALL' as <header_id> 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:
index f2b343dffa7564d993cce006470160475c485cd2..fe84184a57e8c6b49d2e3e35bf6ad5f62a263c82 100644 (file)
@@ -41,6 +41,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;
+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());
index 6090f82730bc2d32ba83df4fbf2f73b71f0cb378..c265bae427f84835f0931bf65ac14e9018742cf6 100644 (file)
@@ -48,6 +48,7 @@ struct log_cmd_error_exception { };
 extern std::vector<FILE*> log_files;
 extern std::vector<std::ostream*> log_streams;
 extern std::map<std::string, std::set<std::string>> log_hdump;
+extern bool log_hdump_all;
 extern FILE *log_errfile;
 extern SHA1 *log_hasher;