3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-09-12 04:31:29 +00:00
This commit is contained in:
Logikable 2025-09-09 09:27:16 +08:00 committed by GitHub
commit 225356617d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 35 additions and 9 deletions

View file

@ -39,7 +39,7 @@
YOSYS_NAMESPACE_BEGIN
std::vector<FILE*> log_files;
std::vector<std::ostream*> log_streams;
std::vector<std::ostream*> log_streams, log_warning_streams;
std::vector<std::string> log_scratchpads;
std::map<std::string, std::set<std::string>> log_hdump;
std::vector<std::regex> log_warn_regexes, log_nowarn_regexes, log_werror_regexes;
@ -102,7 +102,7 @@ int gettimeofday(struct timeval *tv, struct timezone *tz)
}
#endif
void logv(const char *format, va_list ap)
void logv(LogSeverity severity, const char *format, va_list ap)
{
while (format[0] == '\n' && format[1] != 0) {
log("\n");
@ -159,6 +159,10 @@ void logv(const char *format, va_list ap)
for (auto f : log_streams)
*f << time_str;
if (severity >= LogSeverity::LOG_WARNING)
for (auto f : log_warning_streams)
*f << time_str;
}
for (auto f : log_files)
@ -167,6 +171,12 @@ void logv(const char *format, va_list ap)
for (auto f : log_streams)
*f << str;
if (severity >= LogSeverity::LOG_WARNING)
for (auto f : log_warning_streams) {
*f << str;
f->flush();
}
RTLIL::Design *design = yosys_get_design();
if (design != nullptr)
for (auto &scratchpad : log_scratchpads)
@ -223,7 +233,7 @@ void logv_header(RTLIL::Design *design, const char *format, va_list ap)
header_id += stringf("%s%d", header_id.empty() ? "" : ".", c);
log("%s. ", header_id.c_str());
logv(format, ap);
logv(LogSeverity::LOG_INFO, format, ap);
log_flush();
if (log_hdump_all)
@ -289,7 +299,7 @@ static void logv_warning_with_prefix(const char *prefix,
if (log_errfile != NULL && !log_quiet_warnings)
log_files.push_back(log_errfile);
log("%s%s", prefix, message.c_str());
log(LogSeverity::LOG_WARNING, "%s%s", prefix, message.c_str());
log_flush();
if (log_errfile != NULL && !log_quiet_warnings)
@ -333,7 +343,7 @@ void log_file_info(const std::string &filename, int lineno,
va_start(ap, format);
std::string fmt = stringf("%s:%d: Info: %s",
filename.c_str(), lineno, format);
logv(fmt.c_str(), ap);
logv(LogSeverity::LOG_INFO, fmt.c_str(), ap);
va_end(ap);
}
@ -357,7 +367,7 @@ static void logv_error_with_prefix(const char *prefix,
f = stderr;
log_last_error = vstringf(format, ap);
log("%s%s", prefix, log_last_error.c_str());
log(LogSeverity::LOG_ERROR, "%s%s", prefix, log_last_error.c_str());
log_flush();
log_make_debug = bak_log_make_debug;
@ -415,7 +425,15 @@ void log(const char *format, ...)
{
va_list ap;
va_start(ap, format);
logv(format, ap);
logv(LogSeverity::LOG_INFO, format, ap);
va_end(ap);
}
void log(LogSeverity severity, const char *format, ...)
{
va_list ap;
va_start(ap, format);
logv(severity, format, ap);
va_end(ap);
}
@ -479,7 +497,7 @@ void log_cmd_error(const char *format, ...)
pop_errfile = true;
}
log("ERROR: %s", log_last_error.c_str());
log(LogSeverity::LOG_ERROR, "ERROR: %s", log_last_error.c_str());
log_flush();
if (pop_errfile)

View file

@ -94,8 +94,15 @@ YOSYS_NAMESPACE_BEGIN
struct log_cmd_error_exception { };
enum LogSeverity {
LOG_INFO,
LOG_WARNING,
LOG_ERROR
};
extern std::vector<FILE*> log_files;
extern std::vector<std::ostream*> log_streams;
extern std::vector<std::ostream*> log_warning_streams;
extern std::vector<std::string> log_scratchpads;
extern std::map<std::string, std::set<std::string>> log_hdump;
extern std::vector<std::regex> log_warn_regexes, log_nowarn_regexes, log_werror_regexes;
@ -119,7 +126,7 @@ extern int log_make_debug;
extern int log_force_debug;
extern int log_debug_suppressed;
void logv(const char *format, va_list ap);
void logv(LogSeverity severity, const char *format, va_list ap);
void logv_header(RTLIL::Design *design, const char *format, va_list ap);
void logv_warning(const char *format, va_list ap);
void logv_warning_noprefix(const char *format, va_list ap);
@ -127,6 +134,7 @@ void logv_warning_noprefix(const char *format, va_list ap);
[[noreturn]] void logv_file_error(const string &filename, int lineno, const char *format, va_list ap);
void log(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2));
void log(LogSeverity severity, const char *format, ...) YS_ATTRIBUTE(format(printf, 2, 3));
void log_header(RTLIL::Design *design, const char *format, ...) YS_ATTRIBUTE(format(printf, 2, 3));
void log_warning(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2));
void log_experimental(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2));