Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[OpenCV2] add library for projects that require the C API #3360

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions ports/opencv2/0001-fix-path.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 90e16c2..07d0cca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -284,14 +284,7 @@ if(NOT DEFINED OPENCV_DOC_INSTALL_PATH)
endif()
endif()

-if(WIN32)
- if(DEFINED OpenCV_RUNTIME AND DEFINED OpenCV_ARCH)
- set(OpenCV_INSTALL_BINARIES_PREFIX "${OpenCV_ARCH}/${OpenCV_RUNTIME}/")
- else()
- message(STATUS "Can't detect runtime and/or arch")
- set(OpenCV_INSTALL_BINARIES_PREFIX "")
- endif()
-elseif(ANDROID)
+if(ANDROID)
set(OpenCV_INSTALL_BINARIES_PREFIX "sdk/native/")
else()
set(OpenCV_INSTALL_BINARIES_PREFIX "")
@@ -322,29 +315,13 @@ if(ANDROID)
set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
else()
- set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib")
- set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
- if(WIN32)
- if(OpenCV_STATIC)
- set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
- else()
- set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}")
- endif()
- set(OPENCV_3P_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
- set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
- else()
- set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
- set(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
- set(OPENCV_SAMPLES_SRC_INSTALL_PATH share/OpenCV/samples)
- endif()
- set(OPENCV_INCLUDE_INSTALL_PATH "include")
-
- math(EXPR SIZEOF_VOID_P_BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
- if(LIB_SUFFIX AND NOT SIZEOF_VOID_P_BITS EQUAL LIB_SUFFIX)
- set(OPENCV_CONFIG_INSTALL_PATH lib${LIB_SUFFIX}/cmake/opencv)
- else()
- set(OPENCV_CONFIG_INSTALL_PATH share/OpenCV)
- endif()
+ set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib")
+ set(3P_LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH}")
+ set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}lib")
+ set(OPENCV_3P_LIB_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}")
+ set(OPENCV_SAMPLES_SRC_INSTALL_PATH "share/OpenCV/samples")
+ set(OPENCV_INCLUDE_INSTALL_PATH "include")
+ set(OPENCV_CONFIG_INSTALL_PATH "share/OpenCV")
endif()

set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_LIB_INSTALL_PATH}")
12 changes: 12 additions & 0 deletions ports/opencv2/0002-add-ffmpeg-missing-defines.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
--- a/modules/highgui/src/cap_ffmpeg_impl.hpp
+++ b/modules/highgui/src/cap_ffmpeg_impl.hpp
@@ -42,6 +42,9 @@

#define HAVE_FFMPEG_SWSCALE
#define HAVE_GENTOO_FFMPEG
+#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
+#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
+#define AVFMT_RAWPICTURE 0x0020

#include "cap_ffmpeg_api.hpp"
#include <assert.h>
94 changes: 94 additions & 0 deletions ports/opencv2/0003-fix-cuda.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
--- a/cmake/FindCUDA.cmake
+++ b/cmake/FindCUDA.cmake
@@ -521,7 +521,16 @@ macro(cuda_unset_include_and_libraries)
unset(CUDA_cusparse_LIBRARY CACHE)
unset(CUDA_npp_LIBRARY CACHE)
unset(CUDA_nppc_LIBRARY CACHE)
- unset(CUDA_nppi_LIBRARY CACHE)
+ unset(CUDA_nppial_LIBRARY CACHE)
+ unset(CUDA_nppicc_LIBRARY CACHE)
+ unset(CUDA_nppicom_LIBRARY CACHE)
+ unset(CUDA_nppidei_LIBRARY CACHE)
+ unset(CUDA_nppif_LIBRARY CACHE)
+ unset(CUDA_nppig_LIBRARY CACHE)
+ unset(CUDA_nppim_LIBRARY CACHE)
+ unset(CUDA_nppist_LIBRARY CACHE)
+ unset(CUDA_nppisu_LIBRARY CACHE)
+ unset(CUDA_nppitc_LIBRARY CACHE)
unset(CUDA_npps_LIBRARY CACHE)
unset(CUDA_nvcuvenc_LIBRARY CACHE)
unset(CUDA_nvcuvid_LIBRARY CACHE)
@@ -787,9 +796,18 @@ endif()
if(CUDA_VERSION VERSION_GREATER "5.0")
# In CUDA 5.5 NPP was splitted onto 3 separate libraries.
find_cuda_helper_libs(nppc)
- find_cuda_helper_libs(nppi)
+ find_cuda_helper_libs(nppial)
+ find_cuda_helper_libs(nppicc)
+ find_cuda_helper_libs(nppicom)
+ find_cuda_helper_libs(nppidei)
+ find_cuda_helper_libs(nppif)
+ find_cuda_helper_libs(nppig)
+ find_cuda_helper_libs(nppim)
+ find_cuda_helper_libs(nppist)
+ find_cuda_helper_libs(nppisu)
+ find_cuda_helper_libs(nppitc)
find_cuda_helper_libs(npps)
- set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")
+ set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
elseif(NOT CUDA_VERSION VERSION_LESS "4.0")
find_cuda_helper_libs(npp)
endif()
--- a/cmake/OpenCVDetectCUDA.cmake
+++ b/cmake/OpenCVDetectCUDA.cmake
@@ -51,7 +51,7 @@ if(CUDA_FOUND)

message(STATUS "CUDA detected: " ${CUDA_VERSION})

- set(_generations "Fermi" "Kepler")
+ set(_generations "Kepler" "Maxwell")
if(NOT CMAKE_CROSSCOMPILING)
list(APPEND _generations "Auto")
endif()
@@ -70,14 +70,10 @@ if(CUDA_FOUND)
endif()

set(__cuda_arch_ptx "")
- if(CUDA_GENERATION STREQUAL "Fermi")
- set(__cuda_arch_bin "2.0 2.1(2.0)")
- elseif(CUDA_GENERATION STREQUAL "Kepler")
- if(${CUDA_VERSION} VERSION_LESS "5.0")
- set(__cuda_arch_bin "3.0")
- else()
- set(__cuda_arch_bin "3.0 3.5")
- endif()
+ if(CUDA_GENERATION STREQUAL "Kepler")
+ set(__cuda_arch_bin "3.0 3.5 3.7")
+ elseif(CUDA_GENERATION STREQUAL "Maxwell")
+ set(__cuda_arch_bin "5.0 5.2")
elseif(CUDA_GENERATION STREQUAL "Auto")
execute_process( COMMAND "${CUDA_NVCC_EXECUTABLE}" "${OpenCV_SOURCE_DIR}/cmake/checks/OpenCVDetectCudaArch.cu" "--run"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/"
@@ -87,7 +83,6 @@ if(CUDA_FOUND)
message(STATUS "Automatic detection of CUDA generation failed. Going to build for all known architectures.")
else()
set(__cuda_arch_bin "${_nvcc_out}")
- string(REPLACE "2.1" "2.1(2.0)" __cuda_arch_bin "${__cuda_arch_bin}")
endif()
endif()

@@ -102,11 +97,11 @@ if(CUDA_FOUND)
endif()
else()
if(${CUDA_VERSION} VERSION_LESS "5.0")
- set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0")
+ set(__cuda_arch_bin "3.0")
elseif(${CUDA_VERSION} VERSION_GREATER "6.5")
- set(__cuda_arch_bin "2.0 2.1(2.0) 3.0 3.5")
+ set(__cuda_arch_bin "3.0 3.5")
else()
- set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0 3.5")
+ set(__cuda_arch_bin "3.0 3.5")
endif()
set(__cuda_arch_ptx "3.0")
endif()
40 changes: 40 additions & 0 deletions ports/opencv2/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
Source: opencv2
Version: 2.4.13.6
Build-Depends: zlib
Description: computer vision library, version 2
Default-Features: opengl, ffmpeg, png, jpeg, jasper, eigen

Feature: opengl
Build-Depends: opengl
Description: opengl support for opencv

Feature: cuda
Build-Depends: cuda
Description: CUDA support for opencv

Feature: ffmpeg
Description: prebuilt ffmpeg support for opencv

Feature: qt
Build-Depends: qt5
Description: Qt GUI support for opencv

Feature: vtk
Build-Depends: vtk
Description: vtk support for opencv

Feature: png
Build-Depends: libpng
Description: PNG support for opencv

Feature: jpeg
Build-Depends: libjpeg-turbo
Description: JPEG support for opencv

Feature: jasper
Build-Depends: jasper
Description: JPEG 2000 support for opencv

Feature: eigen
Build-Depends: eigen3
Description: Eigen support for opencv
192 changes: 192 additions & 0 deletions ports/opencv2/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# in case of errors on Ubuntu, please try installing first
# sudo apt-get install libv4l-dev

include(vcpkg_common_functions)

if (EXISTS "${CURRENT_INSTALLED_DIR}/share/OpenCV")
message(FATAL_ERROR "FATAL ERROR: opencv and opencv2 are incompatible.")
endif()

set(OPENCV_PORT_VERSION "2.4.13.6")

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO opencv/opencv
REF ${OPENCV_PORT_VERSION}
SHA512 022b131ea90aa69c580a9ebe34f9db565a0312b36ec69684d21436534fd8fc8bd76f90d155c4a5adc11d484a6eda52825e04443d2ec6f232d15d7f82617931ca
HEAD_REF master
)

vcpkg_apply_patches(
SOURCE_PATH ${SOURCE_PATH}
PATCHES
"${CMAKE_CURRENT_LIST_DIR}/0001-fix-path.patch"
"${CMAKE_CURRENT_LIST_DIR}/0002-add-ffmpeg-missing-defines.patch"
"${CMAKE_CURRENT_LIST_DIR}/0003-fix-cuda.patch"
)

string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" BUILD_WITH_STATIC_CRT)

set(WITH_CUDA OFF)
if("cuda" IN_LIST FEATURES)
set(WITH_CUDA ON)
endif()

set(WITH_FFMPEG OFF)
if("ffmpeg" IN_LIST FEATURES)
set(WITH_FFMPEG ON)
endif()

set(WITH_QT OFF)
if("qt" IN_LIST FEATURES)
set(WITH_QT ON)
endif()

set(WITH_VTK OFF)
if("vtk" IN_LIST FEATURES)
set(WITH_VTK ON)
endif()

set(WITH_OPENGL OFF)
if("opengl" IN_LIST FEATURES)
set(WITH_OPENGL ON)
endif()

set(WITH_JPEG OFF)
if("jpeg" IN_LIST FEATURES)
set(WITH_JPEG ON)
endif()

set(WITH_JASPER OFF)
if("jasper" IN_LIST FEATURES)
set(WITH_JASPER ON)
endif()

set(WITH_PNG OFF)
if("png" IN_LIST FEATURES)
set(WITH_PNG ON)
endif()

set(WITH_EIGEN OFF)
if("eigen" IN_LIST FEATURES)
set(WITH_EIGEN ON)
endif()

if(NOT VCPKG_CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT VCPKG_CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(WITH_MSMF ON)
if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
set(WITH_MSMF OFF)
endif()
else()
set(WITH_MSMF OFF)
endif()

vcpkg_configure_cmake(
PREFER_NINJA
SOURCE_PATH ${SOURCE_PATH}
OPTIONS
# Do not build docs/examples/tests
-DBUILD_DOCS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_TESTS=OFF
-DBUILD_PERF_TESTS=OFF
-DBUILD_PACKAGE=OFF
-DBUILD_WITH_STATIC_CRT=${BUILD_WITH_STATIC_CRT}
-DBUILD_WITH_DEBUG_INFO=ON
# Do not build integrated libraries, use external ones
-DBUILD_ZLIB=OFF
-DBUILD_TIFF=OFF
-DBUILD_JASPER=OFF
-DBUILD_JPEG=OFF
-DBUILD_PNG=OFF
-DBUILD_OPENEXR=OFF
-DBUILD_TBB=OFF
# Select which OpenCV modules should be built
-DBUILD_opencv_apps=OFF
-DBUILD_opencv_python=OFF
# WITH
-DWITH_CUBLAS=OFF
-DWITH_CUDA=${WITH_CUDA}
-DWITH_EIGEN=${WITH_EIGEN}
-DWITH_FFMPEG=${WITH_FFMPEG}
-DWITH_IPP=OFF
-DWITH_JASPER=${WITH_JASPER}
-DWITH_JPEG=${WITH_JPEG}
-DWITH_LAPACK=OFF
-DWITH_MSMF=${WITH_MSMF}
-DWITH_OPENCLAMDBLAS=OFF
-DWITH_OPENEXR=OFF
-DWITH_OPENGL=${WITH_OPENGL}
-DWITH_PNG=${WITH_PNG}
-DWITH_PROTOBUF=${WITH_PROTOBUF}
-DWITH_QT=${WITH_QT}
-DWITH_TIFF=OFF
-DWITH_VTK=${WITH_VTK}
-DWITH_ZLIB=ON
)

vcpkg_install_cmake(DISABLE_PARALLEL)

file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/opencv2)
file(RENAME ${CURRENT_PACKAGES_DIR}/share/opencv2/LICENSE ${CURRENT_PACKAGES_DIR}/share/opencv2/copyright)
file(REMOVE ${CURRENT_PACKAGES_DIR}/LICENSE)
file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/LICENSE)

if(NOT VCPKG_CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT VCPKG_CMAKE_SYSTEM_NAME MATCHES "Darwin")
file(GLOB STATICLIB ${CURRENT_PACKAGES_DIR}/staticlib/*)
if(STATICLIB)
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/lib)
file(COPY ${STATICLIB} DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/staticlib)
endif()
file(GLOB STATICLIB ${CURRENT_PACKAGES_DIR}/debug/staticlib/*)
if(STATICLIB)
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/lib)
file(COPY ${STATICLIB} DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/staticlib)
endif()

file(REMOVE ${CURRENT_PACKAGES_DIR}/OpenCVConfig.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/OpenCVConfig-version.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/lib/OpenCVModules.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/OpenCVConfig.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/OpenCVConfig-version.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/lib/OpenCVConfig.cmake)

file(RENAME ${CURRENT_PACKAGES_DIR}/lib/OpenCVConfig.cmake ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVConfig.cmake)
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/OpenCVModules.cmake ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules.cmake)
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/OpenCVModules-release.cmake ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules-release.cmake)
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/OpenCVModules-debug.cmake ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules-debug.cmake)

file(READ ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules-debug.cmake OPENCV_MODULES)
string(REPLACE "PREFIX}/lib" "PREFIX}/../debug/lib" OPENCV_MODULES "${OPENCV_MODULES}")
file(WRITE ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules-debug.cmake "${OPENCV_MODULES}")

file(READ ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules-release.cmake OPENCV_MODULES)
string(REPLACE "PREFIX}/lib" "PREFIX}/../lib" OPENCV_MODULES "${OPENCV_MODULES}")
file(WRITE ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules-release.cmake "${OPENCV_MODULES}")

file(READ ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVConfig.cmake OPENCV_CONFIG)
string(REPLACE "${OpenCV_CONFIG_PATH}/include" "${OpenCV_CONFIG_PATH}/../../include" OPENCV_CONFIG "${OPENCV_CONFIG}")
file(WRITE ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVConfig.cmake "${OPENCV_CONFIG}")
else()
file(REMOVE ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVConfig.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVConfig-version.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/share/OpenCV/OpenCVConfig.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/share/OpenCV/OpenCVConfig-version.cmake)
file(REMOVE ${CURRENT_PACKAGES_DIR}/debug/share/OpenCV/OpenCVConfig.cmake)

file(RENAME ${CURRENT_PACKAGES_DIR}/debug/share/OpenCV/OpenCVModules.cmake ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules.cmake)
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/share/OpenCV/OpenCVModules-debug.cmake ${CURRENT_PACKAGES_DIR}/share/OpenCV/OpenCVModules-debug.cmake)
endif()

file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)

vcpkg_copy_pdbs()

if(NOT VCPKG_CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT VCPKG_CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(VCPKG_LIBRARY_LINKAGE "dynamic")
set(VCPKG_POLICY_ALLOW_OBSOLETE_MSVCRT enabled)
endif()