FindCUDNN.cmake 2.99 KB
Newer Older
1
# Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Tim Moon's avatar
Tim Moon committed
2
3
4
#
# See LICENSE for license information.

cyanguwa's avatar
cyanguwa committed
5
6
7
8
9
10
add_library(CUDNN::cudnn_all INTERFACE IMPORTED)

find_path(
    CUDNN_INCLUDE_DIR cudnn.h
    HINTS $ENV{CUDNN_PATH} ${CUDNN_PATH} ${CUDAToolkit_INCLUDE_DIRS}
    PATH_SUFFIXES include
11
    REQUIRED
cyanguwa's avatar
cyanguwa committed
12
13
)

14
15
16
file(READ "${CUDNN_INCLUDE_DIR}/cudnn_version.h" cudnn_version_header)
string(REGEX MATCH "#define CUDNN_MAJOR [1-9]+" macrodef "${cudnn_version_header}")
string(REGEX MATCH "[1-9]+" CUDNN_MAJOR_VERSION "${macrodef}")
cyanguwa's avatar
cyanguwa committed
17

18
function(find_cudnn_library NAME)
cyanguwa's avatar
cyanguwa committed
19
    find_library(
20
        ${NAME}_LIBRARY ${NAME} "lib${NAME}.so.${CUDNN_MAJOR_VERSION}"
cyanguwa's avatar
cyanguwa committed
21
22
        HINTS $ENV{CUDNN_PATH} ${CUDNN_PATH} ${CUDAToolkit_LIBRARY_DIR}
        PATH_SUFFIXES lib64 lib/x64 lib
23
        REQUIRED
cyanguwa's avatar
cyanguwa committed
24
    )
25
26
    
    if(${NAME}_LIBRARY)
cyanguwa's avatar
cyanguwa committed
27
28
29
30
        add_library(CUDNN::${NAME} UNKNOWN IMPORTED)
        set_target_properties(
            CUDNN::${NAME} PROPERTIES
            INTERFACE_INCLUDE_DIRECTORIES ${CUDNN_INCLUDE_DIR}
31
            IMPORTED_LOCATION ${${NAME}_LIBRARY}
cyanguwa's avatar
cyanguwa committed
32
        )
33
        message(STATUS "${NAME} found at ${${NAME}_LIBRARY}.")
cyanguwa's avatar
cyanguwa committed
34
35
36
37
38
39
40
41
42
43
44
    else()
        message(STATUS "${NAME} not found.")
    endif()


endfunction()

find_cudnn_library(cudnn)

include (FindPackageHandleStandardArgs)
find_package_handle_standard_args(
45
46
    LIBRARY REQUIRED_VARS
    CUDNN_INCLUDE_DIR cudnn_LIBRARY
cyanguwa's avatar
cyanguwa committed
47
48
)

49
if(CUDNN_INCLUDE_DIR AND cudnn_LIBRARY)
cyanguwa's avatar
cyanguwa committed
50

51
    message(STATUS "cuDNN: ${cudnn_LIBRARY}")
cyanguwa's avatar
cyanguwa committed
52
    message(STATUS "cuDNN: ${CUDNN_INCLUDE_DIR}")
53
    
cyanguwa's avatar
cyanguwa committed
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
    set(CUDNN_FOUND ON CACHE INTERNAL "cuDNN Library Found")

else()

    set(CUDNN_FOUND OFF CACHE INTERNAL "cuDNN Library Not Found")

endif()

target_include_directories(
    CUDNN::cudnn_all
    INTERFACE
    $<INSTALL_INTERFACE:include>
    $<BUILD_INTERFACE:${CUDNN_INCLUDE_DIR}>
)

target_link_libraries(
    CUDNN::cudnn_all
    INTERFACE
72
    CUDNN::cudnn 
cyanguwa's avatar
cyanguwa committed
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
110
111
112
113

if(CUDNN_MAJOR_VERSION EQUAL 8)
    find_cudnn_library(cudnn_adv_infer)
    find_cudnn_library(cudnn_adv_train)
    find_cudnn_library(cudnn_cnn_infer)
    find_cudnn_library(cudnn_cnn_train)
    find_cudnn_library(cudnn_ops_infer)
    find_cudnn_library(cudnn_ops_train)

    target_link_libraries(
        CUDNN::cudnn_all
        INTERFACE
        CUDNN::cudnn_adv_train
        CUDNN::cudnn_ops_train
        CUDNN::cudnn_cnn_train
        CUDNN::cudnn_adv_infer
        CUDNN::cudnn_cnn_infer
        CUDNN::cudnn_ops_infer
    )
elseif(CUDNN_MAJOR_VERSION EQUAL 9)
    find_cudnn_library(cudnn_cnn)
    find_cudnn_library(cudnn_adv)
    find_cudnn_library(cudnn_graph)
    find_cudnn_library(cudnn_ops)
    find_cudnn_library(cudnn_engines_runtime_compiled)
    find_cudnn_library(cudnn_engines_precompiled)
    find_cudnn_library(cudnn_heuristic)

    target_link_libraries(
        CUDNN::cudnn_all
        INTERFACE
        CUDNN::cudnn_adv
        CUDNN::cudnn_ops
        CUDNN::cudnn_cnn
        CUDNN::cudnn_graph
        CUDNN::cudnn_engines_runtime_compiled
        CUDNN::cudnn_engines_precompiled
        CUDNN::cudnn_heuristic
    )
endif()