From 097512eaec82d880a74679a4dd24cec3d8f632f2 Mon Sep 17 00:00:00 2001 From: Ling Wang Date: Sun, 23 Feb 2025 14:57:42 +0100 Subject: [PATCH 1/3] add MATCH_CUDA_MINOR_VERSION, to maintain the old behavior default to YES; when turn it off it only depends on the major cuda version; this also fix the wrong behavior: need to match cuda patch version when ENABLE_CUDA_FIRST_CLASS_LANGUAGE=ON --- CMakeLists.txt | 2 ++ cmake/OpenCVFindLibsPerf.cmake | 29 +++++++++++++++++++ cmake/templates/OpenCVConfig-CUDA.cmake.in | 8 +++-- .../OpenCVConfig-CUDALanguage.cmake.in | 8 +++-- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e60406fbe22f..a904b133e92e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,6 +244,8 @@ OCV_OPTION(WITH_VTK "Include VTK library support (and build opencv_viz module ei OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" OFF VISIBLE_IF NOT IOS AND NOT XROS AND NOT WINRT VERIFY HAVE_CUDA) + OCV_OPTION(MATCH_CUDA_MINOR_VERSION "Require match the cuda minor version to link against produced libraries." ON + VISIBLE_IF WITH_CUDA) OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" WITH_CUDA VISIBLE_IF WITH_CUDA VERIFY HAVE_CUFFT) diff --git a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake index c2380e6ce562..8128efb007f8 100644 --- a/cmake/OpenCVFindLibsPerf.cmake +++ b/cmake/OpenCVFindLibsPerf.cmake @@ -39,6 +39,34 @@ if(WITH_IPP) endif() # --- CUDA --- +# Function to calculate the version range based on match_minor flag +function(get_version_range version match_minor lower_bound upper_bound) + # Split the version into components + string(REPLACE "." ";" version_list ${version}) + list(LENGTH version_list version_length) + + # Extract major and minor components + list(GET version_list 0 major) + if(version_length GREATER 1) + list(GET version_list 1 minor) + else() + set(minor 0) # Default minor to 0 if not provided + endif() + + # Determine the range based on match_minor flag + if(match_minor) + # Match minor: range is [major.minor, major.) + math(EXPR new_minor "${minor} + 1") + set(${lower_bound} "${major}.${minor}" PARENT_SCOPE) + set(${upper_bound} "${major}.${new_minor}" PARENT_SCOPE) + else() + # Do not match minor: range is [major, ) + math(EXPR new_major "${major} + 1") + set(${lower_bound} "${major}" PARENT_SCOPE) + set(${upper_bound} "${new_major}" PARENT_SCOPE) + endif() +endfunction() + if(WITH_CUDA) if(ENABLE_CUDA_FIRST_CLASS_LANGUAGE) include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectCUDALanguage.cmake") @@ -51,6 +79,7 @@ CUDA support will be disabled in OpenCV build. To eliminate this warning remove WITH_CUDA=ON CMake configuration option. ") endif() + get_version_range(${CUDA_VERSION_STRING} ${MATCH_CUDA_MINOR_VERSION} CUDA_VERSION_MIN CUDA_VERSION_MAX) endif(WITH_CUDA) # --- Eigen --- diff --git a/cmake/templates/OpenCVConfig-CUDA.cmake.in b/cmake/templates/OpenCVConfig-CUDA.cmake.in index 25a20556ec4a..9d136b3e936b 100644 --- a/cmake/templates/OpenCVConfig-CUDA.cmake.in +++ b/cmake/templates/OpenCVConfig-CUDA.cmake.in @@ -2,6 +2,8 @@ set(OpenCV_COMPUTE_CAPABILITIES "@OpenCV_CUDA_CC@") set(OpenCV_CUDA_VERSION "@CUDA_VERSION_STRING@") +set(OpenCV_CUDA_VERSION_MIN "@CUDA_VERSION_MIN@") +set(OpenCV_CUDA_VERSION_MAX "@CUDA_VERSION_MAX@") set(OpenCV_USE_CUBLAS "@HAVE_CUBLAS@") set(OpenCV_USE_CUFFT "@HAVE_CUFFT@") set(OpenCV_USE_NVCUVID "@HAVE_NVCUVID@") @@ -10,10 +12,10 @@ set(OpenCV_CUDNN_VERSION "@CUDNN_VERSION@") set(OpenCV_USE_CUDNN "@HAVE_CUDNN@") if(NOT CUDA_FOUND) - find_host_package(CUDA ${OpenCV_CUDA_VERSION} EXACT REQUIRED) + find_host_package(CUDA ${OpenCV_CUDA_VERSION_MIN} EXACT REQUIRED) else() - if(NOT CUDA_VERSION_STRING VERSION_EQUAL OpenCV_CUDA_VERSION) - message(FATAL_ERROR "OpenCV static library was compiled with CUDA ${OpenCV_CUDA_VERSION} support. Please, use the same version or rebuild OpenCV with CUDA ${CUDA_VERSION_STRING}") + if(CUDA_VERSION_STRING VERSION_GREATER_EQUAL OpenCV_CUDA_VERSION_MAX OR CUDA_VERSION_STRING VERSION_LESS OpenCV_CUDA_VERSION_MIN) + message(FATAL_ERROR "OpenCV static library was compiled with CUDA ${OpenCV_CUDA_VERSION} support. Please, use the version >=${OpenCV_CUDA_VERSION_MIN} <{OpenCV_CUDA_VERSION_MAX} or rebuild OpenCV with CUDA ${CUDA_VERSION_STRING}") endif() endif() diff --git a/cmake/templates/OpenCVConfig-CUDALanguage.cmake.in b/cmake/templates/OpenCVConfig-CUDALanguage.cmake.in index 259141006ae2..4294f8ccda86 100644 --- a/cmake/templates/OpenCVConfig-CUDALanguage.cmake.in +++ b/cmake/templates/OpenCVConfig-CUDALanguage.cmake.in @@ -2,6 +2,8 @@ set(OpenCV_COMPUTE_CAPABILITIES "@OpenCV_CUDA_CC@") set(OpenCV_CUDA_VERSION "@CUDA_VERSION_STRING@") +set(OpenCV_CUDA_VERSION_MIN "@CUDA_VERSION_MIN@") +set(OpenCV_CUDA_VERSION_MAX "@CUDA_VERSION_MAX@") set(OpenCV_USE_CUBLAS "@HAVE_CUBLAS@") set(OpenCV_USE_CUFFT "@HAVE_CUFFT@") set(OpenCV_USE_NVCUVID "@HAVE_NVCUVID@") @@ -17,7 +19,7 @@ if(NOT CUDAToolkit_FOUND) set(CUDA_PATH "/usr/local/cuda" CACHE INTERNAL "") set(ENV{CUDA_PATH} ${CUDA_PATH}) endif() - find_package(CUDAToolkit ${OpenCV_CUDA_VERSION} EXACT REQUIRED) + find_package(CUDAToolkit ${OpenCV_CUDA_VERSION_MIN} EXACT REQUIRED) else() message(FATAL_ERROR "Using OpenCV compiled with CUDA as first class language requires CMake \>= 3.18.") endif() @@ -25,7 +27,7 @@ else() if(CUDAToolkit_FOUND) set(CUDA_VERSION_STRING ${CUDAToolkit_VERSION}) endif() - if(NOT CUDA_VERSION_STRING VERSION_EQUAL OpenCV_CUDA_VERSION) - message(FATAL_ERROR "OpenCV library was compiled with CUDA ${OpenCV_CUDA_VERSION} support. Please, use the same version or rebuild OpenCV with CUDA ${CUDA_VERSION_STRING}") + if(CUDA_VERSION_STRING VERSION_GREATER_EQUAL OpenCV_CUDA_VERSION_MAX OR CUDA_VERSION_STRING VERSION_LESS OpenCV_CUDA_VERSION_MIN) + message(FATAL_ERROR "OpenCV library was compiled with CUDA ${OpenCV_CUDA_VERSION} support. Please, use the version >=${OpenCV_CUDA_VERSION_MIN} <{OpenCV_CUDA_VERSION_MAX} or rebuild OpenCV with CUDA ${CUDA_VERSION_STRING}") endif() endif() From 1fe33b7ee58ac9e5f6047b19c1583902ee5c4af5 Mon Sep 17 00:00:00 2001 From: Ling Wang Date: Sun, 23 Feb 2025 17:14:09 +0100 Subject: [PATCH 2/3] remove trailing spaces --- cmake/OpenCVFindLibsPerf.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake index cb206f79e6e8..1d6817fdad95 100644 --- a/cmake/OpenCVFindLibsPerf.cmake +++ b/cmake/OpenCVFindLibsPerf.cmake @@ -79,7 +79,7 @@ CUDA support will be disabled in OpenCV build. To eliminate this warning remove WITH_CUDA=ON CMake configuration option. ") endif() - get_version_range(${CUDA_VERSION_STRING} ${MATCH_CUDA_MINOR_VERSION} CUDA_VERSION_MIN CUDA_VERSION_MAX) + get_version_range(${CUDA_VERSION_STRING} ${MATCH_CUDA_MINOR_VERSION} CUDA_VERSION_MIN CUDA_VERSION_MAX) endif(WITH_CUDA) # --- Eigen --- From 455fb870206c8ddc4e4ca452796af2a0af463dc7 Mon Sep 17 00:00:00 2001 From: Ling Wang Date: Mon, 24 Feb 2025 18:37:13 +0100 Subject: [PATCH 3/3] fix indentation --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e2fde88dc40..7e0c14b40711 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,7 +244,7 @@ OCV_OPTION(WITH_VTK "Include VTK library support (and build opencv_viz module ei OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" OFF VISIBLE_IF NOT IOS AND NOT XROS AND NOT WINRT VERIFY HAVE_CUDA) - OCV_OPTION(MATCH_CUDA_MINOR_VERSION "Require match the cuda minor version to link against produced libraries." ON +OCV_OPTION(MATCH_CUDA_MINOR_VERSION "Require match the cuda minor version to link against produced libraries." ON VISIBLE_IF WITH_CUDA) OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" WITH_CUDA VISIBLE_IF WITH_CUDA pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy