| set(CUDNN_ROOT "" CACHE PATH "CUDNN root folder") |
| set(CUDNN_LIB_NAME "libcudnn.so") |
|
|
| find_path(CUDNN_INCLUDE cudnn.h |
| PATHS ${CUDNN_ROOT} $ENV{CUDNN_ROOT} ${CUDA_TOOLKIT_INCLUDE} |
| DOC "Path to cuDNN include directory." ) |
|
|
| get_filename_component(__libpath_hist ${CUDA_CUDART_LIBRARY} PATH) |
| find_library(CUDNN_LIBRARY NAMES ${CUDNN_LIB_NAME} |
| PATHS ${CUDNN_ROOT} $ENV{CUDNN_ROOT} ${CUDNN_INCLUDE} ${__libpath_hist} ${__libpath_hist}/../lib |
| DOC "Path to cuDNN library.") |
|
|
| if(CUDNN_INCLUDE AND CUDNN_LIBRARY) |
| set(HAVE_CUDNN TRUE) |
| set(CUDNN_FOUND TRUE) |
|
|
| if(EXISTS "${CUDNN_INCLUDE}/cudnn_version.h") |
| file(READ ${CUDNN_INCLUDE}/cudnn_version.h CUDNN_VERSION_FILE_CONTENTS) |
| else() |
| file(READ ${CUDNN_INCLUDE}/cudnn.h CUDNN_VERSION_FILE_CONTENTS) |
| endif() |
|
|
| |
| string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)" |
| CUDNN_VERSION_MAJOR "${CUDNN_VERSION_FILE_CONTENTS}") |
| string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1" |
| CUDNN_VERSION_MAJOR "${CUDNN_VERSION_MAJOR}") |
| string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)" |
| CUDNN_VERSION_MINOR "${CUDNN_VERSION_FILE_CONTENTS}") |
| string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1" |
| CUDNN_VERSION_MINOR "${CUDNN_VERSION_MINOR}") |
| string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)" |
| CUDNN_VERSION_PATCH "${CUDNN_VERSION_FILE_CONTENTS}") |
| string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1" |
| CUDNN_VERSION_PATCH "${CUDNN_VERSION_PATCH}") |
|
|
| if (NOT CUDNN_VERSION_MAJOR) |
| set(CUDNN_VERSION "???") |
| else () |
| set(CUDNN_VERSION "${CUDNN_VERSION_MAJOR}.${CUDNN_VERSION_MINOR}.${CUDNN_VERSION_PATCH}") |
| endif() |
|
|
| message(STATUS "Found cuDNN: ver. ${CUDNN_VERSION} found (include: ${CUDNN_INCLUDE}, library: ${CUDNN_LIBRARY})") |
|
|
| string(COMPARE LESS "${CUDNN_VERSION_MAJOR}" 3 cuDNNVersionIncompatible) |
| if(cuDNNVersionIncompatible) |
| message(FATAL_ERROR "cuDNN version >3 is required.") |
| endif() |
|
|
| set(CUDNN_VERSION "${CUDNN_VERSION}") |
| mark_as_advanced(CUDNN_INCLUDE CUDNN_LIBRARY CUDNN_ROOT) |
| else(CUDNN_INCLUDE AND CUDNN_LIBRARY) |
| message(STATUS "cuDNN not found") |
| endif() |
|
|