From patchwork Sat Dec 26 10:42:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabrice Fontaine X-Patchwork-Id: 1420671 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=busybox.net (client-ip=140.211.166.133; helo=hemlock.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=FhKyGtfP; dkim-atps=neutral Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4D30mQ6XXfz9sWc for ; Sat, 26 Dec 2020 21:44:06 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 44A2F86F7C; Sat, 26 Dec 2020 10:44:04 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Np7kMgwQuRPt; Sat, 26 Dec 2020 10:44:02 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by hemlock.osuosl.org (Postfix) with ESMTP id F270C86E6E; Sat, 26 Dec 2020 10:44:01 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by ash.osuosl.org (Postfix) with ESMTP id 403FC1BF362 for ; Sat, 26 Dec 2020 10:44:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 3627884F58 for ; Sat, 26 Dec 2020 10:44:00 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id HMyu9ZvIlCMl for ; Sat, 26 Dec 2020 10:43:58 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) by fraxinus.osuosl.org (Postfix) with ESMTPS id C8E4184EF0 for ; Sat, 26 Dec 2020 10:43:57 +0000 (UTC) Received: by mail-wr1-f48.google.com with SMTP id m5so6071241wrx.9 for ; Sat, 26 Dec 2020 02:43:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=NQuYOBpSMcR6yjCmn7WPkq2VTGd+wGZtjkn5F36k/oI=; b=FhKyGtfP6KPLsZC6tsESpkXg6TyHSp74qJ3CJZEws1ohLI+4jPaTD/xlA6auVylCya vxXZYugvK0WdyVyQKaTfo5qfIU6/Ufb1ylsaj2LHXZUTXpMSchURqCjxjy3F3GcVGGXQ yCbRYZzBTbZfkuwoyzJ8yMo9H//tgQz7w9fLUDbvZiz1i74RctYojIKQxH6Ho9mvKMoN eZoYlcXFUTX+RJcKWPG/wXwfEnvWA0/QcOEwYsyn81fh4F+FdR95DlNbTA8CAVBFjCVV HB+6TDBUA8gtRDuM4/g8/TCNkjObICgentjTVMJ4jcxpgYzDODXS++BVmNbfMJNKPazZ kn4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=NQuYOBpSMcR6yjCmn7WPkq2VTGd+wGZtjkn5F36k/oI=; b=qlltlLpZD2yCSOr+EDeSudsTxjcFz2bAVk3A6/+lyCjz2murG/Cv1EyKHFasBc+U+U sSdZlhn1uins/pHG81qT4uHwBNSPMd8gV30Sw0+W9mdCDbtzvUhBdztRsmCmkUF9R2Jy KXFW5FQAya3ny2EAISv2tmChsxA7BKVRwyng9j5hxtqYiJpF0dmKYy5z5irS0FR++Bgg HcMqyQ2tUgNn7i3pw0mtra8Sd/TSO0h9PgpnQCeczrUsya+Lo+8sPZWKcCn7O/rgMRIU IsRy20x2r+933sl27Gscx16fMu6PyDoB/hmHLeRDVjxrBFFhTyFhle8hU039Km742QKi DKIQ== X-Gm-Message-State: AOAM533/P5T8MoCPAcrA7FhWsv3eyytXGfuhPl82kI7dOPDqifCTpAMU Z5Dyy85uViSEhGJ7b9CZ9Gt/Q3pBsSco7Q== X-Google-Smtp-Source: ABdhPJxyja6wIm9CAZ3pHkhrYu58NB2aHwGKWHl87OEylbIWAizma5WuAEx47wu63Lb39s0PtrHjQw== X-Received: by 2002:adf:c145:: with SMTP id w5mr42851514wre.400.1608979435558; Sat, 26 Dec 2020 02:43:55 -0800 (PST) Received: from kali.home (2a01cb0881b76d00c2afd0dfa851d2b9.ipv6.abo.wanadoo.fr. [2a01:cb08:81b7:6d00:c2af:d0df:a851:d2b9]) by smtp.gmail.com with ESMTPSA id i16sm45989155wrx.89.2020.12.26.02.43.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 26 Dec 2020 02:43:54 -0800 (PST) From: Fabrice Fontaine To: buildroot@buildroot.org Date: Sat, 26 Dec 2020 11:42:59 +0100 Message-Id: <20201226104259.356911-1-fontaine.fabrice@gmail.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Subject: [Buildroot] [PATCH v2,1/1] package/opencv4: new package X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fabrice Fontaine Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" opencv4 is not fully backward compatible with opencv3 as "a lot of C API from OpenCV 1.x has been removed.": https://opencv.org/opencv-4-0. Moreover, it should be noted that layout of include files as well as pkg-config filename changed since https://github.com/opencv/opencv/commit/a95673287433fc810eda2d88b94bb234298c4cd5 All these changes mean that most of buildroot packages (e.g. vlc, ffmpeg) are not compatible with opencv4. Here is the most important changes between opencv3 and opencv 4.5.1: - License is Apache-2.0 (https://opencv.org/opencv-4-5-0) - openjpeg is an optional dependency (enabled by default) since https://github.com/opencv/opencv/commit/0384eb7d8c1a31831704e31b8bdbfbc6ff854281 jpeg2000 can be enabled through openjpeg or jasper - pkg-config must be enabled with OPENCV_GENERATE_PKGCONFIG since https://github.com/opencv/opencv/commit/e755a2a6e48ae02dd5136a628cc4148566a08225 - cmake is not installed in /usr/share anymore so hook can be dropped - C++11 is required since https://github.com/opencv/opencv/commit/d4688e6474dcd59c1d66736b744a8049f386a90b Signed-off-by: Fabrice Fontaine --- Changes v1 -> v2: - Add C++11 requirement - Bump to version 4.5.1 DEVELOPERS | 1 + package/Config.in | 1 + package/opencv4/Config.in | 363 +++++++++++++++++++++++++++++++++ package/opencv4/opencv4.hash | 3 + package/opencv4/opencv4.mk | 375 +++++++++++++++++++++++++++++++++++ 5 files changed, 743 insertions(+) create mode 100644 package/opencv4/Config.in create mode 100644 package/opencv4/opencv4.hash create mode 100644 package/opencv4/opencv4.mk diff --git a/DEVELOPERS b/DEVELOPERS index ad5beba8ac..25bf087f92 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -866,6 +866,7 @@ F: package/motion/ F: package/mutt/ F: package/ncmpc/ F: package/oniguruma/ +F: package/opencv4/ F: package/oprofile/ F: package/pcmanfm/ F: package/python-backcall/ diff --git a/package/Config.in b/package/Config.in index ddc0c7ce3c..0e7d6da625 100644 --- a/package/Config.in +++ b/package/Config.in @@ -1481,6 +1481,7 @@ menu "Graphics" source "package/libwpe/Config.in" source "package/menu-cache/Config.in" source "package/opencv3/Config.in" + source "package/opencv4/Config.in" source "package/opengl/Config.in" source "package/openjpeg/Config.in" source "package/pango/Config.in" diff --git a/package/opencv4/Config.in b/package/opencv4/Config.in new file mode 100644 index 0000000000..ae7ea306ff --- /dev/null +++ b/package/opencv4/Config.in @@ -0,0 +1,363 @@ +menuconfig BR2_PACKAGE_OPENCV4 + bool "opencv4" + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL + depends on BR2_INSTALL_LIBSTDCPP + depends on BR2_USE_WCHAR + depends on !BR2_STATIC_LIBS # include dlfcn.h + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # C++11 + depends on !BR2_PACKAGE_OPENCV3 + select BR2_PACKAGE_ZLIB + help + OpenCV (Open Source Computer Vision) is a library of + programming functions for real time computer vision. + + Note that the opencv_core module and the opencv_hal library + are always built and installed, not matter which other + modules are enabled below. + + http://opencv.org/ + +if BR2_PACKAGE_OPENCV4 + +comment "OpenCV modules" + +config BR2_PACKAGE_OPENCV4_LIB_CALIB3D + bool "calib3d" + select BR2_PACKAGE_OPENCV4_LIB_FEATURES2D + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + help + Include opencv_calib3d (camera calibration and 3d + reconstruction) module into the OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_FEATURES2D + bool "features2d" + select BR2_PACKAGE_OPENCV4_LIB_FLANN + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + select BR2_PACKAGE_OPENCV4_LIB_ML + help + Include opencv_features2d (2d features framework) module + into the OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_FLANN + bool "flann" + # opencv_core dependency is already enabled + help + Include opencv_flann (clustering and search in + multi-dimensional spaces) module into the OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_HIGHGUI + bool "highgui" + select BR2_PACKAGE_OPENCV4_LIB_IMGCODECS + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + select BR2_PACKAGE_OPENCV4_LIB_VIDEOIO + help + Include opencv_highgui (high-level gui and media i/o) module + into the OpenCV build. + +if BR2_PACKAGE_OPENCV4_LIB_HIGHGUI + +choice + prompt "gui toolkit" + help + GUI toolkit to be used by the opencv_highgui module. + +config BR2_PACKAGE_OPENCV4_GUI_NONE + bool "none" + +config BR2_PACKAGE_OPENCV4_WITH_GTK + bool "gtk2" + depends on BR2_PACKAGE_LIBGTK2 + +comment "gtk2 support needs libgtk2" + depends on BR2_USE_MMU # libgtk2 -> glib2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_PACKAGE_LIBGTK2 + +config BR2_PACKAGE_OPENCV4_WITH_GTK3 + bool "gtk3" + depends on BR2_PACKAGE_LIBGTK3 + +comment "gtk3 support needs libgtk3" + depends on BR2_USE_MMU # libgtk3 -> glib2 + depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on !BR2_PACKAGE_LIBGTK3 + +config BR2_PACKAGE_OPENCV4_WITH_QT5 + bool "qt5" + depends on BR2_PACKAGE_QT5 + select BR2_PACKAGE_QT5BASE_CONCURRENT + select BR2_PACKAGE_QT5BASE_GUI + select BR2_PACKAGE_QT5BASE_WIDGETS + help + Use Qt5 with base, concurrent, test, gui and widgets + components, as GUI toolkit. + +comment "qt5 support needs qt5" + depends on !BR2_PACKAGE_QT5 + +endchoice + +config BR2_PACKAGE_OPENCV4_WITH_OPENGL + bool "opengl support" + # OpenGL support done using Qt5OpenGL, so depends on WITH_QT5 + depends on BR2_PACKAGE_OPENCV4_WITH_QT5 + # OpenGL support requires Qt5OpenGL with GL support, not GLES + depends on BR2_PACKAGE_QT5_GL_AVAILABLE + depends on BR2_PACKAGE_HAS_LIBGL + select BR2_PACKAGE_QT5BASE_OPENGL + help + Enable OpenGL for UI. + +comment "opengl support needs an OpenGL provider" + depends on BR2_PACKAGE_OPENCV4_WITH_QT5 + depends on !BR2_PACKAGE_QT5_GL_AVAILABLE || \ + !BR2_PACKAGE_HAS_LIBGL + +endif # BR2_PACKAGE_OPENCV4_LIB_HIGHGUI + +config BR2_PACKAGE_OPENCV4_LIB_IMGCODECS + bool "imgcodecs" + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + help + Include opencv_imgcodecs (image codecs) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_IMGPROC + bool "imgproc" + # opencv_core dependency is already enabled + help + Include opencv_imgproc (image processing) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_ML + bool "ml" + # opencv_core dependency is already enabled + help + Include opencv_ml (machine learning) module into the OpenCV + build. + +config BR2_PACKAGE_OPENCV4_LIB_OBJDETECT + bool "objdetect" + # opencv_core dependency is already enabled + select BR2_PACKAGE_OPENCV4_LIB_CALIB3D + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + select BR2_PACKAGE_OPENCV4_LIB_ML + help + Include opencv_objdetect (object detection) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_PHOTO + bool "photo" + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + help + Include opencv_photo (computational photography) module into + the OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_PYTHON + bool "python" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL # python-numpy + select BR2_PACKAGE_PYTHON_NUMPY + help + Include opencv_python module into the OpenCV build. No + python example is installed. + +comment "python support needs glibc or musl" + depends on BR2_PACKAGE_PYTHON3 + depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS + depends on !(BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL) + +config BR2_PACKAGE_OPENCV4_LIB_SHAPE + bool "shape" + # opencv_core dependency is already enabled + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + select BR2_PACKAGE_OPENCV4_LIB_VIDEO + help + Include opencv_shape (shape descriptors and matchers) module + into the OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_STITCHING + bool "stitching" + select BR2_PACKAGE_OPENCV4_LIB_CALIB3D + select BR2_PACKAGE_OPENCV4_LIB_FEATURES2D + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + select BR2_PACKAGE_OPENCV4_LIB_OBJDETECT + help + Include opencv_stitching (images stitching) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_SUPERRES + bool "superres" + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + select BR2_PACKAGE_OPENCV4_LIB_VIDEO + help + Include opencv_superres (super resolution) module into the + OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_TS + bool "ts" + # opencv_core dependency is already enabled + select BR2_PACKAGE_OPENCV4_LIB_HIGHGUI + select BR2_PACKAGE_OPENCV4_LIB_IMGCODECS + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + select BR2_PACKAGE_OPENCV4_LIB_VIDEOIO + help + Include opencv_ts (test) module into the OpenCV build. + +config BR2_PACKAGE_OPENCV4_LIB_VIDEOIO + bool "videoio" + select BR2_PACKAGE_OPENCV4_LIB_IMGCODECS + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + help + Include opencv_videoio (media i/o) module into the OpenCV + build. + +config BR2_PACKAGE_OPENCV4_LIB_VIDEO + bool "video" + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + help + Include opencv_video (video analysis) module into the OpenCV + build. + +config BR2_PACKAGE_OPENCV4_LIB_VIDEOSTAB + bool "videostab" + select BR2_PACKAGE_OPENCV4_LIB_CALIB3D + select BR2_PACKAGE_OPENCV4_LIB_FEATURES2D + select BR2_PACKAGE_OPENCV4_LIB_IMGPROC + select BR2_PACKAGE_OPENCV4_LIB_PHOTO + select BR2_PACKAGE_OPENCV4_LIB_VIDEO + help + Include opencv_videostab (video stabilization) module into + the OpenCV build. + +comment "Test sets" +config BR2_PACKAGE_OPENCV4_BUILD_TESTS + bool "build tests" + +config BR2_PACKAGE_OPENCV4_BUILD_PERF_TESTS + bool "build performance tests" + +comment "3rd party support" + +config BR2_PACKAGE_OPENCV4_WITH_FFMPEG + bool "ffmpeg support" + depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS + select BR2_PACKAGE_BZIP2 + select BR2_PACKAGE_FFMPEG + select BR2_PACKAGE_FFMPEG_AVRESAMPLE + select BR2_PACKAGE_FFMPEG_SWSCALE + help + Use ffmpeg from the target system. + +config BR2_PACKAGE_OPENCV4_WITH_GSTREAMER1 + bool "gstreamer-1.x" + depends on BR2_USE_MMU # gstreamer1 -> libglib2 + depends on BR2_USE_WCHAR # gstreamer1 -> libglib2 + depends on BR2_TOOLCHAIN_HAS_THREADS # gstreamer1 -> libglib2 + select BR2_PACKAGE_GSTREAMER1 + select BR2_PACKAGE_GST1_PLUGINS_BASE + select BR2_PACKAGE_GST1_PLUGINS_BASE_PLUGIN_APP + help + Enable gstreamer support. + +comment "gstreamer support needs a toolchain w/ wchar, threads" + depends on BR2_USE_MMU + depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS + +choice + prompt "jpeg2000 support" + help + Select the desired jpeg2000 library provider. + +config BR2_PACKAGE_OPENCV4_JPEG2000_NONE + bool "none" + +config BR2_PACKAGE_OPENCV4_JPEG2000_WITH_JASPER + bool "jasper" + select BR2_PACKAGE_JASPER + help + Enable jpeg2000 support through jasper. + + Note: this does not use the libjasper bundled with opencv, + but uses the libjasper package installed system-wide by + Buildroot. + +config BR2_PACKAGE_OPENCV4_JPEG2000_WITH_OPENJPEG + bool "openjpeg" + select BR2_PACKAGE_OPENJPEG + help + Enable jpeg2000 support through openjpeg. + + Note: this does not use the openjpeg bundled with opencv, + but uses the openjpeg package installed system-wide by + Buildroot. + +endchoice + +config BR2_PACKAGE_OPENCV4_WITH_JPEG + bool "jpeg support" + select BR2_PACKAGE_JPEG + help + Use shared libjpeg from the target system. + +config BR2_PACKAGE_OPENCV4_WITH_PNG + bool "png support" + select BR2_PACKAGE_LIBPNG + help + Use shared libpng from the target system. + +config BR2_PACKAGE_OPENCV4_WITH_PROTOBUF + bool "protobuf support" + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS # protobuf + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # protobuf + select BR2_PACKAGE_PROTOBUF + help + Use shared protobuf from the target system. + +comment "protobuf support needs a toolchain w/ gcc >= 4.8" + depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS + depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 + +config BR2_PACKAGE_OPENCV4_WITH_TIFF + bool "tiff support" + select BR2_PACKAGE_TIFF + help + Use shared libtiff from the target system. + +config BR2_PACKAGE_OPENCV4_WITH_V4L + bool "v4l support" + help + Enable Video 4 Linux support. + + If the package libv4l is enabled, its support is + automatically enabled. + +config BR2_PACKAGE_OPENCV4_WITH_WEBP + bool "webp support" + select BR2_PACKAGE_WEBP + help + Enable WebP support. + + Use shared libwebp from the target system. + +comment "Install options" + +config BR2_PACKAGE_OPENCV4_INSTALL_DATA + bool "install extra data" + help + Install various data that is used by cv libraries and/or + demo applications, specifically for haarcascades and + lbpcascades features. + + For further information: see OpenCV documentation. + +endif # BR2_PACKAGE_OPENCV4 + +comment "opencv4 needs a toolchain w/ C++, NPTL, wchar, dynamic library, gcc >= .8" + depends on BR2_TOOLCHAIN_HAS_ATOMIC + depends on !BR2_INSTALL_LIBSTDCPP || \ + !BR2_USE_WCHAR || \ + !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \ + BR2_STATIC_LIBS || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 diff --git a/package/opencv4/opencv4.hash b/package/opencv4/opencv4.hash new file mode 100644 index 0000000000..3f187b87d5 --- /dev/null +++ b/package/opencv4/opencv4.hash @@ -0,0 +1,3 @@ +# Locally calculated +sha256 e27fe5b168918ab60d58d7ace2bd82dd14a4d0bd1d3ae182952c2113f5637513 opencv4-4.5.1.tar.gz +sha256 cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE diff --git a/package/opencv4/opencv4.mk b/package/opencv4/opencv4.mk new file mode 100644 index 0000000000..94ff77f14c --- /dev/null +++ b/package/opencv4/opencv4.mk @@ -0,0 +1,375 @@ +################################################################################ +# +# opencv4 +# +################################################################################ + +OPENCV4_VERSION = 4.5.1 +OPENCV4_SITE = $(call github,opencv,opencv,$(OPENCV4_VERSION)) +OPENCV4_INSTALL_STAGING = YES +OPENCV4_LICENSE = Apache-2.0 +OPENCV4_LICENSE_FILES = LICENSE +OPENCV4_SUPPORTS_IN_SOURCE_BUILD = NO + +OPENCV4_CXXFLAGS = $(TARGET_CXXFLAGS) + +# Uses __atomic_fetch_add_4 +ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) +OPENCV4_CXXFLAGS += -latomic +endif + +# Fix c++11 build with missing std::exception_ptr +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_64735),y) +OPENCV4_CXXFLAGS += -DCV__EXCEPTION_PTR=0 +endif + +ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) +OPENCV4_CXXFLAGS += -O0 +endif + +# OpenCV component options +OPENCV4_CONF_OPTS += \ + -DCMAKE_CXX_FLAGS="$(OPENCV4_CXXFLAGS)" \ + -DBUILD_DOCS=OFF \ + -DBUILD_PERF_TESTS=$(if $(BR2_PACKAGE_OPENCV4_BUILD_PERF_TESTS),ON,OFF) \ + -DBUILD_TESTS=$(if $(BR2_PACKAGE_OPENCV4_BUILD_TESTS),ON,OFF) \ + -DBUILD_WITH_DEBUG_INFO=OFF \ + -DDOWNLOAD_EXTERNAL_TEST_DATA=OFF \ + -DOPENCV_GENERATE_PKGCONFIG=ON \ + -DOPENCV_ENABLE_PKG_CONFIG=ON + +ifeq ($(BR2_PACKAGE_OPENCV4_BUILD_TESTS)$(BR2_PACKAGE_OPENCV4_BUILD_PERF_TESTS),) +OPENCV4_CONF_OPTS += -DINSTALL_TEST=OFF +else +OPENCV4_CONF_OPTS += -DINSTALL_TEST=ON +endif + +# OpenCV build options +OPENCV4_CONF_OPTS += \ + -DBUILD_WITH_STATIC_CRT=OFF \ + -DENABLE_COVERAGE=OFF \ + -DENABLE_FAST_MATH=ON \ + -DENABLE_IMPL_COLLECTION=OFF \ + -DENABLE_NOISY_WARNINGS=OFF \ + -DENABLE_OMIT_FRAME_POINTER=ON \ + -DENABLE_PRECOMPILED_HEADERS=OFF \ + -DENABLE_PROFILING=OFF \ + -DOPENCV_WARNINGS_ARE_ERRORS=OFF + +# OpenCV link options +OPENCV4_CONF_OPTS += \ + -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF \ + -DCMAKE_SKIP_RPATH=OFF \ + -DCMAKE_USE_RELATIVE_PATHS=OFF + +# OpenCV packaging options: +OPENCV4_CONF_OPTS += \ + -DBUILD_PACKAGE=OFF \ + -DENABLE_SOLUTION_FOLDERS=OFF \ + -DINSTALL_CREATE_DISTRIB=OFF + +# OpenCV module selection +# * Modules on: +# - core: if not set, opencv does not build anything +# - hal: core's dependency +# * Modules off: +# - android*: android stuff +# - apps: programs for training classifiers +# - java: java bindings +# - viz: missing VTK dependency +# - world: all-in-one module +# +# * Contrib modules from [1] are disabled: +# - opencv_contrib package is not available in Buildroot; +# - OPENCV_EXTRA_MODULES_PATH is not set. +# +# [1] https://github.com/Itseez/opencv_contrib +OPENCV4_CONF_OPTS += \ + -DBUILD_opencv_androidcamera=OFF \ + -DBUILD_opencv_apps=OFF \ + -DBUILD_opencv_calib3d=$(if $(BR2_PACKAGE_OPENCV4_LIB_CALIB3D),ON,OFF) \ + -DBUILD_opencv_core=ON \ + -DBUILD_opencv_features2d=$(if $(BR2_PACKAGE_OPENCV4_LIB_FEATURES2D),ON,OFF) \ + -DBUILD_opencv_flann=$(if $(BR2_PACKAGE_OPENCV4_LIB_FLANN),ON,OFF) \ + -DBUILD_opencv_highgui=$(if $(BR2_PACKAGE_OPENCV4_LIB_HIGHGUI),ON,OFF) \ + -DBUILD_opencv_imgcodecs=$(if $(BR2_PACKAGE_OPENCV4_LIB_IMGCODECS),ON,OFF) \ + -DBUILD_opencv_imgproc=$(if $(BR2_PACKAGE_OPENCV4_LIB_IMGPROC),ON,OFF) \ + -DBUILD_opencv_java=OFF \ + -DBUILD_opencv_ml=$(if $(BR2_PACKAGE_OPENCV4_LIB_ML),ON,OFF) \ + -DBUILD_opencv_objdetect=$(if $(BR2_PACKAGE_OPENCV4_LIB_OBJDETECT),ON,OFF) \ + -DBUILD_opencv_photo=$(if $(BR2_PACKAGE_OPENCV4_LIB_PHOTO),ON,OFF) \ + -DBUILD_opencv_shape=$(if $(BR2_PACKAGE_OPENCV4_LIB_SHAPE),ON,OFF) \ + -DBUILD_opencv_stitching=$(if $(BR2_PACKAGE_OPENCV4_LIB_STITCHING),ON,OFF) \ + -DBUILD_opencv_superres=$(if $(BR2_PACKAGE_OPENCV4_LIB_SUPERRES),ON,OFF) \ + -DBUILD_opencv_ts=$(if $(BR2_PACKAGE_OPENCV4_LIB_TS),ON,OFF) \ + -DBUILD_opencv_video=$(if $(BR2_PACKAGE_OPENCV4_LIB_VIDEO),ON,OFF) \ + -DBUILD_opencv_videoio=$(if $(BR2_PACKAGE_OPENCV4_LIB_VIDEOIO),ON,OFF) \ + -DBUILD_opencv_videostab=$(if $(BR2_PACKAGE_OPENCV4_LIB_VIDEOSTAB),ON,OFF) \ + -DBUILD_opencv_viz=OFF \ + -DBUILD_opencv_world=OFF + +# Hardware support options. +# +# * PowerPC and VFPv3 support are turned off since their only effects +# are altering CFLAGS, adding '-mcpu=G3 -mtune=G5' or '-mfpu=vfpv3' +# to them, which is already handled by Buildroot. +# * NEON logic is needed as it is not only used to add CFLAGS, but +# also to enable additional NEON code. +OPENCV4_CONF_OPTS += \ + -DENABLE_POWERPC=OFF \ + -DENABLE_NEON=$(if $(BR2_ARM_CPU_HAS_NEON),ON,OFF) \ + -DENABLE_VFPV3=OFF + +# Cuda stuff +OPENCV4_CONF_OPTS += \ + -DBUILD_CUDA_STUBS=OFF \ + -DBUILD_opencv_cudaarithm=OFF \ + -DBUILD_opencv_cudabgsegm=OFF \ + -DBUILD_opencv_cudacodec=OFF \ + -DBUILD_opencv_cudafeatures2d=OFF \ + -DBUILD_opencv_cudafilters=OFF \ + -DBUILD_opencv_cudaimgproc=OFF \ + -DBUILD_opencv_cudalegacy=OFF \ + -DBUILD_opencv_cudaobjdetect=OFF \ + -DBUILD_opencv_cudaoptflow=OFF \ + -DBUILD_opencv_cudastereo=OFF \ + -DBUILD_opencv_cudawarping=OFF \ + -DBUILD_opencv_cudev=OFF \ + -DWITH_CUBLAS=OFF \ + -DWITH_CUDA=OFF \ + -DWITH_CUFFT=OFF + +# NVidia stuff +OPENCV4_CONF_OPTS += -DWITH_NVCUVID=OFF + +# AMD stuff +OPENCV4_CONF_OPTS += \ + -DWITH_OPENCLAMDBLAS=OFF \ + -DWITH_OPENCLAMDFFT=OFF + +# Intel stuff +OPENCV4_CONF_OPTS += \ + -DBUILD_WITH_DYNAMIC_IPP=OFF \ + -DWITH_INTELPERC=OFF \ + -DWITH_IPP=OFF \ + -DWITH_IPP_A=OFF \ + -DWITH_TBB=OFF + +# Smartek stuff +OPENCV4_CONF_OPTS += -DWITH_GIGEAPI=OFF + +# Prosilica stuff +OPENCV4_CONF_OPTS += -DWITH_PVAPI=OFF + +# Ximea stuff +OPENCV4_CONF_OPTS += -DWITH_XIMEA=OFF + +# Non-Linux support (Android options) must remain OFF: +OPENCV4_CONF_OPTS += \ + -DANDROID=OFF \ + -DBUILD_ANDROID_CAMERA_WRAPPER=OFF \ + -DBUILD_ANDROID_EXAMPLES=OFF \ + -DBUILD_ANDROID_SERVICE=OFF \ + -DBUILD_FAT_JAVA_LIB=OFF \ + -DINSTALL_ANDROID_EXAMPLES=OFF \ + -DWITH_ANDROID_CAMERA=OFF + +# Non-Linux support (Mac OSX options) must remain OFF: +OPENCV4_CONF_OPTS += \ + -DWITH_AVFOUNDATION=OFF \ + -DWITH_CARBON=OFF \ + -DWITH_QUICKTIME=OFF + +# Non-Linux support (Windows options) must remain OFF: +OPENCV4_CONF_OPTS += \ + -DWITH_CSTRIPES=OFF \ + -DWITH_DSHOW=OFF \ + -DWITH_MSMF=OFF \ + -DWITH_VFW=OFF \ + -DWITH_VIDEOINPUT=OFF \ + -DWITH_WIN32UI=OFF + +# Software/3rd-party support options: +# - disable all examples +OPENCV4_CONF_OPTS += \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_JASPER=OFF \ + -DBUILD_JPEG=OFF \ + -DBUILD_OPENEXR=OFF \ + -DBUILD_OPENJPEG=OFF \ + -DBUILD_PNG=OFF \ + -DBUILD_PROTOBUF=OFF \ + -DBUILD_TIFF=OFF \ + -DBUILD_ZLIB=OFF \ + -DINSTALL_C_EXAMPLES=OFF \ + -DINSTALL_PYTHON_EXAMPLES=OFF \ + -DINSTALL_TO_MANGLED_PATHS=OFF + +# Disabled features (mostly because they are not available in Buildroot), but +# - eigen: OpenCV does not use it, not take any benefit from it. +OPENCV4_CONF_OPTS += \ + -DWITH_1394=OFF \ + -DWITH_CLP=OFF \ + -DWITH_EIGEN=OFF \ + -DWITH_GDAL=OFF \ + -DWITH_GPHOTO2=OFF \ + -DWITH_GSTREAMER_0_10=OFF \ + -DWITH_LAPACK=OFF \ + -DWITH_MATLAB=OFF \ + -DWITH_OPENCL=OFF \ + -DWITH_OPENCL_SVM=OFF \ + -DWITH_OPENEXR=OFF \ + -DWITH_OPENNI2=OFF \ + -DWITH_OPENNI=OFF \ + -DWITH_UNICAP=OFF \ + -DWITH_VA=OFF \ + -DWITH_VA_INTEL=OFF \ + -DWITH_VTK=OFF \ + -DWITH_XINE=OFF + +OPENCV4_DEPENDENCIES += host-pkgconf zlib + +ifeq ($(BR2_PACKAGE_OPENCV4_JPEG2000_WITH_JASPER),y) +OPENCV4_CONF_OPTS += -DWITH_JASPER=ON +OPENCV4_DEPENDENCIES += jasper +else +OPENCV4_CONF_OPTS += -DWITH_JASPER=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_JPEG2000_WITH_OPENJPEG),y) +OPENCV4_CONF_OPTS += -DWITH_OPENJPEG=ON +OPENCV4_DEPENDENCIES += openjpeg +else +OPENCV4_CONF_OPTS += -DWITH_OPENJPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_FFMPEG),y) +OPENCV4_CONF_OPTS += -DWITH_FFMPEG=ON +OPENCV4_DEPENDENCIES += ffmpeg bzip2 +else +OPENCV4_CONF_OPTS += -DWITH_FFMPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_GSTREAMER1),y) +OPENCV4_CONF_OPTS += -DWITH_GSTREAMER=ON +OPENCV4_DEPENDENCIES += gstreamer1 gst1-plugins-base +else +OPENCV4_CONF_OPTS += -DWITH_GSTREAMER=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_GTK)$(BR2_PACKAGE_OPENCV4_WITH_GTK3),) +OPENCV4_CONF_OPTS += -DWITH_GTK=OFF -DWITH_GTK_2_X=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_GTK),y) +OPENCV4_CONF_OPTS += -DWITH_GTK=ON -DWITH_GTK_2_X=ON +OPENCV4_DEPENDENCIES += libgtk2 +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_GTK3),y) +OPENCV4_CONF_OPTS += -DWITH_GTK=ON -DWITH_GTK_2_X=OFF +OPENCV4_DEPENDENCIES += libgtk3 +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_JPEG),y) +OPENCV4_CONF_OPTS += -DWITH_JPEG=ON +OPENCV4_DEPENDENCIES += jpeg +else +OPENCV4_CONF_OPTS += -DWITH_JPEG=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_OPENGL),y) +OPENCV4_CONF_OPTS += -DWITH_OPENGL=ON +OPENCV4_DEPENDENCIES += libgl +else +OPENCV4_CONF_OPTS += -DWITH_OPENGL=OFF +endif + +OPENCV4_CONF_OPTS += -DWITH_OPENMP=$(if $(BR2_TOOLCHAIN_HAS_OPENMP),ON,OFF) + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_PNG),y) +OPENCV4_CONF_OPTS += -DWITH_PNG=ON +OPENCV4_DEPENDENCIES += libpng +else +OPENCV4_CONF_OPTS += -DWITH_PNG=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_PROTOBUF),y) +OPENCV4_CONF_OPTS += \ + -DPROTOBUF_UPDATE_FILES=ON \ + -DWITH_PROTOBUF=ON +OPENCV4_DEPENDENCIES += protobuf +else +OPENCV4_CONF_OPTS += -DWITH_PROTOBUF=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_QT5),y) +OPENCV4_CONF_OPTS += -DWITH_QT=5 +OPENCV4_DEPENDENCIES += qt5base +else +OPENCV4_CONF_OPTS += -DWITH_QT=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_TIFF),y) +OPENCV4_CONF_OPTS += -DWITH_TIFF=ON +OPENCV4_DEPENDENCIES += tiff +else +OPENCV4_CONF_OPTS += -DWITH_TIFF=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_V4L),y) +OPENCV4_CONF_OPTS += \ + -DWITH_LIBV4L=$(if $(BR2_PACKAGE_LIBV4L),ON,OFF) \ + -DWITH_V4L=ON +OPENCV4_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBV4L),libv4l) +else +OPENCV4_CONF_OPTS += -DWITH_V4L=OFF -DWITH_LIBV4L=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_WITH_WEBP),y) +OPENCV4_CONF_OPTS += -DWITH_WEBP=ON +OPENCV4_DEPENDENCIES += webp +else +OPENCV4_CONF_OPTS += -DWITH_WEBP=OFF +endif + +ifeq ($(BR2_PACKAGE_OPENCV4_LIB_PYTHON),y) +OPENCV4_CONF_OPTS += \ + -DBUILD_opencv_python2=OFF \ + -DBUILD_opencv_python3=ON \ + -DPYTHON3_EXECUTABLE=$(HOST_DIR)/bin/python3 \ + -DPYTHON3_INCLUDE_PATH=$(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR) \ + -DPYTHON3_LIBRARIES=$(STAGING_DIR)/usr/lib/libpython$(PYTHON3_VERSION_MAJOR).so \ + -DPYTHON3_NUMPY_INCLUDE_DIRS=$(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/numpy/core/include \ + -DPYTHON3_PACKAGES_PATH=/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages \ + -DPYTHON3_NUMPY_VERSION=$(PYTHON_NUMPY_VERSION) +OPENCV4_DEPENDENCIES += python3 +OPENCV4_KEEP_PY_FILES += usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/cv2/config*.py +OPENCV4_CONF_ENV += $(PKG_PYTHON_DISTUTILS_ENV) +OPENCV4_DEPENDENCIES += python-numpy +else +OPENCV4_CONF_OPTS += \ + -DBUILD_opencv_python2=OFF \ + -DBUILD_opencv_python3=OFF +endif + +# Installation hooks: +define OPENCV4_CLEAN_INSTALL_LICENSE + $(RM) -fr $(TARGET_DIR)/usr/share/licenses/opencv4 +endef +OPENCV4_POST_INSTALL_TARGET_HOOKS += OPENCV4_CLEAN_INSTALL_LICENSE + +define OPENCV4_CLEAN_INSTALL_VALGRIND + $(RM) -f $(TARGET_DIR)/usr/share/opencv4/valgrind* +endef +OPENCV4_POST_INSTALL_TARGET_HOOKS += OPENCV4_CLEAN_INSTALL_VALGRIND + +ifneq ($(BR2_PACKAGE_OPENCV4_INSTALL_DATA),y) +define OPENCV4_CLEAN_INSTALL_DATA + $(RM) -fr $(TARGET_DIR)/usr/share/opencv4/haarcascades \ + $(TARGET_DIR)/usr/share/opencv4/lbpcascades +endef +OPENCV4_POST_INSTALL_TARGET_HOOKS += OPENCV4_CLEAN_INSTALL_DATA +endif + +$(eval $(cmake-package))