From cd5048db2456ced60801350e9bf982fba7d55e24 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Wed, 22 Jan 2025 11:32:42 +0100 Subject: [PATCH] util/log: Add logger_ohos Use OHOS's HiLog module for logging. Signed-off-by: Christian Gmeiner --- src/util/log.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ src/util/meson.build | 4 ++++ 2 files changed, 50 insertions(+) diff --git a/src/util/log.c b/src/util/log.c index b594a8f8c30..604a7ca9324 100644 --- a/src/util/log.c +++ b/src/util/log.c @@ -44,12 +44,20 @@ #include #endif +#if DETECT_OS_OHOS +/* There is a conflict with syslog.h */ +#undef LOG_DEBUG +#undef LOG_INFO +#include +#endif + enum mesa_log_control { MESA_LOG_CONTROL_NULL = 1 << 0, MESA_LOG_CONTROL_FILE = 1 << 1, MESA_LOG_CONTROL_SYSLOG = 1 << 2, MESA_LOG_CONTROL_ANDROID = 1 << 3, MESA_LOG_CONTROL_WINDBG = 1 << 4, + MESA_LOG_CONTROL_OHOS = 1 << 5, MESA_LOG_CONTROL_LOGGER_MASK = 0xff, MESA_LOG_CONTROL_WAIT = 1 << 8, @@ -68,6 +76,7 @@ static const struct debug_control mesa_log_control_options[] = { { "syslog", MESA_LOG_CONTROL_SYSLOG }, { "android", MESA_LOG_CONTROL_ANDROID }, { "windbg", MESA_LOG_CONTROL_WINDBG }, + { "ohos", MESA_LOG_CONTROL_OHOS }, /* flags */ { "wait", MESA_LOG_CONTROL_WAIT }, { NULL, 0 }, @@ -120,6 +129,8 @@ mesa_log_init_once(void) /* pick the default loggers */ #if DETECT_OS_ANDROID mesa_log_control |= MESA_LOG_CONTROL_ANDROID; +#elif DETECT_OS_OHOS + mesa_log_control |= MESA_LOG_CONTROL_OHOS; #else mesa_log_control |= MESA_LOG_CONTROL_FILE; #endif @@ -420,6 +431,38 @@ logger_windbg(enum mesa_log_level level, #endif /* DETECT_OS_WINDOWS */ +#if DETECT_OS_OHOS + +static inline LogLevel +level_to_ohos(enum mesa_log_level l) +{ + switch (l) { + case MESA_LOG_ERROR: return LOG_ERROR; + case MESA_LOG_WARN: return LOG_WARN; + case MESA_LOG_INFO: return LOG_INFO; + case MESA_LOG_DEBUG: return LOG_DEBUG; + case MESA_NUM_LOG_LEVELS: + break; + } + + UNREACHABLE("bad mesa_log_level"); +} + +static void +logger_ohos(enum mesa_log_level level, + const char *tag, + const char *format, + va_list va) +{ + char local_msg[1024]; + char *msg = logger_vasnprintf(local_msg, sizeof(local_msg), 0, level, tag, + format, va); + + HiLogPrint(LOG_APP, level_to_ohos(level), 0xFF00, tag, "%{public}s", msg); +} + +#endif /* DETECT_OS_OHOS */ + /* This is for use with debug functions that take a FILE, such as * nir_print_shader, although switching to nir_log_shader* is preferred. */ @@ -460,6 +503,9 @@ mesa_log_v(enum mesa_log_level level, const char *tag, const char *format, #endif #if DETECT_OS_WINDOWS { MESA_LOG_CONTROL_WINDBG, logger_windbg }, +#endif +#if DETECT_OS_OHOS + { MESA_LOG_CONTROL_OHOS, logger_ohos }, #endif }; diff --git a/src/util/meson.build b/src/util/meson.build index 30cf227b13d..0b0ad552e1a 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -299,6 +299,10 @@ if with_platform_haiku deps_for_libmesa_util += dep_network endif +if with_platform_ohos + deps_for_libmesa_util += dependency('libhilog') +endif + if with_perfetto files_mesa_util += files( 'perf/u_perfetto.cc',