You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

cudnn.cmake 2.9 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. find_package(PkgConfig)
  2. if(${PkgConfig_FOUND})
  3. pkg_check_modules(PC_CUDNN QUIET CUDNN)
  4. endif()
  5. if("${CUDNN_ROOT_DIR}" STREQUAL "" AND NOT "$ENV{CUDNN_ROOT_DIR}" STREQUAL "")
  6. set(CUDNN_ROOT_DIR $ENV{CUDNN_ROOT_DIR})
  7. endif()
  8. if(MGE_CUDA_USE_STATIC AND NOT MGE_WITH_CUDNN_SHARED)
  9. find_library(CUDNN_LIBRARY
  10. NAMES libcudnn_static.a cudnn.lib
  11. PATHS ${ALTER_LD_LIBRARY_PATHS} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX}
  12. HINTS ${ALTER_LIBRARY_PATHS}
  13. PATH_SUFFIXES lib lib64
  14. DOC "CUDNN library." )
  15. else()
  16. find_library(CUDNN_LIBRARY
  17. NAMES libcudnn.so libcudnn.dylib cudnn64.dll
  18. PATHS ${ALTER_LD_LIBRARY_PATHS} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX}
  19. HINTS ${ALTER_LIBRARY_PATHS}
  20. PATH_SUFFIXES lib lib64
  21. DOC "CUDNN library." )
  22. endif()
  23. if(CUDNN_LIBRARY STREQUAL "CUDNN_LIBRARY-NOTFOUND")
  24. message(FATAL_ERROR "Can not find CuDNN Library, please refer to scripts/cmake-build/BUILD_README.md to init CUDNN env")
  25. endif()
  26. get_filename_component(__found_cudnn_root ${CUDNN_LIBRARY}/../.. REALPATH)
  27. find_path(CUDNN_INCLUDE_DIR
  28. NAMES cudnn.h
  29. HINTS $ENV{PC_CUDNN_INCLUDE_DIRS} ${CUDNN_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE} ${__found_cudnn_root}
  30. PATH_SUFFIXES include
  31. DOC "Path to CUDNN include directory." )
  32. if(CUDNN_INCLUDE_DIR STREQUAL "CUDNN_INCLUDE_DIR-NOTFOUND")
  33. message(FATAL_ERROR "Can not find CuDNN INCLUDE, please refer to scripts/cmake-build/BUILD_README.md to init CUDNN env")
  34. endif()
  35. if(EXISTS ${CUDNN_INCLUDE_DIR}/cudnn_version.h)
  36. file(READ ${CUDNN_INCLUDE_DIR}/cudnn_version.h CUDNN_VERSION_FILE_CONTENTS)
  37. else()
  38. file(READ ${CUDNN_INCLUDE_DIR}/cudnn.h CUDNN_VERSION_FILE_CONTENTS)
  39. endif()
  40. string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)"
  41. CUDNN_MAJOR_VERSION "${CUDNN_VERSION_FILE_CONTENTS}")
  42. string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1"
  43. CUDNN_MAJOR_VERSION "${CUDNN_MAJOR_VERSION}")
  44. string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)"
  45. CUDNN_MINOR_VERSION "${CUDNN_VERSION_FILE_CONTENTS}")
  46. string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1"
  47. CUDNN_MINOR_VERSION "${CUDNN_MINOR_VERSION}")
  48. string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)"
  49. CUDNN_PATCH_VERSION "${CUDNN_VERSION_FILE_CONTENTS}")
  50. string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1"
  51. CUDNN_PATCH_VERSION "${CUDNN_PATCH_VERSION}")
  52. set(CUDNN_VERSION ${CUDNN_MAJOR_VERSION}.${CUDNN_MINOR_VERSION}.${CUDNN_PATCH_VERSION})
  53. if(MGE_CUDA_USE_STATIC)
  54. add_library(libcudnn STATIC IMPORTED)
  55. else()
  56. add_library(libcudnn SHARED IMPORTED)
  57. endif()
  58. set_target_properties(libcudnn PROPERTIES
  59. IMPORTED_LOCATION ${CUDNN_LIBRARY}
  60. INTERFACE_INCLUDE_DIRECTORIES ${CUDNN_INCLUDE_DIR})
  61. message(STATUS "Found CuDNN: ${__found_cudnn_root} (found version: ${CUDNN_VERSION})")