Fix verific -vlog-incdir and -vlog-libdir handling
authorClifford Wolf <clifford@clifford.at>
Mon, 16 Jul 2018 16:46:06 +0000 (18:46 +0200)
committerClifford Wolf <clifford@clifford.at>
Mon, 16 Jul 2018 16:47:42 +0000 (18:47 +0200)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
frontends/verific/verific.cc

index 54b68208268e3173ce3c293362d4dd30646e923b..8937cdde8014bef2e5937085dfe9ddece2b2807d 100644 (file)
@@ -65,6 +65,8 @@ int verific_verbose;
 bool verific_import_pending;
 string verific_error_msg;
 
+vector<string> verific_incdirs, verific_libdirs;
+
 void msg_func(msg_type_t msg_type, const char *message_id, linefile_type linefile, const char *msg, va_list args)
 {
        string message_prefix = stringf("VERIFIC-%s [%s] ",
@@ -1658,6 +1660,8 @@ void verific_import(Design *design, std::string top)
        veri_file::Reset();
        vhdl_file::Reset();
        Libset::Reset();
+       verific_incdirs.clear();
+       verific_libdirs.clear();
        verific_import_pending = false;
 
        if (!verific_error_msg.empty())
@@ -1814,13 +1818,13 @@ struct VerificPass : public Pass {
 
                if (GetSize(args) > argidx && args[argidx] == "-vlog-incdir") {
                        for (argidx++; argidx < GetSize(args); argidx++)
-                               veri_file::AddIncludeDir(args[argidx].c_str());
+                               verific_incdirs.push_back(args[argidx]);
                        goto check_error;
                }
 
                if (GetSize(args) > argidx && args[argidx] == "-vlog-libdir") {
                        for (argidx++; argidx < GetSize(args); argidx++)
-                               veri_file::AddYDir(args[argidx].c_str());
+                               verific_libdirs.push_back(args[argidx]);
                        goto check_error;
                }
 
@@ -1886,6 +1890,11 @@ struct VerificPass : public Pass {
                                }
                        }
 
+                       for (auto &dir : verific_incdirs)
+                               veri_file::AddIncludeDir(dir.c_str());
+                       for (auto &dir : verific_libdirs)
+                               veri_file::AddYDir(dir.c_str());
+
                        while (argidx < GetSize(args))
                                file_names.Insert(args[argidx++].c_str());
 
@@ -2139,6 +2148,8 @@ struct VerificPass : public Pass {
                        veri_file::Reset();
                        vhdl_file::Reset();
                        Libset::Reset();
+                       verific_incdirs.clear();
+                       verific_libdirs.clear();
                        verific_import_pending = false;
                        goto check_error;
                }