Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/FICN/src/orxonox/OrxonoxPlatform.h @ 699

Last change on this file since 699 was 683, checked in by rgrieder, 17 years ago
  • fixed a little bug
File size: 9.1 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *
4 *
5 *   License notice:
6 *
7 *   This program is free software; you can redistribute it and/or
8 *   modify it under the terms of the GNU General Public License
9 *   as published by the Free Software Foundation; either version 2
10 *   of the License, or (at your option) any later version.
11 *
12 *   This program is distributed in the hope that it will be useful,
13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *   GNU General Public License for more details.
16 *
17 *   You should have received a copy of the GNU General Public License
18 *   along with this program; if not, write to the Free Software
19 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 *
21 *   Author:
22 *      An unknown man from the Ogre development crew
23 *   Co-authors:
24 *      Reto Grieder (OGRE --> ORXONOX)
25 *
26 */
27
28/**
29 @file  OrxonoxPlatform.h
30 @brief Various constants for compiler, architecture and platform. It's a mere
31        copy of the file found in the Ogre source code (OgrePlatform.h).
32 */
33
34#ifndef _OrxonoxPlatform_H__
35#define _OrxonoxPlatform_H__
36
37namespace orxonox {
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#define ORXONOX_QUOTE_INPLACE(x) # x
111#define ORXONOX_QUOTE(x) ORXONOX_QUOTE_INPLACE(x)
112#define ORXONOX_WARN( x )  message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" )
113
114//----------------------------------------------------------------------------
115// Windows Settings
116#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32
117
118// If we're not including this from a client build, specify that the stuff
119// should get exported. Otherwise, import it.
120#        if defined( ORXONOX_STATIC_LIB )
121     // don't use exports/imports when building statically
122#    define _OrxonoxExport
123#    define _OrxonoxPrivate
124#  else
125#    if defined( ORXONOX_NONCLIENT_BUILD )
126#      define _OrxonoxExport __declspec( dllexport )
127#    else
128#      if defined( __MINGW32__ )
129#        define _OrxonoxExport
130#      else
131#               define _OrxonoxExport __declspec( dllimport )
132#      endif
133#    endif
134#    define _OrxonoxPrivate
135#  endif
136// Win32 compilers use _DEBUG for specifying debug builds.
137#  ifdef _DEBUG
138#    define ORXONOX_DEBUG_MODE 1
139#  else
140#    define ORXONOX_DEBUG_MODE 0
141#  endif
142
143// Disable unicode support on MingW at the moment, poorly supported in stdlibc++
144// STLPORT fixes this though so allow if found
145// MinGW C++ Toolkit supports unicode and sets the define __MINGW32_TOOLKIT_UNICODE__ in _mingw.h
146#  if defined( __MINGW32__ ) && !defined(_STLPORT_VERSION)
147#    include<_mingw.h>
148#    if defined(__MINGW32_TOOLBOX_UNICODE__)
149#      define ORXONOX_UNICODE_SUPPORT 1
150#    else
151#      define ORXONOX_UNICODE_SUPPORT 0
152#    endif
153#  else
154#    define ORXONOX_UNICODE_SUPPORT 1
155#  endif
156
157#endif
158//----------------------------------------------------------------------------
159
160//----------------------------------------------------------------------------
161// Linux/Apple Settings
162#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_LINUX || ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
163
164// Enable GCC symbol visibility
165#  if defined( ORXONOX_GCC_VISIBILITY )
166#    define _OrxonoxExport  __attribute__ ((visibility("default")))
167#    define _OrxonoxPrivate __attribute__ ((visibility("hidden")))
168#  else
169#    define _OrxonoxExport
170#    define _OrxonoxPrivate
171#  endif
172
173// A quick define to overcome different names for the same function
174#  define stricmp strcasecmp
175
176// Unlike the Win32 compilers, Linux compilers seem to use DEBUG for when
177// specifying a debug build.
178// (??? this is wrong, on Linux debug builds aren't marked in any way unless
179// you mark it yourself any way you like it -- zap ???)
180#  ifdef DEBUG
181#    define ORXONOX_DEBUG_MODE 1
182#  else
183#    define ORXONOX_DEBUG_MODE 0
184#  endif
185
186/* FIXME: Check what this actually is and whether we need it or not
187#  if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
188#    define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle"
189#  else
190// ORXONOX_PLATFORM_LINUX
191#    define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so"
192#  endif
193*/
194
195// Always enable unicode support for the moment
196// Perhaps disable in old versions of gcc if necessary
197#  define ORXONOX_UNICODE_SUPPORT 1
198
199#endif
200
201//For apple, we always have a custom config.h file
202#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE
203#  include "config.h"
204#endif
205
206//----------------------------------------------------------------------------
207
208//----------------------------------------------------------------------------
209// Endian Settings
210// check for BIG_ENDIAN config flag, set ORXONOX_ENDIAN correctly
211#ifdef ORXONOX_CONFIG_BIG_ENDIAN
212#  define ORXONOX_ENDIAN ORXONOX_ENDIAN_BIG
213#else
214#  define ORXONOX_ENDIAN ORXONOX_ENDIAN_LITTLE
215#endif
216
217// Integer formats of fixed bit width
218typedef unsigned int uint32;
219typedef unsigned short uint16;
220typedef unsigned char uint8;
221
222}
223
224
225#if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC
226// Turn off warnings generated by long std templates
227// This warns about truncation to 255 characters in debug/browse info
228//#   pragma warning (disable : 4786)
229
230// Turn off warnings generated by long std templates
231// This warns about truncation to 255 characters in debug/browse info
232//#   pragma warning (disable : 4503)
233
234// disable: "conversion from 'double' to 'float', possible loss of data
235//#   pragma warning (disable : 4244)
236
237// disable: "truncation from 'double' to 'float'
238//#   pragma warning (disable : 4305)
239
240// disable: "<type> needs to have dll-interface to be used by clients'
241// Happens on STL member variables which are not public therefore is ok
242#   pragma warning (disable : 4251)
243
244// disable: "non dll-interface class used as base for dll-interface class"
245// Happens when deriving from Singleton because bug in compiler ignores
246// template export
247//#   pragma warning (disable : 4275)
248
249// disable: "C++ Exception Specification ignored"
250// This is because MSVC 6 did not implement all the C++ exception
251// specifications in the ANSI C++ draft.
252//#   pragma warning( disable : 4290 )
253
254// disable: "no suitable definition provided for explicit template
255// instantiation request" Occurs in VC7 for no justifiable reason on all
256// #includes of Singleton
257//#   pragma warning( disable: 4661)
258
259// disable: deprecation warnings when using CRT calls in VC8
260// These show up on all C runtime lib code in VC8, disable since they clutter
261// the warnings with things we may not be able to do anything about (e.g.
262// generated code from nvparse etc). I doubt very much that these calls
263// will ever be actually removed from VC anyway, it would break too much code.
264//#     pragma warning( disable: 4996)
265
266// disable: "conditional expression constant", always occurs on
267// ORXONOX_MUTEX_CONDITIONAL when no threading enabled
268//#   pragma warning (disable : 201)
269
270#endif
271
272
273// hack for the usleep/Sleep problem
274#if ORXONOX_PLATFORM == ORXONOX_PLATFORM_WIN32
275#  include <windows.h>
276#  define usleep(x) Sleep((x)/1000)
277#elif ORXONOX_PLATFORM == ORXONOX_PLATFORM_LINUX
278#  include <unistd.h>
279#endif
280
281
282#endif /* _OrxonoxPlatform_H__ */
Note: See TracBrowser for help on using the repository browser.