Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/OrxonoxConfig.h.in @ 8370

Last change on this file since 8370 was 8368, checked in by rgrieder, 14 years ago

Added CMake configuration type "RelForDevs", which replaces "RelWithDebInfo". That latter is now equivalent to "Release", but with symbols.
Also, I removed debug symbol generation for Release and MinSizeRel when compiling with MSVC.

The new configuration should be used as standard Release mode when developing. The other three release configurations are for actual installed binaries (and behave again as the name suggests).

  • Property svn:eol-style set to native
File size: 6.8 KB
RevLine 
[682]1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
[1505]3 *                    > www.orxonox.net <
[682]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:
[2639]23 *      Reto Grieder
24 *   Co-authors:
[1293]25 *      ...
[682]26 *
[1755]27 *   Original code: OgrePlatform.h, licensed under the LGPL. The code
[2639]28 *   has changed almost completely though.
[1755]29 *
[2643]30 *   Caution: Do not configure this file CMake configuration (Debug, Release, etc.)
31 *            dependent! XCode and Visual Studio have the same file for all.
32 *
[682]33 */
[1505]34
[682]35/**
[3196]36@file
37@brief
[1755]38    Various constants for compiler, architecture and platform.
[3196]39@remarks
[2639]40    @GENERATED_FILE_COMMENT@
[3196]41*/
[1505]42
[2639]43#ifndef _OrxonoxConfig_H__
44#define _OrxonoxConfig_H__
[1505]45
[2639]46/*---------------------------------
47 * Platform and compiler related options
48 *-------------------------------*/
49#cmakedefine ORXONOX_PLATFORM_WINDOWS
50#cmakedefine ORXONOX_PLATFORM_LINUX
51#cmakedefine ORXONOX_PLATFORM_APPLE
52#cmakedefine ORXONOX_PLATFORM_UNIX /* Apple and Linux */
[1755]53
[3196]54// Determine compiler and set ORXONOX_COMP_VER
[1505]55#if defined( _MSC_VER )
[2639]56#  define ORXONOX_COMPILER_MSVC
[1505]57#  define ORXONOX_COMP_VER _MSC_VER
58
59#elif defined( __GNUC__ )
[2639]60#  define ORXONOX_COMPILER_GCC
[1505]61#  define ORXONOX_COMP_VER (((__GNUC__)*100) + \
62        (__GNUC_MINOR__*10) + \
63        __GNUC_PATCHLEVEL__)
[2639]64#  if defined(__MINGW32__)
65#    define ORXONOX_COMPILER_MINGW
66#  endif
[1505]67
68#elif defined( __BORLANDC__ )
[2639]69#  define ORXONOX_COMPILER_BORLAND
[1505]70#  define ORXONOX_COMP_VER __BCPLUSPLUS__
71
72#else
[2639]73#  pragma error "No known compiler. Abort!"
[1505]74
75#endif
76
[3196]77// Endianness
[2639]78#cmakedefine ORXONOX_BIG_ENDIAN
79#cmakedefine ORXONOX_LITTLE_ENDIAN
[1755]80
[3196]81// Architecture
[8351]82#if defined(__x86_64__) || defined(_M_X64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__)
83#   define ORXONOX_ARCH_64
84#else
85#   define ORXONOX_ARCH_32
86#endif
[2639]87
[3196]88// See if we can use __forceinline or if we need to use __inline instead
[2639]89#cmakedefine HAVE_FORCEINLINE
[8351]90#ifndef ORX_FORCEINLINE
[2797]91#  ifdef HAVE_FORCEINLINE
[8351]92#    define ORX_FORCEINLINE __forceinline
[2797]93#  else
[8351]94#    define ORX_FORCEINLINE __inline
[2797]95#  endif
[1505]96#endif
97
[3196]98// Try to define function information
[1755]99#ifndef __FUNCTIONNAME__
[2639]100#  ifdef ORXONOX_COMPILER_BORLAND
[1755]101#    define __FUNCTIONNAME__ __FUNC__
[2639]102#  elif defined(ORXONOX_COMPILER_GCC)
[1755]103#    define __FUNCTIONNAME__ __PRETTY_FUNCTION__
[2639]104#  elif defined(ORXONOX_COMPILER_MSVC)
[1755]105#    define __FUNCTIONNAME__ __FUNCTION__
[1505]106#  else
[1755]107#    define __FUNCTIONNAME__
[1505]108#  endif
[1755]109#endif
[1505]110
[1755]111
[2639]112/*---------------------------------
113 * Version information
114 *-------------------------------*/
115#define ORXONOX_VERSION_MAJOR @ORXONOX_VERSION_MAJOR@
116#define ORXONOX_VERSION_MINOR @ORXONOX_VERSION_MINOR@
117#define ORXONOX_VERSION_PATCH @ORXONOX_VERSION_PATCH@
118#define ORXONOX_VERSION_NAME "@ORXONOX_VERSION_NAME@"
[1755]119
[3196]120//! Defines version info encoded as 0xMMIIPP (M: Major version, I: Minor version, P: Patch version, all as hex)
121#define ORXONOX_VERSION \
122    ((ORXONOX_VERSION_MAJOR << 16) | (ORXONOX_VERSION_MINOR << 8) | ORXONOX_VERSION_PATCH)
[1921]123
124
[1755]125/*---------------------------------
[2639]126 * Unix settings
[1755]127 *-------------------------------*/
[2639]128#ifdef ORXONOX_PLATFORM_UNIX
[1505]129
[3196]130// TODO: Check what this actually is and whether we need it or not
[1755]131#if 0
[2639]132#  ifdef ORXONOX_PLATFORM_APPLE
[1505]133#    define ORXONOX_PLATFORM_LIB "OrxonoxPlatform.bundle"
[3196]134#  else // ORXONOX_PLATFORM_LINUX
[1505]135#    define ORXONOX_PLATFORM_LIB "libOrxonoxPlatform.so"
136#  endif
[1755]137#endif
[1505]138
[2639]139#endif /* Patform Unix */
[1505]140
141
[1755]142/*---------------------------------
143 * Apple Settings
144 *-------------------------------*/
[1505]145
146
[1755]147/*---------------------------------
[3196]148 * Includes and Declarations
[1755]149 *-------------------------------*/
[3196]150// Define the english written operators like and, or, xor
151// This is C++ standard, but the Microsoft compiler doesn't define them.
[2650]152#cmakedefine HAVE_ISO646_H
153#ifdef HAVE_ISO646_H
154#  include <iso646.h>
[2639]155#endif
[1505]156
[8351]157// On OS X some headers already define HAVE_STDINT_H and that spits out
158// some warnings. Therefore we use this macro.
159// Note: This requires some extra code in OrxonoxConfig.cmake
160#cmakedefine ORX_HAVE_STDINT_H
161#ifdef ORX_HAVE_STDINT_H
[2650]162#  include <stdint.h>
[2639]163#elif defined(ORXONOX_COMPILER_MSVC)
164typedef __int8            int8_t;
165typedef __int16           int16_t;
166typedef __int32           int32_t;
167typedef __int64           int64_t;
168typedef unsigned __int8   uint8_t;
169typedef unsigned __int16  uint16_t;
170typedef unsigned __int32  uint32_t;
171typedef unsigned __int64  uint64_t;
172#endif
[1505]173
[2650]174#cmakedefine HAVE_STDDEF_H
[2685]175/* Quite large, do not include unless necessary
[2650]176#ifdef HAVE_STDDEF_H
177#  include <stddef.h>
[2639]178#endif
[2685]179*/
[1505]180
[8368]181// Configurations Release, RelWithDebInfo and MinSizeRel are designed for
182// redistribution while RelForDevs is for development purposes
[8363]183// ORXONOX_RELEASE simplifies this a little bit
[8368]184#if defined(CMAKE_Release_BUILD) || defined(CMAKE_MinSizeRel_BUILD) \
185    || defined(CMAKE_RelWithDebInfo_BUILD)
[8363]186#  define ORXONOX_RELEASE
187#endif
188
[7818]189// Include memory leak detector if available and not building actual release
190#cmakedefine HAVE_VLD
[8363]191#if defined(HAVE_VLD) && !defined(NDEBUG)
[7818]192typedef uint32_t UINT32;
193typedef wchar_t WCHAR;
194struct HINSTANCE__;
195typedef struct HINSTANCE__* HINSTANCE;
196typedef HINSTANCE HMODULE;
197#  ifndef NULL
198#    define NULL 0
199#  endif
[2639]200#  include <vld.h>
201#endif
[1505]202
[3196]203// Forward declare the everywhere used std::string
204namespace std
205{
206    template<class _Elem> struct char_traits;
207    template<class _Ty>   class  allocator;
208    template<class _Elem, class _Traits, class _Ax> class basic_string;
209    typedef basic_string<char, char_traits<char>, allocator<char> > string;
210}
211
[5695]212// Import general purpose smart pointers
213namespace boost
214{
215    template<class T> class scoped_ptr;
216    template<class T> class shared_ptr;
217    template<class T> class weak_ptr;
218    template<class T> class intrusive_ptr;
219    template<class T> class shared_array;
220    template<class T> class scoped_array;
221}
222namespace orxonox
223{
224    using boost::scoped_ptr;
225    using boost::shared_ptr;
226    using boost::weak_ptr;
227    using boost::intrusive_ptr;
228    using boost::shared_array;
229    using boost::scoped_array;
230}
231
[8351]232// Define Boost Filesystem version
233#include <boost/version.hpp>
234#ifndef BOOST_FILESYSTEM_VERSION
235#  if (BOOST_VERSION < 104600)
236#    define BOOST_FILESYSTEM_VERSION 2
237#  else
238#    define BOOST_FILESYSTEM_VERSION 3
239#  endif
240#endif
241
[2639]242#endif /* _OrxonoxConfig_H__ */
Note: See TracBrowser for help on using the repository browser.