Blame view

3rdparty/opencv-4.5.4/cmake/FindCUDNN.cmake 2.73 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  # template taken from https://cmake.org/cmake/help/v3.14/manual/cmake-developer.7.html
  
  # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
  # file Copyright.txt or https://cmake.org/licensing for details.
  
  #[=======================================================================[.rst:
  FindCUDNN
  ---------
  
  Finds the cuDNN library.
  
  Requires:
  ^^^^^^^^^
  
  find_cuda_helper_libs from FindCUDA.cmake
  i.e. CUDA module should be found using FindCUDA.cmake before attempting to find cuDNN
  
  Result Variables
  ^^^^^^^^^^^^^^^^
  
  This will define the following variables:
  
  ``CUDNN_FOUND``
  ``CUDNN_INCLUDE_DIRS``    location of cudnn.h
  ``CUDNN_LIBRARIES``       location of cudnn library
  
  Cache Variables
  ^^^^^^^^^^^^^^^
  
  The following cache variables will be set if cuDNN was found. They may also be set on failure.
  
  ``CUDNN_LIBRARY``
  ``CUDNN_INCLUDE_DIR``
  ``CUDNN_VERSION``
  
  ``CUDNN_VERSION_MAJOR`` INTERNAL
  ``CUDNN_VERSION_MINOR`` INTERNAL
  ``CUDNN_VERSION_PATCH`` INTERNAL
  
  #]=======================================================================]
  
  # find the library
  if(CUDA_FOUND)
    find_cuda_helper_libs(cudnn)
    set(CUDNN_LIBRARY ${CUDA_cudnn_LIBRARY} CACHE FILEPATH "location of the cuDNN library")
    unset(CUDA_cudnn_LIBRARY CACHE)
  endif()
  
  # find the include
  if(CUDNN_LIBRARY)
    find_path(CUDNN_INCLUDE_DIR
      cudnn.h
      PATHS ${CUDA_TOOLKIT_INCLUDE}
      DOC "location of cudnn.h"
      NO_DEFAULT_PATH
    )
  
    if(NOT CUDNN_INCLUDE_DIR)
      find_path(CUDNN_INCLUDE_DIR
        cudnn.h
        DOC "location of cudnn.h"
      )
    endif()
  endif()
  
  # extract version from the include
  if(CUDNN_INCLUDE_DIR)
    if(EXISTS "${CUDNN_INCLUDE_DIR}/cudnn_version.h")
      file(READ "${CUDNN_INCLUDE_DIR}/cudnn_version.h" CUDNN_H_CONTENTS)
    else()
      file(READ "${CUDNN_INCLUDE_DIR}/cudnn.h" CUDNN_H_CONTENTS)
    endif()
  
    string(REGEX MATCH "define CUDNN_MAJOR ([0-9]+)" _ "${CUDNN_H_CONTENTS}")
    set(CUDNN_VERSION_MAJOR ${CMAKE_MATCH_1} CACHE INTERNAL "")
    string(REGEX MATCH "define CUDNN_MINOR ([0-9]+)" _ "${CUDNN_H_CONTENTS}")
    set(CUDNN_VERSION_MINOR ${CMAKE_MATCH_1} CACHE INTERNAL "")
    string(REGEX MATCH "define CUDNN_PATCHLEVEL ([0-9]+)" _ "${CUDNN_H_CONTENTS}")
    set(CUDNN_VERSION_PATCH ${CMAKE_MATCH_1} CACHE INTERNAL "")
  
    set(CUDNN_VERSION
      "${CUDNN_VERSION_MAJOR}.${CUDNN_VERSION_MINOR}.${CUDNN_VERSION_PATCH}"
      CACHE
      STRING
      "cuDNN version"
    )
  
    unset(CUDNN_H_CONTENTS)
  endif()
  
  include(FindPackageHandleStandardArgs)
  find_package_handle_standard_args(CUDNN
    FOUND_VAR CUDNN_FOUND
    REQUIRED_VARS
      CUDNN_LIBRARY
      CUDNN_INCLUDE_DIR
    VERSION_VAR CUDNN_VERSION
  )
  
  if(CUDNN_FOUND)
    set(CUDNN_LIBRARIES ${CUDNN_LIBRARY})
    set(CUDNN_INCLUDE_DIRS ${CUDNN_INCLUDE_DIR})
  endif()
  
  mark_as_advanced(
    CUDNN_LIBRARY
    CUDNN_INCLUDE_DIR
    CUDNN_VERSION
  )