diff options
author | Andrew Zonenberg <azonenberg@drawersteak.com> | 2016-12-23 12:32:55 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-23 12:32:55 -0800 |
commit | 5ffede5c0e81b682268129b79f305733e11242be (patch) | |
tree | a0e70a25f3b4090912866264431662de67e1f226 /kernel | |
parent | a44cc7a3d1c21c37c7dfb88b92bb479389dfce16 (diff) | |
parent | 9f69a70d746e7907eed494941bc89a18159caa1b (diff) | |
download | yosys-5ffede5c0e81b682268129b79f305733e11242be.tar.gz yosys-5ffede5c0e81b682268129b79f305733e11242be.tar.bz2 yosys-5ffede5c0e81b682268129b79f305733e11242be.zip |
Merge pull request #1 from azonenberg-hk/master
Pull changes from HK trip
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/driver.cc | 11 | ||||
-rw-r--r-- | kernel/log.cc | 31 | ||||
-rw-r--r-- | kernel/log.h | 2 | ||||
-rw-r--r-- | kernel/register.cc | 2 | ||||
-rw-r--r-- | kernel/yosys.cc | 2 |
5 files changed, 44 insertions, 4 deletions
diff --git a/kernel/driver.cc b/kernel/driver.cc index f8d00c38d..3652ff4f1 100644 --- a/kernel/driver.cc +++ b/kernel/driver.cc @@ -218,6 +218,9 @@ int main(int argc, char **argv) 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(" -W regex\n"); + printf(" print a warning for all log messages matching the regex \n"); + printf("\n"); printf(" -V\n"); printf(" print version information and exit\n"); printf("\n"); @@ -238,7 +241,7 @@ int main(int argc, char **argv) } int opt; - while ((opt = getopt(argc, argv, "MXAQTVSm:f:Hh:b:o:p:l:L:qv:tds:c:D:")) != -1) + while ((opt = getopt(argc, argv, "MXAQTVSm:f:Hh:b:o:p:l:L:qv:tds:c:W:D:")) != -1) { switch (opt) { @@ -320,6 +323,12 @@ int main(int argc, char **argv) scriptfile = optarg; scriptfile_tcl = true; break; + case 'W': + log_warn_regexes.push_back(std::regex(optarg, + std::regex_constants::nosubs | + std::regex_constants::optimize | + std::regex_constants::egrep)); + break; case 'D': { auto args = split_tokens(optarg, ":"); diff --git a/kernel/log.cc b/kernel/log.cc index abc401f55..cd16bb344 100644 --- a/kernel/log.cc +++ b/kernel/log.cc @@ -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; +std::vector<std::regex> log_warn_regexes; bool log_hdump_all = false; FILE *log_errfile = NULL; SHA1 *log_hasher = NULL; @@ -136,6 +137,32 @@ void logv(const char *format, va_list ap) for (auto f : log_streams) *f << str; + + static std::string linebuffer; + static bool log_warn_regex_recusion_guard = false; + + if (!log_warn_regex_recusion_guard) + { + log_warn_regex_recusion_guard = true; + + if (log_warn_regexes.empty()) + { + linebuffer.clear(); + } + else + { + linebuffer += str; + + if (!linebuffer.empty() && linebuffer.back() == '\n') { + for (auto &re : log_warn_regexes) + if (std::regex_search(linebuffer, re)) + log_warning("Found log message matching -W regex:\n%s", str.c_str()); + linebuffer.clear(); + } + } + + log_warn_regex_recusion_guard = false; + } } void logv_header(RTLIL::Design *design, const char *format, va_list ap) @@ -262,8 +289,8 @@ void log_cmd_error(const char *format, ...) void log_spacer() { - while (log_newline_count < 2) - log("\n"); + if (log_newline_count < 2) log("\n"); + if (log_newline_count < 2) log("\n"); } void log_push() diff --git a/kernel/log.h b/kernel/log.h index 53480db31..5b1729eb1 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -23,6 +23,7 @@ #define LOG_H #include <time.h> +#include <regex> #ifndef _WIN32 # include <sys/time.h> @@ -48,6 +49,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 std::vector<std::regex> log_warn_regexes; extern bool log_hdump_all; extern FILE *log_errfile; extern SHA1 *log_hasher; diff --git a/kernel/register.cc b/kernel/register.cc index 7a1d0b44b..983577682 100644 --- a/kernel/register.cc +++ b/kernel/register.cc @@ -173,7 +173,7 @@ void Pass::call(RTLIL::Design *design, std::string command) } while (!tok.empty()) { - if (tok == "#") { + if (tok[0] == '#') { int stop; for (stop = 0; stop < GetSize(cmd_buf); stop++) if (cmd_buf[stop] == '\r' || cmd_buf[stop] == '\n') diff --git a/kernel/yosys.cc b/kernel/yosys.cc index 08fee9741..3d0aca78e 100644 --- a/kernel/yosys.cc +++ b/kernel/yosys.cc @@ -903,6 +903,8 @@ void run_backend(std::string filename, std::string command, RTLIL::Design *desig command = "verilog"; else if (filename.size() > 3 && filename.substr(filename.size()-3) == ".il") command = "ilang"; + else if (filename.size() > 4 && filename.substr(filename.size()-4) == ".aig") + command = "aiger"; else if (filename.size() > 5 && filename.substr(filename.size()-5) == ".blif") command = "blif"; else if (filename.size() > 5 && filename.substr(filename.size()-5) == ".edif") |