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