Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ois_update/cmake/CompilerConfigGCC.cmake @ 7520

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

Added some useful compiler options found in the Ogre build system.
SSE for GCC and fp:fast for MSVC are commented (not tested yet).

  • Property svn:eol-style set to native
File size: 4.4 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, Adrian Friedli
22 #  Description:
23 #    Sets the right compiler and linker flags for GCC.
24 #
25
26INCLUDE(FlagUtilities)
27INCLUDE(CompareVersionStrings)
28INCLUDE(CheckCXXCompilerFlag)
29
30# Shortcut for CMAKE_COMPILER_IS_GNUCXX and ..._GNUC
31SET(CMAKE_COMPILER_IS_GNU TRUE)
32
33# Determine compiler version
34EXEC_PROGRAM(
35  ${CMAKE_CXX_COMPILER}
36  ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
37  OUTPUT_VARIABLE GCC_VERSION
38)
39
40# GCC may not support #pragma GCC system_header correctly when using
41# templates. According to Bugzilla, it was fixed March 07 but tests
42# have confirmed that GCC 4.0.0 does not pose a problem for our cases.
43COMPARE_VERSION_STRINGS("${GCC_VERSION}" "4.0.0" _compare_result)
44IF(_compare_result LESS 0)
45  SET(GCC_NO_SYSTEM_HEADER_SUPPORT TRUE)
46ENDIF()
47
48# GCC only supports PCH in versions 3.4 and above
49INCLUDE(CompareVersionStrings)
50COMPARE_VERSION_STRINGS("${GCC_VERSION}" "3.4.0" _compare_result)
51IF(_compare_result GREATER -1)
52  SET(PCH_COMPILER_SUPPORT TRUE)
53ENDIF()
54
55# Also include environment flags. Could cause conflicts though
56SET_COMPILER_FLAGS("$ENV{CXXFLAGS}" CXX CACHE)
57SET_COMPILER_FLAGS("$ENV{CFLAGS}"   C   CACHE)
58
59# These flags get added to the flags above
60SET_COMPILER_FLAGS("    -g -ggdb -D_DEBUG" Debug          CACHE)
61SET_COMPILER_FLAGS("             -DNDEBUG" ReleaseAll     CACHE)
62ADD_COMPILER_FLAGS("-O3"                   Release        CACHE)
63ADD_COMPILER_FLAGS("-O2 -g -ggdb"          RelWithDebInfo CACHE)
64ADD_COMPILER_FLAGS("-Os"                   MinSizeRel     CACHE)
65
66# CMake doesn't seem to set the PIC flags right on certain 64 bit systems
67# Todo: MinGW too?
68IF(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
69  ADD_COMPILER_FLAGS("-fPIC" CACHE)
70ENDIF()
71
72# Use SSE if possible
73#CHECK_CXX_COMPILER_FLAG(-msse _gcc_have_sse)
74#IF(_gcc_have_sse)
75#  ADD_COMPILER_FLAGS("-msse" CACHE)
76#ENDIF()
77
78IF(NOT MINGW)
79  # Have GCC visibility?
80  CHECK_CXX_COMPILER_FLAG("-fvisibility=hidden" _gcc_have_visibility)
81  IF(_gcc_have_visibility)
82    # Note: There is a possible bug with the flag in gcc < 4.2 and Debug versions
83    COMPARE_VERSION_STRINGS("${GCC_VERSION}" "4.2.0" _compare_result)
84    IF(NOT CMAKE_BUILD_TYPE STREQUAL "Debug" OR _compare_result SMALLER GREATER -1)
85      ADD_COMPILER_FLAGS("-DORXONOX_GCC_VISIBILITY -fvisibility=hidden -fvisibility-inlines-hidden" CACHE)
86    ENDIF()
87  ENDIF(_have_gcc_visibility)
88ENDIF(NOT MINGW)
89
90# We have some unconformant code, disable an optimisation feature
91ADD_COMPILER_FLAGS("-fno-strict-aliasing" CACHE)
92
93# For GCC older than version 4, do not display sign compare warnings
94# because of boost::filesystem (which creates about a hundred per include)
95ADD_COMPILER_FLAGS("-Wno-sign-compare" GCC_NO_SYSTEM_HEADER_SUPPORT CACHE)
96
97# For newer GCC (4.3 and above), don't display hundreds of annoying deprecated
98# messages. Other versions don't seem to show any such warnings at all.
99ADD_COMPILER_FLAGS("-Wno-deprecated" CXX CACHE)
100
101# Always show why a precompiled header file could not be used
102ADD_COMPILER_FLAGS("-Winvalid-pch" CXX CACHE)
103
104# Increase warning level if requested
105IF(EXTRA_COMPILER_WARNINGS)
106  ADD_COMPILER_FLAGS("-Wall -Wextra -Wno-unused-parameter" CACHE)
107ELSE()
108  REMOVE_COMPILER_FLAGS("-Wextra -Wno-unused-parameter" CACHE)
109  ADD_COMPILER_FLAGS("-Wall" CACHE)
110ENDIF()
111
112# General linker flags
113SET_LINKER_FLAGS("--no-undefined" CACHE)
114
115# Add compiler and linker flags for MinGW
116IF (MINGW)
117  ADD_COMPILER_FLAGS("-gstabs+" Debug          CACHE)
118  ADD_COMPILER_FLAGS("-gstabs+" RelWithDebInfo CACHE)
119
120  ADD_LINKER_FLAGS("-enable-auto-import" CACHE)
121ENDIF()
Note: See TracBrowser for help on using the repository browser.