mirror of
https://github.com/opencv/opencv.git
synced 2024-11-27 20:50:25 +08:00
Merge pull request #24286 from ashadrina:intel_icx_compiler_support
Add Intel® oneAPI DPC++/C++ Compiler (icx) #24286 Intel® C++ Compiler Classic (icc) is deprecated and will be removed in a oneAPI release in the second half of 2023 ([deprecation notice](https://community.intel.com/t5/Intel-oneAPI-IoT-Toolkit/DEPRECATION-NOTICE-Intel-C-Compiler-Classic/m-p/1412267#:~:text=Intel%C2%AE%20C%2B%2B%20Compiler%20Classic%20(icc)%20is%20deprecated%20and%20will,the%20second%20half%20of%202023.)). This commit is intended to add support for the next-generation compiler, Intel® oneAPI DPC++/C++ Compiler (icx) (the documentation for the compiler is available on the [link](https://www.intel.com/content/www/us/en/docs/dpcpp-cpp-compiler/developer-guide-reference/2023-2/overview.html)). ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [ ] There is a reference to the original bug report and related work - [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [ ] The feature is well documented and sample code can be built with the project CMake
This commit is contained in:
parent
865e7cacca
commit
3889dcf3f8
@ -224,7 +224,7 @@ if(X86 OR X86_64)
|
||||
ocv_update(CPU_SSE2_IMPLIES "SSE")
|
||||
endif()
|
||||
|
||||
if(CV_ICC)
|
||||
if(CV_ICC OR CV_ICX)
|
||||
macro(ocv_intel_compiler_optimization_option name unix_flags msvc_flags)
|
||||
ocv_update(CPU_${name}_FLAGS_NAME "${name}")
|
||||
if(MSVC)
|
||||
@ -260,7 +260,7 @@ if(X86 OR X86_64)
|
||||
ocv_intel_compiler_optimization_option(AVX512_CNL "-xCANNONLAKE" "/Qx:CANNONLAKE")
|
||||
ocv_intel_compiler_optimization_option(AVX512_CLX "-xCASCADELAKE" "/Qx:CASCADELAKE")
|
||||
ocv_intel_compiler_optimization_option(AVX512_ICL "-xICELAKE-CLIENT" "/Qx:ICELAKE-CLIENT")
|
||||
elseif(CV_GCC OR CV_CLANG)
|
||||
elseif(CV_GCC OR CV_CLANG OR CV_ICX)
|
||||
ocv_update(CPU_AVX2_FLAGS_ON "-mavx2")
|
||||
ocv_update(CPU_FP16_FLAGS_ON "-mf16c")
|
||||
ocv_update(CPU_AVX_FLAGS_ON "-mavx")
|
||||
@ -657,7 +657,7 @@ macro(ocv_compiler_optimization_options)
|
||||
endmacro()
|
||||
|
||||
macro(ocv_compiler_optimization_options_finalize)
|
||||
if((CV_GCC OR CV_CLANG) AND (X86 OR X86_64))
|
||||
if((CV_GCC OR CV_CLANG OR CV_ICX) AND (X86 OR X86_64))
|
||||
if(NOT APPLE AND CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
if(OPENCV_EXTRA_CXX_FLAGS MATCHES "-m(sse2|avx)")
|
||||
add_extra_compiler_option(-mfpmath=sse) # !! important - be on the same wave with x64 compilers
|
||||
@ -944,7 +944,7 @@ macro(ocv_add_dispatched_file_force_all)
|
||||
endmacro()
|
||||
|
||||
|
||||
if(CV_DISABLE_OPTIMIZATION OR CV_ICC)
|
||||
if(CV_DISABLE_OPTIMIZATION OR CV_ICC OR CX_ICX)
|
||||
ocv_update(CV_ENABLE_UNROLLED 0)
|
||||
else()
|
||||
ocv_update(CV_ENABLE_UNROLLED 1)
|
||||
|
@ -105,6 +105,19 @@ elseif(CV_ICC)
|
||||
add_extra_compiler_option("-fp-model precise")
|
||||
endif()
|
||||
endif()
|
||||
elseif(CV_ICX)
|
||||
# ICX uses -ffast-math by default.
|
||||
# use own flags, if no one of the flags provided by user: -fp-model, -ffast-math -fno-fast-math
|
||||
if(NOT " ${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS}" MATCHES " /fp:"
|
||||
AND NOT " ${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS}" MATCHES " -fp-model"
|
||||
AND NOT " ${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS}" MATCHES " -ffast-math"
|
||||
AND NOT " ${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS}" MATCHES " -fno-fast-math"
|
||||
)
|
||||
if(NOT ENABLE_FAST_MATH)
|
||||
add_extra_compiler_option(-fno-fast-math)
|
||||
add_extra_compiler_option(-fp-model=precise)
|
||||
endif()
|
||||
endif()
|
||||
elseif(CV_GCC OR CV_CLANG)
|
||||
if(ENABLE_FAST_MATH)
|
||||
add_extra_compiler_option(-ffast-math)
|
||||
@ -112,7 +125,7 @@ elseif(CV_GCC OR CV_CLANG)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CV_GCC OR CV_CLANG)
|
||||
if(CV_GCC OR CV_CLANG OR CV_ICX)
|
||||
# High level of warnings.
|
||||
add_extra_compiler_option(-W)
|
||||
if (NOT MSVC)
|
||||
@ -336,7 +349,7 @@ if(COMMAND ocv_compiler_optimization_options_finalize)
|
||||
endif()
|
||||
|
||||
# set default visibility to hidden
|
||||
if((CV_GCC OR CV_CLANG)
|
||||
if((CV_GCC OR CV_CLANG OR CV_ICX)
|
||||
AND NOT MSVC
|
||||
AND NOT OPENCV_SKIP_VISIBILITY_HIDDEN
|
||||
AND NOT " ${CMAKE_CXX_FLAGS} ${OPENCV_EXTRA_FLAGS} ${OPENCV_EXTRA_CXX_FLAGS}" MATCHES " -fvisibility")
|
||||
|
@ -68,6 +68,23 @@ if(MSVC AND CMAKE_C_COMPILER MATCHES "icc|icl")
|
||||
set(CV_ICC __INTEL_COMPILER_FOR_WINDOWS)
|
||||
endif()
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Detect Intel ICXC compiler
|
||||
# ----------------------------------------------------------------------------
|
||||
if(UNIX)
|
||||
if(__INTEL_COMPILER)
|
||||
set(CV_ICX __INTEL_LLVM_COMPILER)
|
||||
elseif(CMAKE_C_COMPILER MATCHES "icx")
|
||||
set(CV_ICX icx_matches_c_compiler)
|
||||
elseif(CMAKE_CXX_COMPILER MATCHES "icpx")
|
||||
set(CV_ICX icpx_matches_cxx_compiler)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MSVC AND CMAKE_CXX_COMPILER MATCHES ".*(dpcpp-cl|dpcpp|icx-cl|icpx|icx)(.exe)?$")
|
||||
set(CV_ICX __INTEL_LLVM_COMPILER_WINDOWS)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED CMAKE_CXX_COMPILER_VERSION
|
||||
AND NOT OPENCV_SUPPRESS_MESSAGE_MISSING_COMPILER_VERSION)
|
||||
message(WARNING "OpenCV: Compiler version is not available: CMAKE_CXX_COMPILER_VERSION is not set")
|
||||
|
Loading…
Reference in New Issue
Block a user