diff --git a/cmake/OpenCVGenConfig.cmake b/cmake/OpenCVGenConfig.cmake index fcca310ceb..f8d9e27db4 100644 --- a/cmake/OpenCVGenConfig.cmake +++ b/cmake/OpenCVGenConfig.cmake @@ -13,8 +13,10 @@ endif() if(NOT OpenCV_CUDA_CC) set(OpenCV_CUDA_CC_CONFIGCMAKE "\"\"") + set(OpenCV_CUDA_VERSION "") else() set(OpenCV_CUDA_CC_CONFIGCMAKE "${OpenCV_CUDA_CC}") + set(OpenCV_CUDA_VERSION ${CUDA_VERSION_STRING}) endif() if(NOT ANDROID_NATIVE_API_LEVEL) @@ -64,11 +66,18 @@ macro(ocv_generate_dependencies_map_configcmake suffix configuration) string(REGEX REPLACE "${CMAKE_SHARED_LIBRARY_SUFFIX}$" "${OPENCV_LINK_LIBRARY_SUFFIX}" __libname "${__libname}") endif() + if (CUDA_FOUND AND WIN32) + if(${__ocv_lib}_EXTRA_DEPS_${suffix}) + list(REMOVE_ITEM ${__ocv_lib}_EXTRA_DEPS_${suffix} ${CUDA_LIBRARIES} ${CUDA_CUFFT_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES} ${CUDA_npp_LIBRARY} ${CUDA_nvcuvid_LIBRARY} ${CUDA_nvcuvenc_LIBRARY}) + endif() + endif() + string(REPLACE " " "\\ " __mod_deps "${${__ocv_lib}_MODULE_DEPS_${suffix}}") string(REPLACE " " "\\ " __ext_deps "${${__ocv_lib}_EXTRA_DEPS_${suffix}}") string(REPLACE "\"" "\\\"" __mod_deps "${__mod_deps}") string(REPLACE "\"" "\\\"" __ext_deps "${__ext_deps}") + set(OPENCV_DEPENDENCIES_MAP_${suffix} "${OPENCV_DEPENDENCIES_MAP_${suffix}}set(OpenCV_${__ocv_lib}_LIBNAME_${suffix} \"${__libname}\")\n") set(OPENCV_DEPENDENCIES_MAP_${suffix} "${OPENCV_DEPENDENCIES_MAP_${suffix}}set(OpenCV_${__ocv_lib}_DEPS_${suffix} ${__mod_deps})\n") set(OPENCV_DEPENDENCIES_MAP_${suffix} "${OPENCV_DEPENDENCIES_MAP_${suffix}}set(OpenCV_${__ocv_lib}_EXTRA_DEPS_${suffix} ${__ext_deps})\n") diff --git a/cmake/templates/OpenCVConfig.cmake.in b/cmake/templates/OpenCVConfig.cmake.in index 4ff3569122..981bb7a44d 100644 --- a/cmake/templates/OpenCVConfig.cmake.in +++ b/cmake/templates/OpenCVConfig.cmake.in @@ -40,6 +40,10 @@ # Version Compute Capability from which OpenCV has been compiled is remembered set(OpenCV_COMPUTE_CAPABILITIES @OpenCV_CUDA_CC_CONFIGCMAKE@) +set(OpenCV_CUDA_VERSION @OpenCV_CUDA_VERSION@) +set(OpenCV_USE_CUBLAS @HAVE_CUBLAS@) +set(OpenCV_USE_CUFFT @HAVE_CUFFT@) + # Android API level from which OpenCV has been compiled is remembered set(OpenCV_ANDROID_NATIVE_API_LEVEL @OpenCV_ANDROID_NATIVE_API_LEVEL_CONFIGCMAKE@) @@ -212,6 +216,27 @@ foreach(__opttype OPT DBG) else() #TODO: duplicates are annoying but they should not be the problem endif() + # fix hard coded paths for CUDA libraries under Windows + if(WIN32 AND OpenCV_CUDA_VERSION AND NOT OpenCV_SHARED) + if(NOT CUDA_FOUND) + find_package(CUDA ${OpenCV_CUDA_VERSION} EXACT REQUIRED) + else() + if(NOT CUDA_VERSION_STRING VERSION_EQUAL OpenCV_CUDA_VERSION) + message(FATAL_ERROR "OpenCV static library compiled with CUDA ${OpenCV_CUDA_VERSION} support. Please, use the same version or rebuild OpenCV with CUDA ${CUDA_VERSION_STRING}") + endif() + endif() + + list(APPEND OpenCV_EXTRA_LIBS_${__opttype} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY} ${CUDA_nvcuvid_LIBRARY} ${CUDA_nvcuvenc_LIBRARY}) + + if(OpenCV_USE_CUBLAS) + list(APPEND OpenCV_EXTRA_LIBS_${__opttype} ${CUDA_CUBLAS_LIBRARIES}) + endif() + + if(OpenCV_USE_CUFFT) + list(APPEND OpenCV_EXTRA_LIBS_${__opttype} ${CUDA_CUFFT_LIBRARIES}) + endif() + + endif() endforeach() if(OpenCV_LIBS_DBG)