Changeset 1494 for code/branches/network/src/util/OrxonoxPlatform.h
- Timestamp:
- May 31, 2008, 11:24:44 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/network/src/util/OrxonoxPlatform.h
- Property svn:eol-style set to native
r1414 r1494 1 1 /* 2 2 * ORXONOX - the hottest 3D action shooter ever to exist 3 * > www.orxonox.net < 4 * 3 * > www.orxonox.net < * 5 4 * 6 5 * License notice: … … 26 25 * 27 26 */ 28 29 27 /** 30 28 @file … … 32 30 copy of the file found in the Ogre source code (OgrePlatform.h). 33 31 */ 34 35 #ifndef _OrxonoxPlatform_H__ 36 #define _OrxonoxPlatform_H__ 37 38 /* Initial platform/compiler-related stuff to set. 39 */ 40 #define ORXONOX_PLATFORM_WIN32 1 41 #define ORXONOX_PLATFORM_LINUX 2 42 #define ORXONOX_PLATFORM_APPLE 3 43 44 #define ORXONOX_COMPILER_MSVC 1 45 #define ORXONOX_COMPILER_GNUC 2 46 #define ORXONOX_COMPILER_BORL 3 47 48 #define ORXONOX_ENDIAN_LITTLE 1 49 #define ORXONOX_ENDIAN_BIG 2 50 51 #define ORXONOX_ARCHITECTURE_32 1 52 #define ORXONOX_ARCHITECTURE_64 2 53 54 /* Finds the compiler type and version. 55 */ 56 #if defined( _MSC_VER ) 57 # define ORXONOX_COMPILER ORXONOX_COMPILER_MSVC 58 # define ORXONOX_COMP_VER _MSC_VER 59 60 #elif defined( __GNUC__ ) 61 # define ORXONOX_COMPILER ORXONOX_COMPILER_GNUC 62 # define ORXONOX_COMP_VER (((__GNUC__)*100) + \ 63 (__GNUC_MINOR__*10) + \ 64 __GNUC_PATCHLEVEL__) 65 66 #elif defined( __BORLANDC__ ) 67 # define ORXONOX_COMPILER ORXONOX_COMPILER_BORL 68 # define ORXONOX_COMP_VER __BCPLUSPLUS__ 69 70 #else 71 # pragma error "No known compiler. Abort! Abort!" 72 73 #endif 74 75 /* See if we can use __forceinline or if we need to use __inline instead */ 76 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC 77 # if ORXONOX_COMP_VER >= 1200 78 # define FORCEINLINE __forceinline 79 # endif 80 #elif defined(__MINGW32__) 81 # if !defined(FORCEINLINE) 82 # define FORCEINLINE __inline 83 # endif 84 #else 85 # define FORCEINLINE __inline 86 #endif 87 88 /* Finds the current platform */ 89 90 #if defined( __WIN32__ ) || defined( _WIN32 ) 91 # define ORXONOX_PLATFORM ORXONOX_PLATFORM_WIN32 92 93 #elif defined( __APPLE_CC__) 94 # define ORXONOX_PLATFORM ORXONOX_PLATFORM_APPLE 95 96 #else 97 # define ORXONOX_PLATFORM ORXONOX_PLATFORM_LINUX 98 #endif 99 100 /* Find the arch type */ 101 #if defined(__x86_64__) || defined(_M_X64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__) 102 # define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_64 103 #else 104 # define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_32 105 #endif 106 107 // For generating compiler warnings - should work on any compiler 108 // As a side note, if you start your message with 'Warning: ', the MSVC 109 // IDE actually does catch a warning :) 110 // FIXME: Try this on linux box. Doesn't work with msvc 111 //#define ORXONOX_QUOTE_INPLACE(x) # x 112 //#define ORXONOX_QUOTE(x) ORXONOX_QUOTE_INPLACE(x) 113 //#define ORXONOX_WARN( x ) message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" ) 114 115 //---------------------------------------------------------------------------- 116 // Windows Settings 117 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32 118 119 // Win32 compilers use _DEBUG for specifying debug builds. 120 # ifdef _DEBUG 121 # define ORXONOX_DEBUG_MODE 1 122 # else 123 # define ORXONOX_DEBUG_MODE 0 124 # endif 125 126 // Disable unicode support on MingW at the moment, poorly supported in stdlibc++ 127 // STLPORT fixes this though so allow if found 128 // MinGW C++ Toolkit supports unicode and sets the define __MINGW32_TOOLKIT_UNICODE__ in _mingw.h 129 # if defined( __MINGW32__ ) && !defined(_STLPORT_VERSION) 130 # include<_mingw.h> 131 # if defined(__MINGW32_TOOLBOX_UNICODE__) 132 # define ORXONOX_UNICODE_SUPPORT 1 133 # else 134 # define ORXONOX_UNICODE_SUPPORT 0 135 # endif 136 # else 137 # define ORXONOX_UNICODE_SUPPORT 1 138 # endif 139 140 #endif /* Platform Win32 */ 141 //---------------------------------------------------------------------------- 142 143 //---------------------------------------------------------------------------- 144 // Linux/Apple Settings 145 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_LINUX || ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE 146 147 148 // A quick define to overcome different names for the same function 149 # define stricmp strcasecmp 150 151 // Unlike the Win32 compilers, Linux compilers seem to use DEBUG for when 152 // specifying a debug build. 153 // (??? this is wrong, on Linux debug builds aren't marked in any way unless 154 // you mark it yourself any way you like it -- zap ???) 155 # ifdef DEBUG 156 # define ORXONOX_DEBUG_MODE 1 157 # else 158 # define ORXONOX_DEBUG_MODE 0 159 # endif 160 161 /* FIXME: Check what this actually is and whether we need it or not 162 # if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE 163 # define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle" 164 # else 165 // ORXONOX_PLATFORM_LINUX 166 # define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so" 167 # endif 168 */ 169 170 // Always enable unicode support for the moment 171 // Perhaps disable in old versions of gcc if necessary 172 # define ORXONOX_UNICODE_SUPPORT 1 173 174 #endif /* Patform Linux/Apple */ 175 176 //For apple, we always have a custom config.h file 177 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE 178 # include "config.h" 179 #endif 180 181 //---------------------------------------------------------------------------- 182 183 //---------------------------------------------------------------------------- 184 // Endian Settings 185 // check for BIG_ENDIAN config flag, set ORXONOX_ENDIAN correctly 186 #ifdef ORXONOX_CONFIG_BIG_ENDIAN 187 # define ORXONOX_ENDIAN ORXONOX_ENDIAN_BIG 188 #else 189 # define ORXONOX_ENDIAN ORXONOX_ENDIAN_LITTLE 190 #endif 191 192 //----------------------------------------------------------------------- 32 #ifndef _OrxonoxPlatform_H__#define _OrxonoxPlatform_H__/* Initial platform/compiler-related stuff to set.*/#define ORXONOX_PLATFORM_WIN32 1#define ORXONOX_PLATFORM_LINUX 2#define ORXONOX_PLATFORM_APPLE 3#define ORXONOX_COMPILER_MSVC 1#define ORXONOX_COMPILER_GNUC 2#define ORXONOX_COMPILER_BORL 3#define ORXONOX_ENDIAN_LITTLE 1#define ORXONOX_ENDIAN_BIG 2#define ORXONOX_ARCHITECTURE_32 1#define ORXONOX_ARCHITECTURE_64 2/* Finds the compiler type and version.*/#if defined( _MSC_VER )# define ORXONOX_COMPILER ORXONOX_COMPILER_MSVC# define ORXONOX_COMP_VER _MSC_VER#elif defined( __GNUC__ )# define ORXONOX_COMPILER ORXONOX_COMPILER_GNUC# define ORXONOX_COMP_VER (((__GNUC__)*100) + \ (__GNUC_MINOR__*10) + \ __GNUC_PATCHLEVEL__)#elif defined( __BORLANDC__ )# define ORXONOX_COMPILER ORXONOX_COMPILER_BORL# define ORXONOX_COMP_VER __BCPLUSPLUS__#else# pragma error "No known compiler. Abort! Abort!"#endif/* See if we can use __forceinline or if we need to use __inline instead */#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC# if ORXONOX_COMP_VER >= 1200# define FORCEINLINE __forceinline# endif#elif defined(__MINGW32__)# if !defined(FORCEINLINE)# define FORCEINLINE __inline# endif#else# define FORCEINLINE __inline#endif/* Finds the current platform */#if defined( __WIN32__ ) || defined( _WIN32 )# define ORXONOX_PLATFORM ORXONOX_PLATFORM_WIN32#elif defined( __APPLE_CC__)# define ORXONOX_PLATFORM ORXONOX_PLATFORM_APPLE#else# define ORXONOX_PLATFORM ORXONOX_PLATFORM_LINUX#endif /* Find the arch type */#if defined(__x86_64__) || defined(_M_X64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__)# define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_64#else# define ORXONOX_ARCH_TYPE ORXONOX_ARCHITECTURE_32#endif// For generating compiler warnings - should work on any compiler// As a side note, if you start your message with 'Warning: ', the MSVC// IDE actually does catch a warning :)// FIXME: Try this on linux box. Doesn't work with msvc//#define ORXONOX_QUOTE_INPLACE(x) # x//#define ORXONOX_QUOTE(x) ORXONOX_QUOTE_INPLACE(x)//#define ORXONOX_WARN( x ) message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" )//----------------------------------------------------------------------------// Windows Settings#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32// Win32 compilers use _DEBUG for specifying debug builds.# ifdef _DEBUG# define ORXONOX_DEBUG_MODE 1# else# define ORXONOX_DEBUG_MODE 0# endif// Disable unicode support on MingW at the moment, poorly supported in stdlibc++// STLPORT fixes this though so allow if found// MinGW C++ Toolkit supports unicode and sets the define __MINGW32_TOOLKIT_UNICODE__ in _mingw.h# if defined( __MINGW32__ ) && !defined(_STLPORT_VERSION)# include<_mingw.h># if defined(__MINGW32_TOOLBOX_UNICODE__)# define ORXONOX_UNICODE_SUPPORT 1# else# define ORXONOX_UNICODE_SUPPORT 0# endif# else# define ORXONOX_UNICODE_SUPPORT 1# endif#endif /* Platform Win32 *///----------------------------------------------------------------------------//----------------------------------------------------------------------------// Linux/Apple Settings#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_LINUX || ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE// A quick define to overcome different names for the same function# define stricmp strcasecmp// Unlike the Win32 compilers, Linux compilers seem to use DEBUG for when// specifying a debug build.// (??? this is wrong, on Linux debug builds aren't marked in any way unless// you mark it yourself any way you like it -- zap ???)# ifdef DEBUG# define ORXONOX_DEBUG_MODE 1# else# define ORXONOX_DEBUG_MODE 0# endif/* FIXME: Check what this actually is and whether we need it or not# if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE# define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle"# else// ORXONOX_PLATFORM_LINUX# define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so"# endif*/// Always enable unicode support for the moment// Perhaps disable in old versions of gcc if necessary# define ORXONOX_UNICODE_SUPPORT 1#endif /* Patform Linux/Apple *///For apple, we always have a custom config.h file#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE# include "config.h"#endif//----------------------------------------------------------------------------//----------------------------------------------------------------------------// Endian Settings// check for BIG_ENDIAN config flag, set ORXONOX_ENDIAN correctly#ifdef ORXONOX_CONFIG_BIG_ENDIAN# define ORXONOX_ENDIAN ORXONOX_ENDIAN_BIG#else# define ORXONOX_ENDIAN ORXONOX_ENDIAN_LITTLE#endif//----------------------------------------------------------------------- 193 33 // fixed width integers 194 34 //----------------------------------------------------------------------- 195 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC 196 typedef __int8 int8_t; 35 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVCtypedef __int8 int8_t; 197 36 typedef __int16 int16_t; 198 37 typedef __int32 int32_t; … … 202 41 typedef unsigned __int32 uint32_t; 203 42 typedef unsigned __int64 uint64_t; 204 #else 205 # include "inttypes.h" 206 #endif 207 208 namespace orxonox { 209 #ifdef ORXONOX_DOUBLE_PRECISION 210 typedef double Real; 211 #else 212 typedef float Real; 213 #endif 214 } 215 216 217 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC 218 // Turn off warnings generated by long std templates 219 // This warns about truncation to 255 characters in debug/browse info 220 //# pragma warning (disable : 4786) 221 222 // Turn off warnings generated by long std templates 223 // This warns about truncation to 255 characters in debug/browse info 224 //# pragma warning (disable : 4503) 225 226 // disable: conversion from 'double' to 'float', possible loss of data 227 // disable: conversion from 'ogg_int64_t' to 'long', possible loss of data 228 // This has been dealt with in base_properties of the solution since the 229 // warning primarily occurs in library header files (which are mostly 230 // included before OrxonoxPlatform.h is) 231 //# pragma warning (disable : 4244) 232 233 // disable: "conversion from 'size_t' to 'unsigned int', possible loss of data 234 //# pragma warning (disable : 4267) 235 236 // disable: "truncation from 'double' to 'float' 237 //# pragma warning (disable : 4305) 238 239 // set to level 4: "<type> needs to have dll-interface to be used by clients' 240 // Happens on STL member variables which are not public therefore is ok 241 # pragma warning (disable : 4251) 242 243 // disable: 'MultiTypeString' : multiple assignment operators specified 244 // Used in MultiType and works fine so far 245 //# pragma warning (disable : 4522) 246 247 // disable: "non dll-interface class used as base for dll-interface class" 248 // Happens when deriving from Singleton because bug in compiler ignores 249 // template export 250 //# pragma warning (disable : 4275) 251 252 // disable: "C++ Exception Specification ignored" 253 // This is because MSVC 6 did not implement all the C++ exception 254 // specifications in the ANSI C++ draft. 255 //# pragma warning( disable : 4290 ) 256 257 // disable: "no suitable definition provided for explicit template 258 // instantiation request" Occurs in VC7 for no justifiable reason on all 259 // #includes of Singleton 260 //# pragma warning( disable: 4661) 261 262 // disable: deprecation warnings when using CRT calls in VC8 263 // These show up on all C runtime lib code in VC8, disable since they clutter 264 // the warnings with things we may not be able to do anything about (e.g. 265 // generated code from nvparse etc). I doubt very much that these calls 266 // will ever be actually removed from VC anyway, it would break too much code. 267 //# pragma warning( disable: 4996) 268 269 // disable: "conditional expression constant", always occurs on 270 // ORXONOX_MUTEX_CONDITIONAL when no threading enabled 271 //# pragma warning (disable : 201) 272 273 274 // Define the english written operators like and, or, xor 275 #include <iso646.h> 276 277 #endif /* ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC */ 278 279 // include visual leak detector to search for memory leaks 280 //#include <vld.h> 281 282 #endif /* _OrxonoxPlatform_H__ */ 43 #else# include "inttypes.h"#endifnamespace orxonox {#ifdef ORXONOX_DOUBLE_PRECISIONtypedef double Real;#elsetypedef float Real;#endif}#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC// Turn off warnings generated by long std templates// This warns about truncation to 255 characters in debug/browse info//# pragma warning (disable : 4786)// Turn off warnings generated by long std templates// This warns about truncation to 255 characters in debug/browse info//# pragma warning (disable : 4503)// disable: conversion from 'double' to 'float', possible loss of data// disable: conversion from 'ogg_int64_t' to 'long', possible loss of data// This has been dealt with in base_properties of the solution since the// warning primarily occurs in library header files (which are mostly// included before OrxonoxPlatform.h is)//# pragma warning (disable : 4244)// disable: "conversion from 'size_t' to 'unsigned int', possible loss of data//# pragma warning (disable : 4267)// disable: "truncation from 'double' to 'float'//# pragma warning (disable : 4305)// set to level 4: "<type> needs to have dll-interface to be used by clients'// Happens on STL member variables which are not public therefore is ok# pragma warning (disable : 4251)// disable: 'MultiTypeString' : multiple assignment operators specified// Used in MultiType and works fine so far//# pragma warning (disable : 4522)// disable: "non dll-interface class used as base for dll-interface class"// Happens when deriving from Singleton because bug in compiler ignores// template export//# pragma warning (disable : 4275)// disable: "C++ Exception Specification ignored"// This is because MSVC 6 did not implement all the C++ exception// specifications in the ANSI C++ draft.//# pragma warning( disable : 4290 )// disable: "no suitable definition provided for explicit template// instantiation request" Occurs in VC7 for no justifiable reason on all// #includes of Singleton//# pragma warning( disable: 4661)// disable: deprecation warnings when using CRT calls in VC8// These show up on all C runtime lib code in VC8, disable since they clutter// the warnings with things we may not be able to do anything about (e.g.// generated code from nvparse etc). I doubt very much that these calls// will ever be actually removed from VC anyway, it would break too much code.//# pragma warning( disable: 4996)// disable: "conditional expression constant", always occurs on// ORXONOX_MUTEX_CONDITIONAL when no threading enabled//# pragma warning (disable : 201)// Define the english written operators like and, or, xor#include <iso646.h>#endif /* ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC */// include visual leak detector to search for memory leaks//#include <vld.h>#endif /* _OrxonoxPlatform_H__ */
Note: See TracChangeset
for help on using the changeset viewer.