e713baee |
1 | ## |
2 | |
3 | if(FLAGS_ALREADY_INCLUDED) |
4 | return() |
5 | endif() |
6 | set(FLAGS_ALREADY_INCLUDED 1) |
7 | |
9f33b387 |
8 | if (MSVC) |
100592c1 |
9 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp:precise") |
10 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp:precise") |
9f33b387 |
11 | endif() |
12 | |
13 | # set compiler short name and choose SSE2 option for appropriate MSVC compilers |
14 | # ONLY for 32-bit |
15 | if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8) |
16 | if (MSVC80 OR MSVC90 OR MSVC10) |
100592c1 |
17 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2") |
18 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:SSE2") |
9f33b387 |
19 | endif() |
20 | endif() |
21 | |
9f33b387 |
22 | if (WIN32) |
fe9b8ff2 |
23 | add_definitions (-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) |
9f33b387 |
24 | else() |
100592c1 |
25 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -fPIC") |
26 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions -fPIC") |
27 | add_definitions(-DOCC_CONVERT_SIGNALS) |
9f33b387 |
28 | endif() |
29 | |
30 | # enable structured exceptions for MSVC |
31 | string (REGEX MATCH "EHsc" ISFLAG "${CMAKE_CXX_FLAGS}") |
32 | if (ISFLAG) |
33 | string (REGEX REPLACE "EHsc" "EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
34 | elseif (WIN32) |
35 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -EHa") |
36 | endif() |
37 | |
57c28b61 |
38 | # remove _WINDOWS flag if it exists |
39 | string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_CXX_FLAGS}") |
40 | if (IS_WINDOWSFLAG) |
a6874708 |
41 | message (STATUS "Info: /D_WINDOWS has been removed from CMAKE_CXX_FLAGS") |
57c28b61 |
42 | string (REGEX REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
43 | endif() |
44 | |
45 | # remove WIN32 flag if it exists |
46 | string (REGEX MATCH "/DWIN32" IS_WIN32FLAG "${CMAKE_CXX_FLAGS}") |
47 | if (IS_WIN32FLAG) |
a6874708 |
48 | message (STATUS "Info: /DWIN32 has been removed from CMAKE_CXX_FLAGS") |
57c28b61 |
49 | string (REGEX REPLACE "/DWIN32" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
50 | endif() |
51 | |
52 | # remove _WINDOWS flag if it exists |
53 | string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_C_FLAGS}") |
54 | if (IS_WINDOWSFLAG) |
a6874708 |
55 | message (STATUS "Info: /D_WINDOWS has been removed from CMAKE_C_FLAGS") |
57c28b61 |
56 | string (REGEX REPLACE "/D_WINDOWS" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") |
57 | endif() |
58 | |
59 | # remove WIN32 flag if it exists |
60 | string (REGEX MATCH "/DWIN32" IS_WIN32FLAG "${CMAKE_C_FLAGS}") |
61 | if (IS_WIN32FLAG) |
a6874708 |
62 | message (STATUS "Info: /DWIN32 has been removed from CMAKE_C_FLAGS") |
57c28b61 |
63 | string (REGEX REPLACE "/DWIN32" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") |
64 | endif() |
65 | |
9f33b387 |
66 | # remove DEBUG flag if it exists |
67 | string (REGEX MATCH "-DDEBUG" IS_DEBUG_CXX "${CMAKE_CXX_FLAGS_DEBUG}") |
68 | if (IS_DEBUG_CXX) |
a6874708 |
69 | message (STATUS "Info: -DDEBUG has been removed from CMAKE_CXX_FLAGS_DEBUG") |
9f33b387 |
70 | string (REGEX REPLACE "-DDEBUG" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") |
71 | endif() |
72 | |
73 | string (REGEX MATCH "-DDEBUG" IS_DEBUG_C "${CMAKE_C_FLAGS_DEBUG}") |
74 | if (IS_DEBUG_C) |
a6874708 |
75 | message (STATUS "Info: -DDEBUG has been removed from CMAKE_C_FLAGS_DEBUG") |
9f33b387 |
76 | string (REGEX REPLACE "-DDEBUG" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") |
77 | endif() |
9f33b387 |
78 | # enable parallel compilation on MSVC 9 and above |
79 | if (MSVC AND NOT MSVC70 AND NOT MSVC80) |
80 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP") |
81 | endif() |
82 | |
83 | # generate a single response file which enlist all of the object files |
84 | SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) |
85 | SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) |
7dc2c165 |
86 | # increase compiler warnings level (-W4 for MSVC, -Wextra for GCC) |
9f33b387 |
87 | if (MSVC) |
88 | if (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") |
89 | string (REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
90 | else() |
91 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") |
92 | endif() |
a082e7d0 |
93 | elseif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
7dc2c165 |
94 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") |
9f33b387 |
95 | endif() |
96 | |
19286d7c |
97 | if (DEFINED CMAKE_COMPILER_IS_GNUCXX OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang") |
98 | set (CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}") |
99 | endif() |
100 | |
41ec04db |
101 | # Optimize size of binaries |
4d8eca1d |
102 | if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR MINGW) |
41ec04db |
103 | set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") |
104 | set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") |
105 | endif() |
106 | |
9f33b387 |
107 | set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception") |
57c28b61 |
108 | set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception") |