diff options
author | rubidium <rubidium@openttd.org> | 2007-01-02 19:19:48 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-01-02 19:19:48 +0000 |
commit | 66bbf336c6af7353ef0aeed58002c46543b30635 (patch) | |
tree | ad4a63860df2626b22f77e7dac712e958bea54cb /src/debug.h | |
parent | ccc0a3f4dbf58c005b22341ac8874252924690cd (diff) | |
download | openttd-66bbf336c6af7353ef0aeed58002c46543b30635.tar.xz |
(svn r7759) -Merge: makefile rewrite. This merge features:
- A proper ./configure, so everything needs to be configured only once, not for every make.
- Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies.
- A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC.
- Proper support for OSX universal binaries.
- Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files.
- Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files.
Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy.
Diffstat (limited to 'src/debug.h')
-rw-r--r-- | src/debug.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/debug.h b/src/debug.h new file mode 100644 index 000000000..c99795ddd --- /dev/null +++ b/src/debug.h @@ -0,0 +1,108 @@ +/* $Id$ */ + +#ifndef DEBUG_H +#define DEBUG_H + +/* Debugging messages policy: + * These should be the severities used for direct DEBUG() calls + * maximum debugging level should be 10 if really deep, deep + * debugging is needed. + * (there is room for exceptions, but you have to have a good cause): + * 0 - errors or severe warnings + * 1 - other non-fatal, non-severe warnings + * 2 - crude progress indicator of functionality + * 3 - important debugging messages (function entry) + * 4 - debugging messages (crude loop status, etc.) + * 5 - detailed debugging information + * 6.. - extremely detailed spamming + */ + +/* Of course MSVC 2003 and lower has no support for variadic macros + * so we need to work around this... *sigh* */ +#if defined(_MSC_VER) && (_MSC_VER < 1400) + #define NO_VARARG_MACRO +#endif + +#if defined(NO_VARARG_MACRO) + enum DebugLevelType { + ai, + driver, + grf, + map, + misc, + ms, + net, + sprite, + oldloader, + ntp, + npf, + yapf, + freetype, + sl, + }; +#endif /* NO_VARARG_MACRO */ + +#ifdef NO_DEBUG_MESSAGES + #if defined(NO_VARARG_MACRO) + static inline void DEBUG(int name, int level, ...) {} + #elif defined(__GNUC__) && (__GNUC__ < 3) + #define DEBUG(name, level, args...) + #else + #define DEBUG(name, level, ...) + #endif +#else /* NO_DEBUG_MESSAGES */ + #if defined(NO_VARARG_MACRO) + void CDECL DEBUG(int name, int level, ...); + #elif defined(__GNUC__) && (__GNUC__ < 3) + #define DEBUG(name, level, args...) if ((level == 0) || ( _debug_ ## name ## _level >= level)) debug(#name, args) + #else + #define DEBUG(name, level, ...) if (level == 0 || _debug_ ## name ## _level >= level) debug(#name, __VA_ARGS__) + #endif + + extern int _debug_ai_level; + extern int _debug_driver_level; + extern int _debug_grf_level; + extern int _debug_map_level; + extern int _debug_misc_level; + extern int _debug_ms_level; + extern int _debug_net_level; + extern int _debug_sprite_level; + extern int _debug_oldloader_level; + extern int _debug_ntp_level; + extern int _debug_npf_level; + extern int _debug_yapf_level; + extern int _debug_freetype_level; + extern int _debug_sl_level; + + #if !defined(NO_VARARG_MACRO) + void CDECL debug(const char *dbg, ...); + #endif /* NO_VARARG_MACRO */ +#endif /* NO_DEBUG_MESSAGES */ + +void SetDebugString(const char *s); +const char *GetDebugString(void); + +/* MSVCRT of course has to have a different syntax for long long *sigh* */ +#if defined(_MSC_VER) || defined(__MINGW32__) + #define OTTD_PRINTF64 "I64" +#else + #define OTTD_PRINTF64 "ll" +#endif + +// Used for profiling +#define TIC() {\ + extern uint64 _rdtsc(void);\ + uint64 _xxx_ = _rdtsc();\ + static uint64 __sum__ = 0;\ + static uint32 __i__ = 0; + +#define TOC(str, count)\ + __sum__ += _rdtsc() - _xxx_;\ + if (++__i__ == count) {\ + DEBUG(misc, 0, "[%s] %" OTTD_PRINTF64 "u [avg: %.1f]\n", str, __sum__, __sum__/(double)__i__);\ + __i__ = 0;\ + __sum__ = 0;\ + }\ +} + +#endif /* DEBUG_H */ |