mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-03 17:56:21 +03:00
CMake script is corrected to add compiler options (except macro definitions) to CMAKE_CXX_FLAGS and CMAKE_C_FLAGS variables directly, instead of using add_definitions() command. This eliminates failure of build by NMake due to incorrect options passed to RC compiler.
109 lines
3.9 KiB
CMake
109 lines
3.9 KiB
CMake
##
|
|
|
|
if(FLAGS_ALREADY_INCLUDED)
|
|
return()
|
|
endif()
|
|
set(FLAGS_ALREADY_INCLUDED 1)
|
|
|
|
if (MSVC)
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp:precise")
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp:precise")
|
|
endif()
|
|
|
|
# set compiler short name and choose SSE2 option for appropriate MSVC compilers
|
|
# ONLY for 32-bit
|
|
if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
if (MSVC80 OR MSVC90 OR MSVC10)
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:SSE2")
|
|
endif()
|
|
endif()
|
|
|
|
if (WIN32)
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4996")
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -wd4996")
|
|
else()
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -fPIC")
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions -fPIC")
|
|
add_definitions(-DOCC_CONVERT_SIGNALS)
|
|
endif()
|
|
|
|
# enable structured exceptions for MSVC
|
|
string (REGEX MATCH "EHsc" ISFLAG "${CMAKE_CXX_FLAGS}")
|
|
if (ISFLAG)
|
|
string (REGEX REPLACE "EHsc" "EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
elseif (WIN32)
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -EHa")
|
|
endif()
|
|
|
|
# remove _WINDOWS flag if it exists
|
|
string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_CXX_FLAGS}")
|
|
if (IS_WINDOWSFLAG)
|
|
message (STATUS "Info: /D_WINDOWS has been removed from CMAKE_CXX_FLAGS")
|
|
string (REGEX REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
endif()
|
|
|
|
# remove WIN32 flag if it exists
|
|
string (REGEX MATCH "/DWIN32" IS_WIN32FLAG "${CMAKE_CXX_FLAGS}")
|
|
if (IS_WIN32FLAG)
|
|
message (STATUS "Info: /DWIN32 has been removed from CMAKE_CXX_FLAGS")
|
|
string (REGEX REPLACE "/DWIN32" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
endif()
|
|
|
|
# remove _WINDOWS flag if it exists
|
|
string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_C_FLAGS}")
|
|
if (IS_WINDOWSFLAG)
|
|
message (STATUS "Info: /D_WINDOWS has been removed from CMAKE_C_FLAGS")
|
|
string (REGEX REPLACE "/D_WINDOWS" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
|
endif()
|
|
|
|
# remove WIN32 flag if it exists
|
|
string (REGEX MATCH "/DWIN32" IS_WIN32FLAG "${CMAKE_C_FLAGS}")
|
|
if (IS_WIN32FLAG)
|
|
message (STATUS "Info: /DWIN32 has been removed from CMAKE_C_FLAGS")
|
|
string (REGEX REPLACE "/DWIN32" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
|
endif()
|
|
|
|
# remove DEBUG flag if it exists
|
|
string (REGEX MATCH "-DDEBUG" IS_DEBUG_CXX "${CMAKE_CXX_FLAGS_DEBUG}")
|
|
if (IS_DEBUG_CXX)
|
|
message (STATUS "Info: -DDEBUG has been removed from CMAKE_CXX_FLAGS_DEBUG")
|
|
string (REGEX REPLACE "-DDEBUG" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
|
endif()
|
|
|
|
string (REGEX MATCH "-DDEBUG" IS_DEBUG_C "${CMAKE_C_FLAGS_DEBUG}")
|
|
if (IS_DEBUG_C)
|
|
message (STATUS "Info: -DDEBUG has been removed from CMAKE_C_FLAGS_DEBUG")
|
|
string (REGEX REPLACE "-DDEBUG" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
|
|
endif()
|
|
# enable parallel compilation on MSVC 9 and above
|
|
if (MSVC AND NOT MSVC70 AND NOT MSVC80)
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP")
|
|
endif()
|
|
|
|
# generate a single response file which enlist all of the object files
|
|
SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
|
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
|
# increase compiler warnings level (-W4 for MSVC, -Wextra for GCC)
|
|
if (MSVC)
|
|
if (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
|
string (REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
else()
|
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
|
endif()
|
|
elseif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
|
|
endif()
|
|
|
|
if (DEFINED CMAKE_COMPILER_IS_GNUCXX OR "x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang")
|
|
set (CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}")
|
|
endif()
|
|
|
|
# Optimize size of binaries
|
|
if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR MINGW)
|
|
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
|
|
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
|
|
endif()
|
|
|
|
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception")
|
|
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception") |