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

View file

@ -94,8 +94,15 @@ YOSYS_NAMESPACE_BEGIN
struct log_cmd_error_exception { }; struct log_cmd_error_exception { };
enum LogSeverity {
LOG_INFO,
LOG_WARNING,
LOG_ERROR
};
extern std::vector<FILE*> log_files; extern std::vector<FILE*> log_files;
extern std::vector<std::ostream*> log_streams; extern std::vector<std::ostream*> log_streams;
extern std::vector<std::ostream*> log_warning_streams;
extern std::vector<std::string> log_scratchpads; extern std::vector<std::string> log_scratchpads;
extern std::map<std::string, std::set<std::string>> log_hdump; 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; 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_force_debug;
extern int log_debug_suppressed; 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_header(RTLIL::Design *design, const char *format, va_list ap);
void logv_warning(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); 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); [[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(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_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_warning(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2));
void log_experimental(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2)); void log_experimental(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2));