2012-10-23 19:52:11 +08:00
if ( MINGW OR ( X86 AND UNIX AND NOT APPLE ) )
2012-05-19 01:32:55 +08: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-14 05:50:59 +08:00
if ( MSVC )
2012-06-12 22:46:12 +08:00
string ( REGEX REPLACE "^ *| * $" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
string ( REGEX REPLACE "^ *| * $" "" CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT}" )
2012-04-14 05:50:59 +08: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 19:26:49 +08:00
endif ( )
2012-06-08 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS "" )
2012-02-03 19:26:49 +08:00
set ( OPENCV_EXTRA_C_FLAGS "" )
2012-06-08 16:11:17 +08:00
set ( OPENCV_EXTRA_CXX_FLAGS "" )
set ( OPENCV_EXTRA_FLAGS_RELEASE "" )
set ( OPENCV_EXTRA_FLAGS_DEBUG "" )
2012-02-03 19:26:49 +08:00
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS "" )
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "" )
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG "" )
2012-06-08 16:11:17 +08:00
macro ( add_extra_compiler_option option )
2012-06-12 23:14:28 +08: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 16:11:17 +08:00
if ( ${ _varname } )
set ( OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} ${option}" )
endif ( )
2012-06-12 23:14:28 +08:00
ocv_check_flag_support ( C "${option}" _varname "${OPENCV_EXTRA_C_FLAGS} ${ARGN}" )
2012-06-08 16:11:17 +08:00
if ( ${ _varname } )
set ( OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} ${option}" )
endif ( )
endmacro ( )
2015-05-18 16:57:18 +08:00
# Gets environment variable and puts its value to the corresponding preprocessor definition
# Useful for WINRT that has no access to environment variables
macro ( add_env_definitions option )
set ( value $ENV{ ${option } } )
if ( "${value}" STREQUAL "" )
message ( WARNING "${option} environment variable is empty. Please set it to appropriate location to get correct results" )
else ( )
string ( REPLACE "\\" "\\\\" value ${ value } )
endif ( )
add_definitions ( "-D${option}=\" ${ value } \"")
endmacro ( )
2013-05-31 23:55:51 +08:00
# OpenCV fails some tests when 'char' is 'unsigned' by default
2013-05-31 22:58:30 +08:00
add_extra_compiler_option ( -fsigned-char )
2012-05-18 04:25:12 +08:00
if ( MINGW )
2012-05-19 01:32:55 +08:00
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40838
2012-05-18 04:25:12 +08:00
# here we are trying to workaround the problem
2012-06-13 00:11:30 +08:00
add_extra_compiler_option ( -mstackrealign )
if ( NOT HAVE_CXX_MSTACKREALIGN )
add_extra_compiler_option ( -mpreferred-stack-boundary=2 )
2012-05-24 03:28:41 +08:00
endif ( )
2012-05-18 04:25:12 +08:00
endif ( )
2012-02-03 19:26:49 +08:00
if ( CMAKE_COMPILER_IS_GNUCXX )
2012-04-14 05:50:59 +08:00
# High level of warnings.
2012-06-20 20:27:02 +08:00
add_extra_compiler_option ( -W )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -Wall )
add_extra_compiler_option ( -Werror=return-type )
2012-12-23 01:14:14 +08:00
add_extra_compiler_option ( -Werror=non-virtual-dtor )
2012-06-08 16:11:17 +08: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 22:46:12 +08:00
add_extra_compiler_option ( -Wshadow )
2012-06-20 20:27:02 +08:00
add_extra_compiler_option ( -Wsign-promo )
2012-06-12 22:46:12 +08: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-13 00:15:14 +08:00
add_extra_compiler_option ( -Wno-unnamed-type-template-args )
2016-09-01 04:12:52 +08:00
add_extra_compiler_option ( -Wno-comment )
2012-06-12 22:46:12 +08:00
endif ( )
2012-06-20 20:27:02 +08:00
add_extra_compiler_option ( -fdiagnostics-show-option )
2012-06-08 01:21:29 +08:00
2012-04-14 05:50:59 +08:00
# The -Wno-long-long is required in 64bit systems when including sytem headers.
if ( X86_64 )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -Wno-long-long )
2012-04-14 05:50:59 +08:00
endif ( )
# We need pthread's
2013-03-01 16:17:05 +08:00
if ( UNIX AND NOT ANDROID AND NOT ( APPLE AND CMAKE_COMPILER_IS_CLANGCXX ) )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -pthread )
2012-04-14 05:50:59 +08:00
endif ( )
2015-02-05 22:42:24 +08:00
if ( CMAKE_COMPILER_IS_CLANGCXX )
add_extra_compiler_option ( -Qunused-arguments )
endif ( )
2012-04-14 05:50:59 +08:00
if ( OPENCV_WARNINGS_ARE_ERRORS )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -Werror )
2012-04-14 05:50:59 +08:00
endif ( )
if ( X86 AND NOT MINGW64 AND NOT X86_64 AND NOT APPLE )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -march=i686 )
2012-04-14 05:50:59 +08:00
endif ( )
2014-10-17 20:46:47 +08:00
if ( APPLE )
add_extra_compiler_option ( -Wno-semicolon-before-method-body )
endif ( )
2012-04-14 05:50:59 +08:00
# Other optimizations
if ( ENABLE_OMIT_FRAME_POINTER )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -fomit-frame-pointer )
2012-04-14 05:50:59 +08:00
else ( )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -fno-omit-frame-pointer )
2012-04-14 05:50:59 +08:00
endif ( )
if ( ENABLE_FAST_MATH )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -ffast-math )
2012-04-14 05:50:59 +08:00
endif ( )
if ( ENABLE_POWERPC )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( "-mcpu=G3 -mtune=G5" )
2012-04-14 05:50:59 +08:00
endif ( )
if ( ENABLE_SSE )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -msse )
2012-04-14 05:50:59 +08:00
endif ( )
if ( ENABLE_SSE2 )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -msse2 )
2015-02-05 22:42:24 +08:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-sse2 )
2012-04-14 05:50:59 +08:00
endif ( )
2016-05-21 20:31:33 +08:00
if ( ARM )
add_extra_compiler_option ( "-mfp16-format=ieee" )
endif ( ARM )
2015-01-12 15:59:30 +08:00
if ( ENABLE_NEON )
2016-09-21 14:42:54 +08:00
add_extra_compiler_option ( "-mfpu=neon" )
2013-12-10 15:22:29 +08:00
endif ( )
2015-01-12 15:59:30 +08:00
if ( ENABLE_VFPV3 AND NOT ENABLE_NEON )
2013-12-10 15:22:29 +08:00
add_extra_compiler_option ( "-mfpu=vfpv3" )
endif ( )
2012-04-14 05:50:59 +08:00
# SSE3 and further should be disabled under MingW because it generates compiler errors
if ( NOT MINGW )
2012-09-17 04:40:17 +08:00
if ( ENABLE_AVX )
add_extra_compiler_option ( -mavx )
2015-02-05 22:42:24 +08:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-avx )
2012-02-03 19:26:49 +08:00
endif ( )
2015-01-12 15:59:28 +08:00
if ( ENABLE_AVX2 )
add_extra_compiler_option ( -mavx2 )
2015-01-12 15:59:30 +08:00
if ( ENABLE_FMA3 )
add_extra_compiler_option ( -mfma )
endif ( )
2015-01-12 15:59:28 +08:00
endif ( )
2012-02-03 19:26:49 +08:00
2012-09-17 04:40:17 +08: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 22:42:24 +08:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-sse3 )
2012-09-17 04:40:17 +08:00
endif ( )
2012-02-03 19:26:49 +08:00
2012-04-14 05:50:59 +08:00
if ( ENABLE_SSSE3 )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -mssse3 )
2015-02-05 22:42:24 +08:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-ssse3 )
2012-04-14 05:50:59 +08:00
endif ( )
2012-09-17 04:40:17 +08:00
if ( ENABLE_SSE41 )
add_extra_compiler_option ( -msse4.1 )
2015-02-05 22:42:24 +08:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-sse4.1 )
2012-09-17 04:40:17 +08:00
endif ( )
if ( ENABLE_SSE42 )
add_extra_compiler_option ( -msse4.2 )
2015-02-05 22:42:24 +08:00
elseif ( X86 OR X86_64 )
add_extra_compiler_option ( -mno-sse4.2 )
2012-04-14 05:50:59 +08:00
endif ( )
2015-01-12 15:59:31 +08:00
if ( ENABLE_POPCNT )
add_extra_compiler_option ( -mpopcnt )
endif ( )
2012-02-03 19:26:49 +08:00
endif ( )
2012-04-14 05:50:59 +08:00
endif ( NOT MINGW )
2012-02-03 19:26:49 +08:00
2012-04-14 05:50:59 +08:00
if ( X86 OR X86_64 )
if ( NOT APPLE AND CMAKE_SIZEOF_VOID_P EQUAL 4 )
2012-09-17 04:40:17 +08:00
if ( OPENCV_EXTRA_CXX_FLAGS MATCHES "-m(sse2|avx)" )
2012-06-08 16:11:17 +08: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 19:26:49 +08:00
endif ( )
2012-04-14 05:50:59 +08:00
endif ( )
2012-02-03 19:26:49 +08:00
2012-04-14 05:50:59 +08:00
# Profiling?
if ( ENABLE_PROFILING )
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( "-pg -g" )
2012-04-30 22:33:52 +08:00
# turn off incompatible options
2012-06-08 16:11:17 +08: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 22:33:52 +08:00
string ( REPLACE "-fomit-frame-pointer" "" ${ flags } "${${flags}}" )
string ( REPLACE "-ffunction-sections" "" ${ flags } "${${flags}}" )
endforeach ( )
2012-04-14 05:50:59 +08:00
elseif ( NOT APPLE AND NOT ANDROID )
# Remove unreferenced functions: function level linking
2012-06-08 16:11:17 +08:00
add_extra_compiler_option ( -ffunction-sections )
2012-04-14 05:50:59 +08:00
endif ( )
2014-02-14 21:43:33 +08: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 ( )
2016-08-26 20:08:50 +08:00
if ( ENABLE_INSTRUMENTATION )
set ( OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} --std=c++11" )
set ( WITH_VTK OFF ) # There are issues with VTK 6.0
endif ( )
2012-06-08 16:11:17 +08: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 19:26:49 +08:00
endif ( )
if ( MSVC )
2012-06-08 16:11:17 +08: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 22:33:52 +08:00
# 64-bit portability warnings, in MSVC80
if ( MSVC80 )
2012-06-08 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Wp64" )
2012-04-30 22:33:52 +08: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 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Gy" )
2012-04-30 22:33:52 +08:00
if ( NOT MSVC_VERSION LESS 1400 )
2012-06-08 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /bigobj" )
2012-04-30 22:33:52 +08:00
endif ( )
if ( BUILD_WITH_DEBUG_INFO )
2012-06-08 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} /Zi" )
2012-04-30 22:33:52 +08:00
endif ( )
2015-01-12 15:59:30 +08:00
if ( ENABLE_AVX2 AND NOT MSVC_VERSION LESS 1800 )
2015-01-12 15:59:30 +08:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:AVX2" )
endif ( )
2015-01-12 15:59:30 +08: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 15:59:30 +08:00
endif ( )
2012-06-08 01:21:29 +08:00
2012-09-17 04:40:17 +08: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 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE3" )
2012-04-14 05:50:59 +08:00
endif ( )
2012-09-17 04:40:17 +08: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-14 05:50:59 +08:00
endif ( )
2012-06-08 01:21:29 +08:00
2015-01-12 15:59:30 +08:00
if ( ENABLE_SSE OR ENABLE_SSE2 OR ENABLE_SSE3 OR ENABLE_SSE4_1 OR ENABLE_AVX OR ENABLE_AVX2 )
2012-06-08 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Oi" )
2012-04-30 22:33:52 +08:00
endif ( )
2012-06-08 01:21:29 +08:00
2012-04-30 22:33:52 +08:00
if ( X86 OR X86_64 )
if ( CMAKE_SIZEOF_VOID_P EQUAL 4 AND ENABLE_SSE2 )
2012-09-17 04:40:17 +08:00
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /fp:fast" ) # !! important - be on the same wave with x64 compilers
2012-04-30 22:33:52 +08:00
endif ( )
2012-04-14 05:50:59 +08:00
endif ( )
2013-08-22 22:25:38 +08:00
if ( OPENCV_WARNINGS_ARE_ERRORS )
set ( OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /WX" )
endif ( )
2012-02-03 19:26:49 +08:00
endif ( )
2015-04-01 18:52:07 +08: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 ( )
2015-05-18 16:57:18 +08:00
# Adding additional using directory for WindowsPhone 8.0 to get Windows.winmd properly
if ( WINRT_PHONE AND WINRT_8_0 )
set ( OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} /AI\$(WindowsSDK_MetadataPath)" )
endif ( )
2012-02-03 19:26:49 +08: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-14 05:50:59 +08: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 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS "-fPIC ${OPENCV_EXTRA_FLAGS}" )
2012-02-03 19:26:49 +08:00
endif ( )
# Add user supplied extra options (optimization, etc...)
# ==========================================================
2012-09-17 04:40:17 +08: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 16:11:17 +08:00
set ( OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE}" CACHE INTERNAL "Extra compiler options for Release build" )
2012-09-17 04:40:17 +08: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 19:26:49 +08:00
set ( OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE "${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}" CACHE INTERNAL "Extra linker flags for Release build" )
2012-09-17 04:40:17 +08: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 19:26:49 +08:00
2013-04-18 14:30:15 +08: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 ( )
2016-10-11 19:37:53 +08:00
if ( NOT OPENCV_FP16_DISABLE AND NOT IOS )
2016-09-21 14:42:54 +08:00
if ( ARM AND ENABLE_NEON )
set ( FP16_OPTION "-mfpu=neon-fp16" )
elseif ( ( X86 OR X86_64 ) AND NOT MSVC AND ENABLE_AVX )
set ( FP16_OPTION "-mf16c" )
endif ( )
try_compile ( __VALID_FP16
" $ { O p e n C V _ B I N A R Y _ D I R } "
" $ { O p e n C V _ S O U R C E _ D I R } / c m a k e / c h e c k s / f p 1 6 . c p p "
C O M P I L E _ D E F I N I T I O N S " - D C H E C K _ F P 1 6 " " $ { F P 1 6 _ O P T I O N } "
O U T P U T _ V A R I A B L E T R Y _ O U T
)
if ( NOT __VALID_FP16 )
if ( ( X86 OR X86_64 ) AND NOT MSVC AND NOT ENABLE_AVX )
# GCC enables AVX when mf16c is passed
message ( STATUS "FP16: Feature disabled" )
else ( )
message ( STATUS "FP16: Compiler support is not available" )
endif ( )
else ( )
message ( STATUS "FP16: Compiler support is available" )
set ( HAVE_FP16 1 )
if ( NOT ${ FP16_OPTION } STREQUAL "" )
add_extra_compiler_option ( ${ FP16_OPTION } )
endif ( )
endif ( )
endif ( )
2012-02-03 19:26:49 +08:00
#combine all "extra" options
2012-09-17 04:40:17 +08: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 16:11:17 +08:00
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OPENCV_EXTRA_FLAGS_RELEASE}" )
2012-09-17 04:40:17 +08: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 19:26:49 +08:00
set ( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_RELEASE}" )
2012-09-17 04:40:17 +08:00
set ( CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${OPENCV_EXTRA_EXE_LINKER_FLAGS_DEBUG}" )
2012-02-03 19:26:49 +08:00
2012-04-14 05:50:59 +08: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-17 04:40:17 +08:00
string ( REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
2012-04-14 05:50:59 +08:00
string ( REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" )
2012-09-17 04:40:17 +08:00
string ( REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" )
2012-06-08 01:21:29 +08:00
2012-06-12 22:46:12 +08:00
if ( NOT ENABLE_NOISY_WARNINGS AND MSVC_VERSION EQUAL 1400 )
2015-01-12 15:59:30 +08:00
ocv_warnings_disable ( CMAKE_CXX_FLAGS /wd4510 /wd4610 /wd4312 /wd4201 /wd4244 /wd4328 /wd4267 )
2012-06-12 22:46:12 +08:00
endif ( )
2012-04-14 05:50:59 +08: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-17 04:40:17 +08:00
string ( REPLACE "/EHsc" "/EHs" ${ flags } "${${flags}}" )
2012-06-08 01:21:29 +08:00
2012-04-14 05:50:59 +08:00
string ( REPLACE "/Zm1000" "" ${ flags } "${${flags}}" )
endforeach ( )
if ( NOT ENABLE_NOISY_WARNINGS )
2015-01-12 15:59:30 +08: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())
2015-10-16 22:10:00 +08:00
ocv_warnings_disable ( CMAKE_CXX_FLAGS /wd4275 ) # non dll-interface class 'std::exception' used as base for dll-interface class 'cv::Exception'
ocv_warnings_disable ( CMAKE_CXX_FLAGS /wd4589 ) # Constructor of abstract class 'cv::ORB' ignores initializer for virtual base class 'cv::Algorithm'
2012-04-14 05:50:59 +08:00
endif ( )
2013-08-21 21:26:54 +08:00
endif ( )
2016-07-18 22:45:16 +08:00
2016-08-17 18:34:59 +08:00
if ( APPLE AND NOT CMAKE_CROSSCOMPILING AND NOT DEFINED ENV{LDFLAGS} AND EXISTS "/usr/local/lib" )
link_directories ( "/usr/local/lib" )
endif ( )