| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- /*
- -----------------------------------------------------------------------------
- This source file is part of OGRE
- (Object-oriented Graphics Rendering Engine)
- For the latest info, see http://www.ogre3d.org/
- Copyright (c) 2000-2011 Torus Knot Software Ltd
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- -----------------------------------------------------------------------------
- */
- #ifndef __Platform_H_
- #define __Platform_H_
- #include "OgreConfig.h"
- namespace Ogre {
- /* Initial platform/compiler-related stuff to set.
- */
- #define OGRE_PLATFORM_WIN32 1
- #define OGRE_PLATFORM_LINUX 2
- #define OGRE_PLATFORM_APPLE 3
- #define OGRE_PLATFORM_SYMBIAN 4
- #define OGRE_PLATFORM_IPHONE 5
- #define OGRE_COMPILER_MSVC 1
- #define OGRE_COMPILER_GNUC 2
- #define OGRE_COMPILER_BORL 3
- #define OGRE_COMPILER_WINSCW 4
- #define OGRE_COMPILER_GCCE 5
- #define OGRE_ENDIAN_LITTLE 1
- #define OGRE_ENDIAN_BIG 2
- #define OGRE_ARCHITECTURE_32 1
- #define OGRE_ARCHITECTURE_64 2
- /* Finds the compiler type and version.
- */
- #if defined( __GCCE__ )
- # define OGRE_COMPILER OGRE_COMPILER_GCCE
- # define OGRE_COMP_VER _MSC_VER
- //# include <staticlibinit_gcce.h> // This is a GCCE toolchain workaround needed when compiling with GCCE
- #elif defined( __WINSCW__ )
- # define OGRE_COMPILER OGRE_COMPILER_WINSCW
- # define OGRE_COMP_VER _MSC_VER
- #elif defined( _MSC_VER )
- # define OGRE_COMPILER OGRE_COMPILER_MSVC
- # define OGRE_COMP_VER _MSC_VER
- #elif defined( __GNUC__ )
- # define OGRE_COMPILER OGRE_COMPILER_GNUC
- # define OGRE_COMP_VER (((__GNUC__)*100) + \
- (__GNUC_MINOR__*10) + \
- __GNUC_PATCHLEVEL__)
- #elif defined( __BORLANDC__ )
- # define OGRE_COMPILER OGRE_COMPILER_BORL
- # define OGRE_COMP_VER __BCPLUSPLUS__
- # define __FUNCTION__ __FUNC__
- #else
- # pragma error "No known compiler. Abort! Abort!"
- #endif
- /* See if we can use __forceinline or if we need to use __inline instead */
- #if OGRE_COMPILER == OGRE_COMPILER_MSVC
- # if OGRE_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( __SYMBIAN32__ )
- # define OGRE_PLATFORM OGRE_PLATFORM_SYMBIAN
- #elif defined( __WIN32__ ) || defined( _WIN32 )
- # define OGRE_PLATFORM OGRE_PLATFORM_WIN32
- #elif defined( __APPLE_CC__)
- // Device Simulator
- // Both requiring OS version 3.0 or greater
- # if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 30000 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 30000
- # define OGRE_PLATFORM OGRE_PLATFORM_IPHONE
- # else
- # define OGRE_PLATFORM OGRE_PLATFORM_APPLE
- # endif
- #else
- # define OGRE_PLATFORM OGRE_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 OGRE_ARCH_TYPE OGRE_ARCHITECTURE_64
- #else
- # define OGRE_ARCH_TYPE OGRE_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 :)
- #define OGRE_QUOTE_INPLACE(x) # x
- #define OGRE_QUOTE(x) OGRE_QUOTE_INPLACE(x)
- #define OGRE_WARN( x ) message( __FILE__ "(" QUOTE( __LINE__ ) ") : " x "\n" )
- //----------------------------------------------------------------------------
- // Windows Settings
- #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
- // If we're not including this from a client build, specify that the stuff
- // should get exported. Otherwise, import it.
- # if defined( OGRE_STATIC_LIB )
- // Linux compilers don't have symbol import/export directives.
- # define _OgreExport
- # define _OgrePrivate
- # else
- # if defined( OGRE_NONCLIENT_BUILD )
- # define _OgreExport __declspec( dllexport )
- # else
- # if defined( __MINGW32__ )
- # define _OgreExport
- # else
- # define _OgreExport __declspec( dllimport )
- # endif
- # endif
- # define _OgrePrivate
- # endif
- // Win32 compilers use _DEBUG for specifying debug builds.
- // for MinGW, we set DEBUG
- # if defined(_DEBUG) || defined(DEBUG)
- # define OGRE_DEBUG_MODE 1
- # else
- # define OGRE_DEBUG_MODE 0
- # endif
- // Disable unicode support on MingW for GCC 3, poorly supported in stdlibc++
- // STLPORT fixes this though so allow if found
- // MinGW C++ Toolkit supports unicode and sets the define __MINGW32_TOOLBOX_UNICODE__ in _mingw.h
- // GCC 4 is also fine
- #if defined(__MINGW32__)
- # if OGRE_COMP_VER < 400
- # if !defined(_STLPORT_VERSION)
- # include<_mingw.h>
- # if defined(__MINGW32_TOOLBOX_UNICODE__) || OGRE_COMP_VER > 345
- # define OGRE_UNICODE_SUPPORT 1
- # else
- # define OGRE_UNICODE_SUPPORT 0
- # endif
- # else
- # define OGRE_UNICODE_SUPPORT 1
- # endif
- # else
- # define OGRE_UNICODE_SUPPORT 1
- # endif
- #else
- # define OGRE_UNICODE_SUPPORT 1
- #endif
- #endif // OGRE_PLATFORM == OGRE_PLATFORM_WIN32
- //----------------------------------------------------------------------------
- // Symbian Settings
- #if OGRE_PLATFORM == OGRE_PLATFORM_SYMBIAN
- # define OGRE_UNICODE_SUPPORT 1
- # define OGRE_DEBUG_MODE 0
- # define _OgreExport
- # define _OgrePrivate
- # define CLOCKS_PER_SEC 1000
- // pragma def were found here: http://www.inf.pucrs.br/~eduardob/disciplinas/SistEmbarcados/Mobile/Nokia/Tools/Carbide_vs/WINSCW/Help/PDF/C_Compilers_Reference_3.2.pdf
- # pragma warn_unusedarg off
- # pragma warn_emptydecl off
- # pragma warn_possunwant off
- #endif
- //----------------------------------------------------------------------------
- // Linux/Apple/Symbian Settings
- #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX || OGRE_PLATFORM == OGRE_PLATFORM_APPLE || OGRE_PLATFORM == OGRE_PLATFORM_IPHONE || OGRE_PLATFORM == OGRE_PLATFORM_SYMBIAN
- // Enable GCC symbol visibility
- # if defined( OGRE_GCC_VISIBILITY )
- # define _OgreExport __attribute__ ((visibility("default")))
- # define _OgrePrivate __attribute__ ((visibility("hidden")))
- # else
- # define _OgreExport
- # define _OgrePrivate
- # endif
- // 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 OGRE_DEBUG_MODE 1
- # else
- # define OGRE_DEBUG_MODE 0
- # endif
- #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
- #define OGRE_PLATFORM_LIB "OgrePlatform.bundle"
- #elif OGRE_PLATFORM == OGRE_PLATFORM_IPHONE
- #define OGRE_PLATFORM_LIB "OgrePlatform.a"
- #else //OGRE_PLATFORM_LINUX
- #define OGRE_PLATFORM_LIB "libOgrePlatform.so"
- #endif
- // Always enable unicode support for the moment
- // Perhaps disable in old versions of gcc if necessary
- #define OGRE_UNICODE_SUPPORT 1
- #endif
- //----------------------------------------------------------------------------
- //----------------------------------------------------------------------------
- // Endian Settings
- // check for BIG_ENDIAN config flag, set OGRE_ENDIAN correctly
- #ifdef OGRE_CONFIG_BIG_ENDIAN
- # define OGRE_ENDIAN OGRE_ENDIAN_BIG
- #else
- # define OGRE_ENDIAN OGRE_ENDIAN_LITTLE
- #endif
- // Integer formats of fixed bit width
- typedef unsigned int uint32;
- typedef unsigned short uint16;
- typedef unsigned char uint8;
- typedef int int32;
- typedef short int16;
- typedef char int8;
- // define uint64 type
- #if OGRE_COMPILER == OGRE_COMPILER_MSVC
- typedef unsigned __int64 uint64;
- typedef __int64 int64;
- #else
- typedef unsigned long long uint64;
- typedef long long int64;
- #endif
- }
- #endif
|