2012-10-23 13:52:11 +02:00
if ( MINGW OR ( X86 AND UNIX AND NOT APPLE ) )
2012-05-18 19:32:55 +02:00
# mingw compiler is known to produce unstable SSE code with -O3 hence we are trying to use -O2 instead
if ( CMAKE_COMPILER_IS_GNUCXX )
foreach ( flags CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG )
string ( REPLACE "-O3" "-O2" ${ flags } "${${flags}}" )
endforeach ( )
endif ( )
if ( CMAKE_COMPILER_IS_GNUCC )
foreach ( flags CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_DEBUG )
string ( REPLACE "-O3" "-O2" ${ flags } "${${flags}}" )
endforeach ( )
endif ( )
endif ( )
2012-04-13 23:50:59 +02:00
if ( MSVC )
2012-06-12 16:46:12 +02:00
string ( REGEX REPLACE "^ *| * $" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
string ( REGEX REPLACE "^ *| * $" "" CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT}" )
2012-04-13 23:50:59 +02:00
if ( CMAKE_CXX_FLAGS STREQUAL CMAKE_CXX_FLAGS_INIT )
# override cmake default exception handling option
string ( REPLACE "/EHsc" "/EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "Flags used by the compiler during all build types." FORCE )
endif ( )
2012-02-03 12:26:49 +01:00
endif ( )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS "" )
2012-02-03 12:26:49 +01:00
set ( OPENCV_EXTRA_C_FLAGS "" )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_CXX_FLAGS "" )
set ( OPENCV_EXTRA_FLAGS_RELEASE "" )
set ( OPENCV_EXTRA_FLAGS_DEBUG "" )
2012-02-03 12:26:49 +01:00
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS "" )
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "" )
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "" )
2012-06-08 10:11:17 +02:00
macro ( add_extra_compiler_option option )
2012-06-12 17:14:28 +02:00
if ( CMAKE_BUILD_TYPE )
set ( CMAKE_TRY_COMPILE_CONFIGURATION ${ CMAKE_BUILD_TYPE } )
endif ( )
ocv_check_flag_support ( CXX "${option}" _varname "${OPENCV_EXTRA_CXX_FLAGS} ${ARGN}" )
2012-06-08 10:11:17 +02:00
if ( ${ _varname } )
set ( OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} ${option}" )
endif ( )
2012-06-12 17:14:28 +02:00
ocv_check_flag_support ( C "${option}" _varname "${OPENCV_EXTRA_C_FLAGS} ${ARGN}" )
2012-06-08 10:11:17 +02:00
if ( ${ _varname } )
set ( OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} ${option}" )
endif ( )
endmacro ( )
2013-05-31 17:55:51 +02:00
# OpenCV fails some tests when 'char' is 'unsigned' by default
2013-05-31 16:58:30 +02:00
add_extra_compiler_option ( -fsigned-char )
2012-05-17 22:25:12 +02:00
if ( MINGW )
2012-05-18 19:32:55 +02:00
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40838
2012-05-17 22:25:12 +02:00
# here we are trying to workaround the problem
2012-06-12 18:11:30 +02:00
add_extra_compiler_option ( -mstackrealign )
if ( NOT HAVE_CXX_MSTACKREALIGN )
add_extra_compiler_option ( -mpreferred-stack-boundary=2 )
2012-05-23 21:28:41 +02:00
endif ( )
2012-05-17 22:25:12 +02:00
endif ( )
2012-02-03 12:26:49 +01:00
if ( CMAKE_COMPILER_IS_GNUCXX )
2012-04-13 23:50:59 +02:00
# High level of warnings.
2012-06-20 14:27:02 +02:00
add_extra_compiler_option ( -W )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -Wall )
add_extra_compiler_option ( -Werror=return-type )
2012-12-22 18:14:14 +01:00
add_extra_compiler_option ( -Werror=non-virtual-dtor )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -Werror=address )
add_extra_compiler_option ( -Werror=sequence-point )
add_extra_compiler_option ( -Wformat )
add_extra_compiler_option ( -Werror=format-security -Wformat )
add_extra_compiler_option ( -Wmissing-declarations )
add_extra_compiler_option ( -Wmissing-prototypes )
add_extra_compiler_option ( -Wstrict-prototypes )
add_extra_compiler_option ( -Wundef )
add_extra_compiler_option ( -Winit-self )
add_extra_compiler_option ( -Wpointer-arith )
2012-06-12 16:46:12 +02:00
add_extra_compiler_option ( -Wshadow )
2012-06-20 14:27:02 +02:00
add_extra_compiler_option ( -Wsign-promo )
2012-06-12 16:46:12 +02:00
if ( ENABLE_NOISY_WARNINGS )
add_extra_compiler_option ( -Wcast-align )
add_extra_compiler_option ( -Wstrict-aliasing=2 )
else ( )
add_extra_compiler_option ( -Wno-narrowing )
add_extra_compiler_option ( -Wno-delete-non-virtual-dtor )
2012-06-12 18:15:14 +02:00
add_extra_compiler_option ( -Wno-unnamed-type-template-args )
2012-06-12 16:46:12 +02:00
endif ( )
2012-06-20 14:27:02 +02:00
add_extra_compiler_option ( -fdiagnostics-show-option )
2012-06-07 19:21:29 +02:00
2012-04-13 23:50:59 +02:00
# The -Wno-long-long is required in 64bit systems when including sytem headers.
if ( X86_64 )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -Wno-long-long )
2012-04-13 23:50:59 +02:00
endif ( )
# We need pthread's
2013-03-01 09:17:05 +01:00
if ( UNIX AND NOT ANDROID AND NOT ( APPLE AND CMAKE_COMPILER_IS_CLANGCXX ) )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -pthread )
2012-04-13 23:50:59 +02:00
endif ( )
2015-02-05 15:42:24 +01:00
if ( CMAKE_COMPILER_IS_CLANGCXX )
add_extra_compiler_option ( -Qunused-arguments )
endif ( )
2012-04-13 23:50:59 +02:00
if ( OPENCV_WARNINGS_ARE_ERRORS )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -Werror )
2012-04-13 23:50:59 +02:00
endif ( )
if ( X86 AND NOT MINGW64 AND NOT X86_64 AND NOT APPLE )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -march=i686 )
2012-04-13 23:50:59 +02:00
endif ( )
2014-10-17 14:46:47 +02:00
if ( APPLE )
add_extra_compiler_option ( -Wno-semicolon-before-method-body )
endif ( )
2012-04-13 23:50:59 +02:00
# Other optimizations
if ( ENABLE_OMIT_FRAME_POINTER )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -fomit-frame-pointer )
2012-04-13 23:50:59 +02:00
else ( )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -fno-omit-frame-pointer )
2012-04-13 23:50:59 +02:00
endif ( )
if ( ENABLE_FAST_MATH )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -ffast-math )
2012-04-13 23:50:59 +02:00
endif ( )
if ( ENABLE_POWERPC )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( "-mcpu=G3 -mtune=G5" )
2012-04-13 23:50:59 +02:00
endif ( )
if ( ENABLE_SSE )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -msse )
2012-04-13 23:50:59 +02:00
endif ( )
if ( ENABLE_SSE2 )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -msse2 )
2015-02-05 15:42:24 +01:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-sse2 )
2012-04-13 23:50:59 +02:00
endif ( )
2015-01-12 08:59:30 +01:00
if ( ENABLE_NEON )
2013-12-10 08:22:29 +01:00
add_extra_compiler_option ( "-mfpu=neon" )
endif ( )
2015-01-12 08:59:30 +01:00
if ( ENABLE_VFPV3 AND NOT ENABLE_NEON )
2013-12-10 08:22:29 +01:00
add_extra_compiler_option ( "-mfpu=vfpv3" )
endif ( )
2012-04-13 23:50:59 +02:00
# SSE3 and further should be disabled under MingW because it generates compiler errors
if ( NOT MINGW )
2012-09-16 22:40:17 +02:00
if ( ENABLE_AVX )
add_extra_compiler_option ( -mavx )
2015-02-05 15:42:24 +01:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-avx )
2012-02-03 12:26:49 +01:00
endif ( )
2015-01-12 08:59:28 +01:00
if ( ENABLE_AVX2 )
add_extra_compiler_option ( -mavx2 )
2015-01-12 08:59:30 +01:00
if ( ENABLE_FMA3 )
add_extra_compiler_option ( -mfma )
endif ( )
2015-01-12 08:59:28 +01:00
endif ( )
2012-02-03 12:26:49 +01:00
2012-09-16 22:40:17 +02:00
# GCC depresses SSEx instructions when -mavx is used. Instead, it generates new AVX instructions or AVX equivalence for all SSEx instructions when needed.
if ( NOT OPENCV_EXTRA_CXX_FLAGS MATCHES "-mavx" )
if ( ENABLE_SSE3 )
add_extra_compiler_option ( -msse3 )
2015-02-05 15:42:24 +01:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-sse3 )
2012-09-16 22:40:17 +02:00
endif ( )
2012-02-03 12:26:49 +01:00
2012-04-13 23:50:59 +02:00
if ( ENABLE_SSSE3 )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -mssse3 )
2015-02-05 15:42:24 +01:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-ssse3 )
2012-04-13 23:50:59 +02:00
endif ( )
2012-09-16 22:40:17 +02:00
if ( ENABLE_SSE41 )
add_extra_compiler_option ( -msse4.1 )
2015-02-05 15:42:24 +01:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-sse4.1 )
2012-09-16 22:40:17 +02:00
endif ( )
if ( ENABLE_SSE42 )
add_extra_compiler_option ( -msse4.2 )
2015-02-05 15:42:24 +01:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-sse4.2 )
2012-04-13 23:50:59 +02:00
endif ( )
2015-01-12 08:59:31 +01:00
if ( ENABLE_POPCNT )
add_extra_compiler_option ( -mpopcnt )
endif ( )
2012-02-03 12:26:49 +01:00
endif ( )
2012-04-13 23:50:59 +02:00
endif ( NOT MINGW )
2012-02-03 12:26:49 +01:00
2012-04-13 23:50:59 +02:00
if ( X86 OR X86_64 )
if ( NOT APPLE AND CMAKE_SIZEOF_VOID_P EQUAL 4 )
2012-09-16 22:40:17 +02:00
if ( OPENCV_EXTRA_CXX_FLAGS MATCHES "-m(sse2|avx)" )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -mfpmath=sse ) # !! important - be on the same wave with x64 compilers
else ( )
add_extra_compiler_option ( -mfpmath=387 )
endif ( )
2012-02-03 12:26:49 +01:00
endif ( )
2012-04-13 23:50:59 +02:00
endif ( )
2012-02-03 12:26:49 +01:00
2012-04-13 23:50:59 +02:00
# Profiling?
if ( ENABLE_PROFILING )
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( "-pg -g" )
2012-04-30 16:33:52 +02:00
# turn off incompatible options
2012-06-08 10:11:17 +02:00
foreach ( flags CMAKE_CXX_FLAGS CMAKE_C_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG
O P E N C V _ E X T R A _ F L A G S _ R E L E A S E O P E N C V _ E X T R A _ F L A G S _ D E B U G O P E N C V _ E X T R A _ C _ F L A G S O P E N C V _ E X T R A _ C X X _ F L A G S )
2012-04-30 16:33:52 +02:00
string ( REPLACE "-fomit-frame-pointer" "" ${ flags } "${${flags}}" )
string ( REPLACE "-ffunction-sections" "" ${ flags } "${${flags}}" )
endforeach ( )
2012-04-13 23:50:59 +02:00
elseif ( NOT APPLE AND NOT ANDROID )
# Remove unreferenced functions: function level linking
2012-06-08 10:11:17 +02:00
add_extra_compiler_option ( -ffunction-sections )
2012-04-13 23:50:59 +02:00
endif ( )
2014-02-14 14:43:33 +01:00
if ( ENABLE_COVERAGE )
set ( OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} --coverage" )
set ( OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} --coverage" )
endif ( )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} -DNDEBUG" )
set ( OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG" )
2012-02-03 12:26:49 +01:00
endif ( )
if ( MSVC )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS" )
2012-04-30 16:33:52 +02:00
# 64-bit portability warnings, in MSVC80
if ( MSVC80 )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Wp64" )
2012-04-30 16:33:52 +02:00
endif ( )
if ( BUILD_WITH_DEBUG_INFO )
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE} /debug" )
endif ( )
# Remove unreferenced functions: function level linking
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Gy" )
2012-04-30 16:33:52 +02:00
if ( NOT MSVC_VERSION LESS 1400 )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /bigobj" )
2012-04-30 16:33:52 +02:00
endif ( )
if ( BUILD_WITH_DEBUG_INFO )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} /Zi" )
2012-04-30 16:33:52 +02:00
endif ( )
2015-01-12 08:59:30 +01:00
if ( ENABLE_AVX2 AND NOT MSVC_VERSION LESS 1800 )
2015-01-12 08:59:30 +01:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:AVX2" )
endif ( )
2015-01-12 08:59:30 +01:00
if ( ENABLE_AVX AND NOT MSVC_VERSION LESS 1600 AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:" )
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:AVX" )
2015-01-12 08:59:30 +01:00
endif ( )
2012-06-07 19:21:29 +02:00
2012-09-16 22:40:17 +02:00
if ( ENABLE_SSE4_1 AND CV_ICC AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:" )
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE4.1" )
endif ( )
if ( ENABLE_SSE3 AND CV_ICC AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:" )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE3" )
2012-04-13 23:50:59 +02:00
endif ( )
2012-09-16 22:40:17 +02:00
if ( NOT MSVC64 )
# 64-bit MSVC compiler uses SSE/SSE2 by default
if ( ENABLE_SSE2 AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:" )
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE2" )
endif ( )
if ( ENABLE_SSE AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:" )
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE" )
endif ( )
2012-04-13 23:50:59 +02:00
endif ( )
2012-06-07 19:21:29 +02:00
2015-01-12 08:59:30 +01:00
if ( ENABLE_SSE OR ENABLE_SSE2 OR ENABLE_SSE3 OR ENABLE_SSE4_1 OR ENABLE_AVX OR ENABLE_AVX2 )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Oi" )
2012-04-30 16:33:52 +02:00
endif ( )
2012-06-07 19:21:29 +02:00
2012-04-30 16:33:52 +02:00
if ( X86 OR X86_64 )
if ( CMAKE_SIZEOF_VOID_P EQUAL 4 AND ENABLE_SSE2 )
2012-09-16 22:40:17 +02:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /fp:fast" ) # !! important - be on the same wave with x64 compilers
2012-04-30 16:33:52 +02:00
endif ( )
2012-04-13 23:50:59 +02:00
endif ( )
2013-08-22 16:25:38 +02:00
if ( OPENCV_WARNINGS_ARE_ERRORS )
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /WX" )
endif ( )
2012-02-03 12:26:49 +01:00
endif ( )
2015-04-01 12:52:07 +02:00
if ( MSVC12 AND NOT CMAKE_GENERATOR MATCHES "Visual Studio" )
set ( OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} /FS" )
set ( OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} /FS" )
endif ( )
2012-02-03 12:26:49 +01:00
# Extra link libs if the user selects building static libs:
if ( NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX AND NOT ANDROID )
2012-04-13 23:50:59 +02:00
# Android does not need these settings because they are already set by toolchain file
set ( OPENCV_LINKER_LIBS ${ OPENCV_LINKER_LIBS } stdc++ )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS "-fPIC ${OPENCV_EXTRA_FLAGS}" )
2012-02-03 12:26:49 +01:00
endif ( )
# Add user supplied extra options (optimization, etc...)
# ==========================================================
2012-09-16 22:40:17 +02:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS}" CACHE INTERNAL "Extra compiler options" )
set ( OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS}" CACHE INTERNAL "Extra compiler options for C sources" )
set ( OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS}" CACHE INTERNAL "Extra compiler options for C++ sources" )
2012-06-08 10:11:17 +02:00
set ( OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE}" CACHE INTERNAL "Extra compiler options for Release build" )
2012-09-16 22:40:17 +02:00
set ( OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG}" CACHE INTERNAL "Extra compiler options for Debug build" )
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS "${OPENCV_EXTRA_EXE_LINKER_FLAGS}" CACHE INTERNAL "Extra linker flags" )
2012-02-03 12:26:49 +01:00
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}" CACHE INTERNAL "Extra linker flags for Release build" )
2012-09-16 22:40:17 +02:00
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}" CACHE INTERNAL "Extra linker flags for Debug build" )
2012-02-03 12:26:49 +01:00
2013-04-18 08:30:15 +02:00
# set default visibility to hidden
if ( CMAKE_COMPILER_IS_GNUCXX AND CMAKE_OPENCV_GCC_VERSION_NUM GREATER 399 )
add_extra_compiler_option ( -fvisibility=hidden )
add_extra_compiler_option ( -fvisibility-inlines-hidden )
endif ( )
2012-02-03 12:26:49 +01:00
#combine all "extra" options
2012-09-16 22:40:17 +02:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_C_FLAGS}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS}" )
2012-06-08 10:11:17 +02:00
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE}" )
2012-09-16 22:40:17 +02:00
set ( CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE}" )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG}" )
set ( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OPENCV_EXTRA_FLAGS_DEBUG}" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENCV_EXTRA_EXE_LINKER_FLAGS}" )
2012-02-03 12:26:49 +01:00
set ( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}" )
2012-09-16 22:40:17 +02:00
set ( CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}" )
2012-02-03 12:26:49 +01:00
2012-04-13 23:50:59 +02:00
if ( MSVC )
# avoid warnings from MSVC about overriding the /W* option
# we replace /W3 with /W4 only for C++ files,
# since all the 3rd-party libraries OpenCV uses are in C,
# and we do not care about their warnings.
2012-09-16 22:40:17 +02:00
string ( REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
2012-04-13 23:50:59 +02:00
string ( REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" )
2012-09-16 22:40:17 +02:00
string ( REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" )
2012-06-07 19:21:29 +02:00
2012-06-12 16:46:12 +02:00
if ( NOT ENABLE_NOISY_WARNINGS AND MSVC_VERSION EQUAL 1400 )
2015-01-12 08:59:30 +01:00
ocv_warnings_disable ( CMAKE_CXX_FLAGS /wd4510 /wd4610 /wd4312 /wd4201 /wd4244 /wd4328 /wd4267 )
2012-06-12 16:46:12 +02:00
endif ( )
2012-04-13 23:50:59 +02:00
# allow extern "C" functions throw exceptions
foreach ( flags CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG )
string ( REPLACE "/EHsc-" "/EHs" ${ flags } "${${flags}}" )
2012-09-16 22:40:17 +02:00
string ( REPLACE "/EHsc" "/EHs" ${ flags } "${${flags}}" )
2012-06-07 19:21:29 +02:00
2012-04-13 23:50:59 +02:00
string ( REPLACE "/Zm1000" "" ${ flags } "${${flags}}" )
endforeach ( )
if ( NOT ENABLE_NOISY_WARNINGS )
2015-01-12 08:59:30 +01:00
ocv_warnings_disable ( CMAKE_CXX_FLAGS /wd4251 ) # class 'std::XXX' needs to have dll-interface to be used by clients of YYY
ocv_warnings_disable ( CMAKE_CXX_FLAGS /wd4324 ) # 'struct_name' : structure was padded due to __declspec(align())
2012-04-13 23:50:59 +02:00
endif ( )
2013-08-21 15:26:54 +02:00
endif ( )