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