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 3.2 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. message(STATUS "CUDNN ROOT: ${CUDNN_ROOT_DIR}")
  9. if(MGE_CUDA_USE_STATIC AND NOT MGE_WITH_CUDNN_SHARED)
  10. find_library(
  11. CUDNN_LIBRARY
  12. NAMES libcudnn_static.a cudnn.lib
  13. PATHS ${ALTER_LD_LIBRARY_PATHS} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS}
  14. ${CMAKE_INSTALL_PREFIX}
  15. HINTS ${ALTER_LIBRARY_PATHS}
  16. PATH_SUFFIXES lib lib64 lib/x64
  17. DOC "CUDNN library.")
  18. else()
  19. if(MSVC)
  20. set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
  21. endif()
  22. find_library(
  23. CUDNN_LIBRARY
  24. NAMES libcudnn.so libcudnn.dylib cudnn64_8.dll cudnn.dll cudnn64_8 cudnn
  25. PATHS ${ALTER_LD_LIBRARY_PATHS} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS}
  26. ${CMAKE_INSTALL_PREFIX}
  27. HINTS ${ALTER_LIBRARY_PATHS}
  28. PATH_SUFFIXES lib lib64 bin
  29. DOC "CUDNN library.")
  30. endif()
  31. if(CUDNN_LIBRARY STREQUAL "CUDNN_LIBRARY-NOTFOUND")
  32. message(
  33. FATAL_ERROR
  34. "Can not find CuDNN Library, please refer to scripts/cmake-build/BUILD_README.md to init CUDNN env"
  35. )
  36. endif()
  37. get_filename_component(__found_cudnn_root ${CUDNN_LIBRARY}/../.. REALPATH)
  38. find_path(
  39. CUDNN_INCLUDE_DIR
  40. NAMES cudnn.h
  41. HINTS $ENV{PC_CUDNN_INCLUDE_DIRS} ${CUDNN_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE}
  42. ${__found_cudnn_root}
  43. PATH_SUFFIXES include
  44. DOC "Path to CUDNN include directory.")
  45. if(CUDNN_INCLUDE_DIR STREQUAL "CUDNN_INCLUDE_DIR-NOTFOUND")
  46. message(
  47. FATAL_ERROR
  48. "Can not find CuDNN INCLUDE, please refer to scripts/cmake-build/BUILD_README.md to init CUDNN env"
  49. )
  50. endif()
  51. if(EXISTS ${CUDNN_INCLUDE_DIR}/cudnn_version.h)
  52. file(READ ${CUDNN_INCLUDE_DIR}/cudnn_version.h CUDNN_VERSION_FILE_CONTENTS)
  53. else()
  54. file(READ ${CUDNN_INCLUDE_DIR}/cudnn.h CUDNN_VERSION_FILE_CONTENTS)
  55. endif()
  56. string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)" CUDNN_MAJOR_VERSION
  57. "${CUDNN_VERSION_FILE_CONTENTS}")
  58. string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1" CUDNN_MAJOR_VERSION
  59. "${CUDNN_MAJOR_VERSION}")
  60. string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)" CUDNN_MINOR_VERSION
  61. "${CUDNN_VERSION_FILE_CONTENTS}")
  62. string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1" CUDNN_MINOR_VERSION
  63. "${CUDNN_MINOR_VERSION}")
  64. string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)" CUDNN_PATCH_VERSION
  65. "${CUDNN_VERSION_FILE_CONTENTS}")
  66. string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1" CUDNN_PATCH_VERSION
  67. "${CUDNN_PATCH_VERSION}")
  68. set(CUDNN_VERSION ${CUDNN_MAJOR_VERSION}.${CUDNN_MINOR_VERSION}.${CUDNN_PATCH_VERSION})
  69. if(MGE_CUDA_USE_STATIC)
  70. add_library(libcudnn STATIC IMPORTED)
  71. else()
  72. add_library(libcudnn SHARED IMPORTED)
  73. endif()
  74. set_target_properties(
  75. libcudnn PROPERTIES IMPORTED_LOCATION ${CUDNN_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES
  76. ${CUDNN_INCLUDE_DIR})
  77. message(STATUS "Found CuDNN: ${__found_cudnn_root} (found version: ${CUDNN_VERSION})")