3 if(FLAGS_ALREADY_INCLUDED)
6 set(FLAGS_ALREADY_INCLUDED 1)
9 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp:precise")
10 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp:precise")
13 # set compiler short name and choose SSE2 option for appropriate MSVC compilers
15 if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
16 if (MSVC80 OR MSVC90 OR MSVC10)
17 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
18 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:SSE2")
23 add_definitions (-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
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)
30 # enable structured exceptions for MSVC
31 string (REGEX MATCH "EHsc" ISFLAG "${CMAKE_CXX_FLAGS}")
33 string (REGEX REPLACE "EHsc" "EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
35 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -EHa")
38 # remove _WINDOWS flag if it exists
39 string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_CXX_FLAGS}")
41 message (STATUS "Info: /D_WINDOWS has been removed from CMAKE_CXX_FLAGS")
42 string (REGEX REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
45 # remove WIN32 flag if it exists
46 string (REGEX MATCH "/DWIN32" IS_WIN32FLAG "${CMAKE_CXX_FLAGS}")
48 message (STATUS "Info: /DWIN32 has been removed from CMAKE_CXX_FLAGS")
49 string (REGEX REPLACE "/DWIN32" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
52 # remove _WINDOWS flag if it exists
53 string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_C_FLAGS}")
55 message (STATUS "Info: /D_WINDOWS has been removed from CMAKE_C_FLAGS")
56 string (REGEX REPLACE "/D_WINDOWS" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
59 # remove WIN32 flag if it exists
60 string (REGEX MATCH "/DWIN32" IS_WIN32FLAG "${CMAKE_C_FLAGS}")
62 message (STATUS "Info: /DWIN32 has been removed from CMAKE_C_FLAGS")
63 string (REGEX REPLACE "/DWIN32" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
66 # remove DEBUG flag if it exists
67 string (REGEX MATCH "-DDEBUG" IS_DEBUG_CXX "${CMAKE_CXX_FLAGS_DEBUG}")
69 message (STATUS "Info: -DDEBUG has been removed from CMAKE_CXX_FLAGS_DEBUG")
70 string (REGEX REPLACE "-DDEBUG" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
73 string (REGEX MATCH "-DDEBUG" IS_DEBUG_C "${CMAKE_C_FLAGS_DEBUG}")
75 message (STATUS "Info: -DDEBUG has been removed from CMAKE_C_FLAGS_DEBUG")
76 string (REGEX REPLACE "-DDEBUG" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
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")
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)
86 # increase compiler warnings level (-W4 for MSVC, -Wextra for GCC)
88 if (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
89 string (REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
91 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
93 elseif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
94 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
95 if (BUILD_SHARED_LIBS)
97 set (CMAKE_SHARED_LINKER_FLAGS "-lm ${CMAKE_SHARED_LINKER_FLAGS}")
99 set (CMAKE_SHARED_LINKER_FLAGS "-lm -z defs ${CMAKE_SHARED_LINKER_FLAGS}")
103 set (CMAKE_STATIC_LINKER_FLAGS "-lm ${CMAKE_SHARED_STATIC_FLAGS}")
108 if (DEFINED CMAKE_COMPILER_IS_GNUCXX OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang")
109 set (CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}")
112 # Optimize size of binaries
113 if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR MINGW)
114 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
115 set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
118 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception")
119 set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception")