SSCMA-Micro CPP SDK  v2.0.0
SSCMA-Micro is a cross-platform machine learning inference framework designed for embedded devices.
ma_debug.h
Go to the documentation of this file.
1 #ifndef _MA_DEBUG_H_
2 #define _MA_DEBUG_H_
3 
4 #include "ma_config_internal.h"
5 #include "../porting/ma_misc.h"
6 
7 #ifndef MA_TAG
8  #define MA_TAG_FILE __FILE__ ":" MA_STRINGIZE(__LINE__)
9  #define MA_TAG (strrchr(MA_TAG_FILE, '/') ? strrchr(MA_TAG_FILE, '/') + 1 : MA_TAG_FILE)
10 #endif
11 
12 #if MA_DEBUG_LEVEL
13 
14 #define MA_DEBUG_COLOR_RED "\033[31m"
15 #define MA_DEBUG_COLOR_GREEN "\033[32m"
16 #define MA_DEBUG_COLOR_YELLOW "\033[33m"
17 #define MA_DEBUG_COLOR_BLUE "\033[34m"
18 #define MA_DEBUG_COLOR_MAGENTA "\033[35m"
19 #define MA_DEBUG_COLOR_CYAN "\033[36m"
20 #define MA_DEBUG_COLOR_RESET "\033[0m"
21 
22 #if MA_USE_DEBUG_MORE_INFO
23 #define MA_DEBUG_MORE_INFO(TAG) ma_printf("%s[%d] (%ld): ", TAG, __LINE__, ma_get_time_ms());
24 #else
25 #define MA_DEBUG_MORE_INFO(TAG)
26 #endif
27 
28 #if MA_DEBUG_LEVEL >= 1
29 #ifndef MA_LOGE
30 #define MA_LOGE(TAG, ...) \
31  do { \
32  ma_printf(MA_DEBUG_COLOR_RED "E "); \
33  MA_DEBUG_MORE_INFO(TAG); \
34  ma_printf(__VA_ARGS__); \
35  ma_printf(MA_DEBUG_COLOR_RESET "\r\n"); \
36  } while (0)
37 #endif
38 #else
39 #ifdef MA_LOGE
40 #undef MA_LOGE
41 #endif
42 #define MA_LOGE(TAG, ...)
43 #endif
44 
45 #if MA_DEBUG_LEVEL >= 2
46 #ifndef MA_LOGW
47 #define MA_LOGW(TAG, ...) \
48  do { \
49  ma_printf(MA_DEBUG_COLOR_YELLOW "W "); \
50  MA_DEBUG_MORE_INFO(TAG); \
51  ma_printf(__VA_ARGS__); \
52  ma_printf(MA_DEBUG_COLOR_RESET "\r\n"); \
53  } while (0)
54 #endif
55 #else
56 #ifdef MA_LOGW
57 #undef MA_LOGW
58 #endif
59 #define MA_LOGW(TAG, ...)
60 #endif
61 #if MA_DEBUG_LEVEL >= 3
62 #ifndef MA_LOGI
63 #define MA_LOGI(TAG, ...) \
64  do { \
65  ma_printf(MA_DEBUG_COLOR_GREEN "I "); \
66  MA_DEBUG_MORE_INFO(TAG); \
67  ma_printf(__VA_ARGS__); \
68  ma_printf(MA_DEBUG_COLOR_RESET "\r\n"); \
69  } while (0)
70 #endif
71 #else
72 #ifdef MA_LOGI
73 #undef MA_LOGI
74 #endif
75 #define MA_LOGI(TAG, ...)
76 #endif
77 #if MA_DEBUG_LEVEL >= 4
78 #ifndef MA_LOGD
79 #define MA_LOGD(TAG, ...) \
80  do { \
81  ma_printf(MA_DEBUG_COLOR_BLUE "D "); \
82  MA_DEBUG_MORE_INFO(TAG); \
83  ma_printf(__VA_ARGS__); \
84  ma_printf(MA_DEBUG_COLOR_RESET "\r\n"); \
85  } while (0)
86 #endif
87 #else
88 #ifdef MA_LOGD
89 #undef MA_LOGD
90 #endif
91 #define MA_LOGD(TAG, ...)
92 #endif
93 #if MA_DEBUG_LEVEL >= 5
94 #ifndef MA_LOGV
95 #define MA_LOGV(TAG, ...) \
96  do { \
97  ma_printf(MA_DEBUG_COLOR_MAGENTA "V "); \
98  MA_DEBUG_MORE_INFO(TAG); \
99  ma_printf(__VA_ARGS__); \
100  ma_printf(MA_DEBUG_COLOR_RESET "\r\n"); \
101  } while (0)
102 #endif
103 #else
104 #ifdef MA_LOGV
105 #undef MA_LOGV
106 #endif
107 #define MA_LOGV(TAG, ...)
108 #endif
109 #else
110 #define MA_ELOG(TAG, ...)
111 #define MA_LOGW(TAG, ...)
112 #define MA_LOGI(TAG, ...)
113 #define MA_LOGD(TAG, ...)
114 #define MA_LOGV(TAG, ...)
115 #endif
116 
117 #if MA_USE_ASSERT
118 #ifndef MA_ASSERT
119 #define MA_ASSERT(expr) \
120  do { \
121  if (!(expr)) { \
122  ma_printf(MA_DEBUG_COLOR_MAGENTA "E "); \
123  MA_DEBUG_MORE_INFO("ASSERT"); \
124  ma_printf("Failed assertion '%s'", #expr); \
125  ma_printf(MA_DEBUG_COLOR_RESET "\r\n"); \
126  while (1) { \
127  ma_abort(); \
128  } \
129  } \
130  } while (0)
131 #endif
132 #else
133 #ifdef MA_ASSERT
134 #undef MA_ASSERT
135 #endif
136 #define MA_ASSERT(expr)
137 #endif
138 
139 #ifndef MA_USE_STATIC_ASSERT
140 #ifdef MA_STATIC_ASSERT
141 #undef MA_STATIC_ASSERT
142 #define MA_STATIC_ASSERT(expr, msg)
143 #endif
144 #endif
145 
146 #endif // _MA_DEBUG_H_