Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/OrxonoxConfig.cmake @ 12130

Last change on this file since 12130 was 11076, checked in by muemart, 9 years ago

Add CMake configs for Clang. Most of it is reused from GCC.

  • Property svn:eol-style set to native
File size: 5.0 KB
Line 
1 #
2 #             ORXONOX - the hottest 3D action shooter ever to exist
3 #                             > www.orxonox.net <
4 #
5 #        This program is free software; you can redistribute it and/or
6 #         modify it under the terms of the GNU General Public License
7 #        as published by the Free Software Foundation; either version 2
8 #            of the License, or (at your option) any later version.
9 #
10 #       This program is distributed in the hope that it will be useful,
11 #        but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #                 GNU General Public License for more details.
14 #
15 #   You should have received a copy of the GNU General Public License along
16 #      with this program; if not, write to the Free Software Foundation,
17 #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 #
19 #
20 #  Author:
21 #    Reto Grieder
22 #  Description:
23 #    Configures the header files OrxonoxConfig.h and SpecialConfig.h
24 #    and sets some other options. All the build related options should be
25 #    found and set here if possible.
26 #
27
28#################### Options ####################
29
30# Global switch to disable Precompiled Header Files
31# Note: PCH temporarily disabled on Mac because of severe problems
32IF(PCH_COMPILER_SUPPORT AND NOT APPLE)
33  OPTION(PCH_ENABLE "Global PCH switch" TRUE)
34ENDIF()
35
36# Global option to steer building muliple files as a single one
37# off/false: Turn off completely
38# partial:   Only combine files explicitly specified with BUILD_UNIT
39# full##:    Use ## source files per orxonox library and use manual build units
40#            for external dependencies. Example: full8 will in general use 8
41#            source files per library, but more specifically tries to occupy
42#            8 CPU threads.
43#            This is configured manually in BuildUnitsConfig.cmake
44SET(ENABLE_BUILD_UNITS "partial" CACHE STRING "Enables building multiple source files as one.")
45IF(ENABLE_BUILD_UNITS)
46  IF(NOT "${ENABLE_BUILD_UNITS}" STREQUAL "partial")
47    STRING(REGEX REPLACE "^full([1-9][0-9]?)$" "\\1" _nr_of_units "${ENABLE_BUILD_UNITS}")
48    IF("${_nr_of_units}" STREQUAL "${ENABLE_BUILD_UNITS}") # Regex match failed
49      MESSAGE(FATAL_ERROR "Unrecognised option for ENABLE_BUILD_UNITS: ${ENABLE_BUILD_UNITS}")
50    ELSE()
51      SET(NR_OF_BUILD_UNITS ${_nr_of_units})
52      IF(NOT HAVE_COUNTER_MACRO)
53        MESSAGE(WARNING "Your compiler doesn't support the __COUNTER__ macro. Full build units might not work!")
54      ENDIF()
55    ENDIF()
56  ENDIF()
57  IF(CMAKE_COMPILER_IS_GNU OR CMAKE_COMPILER_IS_CLANG)
58    INCLUDE(BuildUnitsConfigGCC.cmake)
59  ELSEIF(MSVC)
60    INCLUDE(BuildUnitsConfigMSVC.cmake)
61  ENDIF()
62ENDIF()
63
64# Use WinMain() or main()?
65IF(WIN32)
66  OPTION(ORXONOX_USE_WINMAIN "Use WinMain (doesn't show console) or main" FALSE)
67ENDIF()
68
69################ Platform Config ################
70
71# Check endianness
72INCLUDE(TestBigEndian)
73TEST_BIG_ENDIAN(ORXONOX_BIG_ENDIAN)
74IF(NOT ORXONOX_BIG_ENDIAN)
75  SET(ORXONOX_LITTLE_ENDIAN TRUE)
76ENDIF()
77
78# Platforms
79SET(ORXONOX_PLATFORM_WINDOWS ${WIN32})
80SET(ORXONOX_PLATFORM_APPLE   ${APPLE})
81SET(ORXONOX_PLATFORM_UNIX    ${UNIX})
82SET(ORXONOX_PLATFORM_LINUX   ${LINUX})
83
84# Check __forceinline
85IF(MSVC)
86  INCLUDE(CheckCXXSourceCompiles)
87  SET(_source "int main() { return 0; } __forceinline void test() { return; }")
88  CHECK_CXX_SOURCE_COMPILES("${_source}" HAVE_FORCEINLINE)
89ENDIF(MSVC)
90
91# Check some non standard system includes
92INCLUDE(CheckIncludeFileCXX)
93CHECK_INCLUDE_FILE_CXX(iso646.h HAVE_ISO646_H)
94CHECK_INCLUDE_FILE_CXX(stdint.h HAVE_STDINT_H)
95
96# Part of a woraround for OS X warnings. See OrxonoxConfig.h.in
97SET(ORX_HAVE_STDINT_H ${HAVE_STDINT_H})
98
99# XCode and Visual Studio support multiple configurations. In order to tell
100# about the active one we have to define the macro for each configuration
101ADD_COMPILER_FLAGS("-DCMAKE_Debug_BUILD"          Debug)
102ADD_COMPILER_FLAGS("-DCMAKE_RelForDevs_BUILD"     RelForDevs)
103ADD_COMPILER_FLAGS("-DCMAKE_Release_BUILD"        Release)
104ADD_COMPILER_FLAGS("-DCMAKE_RelWithDebInfo_BUILD" RelWithDebInfo)
105ADD_COMPILER_FLAGS("-DCMAKE_MinSizeRel_BUILD"     MinSizeRel)
106
107############## Configured Headers ###############
108
109SET(GENERATED_FILE_COMMENT
110   "DO NOT EDIT THIS FILE! <br>
111    It has been automatically generated by CMake from OrxonoxConfig.h.in")
112# Copy and configure OrxonoxConfig which gets included in every file
113CONFIGURE_FILE(OrxonoxConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/OrxonoxConfig.h)
114# This file only gets included by very few classes to avoid a large recompilation
115CONFIGURE_FILE(SpecialConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/SpecialConfig.h)
116
117SET(ORXONOX_CONFIG_FILES
118  ${CMAKE_CURRENT_SOURCE_DIR}/OrxonoxConfig.h.in
119  ${CMAKE_CURRENT_SOURCE_DIR}/SpecialConfig.h.in
120)
121SET(ORXONOX_CONFIG_FILES_GENERATED
122  ${CMAKE_CURRENT_BINARY_DIR}/OrxonoxConfig.h
123  ${CMAKE_CURRENT_BINARY_DIR}/SpecialConfig.h
124)
125
126# Make special target including the configured header files for Visual Studio
127IF(MSVC)
128  ADD_CUSTOM_TARGET(config
129    SOURCES
130      ${ORXONOX_CONFIG_FILES}
131      ${ORXONOX_CONFIG_FILES_GENERATED}
132  )
133ENDIF()
Note: See TracBrowser for help on using the repository browser.