Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/util/OrxonoxPlatform.h @ 1600

Last change on this file since 1600 was 1505, checked in by rgrieder, 16 years ago

f* svn: It doesn't even inform you if you attempt to set a non existing property. It is svn:eol-style and not eol-style when using the command by the way…

  • Property svn:eol-style set to native
File size: 9.1 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      ...
24 *   Co-authors:
25 *      Reto Grieder
26 *
27 */
28
29/**
30 @file
31 @brief Various constants for compiler, architecture and platform. It's a mere
32        copy of the file found in the Ogre source code (OgrePlatform.h).
33 */
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//-----------------------------------------------------------------------
193// fixed width integers
194//-----------------------------------------------------------------------
195#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
196typedef __int8            int8_t;
197typedef __int16           int16_t;
198typedef __int32           int32_t;
199typedef __int64           int64_t;
200typedef unsigned __int8   uint8_t;
201typedef unsigned __int16  uint16_t;
202typedef unsigned __int32  uint32_t;
203typedef unsigned __int64  uint64_t;
204#else
205# include "inttypes.h"
206#endif
207
208namespace orxonox {
209#ifdef ORXONOX_DOUBLE_PRECISION
210typedef double Real;
211#else
212typedef 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__ */
Note: See TracBrowser for help on using the repository browser.