DNBLog.h revision 0e8147bd867e4cdaae9400f56d02c7aacd40a9b3
1//===-- DNBLog.h ------------------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  Created by Greg Clayton on 6/18/07.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef __DNBLog_h__
15#define __DNBLog_h__
16
17#include <stdio.h>
18#include <stdint.h>
19#include "DNBDefs.h"
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25// Flags that get filled in automatically before calling the log callback function
26#define DNBLOG_FLAG_FATAL       (1u << 0)
27#define DNBLOG_FLAG_ERROR       (1u << 1)
28#define DNBLOG_FLAG_WARNING     (1u << 2)
29#define DNBLOG_FLAG_DEBUG       (1u << 3)
30#define DNBLOG_FLAG_VERBOSE     (1u << 4)
31#define DNBLOG_FLAG_THREADED    (1u << 5)
32
33#define DNBLOG_ENABLED
34
35#if defined (DNBLOG_ENABLED)
36
37#define DNB_EXPORT __attribute__((visibility("default")))
38
39void        _DNBLog(uint32_t flags, const char *format, ...) __attribute__ ((format (printf, 2, 3))) DNB_EXPORT;
40void        _DNBLogDebug (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) DNB_EXPORT;
41void        _DNBLogDebugVerbose (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) DNB_EXPORT;
42void        _DNBLogThreaded (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) DNB_EXPORT;
43void        _DNBLogThreadedIf (uint32_t mask, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))) DNB_EXPORT;
44void        _DNBLogError (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) DNB_EXPORT;
45void        _DNBLogFatalError (int err, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))) DNB_EXPORT;
46void        _DNBLogVerbose (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) DNB_EXPORT;
47void        _DNBLogWarning (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) DNB_EXPORT;
48void        _DNBLogWarningVerbose (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) DNB_EXPORT;
49bool        DNBLogCheckLogBit (uint32_t bit) DNB_EXPORT;
50uint32_t    DNBLogSetLogMask (uint32_t mask) DNB_EXPORT;
51uint32_t    DNBLogGetLogMask () DNB_EXPORT;
52void        DNBLogSetLogCallback (DNBCallbackLog callback, void *baton) DNB_EXPORT;
53bool        DNBLogEnabled () DNB_EXPORT;
54bool        DNBLogEnabledForAny (uint32_t mask) DNB_EXPORT;
55int         DNBLogGetDebug () DNB_EXPORT;
56void        DNBLogSetDebug (int g) DNB_EXPORT;
57int         DNBLogGetVerbose () DNB_EXPORT;
58void        DNBLogSetVerbose (int g) DNB_EXPORT;
59
60#define     DNBLog(fmt, ...)                    do { if (DNBLogEnabled()) { _DNBLog(0, fmt, ## __VA_ARGS__);                 } } while (0)
61#define     DNBLogDebug(fmt, ...)               do { if (DNBLogEnabled()) { _DNBLogDebug(fmt, ## __VA_ARGS__);               } } while (0)
62#define     DNBLogDebugVerbose(fmt, ...)        do { if (DNBLogEnabled()) { _DNBLogDebugVerbose(fmt, ## __VA_ARGS__);        } } while (0)
63#define     DNBLogThreaded(fmt, ...)            do { if (DNBLogEnabled()) { _DNBLogThreaded(fmt, ## __VA_ARGS__);            } } while (0)
64#define     DNBLogThreadedIf(mask, fmt, ...)    do { if (DNBLogEnabledForAny(mask)) { _DNBLogThreaded(fmt, ## __VA_ARGS__);  } } while (0)
65#define     DNBLogError(fmt, ...)               do { if (DNBLogEnabled()) { _DNBLogError(fmt, ## __VA_ARGS__);               } } while (0)
66#define     DNBLogFatalError(err, fmt, ...)     do { if (DNBLogEnabled()) { _DNBLogFatalError(err, fmt, ## __VA_ARGS__);     } } while (0)
67#define     DNBLogVerbose(fmt, ...)             do { if (DNBLogEnabled()) { _DNBLogVerbose(fmt, ## __VA_ARGS__);             } } while (0)
68#define     DNBLogWarning(fmt, ...)             do { if (DNBLogEnabled()) { _DNBLogWarning(fmt, ## __VA_ARGS__);             } } while (0)
69#define     DNBLogWarningVerbose(fmt, ...)      do { if (DNBLogEnabled()) { _DNBLogWarningVerbose(fmt, ## __VA_ARGS__);      } } while (0)
70
71#else   // #if defined(DNBLOG_ENABLED)
72
73#define     DNBLogDebug(...)            ((void)0)
74#define     DNBLogDebugVerbose(...)     ((void)0)
75#define     DNBLogThreaded(...)         ((void)0)
76#define     DNBLogThreadedIf(...)       ((void)0)
77#define     DNBLogError(...)            ((void)0)
78#define     DNBLogFatalError(...)       ((void)0)
79#define     DNBLogVerbose(...)          ((void)0)
80#define     DNBLogWarning(...)          ((void)0)
81#define     DNBLogWarningVerbose(...)   ((void)0)
82#define     DNBLogGetLogFile()          ((FILE *)NULL)
83#define     DNBLogSetLogFile(f)         ((void)0)
84#define     DNBLogCheckLogBit(bit)      ((bool)false)
85#define     DNBLogSetLogMask(mask)      ((uint32_t)0u)
86#define     DNBLogGetLogMask()          ((uint32_t)0u)
87#define     DNBLogToASL()               ((void)0)
88#define     DNBLogToFile()              ((void)0)
89#define     DNBLogCloseLogFile()        ((void)0)
90
91#endif // #else defined(DNBLOG_ENABLED)
92
93#ifdef __cplusplus
94}
95#endif
96
97#endif // #ifndef __DNBLog_h__
98