Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/cmake/CompilerConfigMSVC.cmake @ 8567

Last change on this file since 8567 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: 5.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
22 #  Description:
23 #    Sets the right compiler and linker flags for the Microsoft Compiler.
24 #
25
26INCLUDE(FlagUtilities)
27
28# We make use of variadic macros, which is only supported by MSVC 8 and above
29IF(MSVC_VERSION LESS 1400)
30  MESSAGE(FATAL_ERROR "Microsoft Visual Studio versions below 8 (2005) are not supported.")
31ENDIF()
32
33# Orxonox only supports MSVC 8 and above, which gets asserted above
34SET(PCH_COMPILER_SUPPORT TRUE)
35
36
37#################### Compiler Flags #####################
38
39# CMake default flags : -DWIN32 -D_WINDOWS -W3 -Zm1000
40# additionally for CXX: -EHsc -GR
41# We keep these flags but reset the build specific flags
42SET_COMPILER_FLAGS("" Debug RelForDevs RelWithDebInfo Release MinSizeRel CACHE)
43
44# Make sure we define all the possible macros for identifying Windows
45ADD_COMPILER_FLAGS("-D__WIN32__ -D_WIN32"  CACHE)
46# Suppress some annoying warnings
47ADD_COMPILER_FLAGS("-D_CRT_SECURE_NO_WARNINGS" CACHE)
48ADD_COMPILER_FLAGS("-D_SCL_SECURE_NO_WARNINGS" CACHE)
49
50# Use multiprocessed compiling (like "make -j3" on Unix)
51ADD_COMPILER_FLAGS("-MP" CACHE)
52
53# Never omit frame pointers to avoid useless stack traces (the performance
54# loss is almost not measurable)
55ADD_COMPILER_FLAGS("-Oy-" CACHE)
56# Enable non standard floating point optimisations
57ADD_COMPILER_FLAGS("-fp:fast" CACHE)
58
59# Set build specific flags.
60# -MD[d]    Multithreaded [debug] shared MSVC runtime library
61# -Zi       Generate debug symbols
62# -O[d|2|1] No optimisations, optimise for speed, optimise for size
63# -Oi[-]    Use or disable use of intrinisic functions
64# -GL       Link time code generation (see -LTCG in linker flags)
65# -RTC1     Both basic runtime checks
66ADD_COMPILER_FLAGS("-MDd -Zi -Od -Oi  -D_DEBUG -RTC1" Debug          CACHE)
67ADD_COMPILER_FLAGS("-MD  -Zi -O2 -Oi  -DNDEBUG"       RelForDevs     CACHE)
68ADD_COMPILER_FLAGS("-MD  -Zi -O2 -Oi  -DNDEBUG -GL"   RelWithDebInfo CACHE)
69ADD_COMPILER_FLAGS("-MD      -O2 -Oi  -DNDEBUG -GL"   Release        CACHE)
70ADD_COMPILER_FLAGS("-MD      -O1 -Oi- -DNDEBUG -GL"   MinSizeRel     CACHE)
71
72
73####################### Warnings ########################
74
75# -WX    General warning Level X
76# -wdX   Disable specific warning X
77# -wnX   Set warning level of specific warning X to level n
78
79# Increase warning level if requested
80IF(EXTRA_COMPILER_WARNINGS)
81  REMOVE_COMPILER_FLAGS("-W1 -W2 -W3" CACHE)
82  ADD_COMPILER_FLAGS   ("-W4" CACHE)
83ELSE()
84  REMOVE_COMPILER_FLAGS("-W1 -W2 -W4" CACHE)
85  ADD_COMPILER_FLAGS   ("-W3" CACHE)
86ENDIF()
87
88# "<type> needs to have dll-interface to be used by clients'
89# Happens on STL member variables which are not public
90ADD_COMPILER_FLAGS("-w44251" CACHE)
91ADD_COMPILER_FLAGS("-w44275" CACHE) # For inheritance
92
93# Multiple assignment operators specified
94ADD_COMPILER_FLAGS("-w44522" CACHE)
95
96# Forcing values to bool
97ADD_COMPILER_FLAGS("-w44800" CACHE)
98
99# TODO: Resolve the cause of this warning!
100# ('class1' : inherits 'class2::member' via dominance)
101ADD_COMPILER_FLAGS("-w44250" CACHE)
102
103# conversion from 'double' to 'float', possible loss of data
104# conversion from 'ogg_int64_t' to 'long', possible loss of data
105# ADD_COMPILER_FLAGS("-w44244" CACHE)
106
107# "conversion from 'size_t' to 'unsigned int', possible loss of data
108# ADD_COMPILER_FLAGS("-w44267" CACHE)
109
110# "truncation from 'double' to 'float'
111# ADD_COMPILER_FLAGS("-w44305" CACHE)
112
113# "non dll-interface class used as base for dll-interface class"
114# ADD_COMPILER_FLAGS("-w44275" CACHE)
115
116
117##################### Linker Flags ######################
118
119# CMake default flags: -MANIFEST -STACK:10000000 -machine:I386
120# We keep these flags but reset the build specific flags
121SET_LINKER_FLAGS("" Debug RelForDevs RelWithDebInfo Release MinSizeRel CACHE)
122
123# Never fold multiple functions into a single one because we might compare
124# function pointers (for instance with network functions)
125ADD_LINKER_FLAGS("-OPT:NOICF" CACHE)
126
127# Very old flag that would do some extra Windows 98 alignment optimisations
128ADD_LINKER_FLAGS("-OPT:NOWIN98" MSVC80 CACHE)
129
130# Generate debug symbols
131ADD_LINKER_FLAGS("-DEBUG" Debug RelForDevs RelWithDebInfo CACHE)
132
133# Incremental linking speeds up development builds
134ADD_LINKER_FLAGS("-INCREMENTAL:YES" Debug   RelForDevs                CACHE)
135ADD_LINKER_FLAGS("-INCREMENTAL:NO"  Release RelWithDebInfo MinSizeRel CACHE)
136
137# Eliminate unreferenced data
138ADD_LINKER_FLAGS("-OPT:REF" Release RelWithDebInfo MinSizeRel CACHE)
139
140# Link time code generation can improve run time performance at the cost of
141# hugely increased link time (the total build time is about the same though)
142ADD_LINKER_FLAGS("-LTCG" Release RelWithDebInfo MinSizeRel CACHE)
Note: See TracBrowser for help on using the repository browser.