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