xref: /OK3568_Linux_fs/buildroot/package/opencv4/opencv4.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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