aboutsummaryrefslogtreecommitdiff
path: root/ports/cudnn
diff options
context:
space:
mode:
authorStefano Sinigardi <stesinigardi@hotmail.com>2019-09-24 21:58:38 +0200
committerPhil Christensen <philc@microsoft.com>2019-09-24 12:58:38 -0700
commit3532a7cf3cb81ad4c56775a2b02039ee77a96eb2 (patch)
tree4b75fb74ca896434453d3bcd2f8420254ba1d15c /ports/cudnn
parente9047ef77133cde979dc9594d089e0109702675e (diff)
downloadvcpkg-3532a7cf3cb81ad4c56775a2b02039ee77a96eb2.tar.gz
vcpkg-3532a7cf3cb81ad4c56775a2b02039ee77a96eb2.zip
[cudnn] add port and enable it in darknet (#7536)
* [cudnn] add port and enable it in darknet * [OpenCV4] fix ffmpeg feature on uwp * [darknet] enable integration with cuda/cudnn also with opencv3 * [darknet] update to latest revision
Diffstat (limited to 'ports/cudnn')
-rw-r--r--ports/cudnn/CONTROL4
-rw-r--r--ports/cudnn/FindCUDNN.cmake90
-rw-r--r--ports/cudnn/portfile.cmake62
-rw-r--r--ports/cudnn/vcpkg-cmake-wrapper.cmake8
4 files changed, 164 insertions, 0 deletions
diff --git a/ports/cudnn/CONTROL b/ports/cudnn/CONTROL
new file mode 100644
index 000000000..cc8019b5b
--- /dev/null
+++ b/ports/cudnn/CONTROL
@@ -0,0 +1,4 @@
+Source: cudnn
+Version: 7.6
+Description: NVIDIA's cuDNN deep neural network acceleration library
+Build-Depends: cuda
diff --git a/ports/cudnn/FindCUDNN.cmake b/ports/cudnn/FindCUDNN.cmake
new file mode 100644
index 000000000..1b6916577
--- /dev/null
+++ b/ports/cudnn/FindCUDNN.cmake
@@ -0,0 +1,90 @@
+# Distributed under the OSI-approved BSD 3-Clause License.
+
+#.rst:
+# FindCUDNN
+# --------
+#
+# Result Variables
+# ^^^^^^^^^^^^^^^^
+#
+# This module will set the following variables in your project::
+#
+# ``CUDNN_FOUND``
+# True if CUDNN found on the local system
+#
+# ``CUDNN_INCLUDE_DIRS``
+# Location of CUDNN header files.
+#
+# ``CUDNN_LIBRARIES``
+# The CUDNN libraries.
+#
+# ``CuDNN::CuDNN``
+# The CUDNN target
+#
+
+include(FindPackageHandleStandardArgs)
+
+if(NOT CUDNN_INCLUDE_DIR)
+ find_path(CUDNN_INCLUDE_DIR cudnn.h
+ HINTS ${CUDA_HOME} ${CUDA_TOOLKIT_ROOT_DIR} $ENV{cudnn} $ENV{CUDNN}
+ PATH_SUFFIXES cuda/include include)
+endif()
+
+if(NOT CUDNN_LIBRARY)
+ find_library(CUDNN_LIBRARY cudnn
+ HINTS ${CUDA_HOME} ${CUDA_TOOLKIT_ROOT_DIR} $ENV{cudnn} $ENV{CUDNN}
+ PATH_SUFFIXES lib lib64 cuda/lib cuda/lib64 lib/x64)
+endif()
+
+if(EXISTS "${CUDNN_INCLUDE_DIR}/cudnn.h")
+ file(READ ${CUDNN_INCLUDE_DIR}/cudnn.h CUDNN_HEADER_CONTENTS)
+ string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)"
+ CUDNN_VERSION_MAJOR "${CUDNN_HEADER_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_HEADER_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_HEADER_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()
+endif()
+
+set(CUDNN_INCLUDE_DIRS ${CUDNN_INCLUDE_DIR})
+set(CUDNN_LIBRARIES ${CUDNN_LIBRARY})
+mark_as_advanced(CUDNN_LIBRARY CUDNN_INCLUDE_DIR)
+
+find_package_handle_standard_args(CUDNN
+ REQUIRED_VARS CUDNN_INCLUDE_DIR CUDNN_LIBRARY
+ VERSION_VAR CUDNN_VERSION
+)
+
+if(WIN32)
+ set(CUDNN_DLL_DIR ${CUDNN_INCLUDE_DIR})
+ list(TRANSFORM CUDNN_DLL_DIR APPEND "/../bin")
+ find_file(CUDNN_LIBRARY_DLL NAMES cudnn64_${CUDNN_VERSION_MAJOR}.dll PATHS ${CUDNN_DLL_DIR})
+endif()
+
+if( CUDNN_FOUND AND NOT TARGET CuDNN::CuDNN )
+ if( EXISTS "${CUDNN_LIBRARY_DLL}" )
+ add_library( CuDNN::CuDNN SHARED IMPORTED )
+ set_target_properties( CuDNN::CuDNN PROPERTIES
+ IMPORTED_LOCATION "${CUDNN_LIBRARY_DLL}"
+ IMPORTED_IMPLIB "${CUDNN_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${CUDNN_INCLUDE_DIR}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
+ else()
+ add_library( CuDNN::CuDNN UNKNOWN IMPORTED )
+ set_target_properties( CuDNN::CuDNN PROPERTIES
+ IMPORTED_LOCATION "${CUDNN_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${CUDNN_INCLUDE_DIR}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
+ endif()
+endif()
diff --git a/ports/cudnn/portfile.cmake b/ports/cudnn/portfile.cmake
new file mode 100644
index 000000000..77154399c
--- /dev/null
+++ b/ports/cudnn/portfile.cmake
@@ -0,0 +1,62 @@
+include(vcpkg_common_functions)
+
+if(VCPKG_TARGET_IS_UWP OR VCPKG_TARGET_IS_OSX)
+ message(FATAL_ERROR "This port is only for Windows Desktop or Linux")
+endif()
+
+if(NOT VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ message(FATAL_ERROR "This port is only for x64 architectures")
+endif()
+
+vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY ONLY_DYNAMIC_CRT)
+
+#note: this port must be kept in sync with CUDA port: every time one is upgraded, the other must be too
+set(CUDNN_VERSION "7.6.0")
+set(CUDNN_FULL_VERSION "${CUDNN_VERSION}-cuda10.1_0")
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ set(CUDNN_DOWNLOAD_LINK "https://anaconda.org/anaconda/cudnn/${CUDNN_VERSION}/download/win-64/cudnn-${CUDNN_FULL_VERSION}.tar.bz2")
+ set(SHA512_CUDNN "c0218407e7bc2b3c1497f1709dedee345bc619603ec0efa094e392888c0d513d645a1241501f9b406f688defa811578f36b49f456eb533535ecd526702156eea")
+ set(CUDNN_OS "windows")
+elseif(VCPKG_TARGET_IS_LINUX)
+ set(CUDNN_DOWNLOAD_LINK "https://anaconda.org/anaconda/cudnn/${CUDNN_VERSION}/download/linux-64/cudnn-${CUDNN_FULL_VERSION}.tar.bz2")
+ set(SHA512_CUDNN "128ccdc0ec24a1133947d7a8eff6cd8edc224134fa5065a11a1a01a99dbaee7d799db1454e0a59e411cf6db244f8c2420c160488a5dd4830addc3578b2011e3d")
+ set(CUDNN_OS "linux")
+endif()
+
+vcpkg_download_distfile(ARCHIVE
+ URLS ${CUDNN_DOWNLOAD_LINK}
+ FILENAME "cudnn-${CUDNN_FULL_VERSION}-${CUDNN_OS}.tar.bz2"
+ SHA512 ${SHA512_CUDNN}
+)
+
+vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE ${ARCHIVE}
+ NO_REMOVE_ONE_LEVEL
+)
+
+string(REPLACE "." ";" VERSION_LIST ${CUDNN_VERSION})
+list(GET VERSION_LIST 0 CUDNN_VERSION_MAJOR)
+list(GET VERSION_LIST 1 CUDNN_VERSION_MINOR)
+list(GET VERSION_LIST 2 CUDNN_VERSION_PATCH)
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ file(INSTALL "${SOURCE_PATH}/Library/include/cudnn.h" DESTINATION ${CURRENT_PACKAGES_DIR}/include)
+ file(INSTALL "${SOURCE_PATH}/Library/lib/x64/cudnn.lib" DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+ file(INSTALL "${SOURCE_PATH}/Library/bin/cudnn64_${CUDNN_VERSION_MAJOR}.dll" DESTINATION ${CURRENT_PACKAGES_DIR}/bin)
+ file(INSTALL "${SOURCE_PATH}/Library/lib/x64/cudnn.lib" DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
+ file(INSTALL "${SOURCE_PATH}/Library/bin/cudnn64_${CUDNN_VERSION_MAJOR}.dll" DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin)
+elseif(VCPKG_TARGET_IS_LINUX)
+ file(INSTALL "${SOURCE_PATH}/include/cudnn.h" DESTINATION ${CURRENT_PACKAGES_DIR}/include)
+ file(INSTALL "${SOURCE_PATH}/lib/libcudnn.so.${CUDNN_VERSION}" DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+ file(INSTALL "${SOURCE_PATH}/lib/libcudnn.so.${CUDNN_VERSION_MAJOR}" DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+ file(INSTALL "${SOURCE_PATH}/lib/libcudnn.so" DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
+ file(INSTALL "${SOURCE_PATH}/lib/libcudnn.so.${CUDNN_VERSION}" DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
+ file(INSTALL "${SOURCE_PATH}/lib/libcudnn.so.${CUDNN_VERSION_MAJOR}" DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
+ file(INSTALL "${SOURCE_PATH}/lib/libcudnn.so" DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
+endif()
+
+file(INSTALL "${SOURCE_PATH}/info/LICENSE.txt" DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/FindCUDNN.cmake" DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
diff --git a/ports/cudnn/vcpkg-cmake-wrapper.cmake b/ports/cudnn/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 000000000..bbda1d04d
--- /dev/null
+++ b/ports/cudnn/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,8 @@
+set(CUDNN_PREV_MODULE_PATH ${CMAKE_MODULE_PATH})
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
+
+if(NOT CUDNN_LIBRARIES)
+ _find_package(${ARGS})
+endif()
+
+set(CMAKE_MODULE_PATH ${CUDNN_PREV_MODULE_PATH})