1################################################################################ 2# 3# opencv3 4# 5################################################################################ 6 7OPENCV3_VERSION = 3.4.15 8OPENCV3_SITE = $(call github,opencv,opencv,$(OPENCV3_VERSION)) 9OPENCV3_INSTALL_STAGING = YES 10OPENCV3_LICENSE = BSD-3-Clause 11OPENCV3_LICENSE_FILES = LICENSE 12OPENCV3_CPE_ID_VENDOR = opencv 13OPENCV3_CPE_ID_PRODUCT = opencv 14OPENCV3_SUPPORTS_IN_SOURCE_BUILD = NO 15 16OPENCV3_CXXFLAGS = $(TARGET_CXXFLAGS) 17 18# Uses __atomic_fetch_add_4 19ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) 20OPENCV3_CXXFLAGS += -latomic 21endif 22 23# Fix c++11 build with missing std::exception_ptr 24ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_64735),y) 25OPENCV3_CXXFLAGS += -DCV__EXCEPTION_PTR=0 26endif 27 28ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_68485),y) 29OPENCV3_CXXFLAGS += -O0 30endif 31 32# OpenCV component options 33OPENCV3_CONF_OPTS += \ 34 -DCMAKE_CXX_FLAGS="$(OPENCV3_CXXFLAGS)" \ 35 -DBUILD_DOCS=OFF \ 36 -DBUILD_PERF_TESTS=$(if $(BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS),ON,OFF) \ 37 -DBUILD_TESTS=$(if $(BR2_PACKAGE_OPENCV3_BUILD_TESTS),ON,OFF) \ 38 -DBUILD_WITH_DEBUG_INFO=OFF \ 39 -DDOWNLOAD_EXTERNAL_TEST_DATA=OFF \ 40 -DOPENCV_ENABLE_PKG_CONFIG=ON 41 42ifeq ($(BR2_PACKAGE_OPENCV3_BUILD_TESTS)$(BR2_PACKAGE_OPENCV3_BUILD_PERF_TESTS),) 43OPENCV3_CONF_OPTS += -DINSTALL_TEST=OFF 44else 45OPENCV3_CONF_OPTS += -DINSTALL_TEST=ON 46endif 47 48# OpenCV build options 49OPENCV3_CONF_OPTS += \ 50 -DBUILD_WITH_STATIC_CRT=OFF \ 51 -DENABLE_CCACHE=OFF \ 52 -DENABLE_COVERAGE=OFF \ 53 -DENABLE_FAST_MATH=ON \ 54 -DENABLE_IMPL_COLLECTION=OFF \ 55 -DENABLE_NOISY_WARNINGS=OFF \ 56 -DENABLE_OMIT_FRAME_POINTER=ON \ 57 -DENABLE_PRECOMPILED_HEADERS=OFF \ 58 -DENABLE_PROFILING=OFF \ 59 -DOPENCV_WARNINGS_ARE_ERRORS=OFF 60 61# OpenCV link options 62OPENCV3_CONF_OPTS += \ 63 -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF \ 64 -DCMAKE_SKIP_RPATH=OFF \ 65 -DCMAKE_USE_RELATIVE_PATHS=OFF 66 67# OpenCV packaging options: 68OPENCV3_CONF_OPTS += \ 69 -DBUILD_PACKAGE=OFF \ 70 -DENABLE_SOLUTION_FOLDERS=OFF \ 71 -DINSTALL_CREATE_DISTRIB=OFF 72 73# OpenCV module selection 74# * Modules on: 75# - core: if not set, opencv does not build anything 76# - hal: core's dependency 77# * Modules off: 78# - android*: android stuff 79# - apps: programs for training classifiers 80# - java: java bindings 81# - viz: missing VTK dependency 82# - world: all-in-one module 83# 84# * Contrib modules from [1] are disabled: 85# - opencv_contrib package is not available in Buildroot; 86# - OPENCV3_EXTRA_MODULES_PATH is not set. 87# 88# [1] https://github.com/Itseez/opencv_contrib 89OPENCV3_CONF_OPTS += \ 90 -DBUILD_opencv_androidcamera=OFF \ 91 -DBUILD_opencv_apps=OFF \ 92 -DBUILD_opencv_calib3d=$(if $(BR2_PACKAGE_OPENCV3_LIB_CALIB3D),ON,OFF) \ 93 -DBUILD_opencv_core=ON \ 94 -DBUILD_opencv_features2d=$(if $(BR2_PACKAGE_OPENCV3_LIB_FEATURES2D),ON,OFF) \ 95 -DBUILD_opencv_flann=$(if $(BR2_PACKAGE_OPENCV3_LIB_FLANN),ON,OFF) \ 96 -DBUILD_opencv_highgui=$(if $(BR2_PACKAGE_OPENCV3_LIB_HIGHGUI),ON,OFF) \ 97 -DBUILD_opencv_imgcodecs=$(if $(BR2_PACKAGE_OPENCV3_LIB_IMGCODECS),ON,OFF) \ 98 -DBUILD_opencv_imgproc=$(if $(BR2_PACKAGE_OPENCV3_LIB_IMGPROC),ON,OFF) \ 99 -DBUILD_opencv_java=OFF \ 100 -DBUILD_opencv_ml=$(if $(BR2_PACKAGE_OPENCV3_LIB_ML),ON,OFF) \ 101 -DBUILD_opencv_objdetect=$(if $(BR2_PACKAGE_OPENCV3_LIB_OBJDETECT),ON,OFF) \ 102 -DBUILD_opencv_photo=$(if $(BR2_PACKAGE_OPENCV3_LIB_PHOTO),ON,OFF) \ 103 -DBUILD_opencv_shape=$(if $(BR2_PACKAGE_OPENCV3_LIB_SHAPE),ON,OFF) \ 104 -DBUILD_opencv_stitching=$(if $(BR2_PACKAGE_OPENCV3_LIB_STITCHING),ON,OFF) \ 105 -DBUILD_opencv_superres=$(if $(BR2_PACKAGE_OPENCV3_LIB_SUPERRES),ON,OFF) \ 106 -DBUILD_opencv_ts=$(if $(BR2_PACKAGE_OPENCV3_LIB_TS),ON,OFF) \ 107 -DBUILD_opencv_video=$(if $(BR2_PACKAGE_OPENCV3_LIB_VIDEO),ON,OFF) \ 108 -DBUILD_opencv_videoio=$(if $(BR2_PACKAGE_OPENCV3_LIB_VIDEOIO),ON,OFF) \ 109 -DBUILD_opencv_videostab=$(if $(BR2_PACKAGE_OPENCV3_LIB_VIDEOSTAB),ON,OFF) \ 110 -DBUILD_opencv_viz=OFF \ 111 -DBUILD_opencv_world=OFF 112 113# Hardware support options. 114# 115# * PowerPC and VFPv3 support are turned off since their only effects 116# are altering CFLAGS, adding '-mcpu=G3 -mtune=G5' or '-mfpu=vfpv3' 117# to them, which is already handled by Buildroot. 118# * NEON logic is needed as it is not only used to add CFLAGS, but 119# also to enable additional NEON code. 120OPENCV3_CONF_OPTS += \ 121 -DENABLE_POWERPC=OFF \ 122 -DENABLE_NEON=$(if $(BR2_ARM_CPU_HAS_NEON),ON,OFF) \ 123 -DENABLE_VFPV3=OFF 124 125# Cuda stuff 126OPENCV3_CONF_OPTS += \ 127 -DBUILD_CUDA_STUBS=OFF \ 128 -DBUILD_opencv_cudaarithm=OFF \ 129 -DBUILD_opencv_cudabgsegm=OFF \ 130 -DBUILD_opencv_cudacodec=OFF \ 131 -DBUILD_opencv_cudafeatures2d=OFF \ 132 -DBUILD_opencv_cudafilters=OFF \ 133 -DBUILD_opencv_cudaimgproc=OFF \ 134 -DBUILD_opencv_cudalegacy=OFF \ 135 -DBUILD_opencv_cudaobjdetect=OFF \ 136 -DBUILD_opencv_cudaoptflow=OFF \ 137 -DBUILD_opencv_cudastereo=OFF \ 138 -DBUILD_opencv_cudawarping=OFF \ 139 -DBUILD_opencv_cudev=OFF \ 140 -DWITH_CUBLAS=OFF \ 141 -DWITH_CUDA=OFF \ 142 -DWITH_CUFFT=OFF 143 144# NVidia stuff 145OPENCV3_CONF_OPTS += -DWITH_NVCUVID=OFF 146 147# AMD stuff 148OPENCV3_CONF_OPTS += \ 149 -DWITH_OPENCLAMDBLAS=OFF \ 150 -DWITH_OPENCLAMDFFT=OFF 151 152# Intel stuff 153OPENCV3_CONF_OPTS += \ 154 -DBUILD_WITH_DYNAMIC_IPP=OFF \ 155 -DWITH_INTELPERC=OFF \ 156 -DWITH_IPP=OFF \ 157 -DWITH_IPP_A=OFF \ 158 -DWITH_TBB=OFF 159 160# Smartek stuff 161OPENCV3_CONF_OPTS += -DWITH_GIGEAPI=OFF 162 163# Prosilica stuff 164OPENCV3_CONF_OPTS += -DWITH_PVAPI=OFF 165 166# Ximea stuff 167OPENCV3_CONF_OPTS += -DWITH_XIMEA=OFF 168 169# Non-Linux support (Android options) must remain OFF: 170OPENCV3_CONF_OPTS += \ 171 -DANDROID=OFF \ 172 -DBUILD_ANDROID_CAMERA_WRAPPER=OFF \ 173 -DBUILD_ANDROID_EXAMPLES=OFF \ 174 -DBUILD_ANDROID_SERVICE=OFF \ 175 -DBUILD_FAT_JAVA_LIB=OFF \ 176 -DINSTALL_ANDROID_EXAMPLES=OFF \ 177 -DWITH_ANDROID_CAMERA=OFF 178 179# Non-Linux support (Mac OSX options) must remain OFF: 180OPENCV3_CONF_OPTS += \ 181 -DWITH_AVFOUNDATION=OFF \ 182 -DWITH_CARBON=OFF \ 183 -DWITH_QUICKTIME=OFF 184 185# Non-Linux support (Windows options) must remain OFF: 186OPENCV3_CONF_OPTS += \ 187 -DWITH_CSTRIPES=OFF \ 188 -DWITH_DSHOW=OFF \ 189 -DWITH_MSMF=OFF \ 190 -DWITH_VFW=OFF \ 191 -DWITH_VIDEOINPUT=OFF \ 192 -DWITH_WIN32UI=OFF 193 194# Software/3rd-party support options: 195# - disable all examples 196OPENCV3_CONF_OPTS += \ 197 -DBUILD_EXAMPLES=OFF \ 198 -DBUILD_JASPER=OFF \ 199 -DBUILD_JPEG=OFF \ 200 -DBUILD_OPENEXR=OFF \ 201 -DBUILD_PNG=OFF \ 202 -DBUILD_PROTOBUF=OFF \ 203 -DBUILD_TIFF=OFF \ 204 -DBUILD_ZLIB=OFF \ 205 -DINSTALL_C_EXAMPLES=OFF \ 206 -DINSTALL_PYTHON_EXAMPLES=OFF \ 207 -DINSTALL_TO_MANGLED_PATHS=OFF 208 209# Disabled features (mostly because they are not available in Buildroot), but 210# - eigen: OpenCV does not use it, not take any benefit from it. 211OPENCV3_CONF_OPTS += \ 212 -DWITH_1394=OFF \ 213 -DWITH_CLP=OFF \ 214 -DWITH_EIGEN=OFF \ 215 -DWITH_GDAL=OFF \ 216 -DWITH_GPHOTO2=OFF \ 217 -DWITH_GSTREAMER_0_10=OFF \ 218 -DWITH_LAPACK=OFF \ 219 -DWITH_MATLAB=OFF \ 220 -DWITH_OPENCL=OFF \ 221 -DWITH_OPENCL_SVM=OFF \ 222 -DWITH_OPENEXR=OFF \ 223 -DWITH_OPENNI2=OFF \ 224 -DWITH_OPENNI=OFF \ 225 -DWITH_UNICAP=OFF \ 226 -DWITH_VA=OFF \ 227 -DWITH_VA_INTEL=OFF \ 228 -DWITH_VTK=OFF \ 229 -DWITH_XINE=OFF 230 231OPENCV3_DEPENDENCIES += host-pkgconf zlib 232 233ifeq ($(BR2_PACKAGE_OPENCV3_WITH_FFMPEG),y) 234OPENCV3_CONF_OPTS += -DWITH_FFMPEG=ON 235OPENCV3_DEPENDENCIES += ffmpeg bzip2 236else 237OPENCV3_CONF_OPTS += -DWITH_FFMPEG=OFF 238endif 239 240ifeq ($(BR2_PACKAGE_OPENCV3_WITH_GSTREAMER1),y) 241OPENCV3_CONF_OPTS += -DWITH_GSTREAMER=ON 242OPENCV3_DEPENDENCIES += gstreamer1 gst1-plugins-base 243else 244OPENCV3_CONF_OPTS += -DWITH_GSTREAMER=OFF 245endif 246 247ifeq ($(BR2_PACKAGE_OPENCV3_WITH_GTK)$(BR2_PACKAGE_OPENCV3_WITH_GTK3),) 248OPENCV3_CONF_OPTS += -DWITH_GTK=OFF -DWITH_GTK_2_X=OFF 249endif 250 251ifeq ($(BR2_PACKAGE_OPENCV3_WITH_GTK),y) 252OPENCV3_CONF_OPTS += -DWITH_GTK=ON -DWITH_GTK_2_X=ON 253OPENCV3_DEPENDENCIES += libgtk2 254endif 255 256ifeq ($(BR2_PACKAGE_OPENCV3_WITH_GTK3),y) 257OPENCV3_CONF_OPTS += -DWITH_GTK=ON -DWITH_GTK_2_X=OFF 258OPENCV3_DEPENDENCIES += libgtk3 259endif 260 261ifeq ($(BR2_PACKAGE_OPENCV3_WITH_JASPER),y) 262OPENCV3_CONF_OPTS += -DWITH_JASPER=ON 263OPENCV3_DEPENDENCIES += jasper 264else 265OPENCV3_CONF_OPTS += -DWITH_JASPER=OFF 266endif 267 268ifeq ($(BR2_PACKAGE_OPENCV3_WITH_JPEG),y) 269OPENCV3_CONF_OPTS += -DWITH_JPEG=ON 270OPENCV3_DEPENDENCIES += jpeg 271else 272OPENCV3_CONF_OPTS += -DWITH_JPEG=OFF 273endif 274 275ifeq ($(BR2_PACKAGE_OPENCV3_WITH_OPENGL),y) 276OPENCV3_CONF_OPTS += -DWITH_OPENGL=ON 277OPENCV3_DEPENDENCIES += libgl 278else 279OPENCV3_CONF_OPTS += -DWITH_OPENGL=OFF 280endif 281 282OPENCV3_CONF_OPTS += -DWITH_OPENMP=$(if $(BR2_TOOLCHAIN_HAS_OPENMP),ON,OFF) 283 284ifeq ($(BR2_PACKAGE_OPENCV3_WITH_PNG),y) 285OPENCV3_CONF_OPTS += -DWITH_PNG=ON 286OPENCV3_DEPENDENCIES += libpng 287else 288OPENCV3_CONF_OPTS += -DWITH_PNG=OFF 289endif 290 291ifeq ($(BR2_PACKAGE_OPENCV3_WITH_PROTOBUF),y) 292# protobuf needs c++11 (since 3.6.0) 293OPENCV3_CONF_OPTS += \ 294 -DENABLE_CXX11=ON \ 295 -DPROTOBUF_UPDATE_FILES=ON \ 296 -DWITH_PROTOBUF=ON 297OPENCV3_DEPENDENCIES += protobuf 298else 299OPENCV3_CONF_OPTS += -DWITH_PROTOBUF=OFF 300endif 301 302ifeq ($(BR2_PACKAGE_OPENCV3_WITH_QT5),y) 303OPENCV3_CONF_OPTS += -DWITH_QT=5 304OPENCV3_DEPENDENCIES += qt5base 305else 306OPENCV3_CONF_OPTS += -DWITH_QT=OFF 307endif 308 309ifeq ($(BR2_PACKAGE_OPENCV3_WITH_TIFF),y) 310OPENCV3_CONF_OPTS += -DWITH_TIFF=ON 311OPENCV3_DEPENDENCIES += tiff 312else 313OPENCV3_CONF_OPTS += -DWITH_TIFF=OFF 314endif 315 316ifeq ($(BR2_PACKAGE_OPENCV3_WITH_V4L),y) 317OPENCV3_CONF_OPTS += \ 318 -DWITH_LIBV4L=$(if $(BR2_PACKAGE_LIBV4L),ON,OFF) \ 319 -DWITH_V4L=ON 320OPENCV3_DEPENDENCIES += $(if $(BR2_PACKAGE_LIBV4L),libv4l) 321else 322OPENCV3_CONF_OPTS += -DWITH_V4L=OFF -DWITH_LIBV4L=OFF 323endif 324 325ifeq ($(BR2_PACKAGE_OPENCV3_WITH_WEBP),y) 326OPENCV3_CONF_OPTS += -DWITH_WEBP=ON 327OPENCV3_DEPENDENCIES += webp 328else 329OPENCV3_CONF_OPTS += -DWITH_WEBP=OFF 330endif 331 332ifeq ($(BR2_PACKAGE_OPENCV3_LIB_PYTHON),y) 333OPENCV3_CONF_OPTS += \ 334 -DBUILD_opencv_python2=OFF \ 335 -DBUILD_opencv_python3=ON \ 336 -DPYTHON3_EXECUTABLE=$(HOST_DIR)/bin/python3 \ 337 -DPYTHON3_INCLUDE_PATH=$(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION_MAJOR) \ 338 -DPYTHON3_LIBRARIES=$(STAGING_DIR)/usr/lib/libpython$(PYTHON3_VERSION_MAJOR).so \ 339 -DPYTHON3_NUMPY_INCLUDE_DIRS=$(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/numpy/core/include \ 340 -DPYTHON3_PACKAGES_PATH=/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages \ 341 -DPYTHON3_NUMPY_VERSION=$(PYTHON_NUMPY_VERSION) 342OPENCV3_DEPENDENCIES += python3 343OPENCV3_KEEP_PY_FILES += usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/cv2/config*.py 344OPENCV3_CONF_ENV += $(PKG_PYTHON_DISTUTILS_ENV) 345OPENCV3_DEPENDENCIES += python-numpy 346else 347OPENCV3_CONF_OPTS += \ 348 -DBUILD_opencv_python2=OFF \ 349 -DBUILD_opencv_python3=OFF 350endif 351 352# Installation hooks: 353define OPENCV3_CLEAN_INSTALL_LICENSE 354 $(RM) -fr $(TARGET_DIR)/usr/share/licenses/opencv3 355endef 356OPENCV3_POST_INSTALL_TARGET_HOOKS += OPENCV3_CLEAN_INSTALL_LICENSE 357 358define OPENCV3_CLEAN_INSTALL_CMAKE 359 $(RM) -f $(TARGET_DIR)/usr/share/OpenCV/OpenCV*.cmake 360endef 361OPENCV3_POST_INSTALL_TARGET_HOOKS += OPENCV3_CLEAN_INSTALL_CMAKE 362 363define OPENCV3_CLEAN_INSTALL_VALGRIND 364 $(RM) -f $(TARGET_DIR)/usr/share/OpenCV/valgrind* 365endef 366OPENCV3_POST_INSTALL_TARGET_HOOKS += OPENCV3_CLEAN_INSTALL_VALGRIND 367 368ifneq ($(BR2_PACKAGE_OPENCV3_INSTALL_DATA),y) 369define OPENCV3_CLEAN_INSTALL_DATA 370 $(RM) -fr $(TARGET_DIR)/usr/share/OpenCV/haarcascades \ 371 $(TARGET_DIR)/usr/share/OpenCV/lbpcascades 372endef 373OPENCV3_POST_INSTALL_TARGET_HOOKS += OPENCV3_CLEAN_INSTALL_DATA 374endif 375 376$(eval $(cmake-package)) 377