fixed: win32 nsis package naming
[opensg.git] / CMake / SetupCompiler.cmake
blob277ec0b8bfcba38e1906ddcef24c5ff00bd26ca7
2 MESSAGE(STATUS "Applying Compiler Defaults")
4 SET(OSG_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DOSG_DEBUG")
5 SET(OSG_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} -DOSG_DEBUG")
7 IF(UNIX)
8   SET(OSG_CXX_FLAGS_DEBUG "${OSG_CXX_FLAGS_DEBUG} -D_DEBUG")
9   SET(OSG_C_FLAGS_DEBUG   "${OSG_C_FLAGS_DEBUG} -D_DEBUG")
10 ENDIF(UNIX)
12 IF(APPLE AND IOS)
13   SET(OSG_CXX_FLAGS_DEBUG "${OSG_CXX_FLAGS_DEBUG} -g")
14   SET(OSG_C_FLAGS_DEBUG   "${OSG_C_FLAGS_DEBUG} -g")
15 ENDIF(APPLE AND IOS)
17 SET(OSG_CXX_FLAGS ${CMAKE_CXX_FLAGS})
18 SET(OSG_C_FLAGS   ${CMAKE_C_FLAGS})
20 SET(OSG_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
21 SET(OSG_C_FLAGS_RELEASE   ${CMAKE_C_FLAGS_RELEASE})
23 IF(APPLE AND IOS)
24   SET(OSG_CXX_FLAGS_RELEASE "${OSG_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
25   SET(OSG_C_FLAGS_RELEASE   "${OSG_C_FLAGS_RELEASE} -O3 -DNDEBUG")
26 ENDIF(APPLE AND IOS)
28 SET(OSG_EXE_LINKER_FLAGS    ${CMAKE_EXE_LINKER_FLAGS})
29 SET(OSG_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS})
31 IF(MSVC)
33     MESSAGE(STATUS "Setup MSVC")
35     # Hide unused cmake targets
37     SET(CMAKE_CXX_FLAGS_MINSIZEREL
38         "${CMAKE_CXX_FLAGS_MINSIZEREL}" 
39         CACHE INTERNAL "")
41     SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO
42         "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" 
43         CACHE INTERNAL "")
46     SET(CMAKE_C_FLAGS_MINSIZEREL
47         "${CMAKE_C_FLAGS_MINSIZEREL}" 
48         CACHE INTERNAL "")
50     SET(CMAKE_C_FLAGS_RELWITHDEBINFO
51         "${CMAKE_C_FLAGS_RELWITHDEBINFO}" 
52         CACHE INTERNAL "")
55     # ReleaseNoOpt
57     SET(OSG_CXX_FLAGS_RELEASENOOPT "${OSG_CXX_FLAGS_DEBUG} /MP${OSG_NUM_COMPILE_PROC}")
58     SET(OSG_C_FLAGS_RELEASENOOPT   "${OSG_C_FLAGS_DEBUG} /MP${OSG_NUM_COMPILE_PROC}")
60     STRING(REPLACE "MDd" "MD" OSG_CXX_FLAGS_RELEASENOOPT ${OSG_CXX_FLAGS_RELEASENOOPT})
61     STRING(REPLACE "MDd" "MD" OSG_C_FLAGS_RELEASENOOPT   ${OSG_C_FLAGS_RELEASENOOPT})
63     STRING(REPLACE "/RTC1" "" OSG_CXX_FLAGS_RELEASENOOPT ${OSG_CXX_FLAGS_RELEASENOOPT})
64     STRING(REPLACE "/RTC1" "" OSG_C_FLAGS_RELEASENOOPT   ${OSG_C_FLAGS_RELEASENOOPT})
66     STRING(REPLACE "/D_DEBUG" "" OSG_CXX_FLAGS_RELEASENOOPT ${OSG_CXX_FLAGS_RELEASENOOPT})
67     STRING(REPLACE "/D_DEBUG" "" OSG_C_FLAGS_RELEASENOOPT   ${OSG_C_FLAGS_RELEASENOOPT})
69     # Debug
71     SET(OSG_CXX_FLAGS_DEBUG "${OSG_CXX_FLAGS_DEBUG} -DOSG_DEBUGRT /MP${OSG_NUM_COMPILE_PROC}")
72     SET(OSG_C_FLAGS_DEBUG   "${OSG_C_FLAGS_DEBUG} -DOSG_DEBUGRT /MP${OSG_NUM_COMPILE_PROC}")
73     
74     # Debug Opt
76     SET(OSG_CXX_FLAGS_DEBUGOPT "${OSG_CXX_FLAGS_RELEASE} -DOSG_DEBUGRT /Zi /MP${OSG_NUM_COMPILE_PROC}")
77     SET(OSG_C_FLAGS_DEBUGOPT   "${OSG_C_FLAGS_RELEASE} -DOSG_DEBUGRT /Zi /MP${OSG_NUM_COMPILE_PROC}")
78     
79     STRING(REPLACE "MD" "MDd" OSG_CXX_FLAGS_DEBUGOPT ${OSG_CXX_FLAGS_DEBUGOPT})
80     STRING(REPLACE "MD" "MDd" OSG_C_FLAGS_DEBUGOPT   ${OSG_C_FLAGS_DEBUGOPT})
82 #    STRING(REPLACE "/D NDEBUG " "" OSG_CXX_FLAGS_DEBUGOPT ${OSG_CXX_FLAGS_DEBUGOPT})
83 #    STRING(REPLACE "/D NDEBUG " "" OSG_C_FLAGS_DEBUGOPT   ${OSG_C_FLAGS_DEBUGOPT})
85     # Release
87     SET(OSG_CXX_FLAGS_RELEASE "${OSG_CXX_FLAGS_RELEASE} /Zi /MP${OSG_NUM_COMPILE_PROC}")
88     SET(OSG_C_FLAGS_RELEASE   "${OSG_C_FLAGS_RELEASE} /Zi /MP${OSG_NUM_COMPILE_PROC}")
90     # Push to CMAKE
92     SET(CMAKE_CXX_FLAGS_DEBUGOPT 
93         "${OSG_CXX_FLAGS_DEBUGOPT}" 
94         CACHE STRING "Flags used by the C++ compiler during maintainer builds."
95         FORCE)
97     SET(CMAKE_C_FLAGS_DEBUGOPT 
98         "${OSG_C_FLAGS_DEBUGOPT}" 
99         CACHE STRING "Flags used by the C compiler during maintainer builds."
100         FORCE)
102     SET(CMAKE_CXX_FLAGS_RELEASENOOPT 
103         "${OSG_CXX_FLAGS_RELEASENOOPT}" 
104         CACHE STRING "Flags used by the C++ compiler during maintainer builds."
105         FORCE)
107     SET(CMAKE_C_FLAGS_RELEASENOOPT 
108         "${OSG_C_FLAGS_RELEASENOOPT}" 
109         CACHE STRING "Flags used by the C compiler during maintainer builds."
110         FORCE)
115     # General Flags
117 #    STRING(REPLACE "W3"  "W1" OSG_CXX_FLAGS       ${OSG_CXX_FLAGS})
118 #    STRING(REPLACE "W3"  "W1" OSG_C_FLAGS         ${OSG_C_FLAGS})
120     # 4290 exception spec
121     # 4251 dll export
122     # 4275 derived from not exported
123     # 4661 template class mem func not defined
124     # 4351 member init array handling
125     # 4996 deprecated
126     # 4231 non standard ext
128     # 4244 smaller type assign
129     # 4355 this before constructed
130     #
131     # /wd4244 /wd4355
133     STRING(REPLACE "W3"  "W3 /wd4244 /wd4290 /wd4251 /wd4275 /wd4661 /wd4351 /wd4996 /wd4231" OSG_CXX_FLAGS ${OSG_CXX_FLAGS})
134     STRING(REPLACE "W3"  "W3 /wd4244 /wd4290 /wd4251 /wd4275 /wd4351 /wd4996" OSG_C_FLAGS ${OSG_C_FLAGS})
136     SET(OSG_CXX_FLAGS "/bigobj ${OSG_CXX_FLAGS} /D_WIN32_WINNT=0x0500 /DWINVER=0x0500")
137     SET(OSG_C_FLAGS   "/bigobj ${OSG_C_FLAGS} /D_WIN32_WINNT=0x0500 /DWINVER=0x0500")
140     # Libs
142     SET(OSG_EXE_LINKER_FLAGS "${OSG_EXE_LINKER_FLAGS} /nodefaultlib") 
143     SET(OSG_SHARED_LINKER_FLAGS "${OSG_SHARED_LINKER_FLAGS} /nodefaultlib") 
145     SET(OSG_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} winmm.lib wsock32.lib oldnames.lib")
146     SET(OSG_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} winmm.lib wsock32.lib oldnames.lib")
148     SET(OSG_CLEAR_STD_LIBS winspool.lib shell32.lib ole32.lib oleaut32.lib
149                            uuid.lib comdlg32.lib msvcprt.lib msvcrt.lib)
151     FOREACH(STD_LIB ${OSG_CLEAR_STD_LIBS})
152         STRING(REPLACE ${STD_LIB} "" OSG_CXX_STANDARD_LIBRARIES ${OSG_CXX_STANDARD_LIBRARIES})
153         STRING(REPLACE ${STD_LIB} "" OSG_C_STANDARD_LIBRARIES   ${OSG_C_STANDARD_LIBRARIES})
154     ENDFOREACH()
156     SET(CMAKE_CXX_STANDARD_LIBRARIES ${OSG_CXX_STANDARD_LIBRARIES} 
157                                      CACHE STRING "OpenSG defaults" FORCE )
158     SET(CMAKE_C_STANDARD_LIBRARIES   ${OSG_C_STANDARD_LIBRARIES} 
159                                      CACHE STRING "OpenSG defaults" FORCE )
161 #    SET(CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo;DebugRT" 
162 #                                  CACHE STRING "OpenSG Build Types" FORCE )
164     SET(CMAKE_CONFIGURATION_TYPES "Debug;Release;DebugOpt;ReleaseNoOpt" 
165                                   CACHE STRING "OpenSG Build Types" FORCE )
169     # Shared Linker Flags
171     SET(CMAKE_SHARED_LINKER_FLAGS_RELEASENOOPT 
172         "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} msvcprt.lib msvcrt.lib"
173         CACHE STRING "OpenSG defaults" FORCE )
175     SET(CMAKE_SHARED_LINKER_FLAGS_DEBUGOPT 
176         "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /debug msvcprtd.lib msvcrtd.lib"
177         CACHE STRING "OpenSG defaults" FORCE )
179     SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE 
180         "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /debug msvcprt.lib msvcrt.lib"
181         CACHE STRING "OpenSG defaults" FORCE )
183     SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL 
184         "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} msvcprt.lib msvcrt.lib"
185         CACHE INTERNAL "OpenSG defaults" FORCE )
187     SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO 
188         "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} msvcprt.lib msvcrt.lib"
189         CACHE INTERNAL "OpenSG defaults" FORCE )
190     
191     STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags ${CMAKE_SHARED_LINKER_FLAGS_DEBUG})
192     SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${replacementFlags}" )
193     
194     SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG 
195         "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} msvcprtd.lib msvcrtd.lib"
196         CACHE STRING "OpenSG defaults" FORCE )
200     SET(CMAKE_EXE_LINKER_FLAGS_RELEASENOOPT 
201         "${CMAKE_EXE_LINKER_FLAGS_DEBUG} msvcprt.lib msvcrt.lib"
202         CACHE STRING "OpenSG defaults" FORCE )
204     SET(CMAKE_EXE_LINKER_FLAGS_DEBUG 
205         "${CMAKE_EXE_LINKER_FLAGS_DEBUG} msvcprtd.lib msvcrtd.lib"
206         CACHE STRING "OpenSG defaults" FORCE )
208     SET(CMAKE_EXE_LINKER_FLAGS_DEBUGOPT 
209         "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /debug msvcprtd.lib msvcrtd.lib"
210         CACHE STRING "OpenSG defaults" FORCE )
212     SET(CMAKE_EXE_LINKER_FLAGS_RELEASE 
213         "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /debug msvcprt.lib msvcrt.lib"
214         CACHE STRING "OpenSG defaults" FORCE )
217     SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL 
218         "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} msvcprt.lib msvcrt.lib"
219         CACHE INTERNAL "OpenSG defaults" FORCE )
221     SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO 
222         "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} msvcprt.lib msvcrt.lib"
223         CACHE INTERNAL "OpenSG defaults" FORCE )
226     # Hide unused vars
228     SET(CMAKE_MODULE_LINKER_FLAGS 
229         "${CMAKE_MODULE_LINKER_FLAGS}"
230         CACHE INTERNAL "OpenSG defaults" FORCE )
232     SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG 
233         "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}"
234         CACHE INTERNAL "OpenSG defaults" FORCE )
236     SET(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL 
237         "${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL}"
238         CACHE INTERNAL "OpenSG defaults" FORCE )
240     SET(CMAKE_MODULE_LINKER_FLAGS_RELEASE 
241         "${CMAKE_MODULE_LINKER_FLAGS_RELEASE}"
242         CACHE INTERNAL "OpenSG defaults" FORCE )
244     SET(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO 
245         "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO}"
246         CACHE INTERNAL "OpenSG defaults" FORCE )
249 ENDIF(MSVC)
251 IF(CMAKE_COMPILER_IS_GNUCC)
253     IF(OSG_PLATFORM_64 AND LINUX)
254         SET(OSG_CXX_FLAGS "${OSG_CXX_FLAGS} -m64")
255         SET(OSG_C_FLAGS   "${OSG_C_FLAGS} -m64")
257         SET(OSG_EXE_LINKER_FLAGS    "${OSG_EXE_LINKER_FLAGS} -m64")
258         SET(OSG_SHARED_LINKER_FLAGS "${OSG_SHARED_LINKER_FLAGS} -m64")
260     ENDIF(OSG_PLATFORM_64 AND LINUX)
262     SET(OSG_CXX_FLAGS "${OSG_CXX_FLAGS} -D__STDC_FORMAT_MACROS -fPIC")
263     SET(OSG_C_FLAGS   "${OSG_C_FLAGS} -D__STDC_FORMAT_MACROS -fPIC")
265     IF(OSG_ENABLE_C++11)
266       SET(OSG_CXX_FLAGS "${OSG_CXX_FLAGS} -std=c++11")
267     ENDIF()
269 ENDIF(CMAKE_COMPILER_IS_GNUCC)
276 SET(CMAKE_CXX_FLAGS         ${OSG_CXX_FLAGS} 
277                             CACHE STRING "OpenSG defaults" FORCE )
278 SET(CMAKE_C_FLAGS           ${OSG_C_FLAGS} 
279                             CACHE STRING "OpenSG defaults" FORCE )
281 SET(CMAKE_CXX_FLAGS_DEBUG   ${OSG_CXX_FLAGS_DEBUG} 
282                             CACHE STRING "OpenSG defaults" FORCE )
283 SET(CMAKE_C_FLAGS_DEBUG     ${OSG_C_FLAGS_DEBUG} 
284                             CACHE STRING "OpenSG defaults" FORCE )
286 SET(CMAKE_CXX_FLAGS_RELEASE ${OSG_CXX_FLAGS_RELEASE} 
287                             CACHE STRING "OpenSG defaults" FORCE )
288 SET(CMAKE_C_FLAGS_RELEASE   ${OSG_C_FLAGS_RELEASE} 
289                             CACHE STRING "OpenSG defaults" FORCE )
292 SET(CMAKE_EXE_LINKER_FLAGS    ${OSG_EXE_LINKER_FLAGS} 
293                               CACHE STRING "OpenSG defaults" FORCE )
294 SET(CMAKE_SHARED_LINKER_FLAGS ${OSG_SHARED_LINKER_FLAGS} 
295                               CACHE STRING "OpenSG defaults" FORCE )
297    
299 ###########
300 # GV stuff
301 ###########
303 IF(CMAKE_COMPILER_IS_GNUCC)
304 #    SET(OSG_CXX_FLAGS_GV " -Wall -Wextra -Wreturn-type -Wold-style-cast -DOSG_DEBUG_OLD_C_CASTS -DOSG_CLEAN_FCFIELDS -DOSG_CHECK_CONST_CORRECT_FIELD_USAGE -Wwrite-strings -Werror -Wno-unused-parameter")
306     SET(OSG_CXX_FLAGS_GV " -Wall -Wreturn-type -Wold-style-cast -DOSG_DEBUG_OLD_C_CASTS -DOSG_CLEAN_FCFIELDS -DOSG_CHECK_CONST_CORRECT_FIELD_USAGE -Wwrite-strings -Werror -Wno-unused-parameter")
308 #    SET(OSG_C_FLAGS_GV " -Wall -Wextra -Wreturn-type -Wold-style-cast -DOSG_DEBUG_OLD_C_CASTS -DOSG_CLEAN_FCFIELDS -DOSG_CHECK_CONST_CORRECT_FIELD_USAGE -Wwrite-strings -Werror -Wno-unused-parameter")
309     SET(OSG_C_FLAGS_GV " -Wall -Wextra -Wreturn-type -Wold-style-cast -DOSG_DEBUG_OLD_C_CASTS -DOSG_CLEAN_FCFIELDS -DOSG_CHECK_CONST_CORRECT_FIELD_USAGE -Wwrite-strings -Werror -Wno-unused-parameter")
312     SET(OSG_ADD_CXX_FLAGS_GV "")
313     SET(OSG_ADD_C_FLAGS_GV "")
315     SET(OSG_SHARED_LINKER_FLAGS_GV " -Wl,--no-undefined")
318 ##########
319 # Debug
320 ##########
322     SET(CMAKE_CXX_FLAGS_DEBUGGV 
323         "${CMAKE_CXX_FLAGS_DEBUG}${OSG_CXX_FLAGS_GV}" 
324         CACHE STRING "Flags used by the C++ compiler during maintainer builds."
325         FORCE)
327     SET(CMAKE_C_FLAGS_DEBUGGV 
328         "${CMAKE_C_FLAGS_DEBUG}${OSG_C_FLAGS_GV}" 
329         CACHE STRING "Flags used by the C compiler during maintainer builds."
330         FORCE)
332     SET(CMAKE_EXE_LINKER_FLAGS_DEBUGGV
333         "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" 
334         CACHE STRING "Flags used for linking binaries during maintainer builds."
335         FORCE)
337     SET(CMAKE_MODULE_LINKER_FLAGS_DEBUGGV
338         "${CMAKE_MODULE_LINKER_FLAGS_DEBUG}" 
339         CACHE STRING "Flags used for linking binaries during maintainer builds."
340         FORCE)
342     SET(CMAKE_SHARED_LINKER_FLAGS_DEBUGGV
343         "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}${OSG_SHARED_LINKER_FLAGS_GV}" 
344         CACHE STRING
345         "Flags used by the shared libraries linker during maintainer builds."
346         FORCE)
348     ##########
349     # Release
350     ##########
352     SET(CMAKE_CXX_FLAGS_RELEASEGV 
353         "${CMAKE_CXX_FLAGS_RELEASE}${OSG_CXX_FLAGS_GV}" 
354         CACHE STRING "Flags used by the C++ compiler during gv builds."
355         FORCE)
357     SET(CMAKE_C_FLAGS_RELEASEGV 
358         "${CMAKE_C_FLAGS_RELEASE}${OSG_C_FLAGS_GV}"
359         CACHE STRING "Flags used by the C compiler during gv builds."
360         FORCE)
362     SET(CMAKE_EXE_LINKER_FLAGS_RELEASEGV
363         "${CMAKE_EXE_LINKER_FLAGS_RELEASE}" 
364         CACHE STRING "Flags used for linking binaries during gv builds."
365         FORCE)
367     SET(CMAKE_MODULE_LINKER_FLAGS_RELEASEGV
368          "${CMAKE_MODULE_LINKER_FLAGS_RELEASE}" 
369         CACHE STRING "Flags used for linking binaries during gv builds."
370         FORCE)
372     SET(CMAKE_SHARED_LINKER_FLAGS_RELEASEGV
373         "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}${OSG_SHARED_LINKER_FLAGS_GV}" 
374         CACHE STRING
375         "Flags used by the shared libraries linker during gv builds."
376         FORCE)
378 ENDIF(CMAKE_COMPILER_IS_GNUCC)