/************************************************************/ /** * * @file: debug.h * @author: Martin Fouilleul * @date: 13/08/2023 * *****************************************************************/ #ifndef __DEBUG_H_ #define __DEBUG_H_ #include "platform/platform_debug.h" #include "util/macros.h" //---------------------------------------------------------------- // Logging //---------------------------------------------------------------- #define oc_log_generic(level, msg, ...) oc_log_ext(level, __FUNCTION__, __FILE__, __LINE__, msg, ##__VA_ARGS__) #define oc_log_error(msg, ...) oc_log_generic(OC_LOG_LEVEL_ERROR, msg, ##__VA_ARGS__) #ifndef OC_LOG_COMPILE_WARNING #define OC_LOG_COMPILE_WARNING 1 #endif #ifndef OC_LOG_COMPILE_INFO #define OC_LOG_COMPILE_INFO 1 #endif #if OC_LOG_COMPILE_WARNING || OC_LOG_COMPILE_INFO #define oc_log_warning(msg, ...) oc_log_generic(OC_LOG_LEVEL_WARNING, msg, ##__VA_ARGS__) #if OC_LOG_COMPILE_INFO #define oc_log_info(msg, ...) oc_log_generic(OC_LOG_LEVEL_INFO, msg, ##__VA_ARGS__) #else #define oc_log_info(msg, ...) #endif #else #define oc_log_warning(msg, ...) #define oc_log_info(msg, ...) #endif //---------------------------------------------------------------- // Abort/Assert //---------------------------------------------------------------- #define OC_ABORT(fmt, ...) oc_abort_ext(__FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__) #ifdef OC_NO_ASSERT #define OC_ASSERT(x, ...) #define OC_DEBUG_ASSERT(x, ...) #else #define _OC_ASSERT_(test, fmt, ...) ((test) || (oc_assert_fail(__FILE__, __FUNCTION__, __LINE__, #test, fmt, ##__VA_ARGS__), 0)) #define OC_ASSERT(test, ...) _OC_ASSERT_(test, OC_VA_NOPT("", ##__VA_ARGS__) OC_ARG1(__VA_ARGS__) OC_VA_COMMA_TAIL(__VA_ARGS__)) #ifdef OC_DEBUG #define OC_DEBUG_ASSERT(x, ...) OC_ASSERT(x, ##__VA_ARGS__) #else #define OC_DEBUG_ASSERT(x, ...) #endif #endif #endif //__DEBUG_H_