xref: /aosp_15_r20/external/cpuinfo/deps/clog/include/clog.h (revision 2b54f0db79fd8303838913b20ff3780cddaa909f)
1*2b54f0dbSXin Li #pragma once
2*2b54f0dbSXin Li 
3*2b54f0dbSXin Li #include <stdarg.h>
4*2b54f0dbSXin Li #include <stdlib.h>
5*2b54f0dbSXin Li #include <inttypes.h>
6*2b54f0dbSXin Li 
7*2b54f0dbSXin Li #define CLOG_NONE 0
8*2b54f0dbSXin Li #define CLOG_FATAL 1
9*2b54f0dbSXin Li #define CLOG_ERROR 2
10*2b54f0dbSXin Li #define CLOG_WARNING 3
11*2b54f0dbSXin Li #define CLOG_INFO 4
12*2b54f0dbSXin Li #define CLOG_DEBUG 5
13*2b54f0dbSXin Li 
14*2b54f0dbSXin Li #ifndef CLOG_VISIBILITY
15*2b54f0dbSXin Li 	#if defined(__ELF__)
16*2b54f0dbSXin Li 		#define CLOG_VISIBILITY __attribute__((__visibility__("internal")))
17*2b54f0dbSXin Li 	#elif defined(__MACH__)
18*2b54f0dbSXin Li 		#define CLOG_VISIBILITY __attribute__((__visibility__("hidden")))
19*2b54f0dbSXin Li 	#else
20*2b54f0dbSXin Li 		#define CLOG_VISIBILITY
21*2b54f0dbSXin Li 	#endif
22*2b54f0dbSXin Li #endif
23*2b54f0dbSXin Li 
24*2b54f0dbSXin Li #ifndef CLOG_ARGUMENTS_FORMAT
25*2b54f0dbSXin Li 	#if defined(__GNUC__)
26*2b54f0dbSXin Li 		#define CLOG_ARGUMENTS_FORMAT __attribute__((__format__(__printf__, 1, 2)))
27*2b54f0dbSXin Li 	#else
28*2b54f0dbSXin Li 		#define CLOG_ARGUMENTS_FORMAT
29*2b54f0dbSXin Li 	#endif
30*2b54f0dbSXin Li #endif
31*2b54f0dbSXin Li 
32*2b54f0dbSXin Li #ifdef __cplusplus
33*2b54f0dbSXin Li extern "C" {
34*2b54f0dbSXin Li #endif
35*2b54f0dbSXin Li 
36*2b54f0dbSXin Li CLOG_VISIBILITY void clog_vlog_debug(const char* module, const char* format, va_list args);
37*2b54f0dbSXin Li CLOG_VISIBILITY void clog_vlog_info(const char* module, const char* format, va_list args);
38*2b54f0dbSXin Li CLOG_VISIBILITY void clog_vlog_warning(const char* module, const char* format, va_list args);
39*2b54f0dbSXin Li CLOG_VISIBILITY void clog_vlog_error(const char* module, const char* format, va_list args);
40*2b54f0dbSXin Li CLOG_VISIBILITY void clog_vlog_fatal(const char* module, const char* format, va_list args);
41*2b54f0dbSXin Li 
42*2b54f0dbSXin Li #define CLOG_DEFINE_LOG_DEBUG(log_debug_function_name, module, level) \
43*2b54f0dbSXin Li 	CLOG_ARGUMENTS_FORMAT \
44*2b54f0dbSXin Li 	inline static void log_debug_function_name(const char* format, ...) { \
45*2b54f0dbSXin Li 		if (level >= CLOG_DEBUG) { \
46*2b54f0dbSXin Li 			va_list args; \
47*2b54f0dbSXin Li 			va_start(args, format); \
48*2b54f0dbSXin Li 			clog_vlog_debug(module, format, args); \
49*2b54f0dbSXin Li 			va_end(args); \
50*2b54f0dbSXin Li 		} \
51*2b54f0dbSXin Li 	}
52*2b54f0dbSXin Li 
53*2b54f0dbSXin Li #define CLOG_DEFINE_LOG_INFO(log_info_function_name, module, level) \
54*2b54f0dbSXin Li 	CLOG_ARGUMENTS_FORMAT \
55*2b54f0dbSXin Li 	inline static void log_info_function_name(const char* format, ...) { \
56*2b54f0dbSXin Li 		if (level >= CLOG_INFO) { \
57*2b54f0dbSXin Li 			va_list args; \
58*2b54f0dbSXin Li 			va_start(args, format); \
59*2b54f0dbSXin Li 			clog_vlog_info(module, format, args); \
60*2b54f0dbSXin Li 			va_end(args); \
61*2b54f0dbSXin Li 		} \
62*2b54f0dbSXin Li 	}
63*2b54f0dbSXin Li 
64*2b54f0dbSXin Li #define CLOG_DEFINE_LOG_WARNING(log_warning_function_name, module, level) \
65*2b54f0dbSXin Li 	CLOG_ARGUMENTS_FORMAT \
66*2b54f0dbSXin Li 	inline static void log_warning_function_name(const char* format, ...) { \
67*2b54f0dbSXin Li 		if (level >= CLOG_WARNING) { \
68*2b54f0dbSXin Li 			va_list args; \
69*2b54f0dbSXin Li 			va_start(args, format); \
70*2b54f0dbSXin Li 			clog_vlog_warning(module, format, args); \
71*2b54f0dbSXin Li 			va_end(args); \
72*2b54f0dbSXin Li 		} \
73*2b54f0dbSXin Li 	}
74*2b54f0dbSXin Li 
75*2b54f0dbSXin Li #define CLOG_DEFINE_LOG_ERROR(log_error_function_name, module, level) \
76*2b54f0dbSXin Li 	CLOG_ARGUMENTS_FORMAT \
77*2b54f0dbSXin Li 	inline static void log_error_function_name(const char* format, ...) { \
78*2b54f0dbSXin Li 		if (level >= CLOG_ERROR) { \
79*2b54f0dbSXin Li 			va_list args; \
80*2b54f0dbSXin Li 			va_start(args, format); \
81*2b54f0dbSXin Li 			clog_vlog_error(module, format, args); \
82*2b54f0dbSXin Li 			va_end(args); \
83*2b54f0dbSXin Li 		} \
84*2b54f0dbSXin Li 	}
85*2b54f0dbSXin Li 
86*2b54f0dbSXin Li #define CLOG_DEFINE_LOG_FATAL(log_fatal_function_name, module, level) \
87*2b54f0dbSXin Li 	CLOG_ARGUMENTS_FORMAT \
88*2b54f0dbSXin Li 	inline static void log_fatal_function_name(const char* format, ...) { \
89*2b54f0dbSXin Li 		if (level >= CLOG_FATAL) { \
90*2b54f0dbSXin Li 			va_list args; \
91*2b54f0dbSXin Li 			va_start(args, format); \
92*2b54f0dbSXin Li 			clog_vlog_fatal(module, format, args); \
93*2b54f0dbSXin Li 			va_end(args); \
94*2b54f0dbSXin Li 		} \
95*2b54f0dbSXin Li 		abort(); \
96*2b54f0dbSXin Li 	}
97*2b54f0dbSXin Li 
98*2b54f0dbSXin Li #ifdef __cplusplus
99*2b54f0dbSXin Li } /* extern "C" */
100*2b54f0dbSXin Li #endif
101