summaryrefslogtreecommitdiff
path: root/llama.cpp/examples/llama.android/lib/src/main/cpp/logging.h
diff options
context:
space:
mode:
Diffstat (limited to 'llama.cpp/examples/llama.android/lib/src/main/cpp/logging.h')
-rw-r--r--llama.cpp/examples/llama.android/lib/src/main/cpp/logging.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/llama.cpp/examples/llama.android/lib/src/main/cpp/logging.h b/llama.cpp/examples/llama.android/lib/src/main/cpp/logging.h
new file mode 100644
index 0000000..2e768d2
--- /dev/null
+++ b/llama.cpp/examples/llama.android/lib/src/main/cpp/logging.h
@@ -0,0 +1,61 @@
+//
+// Created by Han Yin on 10/31/25.
+//
+
+#ifndef AICHAT_LOGGING_H
+#define AICHAT_LOGGING_H
+
+#endif //AICHAT_LOGGING_H
+
+#pragma once
+#include <android/log.h>
+
+#ifndef LOG_TAG
+#define LOG_TAG "ai-chat"
+#endif
+
+#ifndef LOG_MIN_LEVEL
+#if defined(NDEBUG)
+#define LOG_MIN_LEVEL ANDROID_LOG_INFO
+#else
+#define LOG_MIN_LEVEL ANDROID_LOG_VERBOSE
+#endif
+#endif
+
+static inline int ai_should_log(int prio) {
+ return __android_log_is_loggable(prio, LOG_TAG, LOG_MIN_LEVEL);
+}
+
+#if LOG_MIN_LEVEL <= ANDROID_LOG_VERBOSE
+#define LOGv(...) do { if (ai_should_log(ANDROID_LOG_VERBOSE)) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__); } while (0)
+#else
+#define LOGv(...) ((void)0)
+#endif
+
+#if LOG_MIN_LEVEL <= ANDROID_LOG_DEBUG
+#define LOGd(...) do { if (ai_should_log(ANDROID_LOG_DEBUG)) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__); } while (0)
+#else
+#define LOGd(...) ((void)0)
+#endif
+
+#define LOGi(...) do { if (ai_should_log(ANDROID_LOG_INFO )) __android_log_print(ANDROID_LOG_INFO , LOG_TAG, __VA_ARGS__); } while (0)
+#define LOGw(...) do { if (ai_should_log(ANDROID_LOG_WARN )) __android_log_print(ANDROID_LOG_WARN , LOG_TAG, __VA_ARGS__); } while (0)
+#define LOGe(...) do { if (ai_should_log(ANDROID_LOG_ERROR)) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__); } while (0)
+
+static inline int android_log_prio_from_ggml(enum ggml_log_level level) {
+ switch (level) {
+ case GGML_LOG_LEVEL_ERROR: return ANDROID_LOG_ERROR;
+ case GGML_LOG_LEVEL_WARN: return ANDROID_LOG_WARN;
+ case GGML_LOG_LEVEL_INFO: return ANDROID_LOG_INFO;
+ case GGML_LOG_LEVEL_DEBUG: return ANDROID_LOG_DEBUG;
+ default: return ANDROID_LOG_DEFAULT;
+ }
+}
+
+static inline void aichat_android_log_callback(enum ggml_log_level level,
+ const char* text,
+ void* /*user*/) {
+ const int prio = android_log_prio_from_ggml(level);
+ if (!ai_should_log(prio)) return;
+ __android_log_write(prio, LOG_TAG, text);
+}