Commit | Line | Data |
---|---|---|
e713baee | 1 | ## |
2 | ||
3 | if(FLAGS_ALREADY_INCLUDED) | |
4 | return() | |
5 | endif() | |
6 | set(FLAGS_ALREADY_INCLUDED 1) | |
7 | ||
2e48c1cb | 8 | # force option /fp:precise for Visual Studio projects. |
cb728702 | 9 | # |
10 | # Note that while this option is default for MSVC compiler, Visual Studio | |
11 | # project can be switched later to use Intel Compiler (ICC). | |
12 | # Enforcing -fp:precise ensures that in such case ICC will use correct | |
13 | # option instead of its default -fp:fast which is harmful for OCCT. | |
9f33b387 | 14 | if (MSVC) |
2e48c1cb | 15 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:precise") |
16 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fp:precise") | |
9f33b387 | 17 | endif() |
18 | ||
19 | # set compiler short name and choose SSE2 option for appropriate MSVC compilers | |
20 | # ONLY for 32-bit | |
21 | if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8) | |
22 | if (MSVC80 OR MSVC90 OR MSVC10) | |
100592c1 | 23 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2") |
24 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:SSE2") | |
9f33b387 | 25 | endif() |
26 | endif() | |
27 | ||
9e479117 | 28 | if (MSVC) |
fe9b8ff2 | 29 | add_definitions (-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) |
9f33b387 | 30 | else() |
100592c1 | 31 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -fPIC") |
32 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions -fPIC") | |
33 | add_definitions(-DOCC_CONVERT_SIGNALS) | |
9f33b387 | 34 | endif() |
35 | ||
36 | # enable structured exceptions for MSVC | |
37 | string (REGEX MATCH "EHsc" ISFLAG "${CMAKE_CXX_FLAGS}") | |
38 | if (ISFLAG) | |
39 | string (REGEX REPLACE "EHsc" "EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | |
cb728702 | 40 | elseif (MSVC) |
2e48c1cb | 41 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHa") |
9f33b387 | 42 | endif() |
43 | ||
57c28b61 | 44 | # remove _WINDOWS flag if it exists |
45 | string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_CXX_FLAGS}") | |
46 | if (IS_WINDOWSFLAG) | |
a6874708 | 47 | message (STATUS "Info: /D_WINDOWS has been removed from CMAKE_CXX_FLAGS") |
57c28b61 | 48 | string (REGEX REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
49 | endif() | |
50 | ||
51 | # remove WIN32 flag if it exists | |
52 | string (REGEX MATCH "/DWIN32" IS_WIN32FLAG "${CMAKE_CXX_FLAGS}") | |
53 | if (IS_WIN32FLAG) | |
a6874708 | 54 | message (STATUS "Info: /DWIN32 has been removed from CMAKE_CXX_FLAGS") |
57c28b61 | 55 | string (REGEX REPLACE "/DWIN32" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") |
56 | endif() | |
57 | ||
58 | # remove _WINDOWS flag if it exists | |
59 | string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_C_FLAGS}") | |
60 | if (IS_WINDOWSFLAG) | |
a6874708 | 61 | message (STATUS "Info: /D_WINDOWS has been removed from CMAKE_C_FLAGS") |
57c28b61 | 62 | string (REGEX REPLACE "/D_WINDOWS" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") |
63 | endif() | |
64 | ||
65 | # remove WIN32 flag if it exists | |
66 | string (REGEX MATCH "/DWIN32" IS_WIN32FLAG "${CMAKE_C_FLAGS}") | |
67 | if (IS_WIN32FLAG) | |
a6874708 | 68 | message (STATUS "Info: /DWIN32 has been removed from CMAKE_C_FLAGS") |
57c28b61 | 69 | string (REGEX REPLACE "/DWIN32" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") |
70 | endif() | |
71 | ||
9f33b387 | 72 | # remove DEBUG flag if it exists |
73 | string (REGEX MATCH "-DDEBUG" IS_DEBUG_CXX "${CMAKE_CXX_FLAGS_DEBUG}") | |
74 | if (IS_DEBUG_CXX) | |
a6874708 | 75 | message (STATUS "Info: -DDEBUG has been removed from CMAKE_CXX_FLAGS_DEBUG") |
9f33b387 | 76 | string (REGEX REPLACE "-DDEBUG" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") |
77 | endif() | |
78 | ||
79 | string (REGEX MATCH "-DDEBUG" IS_DEBUG_C "${CMAKE_C_FLAGS_DEBUG}") | |
80 | if (IS_DEBUG_C) | |
a6874708 | 81 | message (STATUS "Info: -DDEBUG has been removed from CMAKE_C_FLAGS_DEBUG") |
9f33b387 | 82 | string (REGEX REPLACE "-DDEBUG" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") |
83 | endif() | |
9f33b387 | 84 | # enable parallel compilation on MSVC 9 and above |
85 | if (MSVC AND NOT MSVC70 AND NOT MSVC80) | |
2e48c1cb | 86 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") |
9f33b387 | 87 | endif() |
88 | ||
89 | # generate a single response file which enlist all of the object files | |
90 | SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) | |
91 | SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) | |
7dc2c165 | 92 | # increase compiler warnings level (-W4 for MSVC, -Wextra for GCC) |
9f33b387 | 93 | if (MSVC) |
94 | if (CMAKE_CXX_FLAGS MATCHES "/W[0-4]") | |
95 | string (REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") | |
96 | else() | |
97 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") | |
98 | endif() | |
a082e7d0 | 99 | elseif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
7dc2c165 | 100 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") |
c2c9890c | 101 | if (BUILD_SHARED_LIBS) |
102 | if (APPLE) | |
103 | set (CMAKE_SHARED_LINKER_FLAGS "-lm ${CMAKE_SHARED_LINKER_FLAGS}") | |
7c65581d | 104 | elseif(NOT WIN32) |
105 | set (CMAKE_SHARED_LINKER_FLAGS "-lm ${CMAKE_SHARED_LINKER_FLAGS}") | |
c2c9890c | 106 | endif() |
c2c9890c | 107 | endif() |
9f33b387 | 108 | endif() |
109 | ||
7c65581d | 110 | if(MINGW) |
a139a353 BB |
111 | # Set default release optimization option to O2 instead of O3, since in |
112 | # some OCCT related examples, this gives significantly smaller binaries | |
113 | # at comparable performace with MinGW-w64. | |
114 | string (REGEX MATCH "-O3" IS_O3_CXX "${CMAKE_CXX_FLAGS_RELEASE}") | |
115 | if (IS_O3_CXX) | |
116 | string (REGEX REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") | |
117 | else() | |
118 | set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") | |
119 | endif() | |
120 | ||
7c65581d | 121 | set (CMAKE_CXX_FLAGS "-std=gnu++0x ${CMAKE_CXX_FLAGS}") |
122 | add_definitions(-D_WIN32_WINNT=0x0501) | |
123 | # workaround bugs in mingw with vtable export | |
124 | set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-all-symbols") | |
dace4784 | 125 | elseif ("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang") |
9070a59f | 126 | if (APPLE) |
127 | # CLang can be used with both libstdc++ and libc++, however on OS X libstdc++ is outdated. | |
128 | set (CMAKE_CXX_FLAGS "-std=c++0x -stdlib=libc++ ${CMAKE_CXX_FLAGS}") | |
129 | else() | |
130 | set (CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}") | |
131 | endif() | |
dace4784 | 132 | elseif (DEFINED CMAKE_COMPILER_IS_GNUCXX) |
19286d7c | 133 | set (CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}") |
134 | endif() | |
135 | ||
41ec04db | 136 | # Optimize size of binaries |
4d8eca1d | 137 | if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR MINGW) |
41ec04db | 138 | set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s") |
139 | set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") | |
140 | endif() | |
141 | ||
9f33b387 | 142 | set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception") |
7c65581d | 143 | set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception") |