Change:
Describe the bug OpenCV 4 fails to build with cuda enabled due to missing NVIDIA optical flow sdk To Reproduce Steps to reproduce the behavior: -build -A opencv4 Expected behavior Either we disable OpenCV 4's option to compile with the NVIDIA optical flow SDK or allow compilation against the NVIDIA optical flow sdk headers. See: I've done some preliminary work towards this on the following branch:

Discussion:
<ins> { stdenv, fetchFromGitHub }: stdenv.mkDerivation { pname = "nvidia-optical-flow-sdk"; version = "1.0"; src = fetchFromGitHub { owner = "NVIDIA"; repo = "NVIDIAOpticalFlowSDK"; rev = "79c6cee80a2df9a196f20afd6b598a9810964c32"; sha256 = "1y6igwv75v1ynqm7j6la3ky0f15mgnj1jyyak82yvhcsx1aax0a1"; }; # # We only need the header files. The library files are # # in the nvidia_x11 driver. installPhase = '' mkdir -p $out/include cp -R * $out/include ''; meta = with stdenv.lib; { description = "Nvidia optical flow headers for computing the relative motion of pixels between images"; homepage = "https://developer.nvidia.com/opticalflow-sdk"; license = licenses.bsd3; # applies to the header files only platforms = platforms.all; }; } </ins>

, enableContrib   ? true , enableCuda      ? (config.cudaSupport or false) && <del> stdenv.hostPlatform.isx86_64, cudatoolkit </del> <ins> stdenv.hostPlatform.isx86_64, cudatoolkit, nvidia-optical-flow-sdk </ins> , enableUnfree    ? false , enableIpp       ? false

# Also, work around https://github.com/NixOS/nixpkgs/issues/26304 with # what appears to be some stray headers in dnn/misc/tensorflow # in contrib when generating the Python bindings: <ins> patches = lib.optional enableCuda ./cuda_opt_flow.patch; </ins> postPatch = '' sed -i '/Add these standard paths to the search paths for FIND_LIBRARY/,/^s*$/{d}' CMakeLists.txt sed -i -e 's|if len(decls) == 0:|if len(decls) == 0 or "opencv2/" not in hdr:|' ./modules/python/src2/gen2.py

# tesseract & leptonica. ++ lib.optionals enableTesseract [ tesseract leptonica ] ++ lib.optional enableTbb tbb <del> ++ lib.optional enableCuda cudatoolkit </del> <ins> ++ lib.optionals enableCuda [ cudatoolkit nvidia-optical-flow-sdk ] </ins> ++ lib.optionals stdenv.isDarwin [ bzip2 AVFoundation Cocoa VideoDecodeAcceleration ] ++ lib.optionals enableDocs [ doxygen graphviz-nox ];

"-DCUDA_FAST_MATH=ON" "-DCUDA_HOST_COMPILER=${cudatoolkit.cc}/bin/cc" "-DCUDA_NVCC_FLAGS=--expt-relaxed-constexpr" <ins> "-DNVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH=${nvidia-optical-flow-sdk}" </ins> ] ++ lib.optionals stdenv.isDarwin [ "-DWITH_OPENCL=OFF" "-DWITH_LAPACK=OFF"

<ins> diff --git a/opencv_contrib/cudaoptflow/CMakeLists.txt b/opencv_contrib/cudaoptflow/CMakeLists.txt index e5b823ab4a..a728060d0b 100644 --- a/opencv_contrib/cudaoptflow/CMakeLists.txt +++ b/opencv_contrib/cudaoptflow/CMakeLists.txt @@ -11,18 +11,6 @@ ocv_define_module(cudaoptflow opencv_video opencv_optflow opencv_cudaarithm open set(NVIDIA_OPTICAL_FLOW_1_0_HEADERS_COMMIT "79c6cee80a2df9a196f20afd6b598a9810964c32") set(NVIDIA_OPTICAL_FLOW_1_0_HEADERS_MD5 "ca5acedee6cb45d0ec610a6732de5c15") set(NVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH "${OpenCV_BINARY_DIR}/3rdparty/NVIDIAOpticalFlowSDK_1_0_Headers") -ocv_download(FILENAME "${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_COMMIT}.zip" -               HASH ${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_MD5} -               URL -                 "https://github.com/NVIDIA/NVIDIAOpticalFlowSDK/archive/" -               DESTINATION_DIR "${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH}" -               STATUS NVIDIA_OPTICAL_FLOW_1_0_HEADERS_DOWNLOAD_SUCCESS -               ID "NVIDIA_OPTICAL_FLOW" -               UNPACK RELATIVE_URL) -if(NOT NVIDIA_OPTICAL_FLOW_1_0_HEADERS_DOWNLOAD_SUCCESS) -  message(STATUS "Failed to download NVIDIA_Optical_Flow_1_0 Headers") -else() -  add_definitions(-DHAVE_NVIDIA_OPTFLOW=1) -  ocv_include_directories(SYSTEM "${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH}/NVIDIAOpticalFlowSDK-${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_COMMIT}") -endif()  No newline at end of file +add_definitions(-DHAVE_NVIDIA_OPTFLOW=1) +ocv_include_directories(SYSTEM "${NVIDIA_OPTICAL_FLOW_1_0_HEADERS_PATH}") </ins>

nvidia-video-sdk = callPackage ../development/libraries/nvidia-video-sdk { }; <ins> nvidia-optical-flow-sdk = callPackage ../development/libraries/nvidia-optical-flow-sdk { }; </ins> nvtop = callPackage ../tools/system/nvtop { nvidia_x11 = linuxPackages.nvidia_x11.override { libsOnly = true; }; };