diff --git a/ports/cuda/CONTROL b/ports/cuda/CONTROL index 271869e8b..ba5208c2f 100644 --- a/ports/cuda/CONTROL +++ b/ports/cuda/CONTROL @@ -1,3 +1,3 @@ Source: cuda -Version: 9.0 -Description: A parallel computing platform and programming model \ No newline at end of file +Version: 10.1 +Description: A parallel computing platform and programming model diff --git a/ports/cuda/portfile.cmake b/ports/cuda/portfile.cmake index 7cc1773db..63e3f9cee 100644 --- a/ports/cuda/portfile.cmake +++ b/ports/cuda/portfile.cmake @@ -1,4 +1,4 @@ -# Due to the complexity involved, this package doesn't install CUDA. It instead verifies that CUDA is installed. +# This package doesn't install CUDA. It instead verifies that CUDA is installed. # Other packages can depend on this package to declare a dependency on CUDA. # If this package is installed, we assume that CUDA is properly installed. @@ -9,8 +9,7 @@ find_program(NVCC ENV CUDA_BIN_PATH PATH_SUFFIXES bin bin64 DOC "Toolkit location." - NO_DEFAULT_PATH - ) + NO_DEFAULT_PATH) set(error_code 1) if (NVCC) @@ -20,12 +19,12 @@ if (NVCC) RESULT_VARIABLE error_code) endif() -set(CUDA_REQUIRED_VERSION "V9.0.0") +#note: this port must be kept in sync with CUDNN port: every time one is upgraded, the other must be too +set(CUDA_REQUIRED_VERSION "V10.1.0") if (error_code) - message(FATAL_ERROR "Could not find CUDA. Before continuing, please download and install CUDA (${CUDA_REQUIRED_VERSION} or higher) from:" - "\n https://developer.nvidia.com/cuda-downloads\n" - "\nAlso ensure vcpkg has been rebuilt with the latest version (v0.0.104 or later)") + message(FATAL_ERROR "Could not find CUDA. Before continuing, please download and install CUDA (${CUDA_REQUIRED_VERSION} or higher) from:" + "\n https://developer.nvidia.com/cuda-downloads\n") endif() # Sample output: @@ -36,12 +35,12 @@ endif() string(REGEX MATCH "V([0-9]+)\\.([0-9]+)\\.([0-9]+)" CUDA_VERSION ${NVCC_OUTPUT}) message(STATUS "Found CUDA ${CUDA_VERSION}") set(CUDA_VERSION_MAJOR ${CMAKE_MATCH_1}) -#set(CUDA_VERSION_MINOR ${CMAKE_MATCH_2}) -#set(CUDA_VERSION_PATCH ${CMAKE_MATCH_3}) +set(CUDA_VERSION_MINOR ${CMAKE_MATCH_2}) +set(CUDA_VERSION_PATCH ${CMAKE_MATCH_3}) -if (CUDA_VERSION_MAJOR LESS 9) - message(FATAL_ERROR "CUDA ${CUDA_VERSION} but ${CUDA_REQUIRED_VERSION} is required. Please download and install a more recent version of CUDA from:" +if (CUDA_VERSION_MAJOR LESS 10 AND CUDA_VERSION_MINOR LESS 1) + message(FATAL_ERROR "CUDA ${CUDA_VERSION} found, but ${CUDA_REQUIRED_VERSION} is required. Please download and install a more recent version of CUDA from:" "\n https://developer.nvidia.com/cuda-downloads\n") endif() -SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) \ No newline at end of file +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) 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}) diff --git a/ports/darknet/CONTROL b/ports/darknet/CONTROL index 6979c310c..a09843902 100644 --- a/ports/darknet/CONTROL +++ b/ports/darknet/CONTROL @@ -1,23 +1,38 @@ Source: darknet -Version: 0.2.5-6 +Version: 0.2.5.1 Description: Darknet is an open source neural network framework written in C and CUDA. You only look once (YOLO) is a state-of-the-art, real-time object detection system, best example of darknet functionalities. Build-Depends: pthreads (windows), stb -Default-Features: weights - -Feature: opencv -Build-Depends: opencv[ffmpeg] -Description: Build darknet with support for OpenCV Feature: cuda Build-Depends: cuda Description: Build darknet with support for CUDA +Feature: cudnn +Build-Depends: darknet[cuda] +Description: Build darknet with support for CUDNN + +Feature: opencv-base +Build-Depends: opencv[ffmpeg] +Description: Build darknet with support for OpenCV + +Feature: opencv-cuda +Build-Depends: opencv[ffmpeg], opencv[cuda] +Description: Build darknet with support for a CUDA-enabled OpenCV + +Feature: opencv3-base +Build-Depends: opencv3[ffmpeg] +Description: Build darknet with support for OpenCV3 + +Feature: opencv3-cuda +Build-Depends: opencv3[ffmpeg], opencv3[cuda] +Description: Build darknet with support for a CUDA-enabled OpenCV3 + Feature: weights Description: Download pre-built weights for test Feature: weights-train Description: Download pre-built weights for training -Feature: opencv-cuda -Build-Depends: darknet[opencv], darknet[cuda] -Description: Build darknet with support for a CUDA-enabled OpenCV +Feature: full +Build-Depends: darknet[opencv-cuda], darknet[cudnn], darknet[weights], darknet[weights-train] +Description: Build darknet fully-featured diff --git a/ports/darknet/portfile.cmake b/ports/darknet/portfile.cmake index a18c97a91..6cd1c781e 100644 --- a/ports/darknet/portfile.cmake +++ b/ports/darknet/portfile.cmake @@ -11,15 +11,41 @@ include(vcpkg_common_functions) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO AlexeyAB/darknet - REF b2d795e34e1d734d0f451ce9847a0e6b68c32351 - SHA512 1964aa0d768d37fc614983718aede8b29e562fd8120116b7cd7a1331bb8a3256e28c01cdff6f19bbe7b9d6289b3292188205f362bae38393cee33d8a2e6a5273 + REF 35346d2ef80dc46b9eb4fba57da1737a49f4743e + SHA512 a905a5e42c4ecfdf2b8276fc565b82e30c97e249c0530b403d149a8e6276bb3852a956869c21efbe092799f3743cf529a577fb03275cfcfcc8322b92e9de0ff6 HEAD_REF master ) -vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS - "cuda" ENABLE_CUDA - "opencv" ENABLE_OPENCV -) +# enable CUDA inside DARKNET +set(ENABLE_CUDA OFF) +if("cuda" IN_LIST FEATURES) + set(ENABLE_CUDA ON) +endif() + +set(ENABLE_OPENCV OFF) +# enable OPENCV (basic version) inside DARKNET +if("opencv-base" IN_LIST FEATURES) + set(ENABLE_OPENCV ON) +endif() +if("opencv3-base" IN_LIST FEATURES) + set(ENABLE_OPENCV ON) +endif() + +# enable OPENCV (with its own CUDA feature enabled) inside DARKNET +# (note: this does not mean that DARKNET itself will have CUDA support since by design it is independent, to have it you must require both opencv-cuda and cuda features!) +# DARKNET will be automatically able to distinguish an OpenCV that is built with or without CUDA support. +if("opencv-cuda" IN_LIST FEATURES) + set(ENABLE_OPENCV ON) +endif() +if("opencv3-cuda" IN_LIST FEATURES) + set(ENABLE_OPENCV ON) +endif() + +# enable CUDNN inside DARKNET (which depends on the "cuda" feature by design) +set(ENABLE_CUDNN OFF) +if("cudnn" IN_LIST FEATURES) + set(ENABLE_CUDNN ON) +endif() if ("cuda" IN_LIST FEATURES) if (NOT VCPKG_CMAKE_SYSTEM_NAME AND NOT ENV{CUDACXX}) @@ -67,15 +93,18 @@ endif() #make sure we don't use any integrated pre-built library nor any unnecessary CMake module file(REMOVE_RECURSE ${SOURCE_PATH}/3rdparty) file(REMOVE ${SOURCE_PATH}/cmake/Modules/FindPThreads_windows.cmake) +file(REMOVE ${SOURCE_PATH}/cmake/Modules/FindCUDNN.cmake) vcpkg_configure_cmake( SOURCE_PATH ${SOURCE_PATH} - DISABLE_PARALLEL_CONFIGURE #since darknet configures a file inside source tree, it is better to disable parallel configure + DISABLE_PARALLEL_CONFIGURE PREFER_NINJA OPTIONS -DINSTALL_BIN_DIR:STRING=bin -DINSTALL_LIB_DIR:STRING=lib - ${FEATURE_OPTIONS} + -DENABLE_CUDA=${ENABLE_CUDA} + -DENABLE_CUDNN=${ENABLE_CUDNN} + -DENABLE_OPENCV=${ENABLE_OPENCV} ) vcpkg_install_cmake() @@ -91,15 +120,15 @@ file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/bin/uselib${EXECUTABLE_SUFFIX}) if(EXISTS ${CURRENT_PACKAGES_DIR}/debug/bin/uselib_track${EXECUTABLE_SUFFIX}) file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/bin/uselib_track${EXECUTABLE_SUFFIX}) endif() -file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/darknet/) -file(RENAME ${CURRENT_PACKAGES_DIR}/bin/darknet${EXECUTABLE_SUFFIX} ${CURRENT_PACKAGES_DIR}/tools/darknet/darknet${EXECUTABLE_SUFFIX}) -file(RENAME ${CURRENT_PACKAGES_DIR}/bin/uselib${EXECUTABLE_SUFFIX} ${CURRENT_PACKAGES_DIR}/tools/darknet/uselib${EXECUTABLE_SUFFIX}) +file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/${PORT}) +file(RENAME ${CURRENT_PACKAGES_DIR}/bin/darknet${EXECUTABLE_SUFFIX} ${CURRENT_PACKAGES_DIR}/tools/${PORT}/darknet${EXECUTABLE_SUFFIX}) +file(RENAME ${CURRENT_PACKAGES_DIR}/bin/uselib${EXECUTABLE_SUFFIX} ${CURRENT_PACKAGES_DIR}/tools/${PORT}/uselib${EXECUTABLE_SUFFIX}) if(EXISTS ${CURRENT_PACKAGES_DIR}/bin/uselib_track${EXECUTABLE_SUFFIX}) - file(RENAME ${CURRENT_PACKAGES_DIR}/bin/uselib_track${EXECUTABLE_SUFFIX} ${CURRENT_PACKAGES_DIR}/tools/darknet/uselib_track${EXECUTABLE_SUFFIX}) + file(RENAME ${CURRENT_PACKAGES_DIR}/bin/uselib_track${EXECUTABLE_SUFFIX} ${CURRENT_PACKAGES_DIR}/tools/${PORT}/uselib_track${EXECUTABLE_SUFFIX}) endif() -file(COPY ${SOURCE_PATH}/cfg DESTINATION ${CURRENT_PACKAGES_DIR}/tools/darknet) -file(COPY ${SOURCE_PATH}/data DESTINATION ${CURRENT_PACKAGES_DIR}/tools/darknet) -vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/darknet) +file(COPY ${SOURCE_PATH}/cfg DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) +file(COPY ${SOURCE_PATH}/data DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) +vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}) if(VCPKG_LIBRARY_LINKAGE STREQUAL static) file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin) @@ -107,21 +136,19 @@ endif() vcpkg_fixup_cmake_targets() -file(COPY ${SOURCE_PATH}/cmake/Modules/FindCUDNN.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/darknet) - file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) -file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/darknet RENAME copyright) +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) if("weights" IN_LIST FEATURES) - file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/yolov3.weights DESTINATION ${CURRENT_PACKAGES_DIR}/tools/darknet) - file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/yolov2.weights DESTINATION ${CURRENT_PACKAGES_DIR}/tools/darknet) - file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/yolov3-tiny.weights DESTINATION ${CURRENT_PACKAGES_DIR}/tools/darknet) - file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/yolov2-tiny.weights DESTINATION ${CURRENT_PACKAGES_DIR}/tools/darknet) + file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/yolov3.weights DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) + file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/yolov2.weights DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) + file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/yolov3-tiny.weights DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) + file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/yolov2-tiny.weights DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) endif() if("weights-train" IN_LIST FEATURES) - file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/darknet53.conv.74 DESTINATION ${CURRENT_PACKAGES_DIR}/tools/darknet) - file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/darknet19_448.conv.23 DESTINATION ${CURRENT_PACKAGES_DIR}/tools/darknet) + file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/darknet53.conv.74 DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) + file(COPY ${VCPKG_ROOT_DIR}/downloads/darknet-cache/darknet19_448.conv.23 DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}) endif() diff --git a/ports/opencv3/0009-fix-uwp.patch b/ports/opencv3/0009-fix-uwp.patch index b57e49ea1..cba3963dc 100644 --- a/ports/opencv3/0009-fix-uwp.patch +++ b/ports/opencv3/0009-fix-uwp.patch @@ -11,6 +11,19 @@ index c2fda8f..3f7dfdc 100644 # removing APPCONTAINER from modules to run from console # in case of usual starting of WinRT test apps output is missing # so starting of console version w/o APPCONTAINER is required to get test results +diff --git a/modules/core/src/utils/datafile.cpp b/modules/core/src/utils/datafile.cpp +index f1107b0..c613ca2 100644 +--- a/modules/core/src/utils/datafile.cpp ++++ b/modules/core/src/utils/datafile.cpp +@@ -108,7 +108,7 @@ static cv::String getModuleLocation(const void* addr) + CV_UNUSED(addr); + #ifdef _WIN32 + HMODULE m = 0; +-#if _WIN32_WINNT >= 0x0501 ++#if (_WIN32_WINNT >= 0x0501) && (!WINRT_STORE) + ::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, + reinterpret_cast(addr), + &m); diff --git a/modules/highgui/include/opencv2/highgui/highgui_winrt.hpp b/modules/highgui/include/opencv2/highgui/highgui_winrt.hpp index f4147f3..b92efdd 100644 --- a/modules/highgui/include/opencv2/highgui/highgui_winrt.hpp diff --git a/ports/opencv3/CONTROL b/ports/opencv3/CONTROL index 16776381d..10a02db66 100644 --- a/ports/opencv3/CONTROL +++ b/ports/opencv3/CONTROL @@ -12,7 +12,7 @@ Feature: flann Description: opencv_flann module Feature: contrib -Build-Depends: hdf5 (!uwp) +Build-Depends: opencv3[dnn], hdf5 (!uwp) Description: opencv_contrib module Feature: cuda @@ -20,6 +20,7 @@ Build-Depends: opencv3[contrib], cuda Description: CUDA support for opencv Feature: dnn +Build-Depends: opencv3[flann] Description: Enable dnn module Feature: eigen @@ -53,7 +54,6 @@ Feature: opengl Build-Depends: opengl Description: opengl support for opencv - Feature: ovis Build-Depends: opencv3[contrib], ogre Description: opencv_ovis module @@ -67,7 +67,7 @@ Build-Depends: qt5 Description: Qt GUI support for opencv Feature: sfm -Build-Depends: opencv3[contrib], opencv3[flann], eigen3, glog, gflags, ceres +Build-Depends: opencv3[contrib], eigen3, glog, gflags, ceres Description: opencv_sfm module Feature: tbb diff --git a/ports/opencv3/portfile.cmake b/ports/opencv3/portfile.cmake index 9f1e4788d..bd4f1c4bb 100644 --- a/ports/opencv3/portfile.cmake +++ b/ports/opencv3/portfile.cmake @@ -74,7 +74,18 @@ if("dnn" IN_LIST FEATURES) ) endif() +# Build image quality module when building with 'contrib' feature and not UWP. +set(BUILD_opencv_quality OFF) if("contrib" IN_LIST FEATURES) + if (VCPKG_TARGET_IS_UWP) + set(BUILD_opencv_quality OFF) + message(WARNING "The image quality module (quality) does not build for UWP, the module has been disabled.") + # The hdf module is silently disabled by OpenCVs buildsystem if HDF5 is not detected. + message(WARNING "The hierarchical data format module (hdf) depends on HDF5 which doesn't support UWP, the module has been disabled.") + else() + set(BUILD_opencv_quality CMAKE_DEPENDS_IN_PROJECT_ONLY) + endif() + vcpkg_from_github( OUT_SOURCE_PATH CONTRIB_SOURCE_PATH REPO opencv/opencv_contrib @@ -90,12 +101,6 @@ if("contrib" IN_LIST FEATURES) SHA512 c16e60a6c4bb4de3ab39b876ae3c3f320ea56f69c93e9303bd2dff8760841dcd71be4161fff8bc71e8fe4fe8747fa8465d49d6bd8f5ebcdaea161f4bc2da7c93 ) - vcpkg_download_distfile(TINYDNN_ARCHIVE - URLS "https://github.com/tiny-dnn/tiny-dnn/archive/v1.0.0a3.tar.gz" - FILENAME "opencv-cache/tiny_dnn/adb1c512e09ca2c7a6faef36f9c53e59-v1.0.0a3.tar.gz" - SHA512 5f2c1a161771efa67e85b1fea395953b7744e29f61187ac5a6c54c912fb195b3aef9a5827135c3668bd0eeea5ae04a33cc433e1f6683e2b7955010a2632d168b - ) - function(download_opencv_3rdparty ID COMMIT HASH) if(NOT EXISTS "${DOWNLOADS}/opencv-cache/${ID}/${COMMIT}.stamp") vcpkg_download_distfile(OCV_DOWNLOAD @@ -184,11 +189,38 @@ if(WITH_IPP) endif() set(WITH_MSMF ON) -if(VCPKG_TARGET_IS_UWP) +if(NOT VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_UWP) set(WITH_MSMF OFF) endif() -set(WITH_ZLIB ON) +if (VCPKG_LIBRARY_LINKAGE STREQUAL static) + if (WITH_TBB) + message(WARNING "TBB is currently unsupported in this build configuration, turning it off") + set(WITH_TBB OFF) + endif() + + if (WITH_VTK) + message(WARNING "VTK is currently unsupported in this build configuration, turning it off") + set(WITH_VTK OFF) + endif() + + if (VCPKG_TARGET_IS_WINDOWS AND BUILD_opencv_ovis) + message(WARNING "OVIS is currently unsupported in this build configuration, turning it off") + set(BUILD_opencv_ovis OFF) + endif() +endif() + +if("ffmpeg" IN_LIST FEATURES) + if(VCPKG_TARGET_IS_UWP) + set(VCPKG_C_FLAGS "/sdl- ${VCPKG_C_FLAGS}") + set(VCPKG_CXX_FLAGS "/sdl- ${VCPKG_CXX_FLAGS}") + endif() +endif() + +if("qt" IN_LIST FEATURES) + list(APPEND ADDITIONAL_BUILD_FLAGS "-DCMAKE_AUTOMOC=ON") +endif() + set(BUILD_opencv_line_descriptor ON) set(BUILD_opencv_saliency ON) set(BUILD_opencv_bgsegm ON) @@ -197,14 +229,11 @@ if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm") set(BUILD_opencv_saliency OFF) set(BUILD_opencv_bgsegm OFF) endif() -if (VCPKG_TARGET_IS_UWP) - set(BUILD_opencv_quality OFF) -endif() vcpkg_configure_cmake( PREFER_NINJA SOURCE_PATH ${SOURCE_PATH} - OPTIONS ${FEATURE_OPTIONS} + OPTIONS ###### ocv_options -DOpenCV_INSTALL_BINARIES_PREFIX= -DOPENCV_LIB_INSTALL_PATH=lib @@ -216,63 +245,57 @@ vcpkg_configure_cmake( # Do not build docs/examples -DBUILD_DOCS=OFF -DBUILD_EXAMPLES=OFF - # Do not build integrated libraries, use external ones whenever possible + ###### Disable build 3rd party libs -DBUILD_JASPER=OFF -DBUILD_JPEG=OFF -DBUILD_OPENEXR=OFF - -DBUILD_PACKAGE=OFF - -DBUILD_PERF_TESTS=OFF -DBUILD_PNG=OFF - -DBUILD_PROTOBUF=OFF - -DBUILD_TESTS=OFF -DBUILD_TIFF=OFF -DBUILD_WEBP=OFF - -DBUILD_WITH_DEBUG_INFO=ON - -DBUILD_WITH_STATIC_CRT=${BUILD_WITH_STATIC_CRT} -DBUILD_ZLIB=OFF - # Select which OpenCV modules should be built + ###### Disable build 3rd party components + -DBUILD_PROTOBUF=OFF + ###### OpenCV Build components -DBUILD_opencv_apps=OFF -DBUILD_opencv_bgsegm=${BUILD_opencv_bgsegm} -DBUILD_opencv_line_descriptor=${BUILD_opencv_line_descriptor} - -DBUILD_opencv_ovis=${BUILD_opencv_ovis} - -DBUILD_opencv_python2=OFF - -DBUILD_opencv_python3=OFF -DBUILD_opencv_saliency=${BUILD_opencv_saliency} - # PROTOBUF + -DBUILD_PACKAGE=OFF + -DBUILD_PERF_TESTS=OFF + -DBUILD_TESTS=OFF + -DBUILD_WITH_DEBUG_INFO=ON + -DBUILD_WITH_STATIC_CRT=${BUILD_WITH_STATIC_CRT} + ###### PROTOBUF -DPROTOBUF_UPDATE_FILES=ON -DUPDATE_PROTO_FILES=ON - -DWITH_PROTOBUF=ON # CMAKE -DCMAKE_DISABLE_FIND_PACKAGE_Git=ON -DCMAKE_DISABLE_FIND_PACKAGE_JNI=ON # ENABLE -DENABLE_CXX11=ON - -DENABLE_PYLINT=OFF - -DOPENCV_ENABLE_NONFREE=${OPENCV_ENABLE_NONFREE} - # INSTALL - -DINSTALL_FORCE_UNIX_PATHS=ON - -DINSTALL_LICENSE=OFF - # OPENCV - -DOPENCV_CONFIG_INSTALL_PATH=share/opencv - -DOPENCV_OTHER_INSTALL_PATH=share/opencv + ###### OPENCV vars "-DOPENCV_DOWNLOAD_PATH=${DOWNLOADS}/opencv-cache" ${BUILD_WITH_CONTRIB_FLAG} -DOPENCV_OTHER_INSTALL_PATH=share/opencv - # WITH - ${FEATURE_OPPTIONS} + ###### customized properties + ## Options from vcpkg_check_features() + ${FEATURE_OPTIONS} + -DHALIDE_ROOT_DIR=${CURRENT_INSTALLED_DIR} -DWITH_IPP=${WITH_IPP} - -DWITH_LAPACK=OFF -DWITH_MATLAB=OFF -DWITH_MSMF=${WITH_MSMF} + -DWITH_PROTOBUF=ON -DWITH_OPENCLAMDBLAS=OFF -DWITH_TBB=${WITH_TBB} -DWITH_VTK=${WITH_VTK} - -DWITH_ZLIB=${WITH_ZLIB} - -DCURRENT_INSTALLED_DIR=${CURRENT_INSTALLED_DIR} - -DHALIDE_ROOT_DIR=${CURRENT_INSTALLED_DIR} - OPTIONS_DEBUG - -DINSTALL_HEADERS=OFF - -DINSTALL_OTHER=OFF + ###### WITH PROPERTIES explicitly disabled, they have problems with libraries if already installed by user and that are "involuntarily" found during install + -DWITH_LAPACK=OFF + ###### BUILD_options (mainly modules which require additional libraries) + -DBUILD_opencv_ovis=${BUILD_opencv_ovis} + ###### The following modules are disabled for UWP + -DBUILD_opencv_quality=${BUILD_opencv_quality} + ###### Additional build flags + ${ADDITIONAL_BUILD_FLAGS} ) vcpkg_install_cmake() @@ -321,4 +344,4 @@ file(REMOVE ${CURRENT_PACKAGES_DIR}/setup_vars_opencv3.cmd) file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/setup_vars_opencv3.cmd) file(REMOVE ${CURRENT_PACKAGES_DIR}/LICENSE) file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/LICENSE) -file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/opencv3 RENAME copyright) +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) diff --git a/ports/opencv4/0004-fix-policy-CMP0057.patch b/ports/opencv4/0004-fix-policy-CMP0057.patch new file mode 100644 index 000000000..ed25d501d --- /dev/null +++ b/ports/opencv4/0004-fix-policy-CMP0057.patch @@ -0,0 +1,9 @@ +diff --git a/modules/videoio/CMakeLists.txt b/modules/videoio/CMakeLists.txt +index 1608655..a394f04 100644 +--- a/modules/videoio/CMakeLists.txt ++++ b/modules/videoio/CMakeLists.txt +@@ -1,3 +1,4 @@ ++cmake_minimum_required(VERSION 3.3) + set(VIDEOIO_PLUGIN_LIST "" CACHE STRING "List of videoio backends to be compiled as plugins (ffmpeg, gstreamer)") + set(VIDEOIO_ENABLE_PLUGINS "ON" CACHE BOOL "Allow building videoio plugin support") + set(VIDEOIO_ENABLE_STRICT_PLUGIN_CHECK "ON" CACHE BOOL "Make sure OpenCV version is the same in plugin and host code") diff --git a/ports/opencv4/CONTROL b/ports/opencv4/CONTROL index 29a119e2f..991f26587 100644 --- a/ports/opencv4/CONTROL +++ b/ports/opencv4/CONTROL @@ -1,5 +1,5 @@ Source: opencv4 -Version: 4.1.1-1 +Version: 4.1.1-2 Build-Depends: protobuf, zlib Homepage: https://github.com/opencv/opencv Description: computer vision library diff --git a/ports/opencv4/portfile.cmake b/ports/opencv4/portfile.cmake index 60ba8e5f5..bdb7f9932 100644 --- a/ports/opencv4/portfile.cmake +++ b/ports/opencv4/portfile.cmake @@ -16,6 +16,7 @@ vcpkg_from_github( 0001-disable-downloading.patch 0002-install-options.patch 0003-force-package-requirements.patch + 0004-fix-policy-CMP0057.patch 0009-fix-uwp.patch ) @@ -69,6 +70,14 @@ if("vtk" IN_LIST FEATURES) set(WITH_VTK ON) endif() +if("dnn" IN_LIST FEATURES) + vcpkg_download_distfile(TINYDNN_ARCHIVE + URLS "https://github.com/tiny-dnn/tiny-dnn/archive/v1.0.0a3.tar.gz" + FILENAME "opencv-cache/tiny_dnn/adb1c512e09ca2c7a6faef36f9c53e59-v1.0.0a3.tar.gz" + SHA512 5f2c1a161771efa67e85b1fea395953b7744e29f61187ac5a6c54c912fb195b3aef9a5827135c3668bd0eeea5ae04a33cc433e1f6683e2b7955010a2632d168b + ) +endif() + if("cuda" IN_LIST FEATURES) vcpkg_download_distfile(OCV_DOWNLOAD URLS "https://github.com/NVIDIA/NVIDIAOpticalFlowSDK/archive/79c6cee80a2df9a196f20afd6b598a9810964c32.zip" @@ -96,6 +105,8 @@ if("contrib" IN_LIST FEATURES) SHA512 8af13f0a5f350360316662c1ce5e58c21d906a58591acfbd575a8dacde19b6f3bbd694c3c199feb35c33549cf8c37e3fb4c494b586a00ad29fe3b4aeeb2d22ab HEAD_REF master ) + set(BUILD_WITH_CONTRIB_FLAG "-DOPENCV_EXTRA_MODULES_PATH=${CONTRIB_SOURCE_PATH}/modules") + vcpkg_download_distfile(OCV_DOWNLOAD URLS "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i" FILENAME "opencv-cache/xfeatures2d/boostdesc/0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i" @@ -156,15 +167,6 @@ if("contrib" IN_LIST FEATURES) FILENAME "opencv-cache/data/7505c44ca4eb54b4ab1e4777cb96ac05-face_landmark_model.dat" SHA512 c16e60a6c4bb4de3ab39b876ae3c3f320ea56f69c93e9303bd2dff8760841dcd71be4161fff8bc71e8fe4fe8747fa8465d49d6bd8f5ebcdaea161f4bc2da7c93 ) - set(BUILD_WITH_CONTRIB_FLAG "-DOPENCV_EXTRA_MODULES_PATH=${CONTRIB_SOURCE_PATH}/modules") -endif() - -if("dnn" IN_LIST FEATURES) - vcpkg_download_distfile(TINYDNN_ARCHIVE - URLS "https://github.com/tiny-dnn/tiny-dnn/archive/v1.0.0a3.tar.gz" - FILENAME "opencv-cache/tiny_dnn/adb1c512e09ca2c7a6faef36f9c53e59-v1.0.0a3.tar.gz" - SHA512 5f2c1a161771efa67e85b1fea395953b7744e29f61187ac5a6c54c912fb195b3aef9a5827135c3668bd0eeea5ae04a33cc433e1f6683e2b7955010a2632d168b - ) endif() if(WITH_IPP) @@ -241,6 +243,17 @@ if (VCPKG_LIBRARY_LINKAGE STREQUAL static) endif() endif() +if("ffmpeg" IN_LIST FEATURES) + if(VCPKG_TARGET_IS_UWP) + set(VCPKG_C_FLAGS "/sdl- ${VCPKG_C_FLAGS}") + set(VCPKG_CXX_FLAGS "/sdl- ${VCPKG_CXX_FLAGS}") + endif() +endif() + +if("qt" IN_LIST FEATURES) + list(APPEND ADDITIONAL_BUILD_FLAGS "-DCMAKE_AUTOMOC=ON") +endif() + vcpkg_configure_cmake( PREFER_NINJA SOURCE_PATH ${SOURCE_PATH} @@ -252,8 +265,9 @@ vcpkg_configure_cmake( -DOPENCV_CONFIG_INSTALL_PATH=share/opencv -DOPENCV_FFMPEG_USE_FIND_PACKAGE=FFMPEG -DCMAKE_DEBUG_POSTFIX=d - ###### Ungrouped Entries - -DBUILD_opencv_java=OFF + # Do not build docs/examples + -DBUILD_DOCS=OFF + -DBUILD_EXAMPLES=OFF -Dade_DIR=${ADE_DIR} ###### Disable build 3rd party libs -DBUILD_JASPER=OFF @@ -270,11 +284,10 @@ vcpkg_configure_cmake( -DBUILD_PROTOBUF=OFF ###### OpenCV Build components -DBUILD_opencv_apps=OFF + -DBUILD_opencv_java=OFF -DBUILD_opencv_js=OFF -DBUILD_ANDROID_PROJECT=OFF -DBUILD_ANDROID_EXAMPLES=OFF - -DBUILD_DOCS=OFF - -DBUILD_EXAMPLES=OFF -DBUILD_PACKAGE=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF @@ -312,6 +325,8 @@ vcpkg_configure_cmake( -DBUILD_opencv_ovis=${BUILD_opencv_ovis} ###### The following modules are disabled for UWP -DBUILD_opencv_quality=${BUILD_opencv_quality} + ###### Additional build flags + ${ADDITIONAL_BUILD_FLAGS} ) vcpkg_install_cmake() @@ -368,4 +383,4 @@ file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/setup_vars_opencv4.cmd) file(REMOVE ${CURRENT_PACKAGES_DIR}/LICENSE) file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/LICENSE) -file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/opencv4 RENAME copyright) +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)