xref: /OK3568_Linux_fs/buildroot/package/qt5/qt5base/qt5base.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2#
3# qt5base
4#
5################################################################################
6
7QT5BASE_VERSION = 2ffb7ad8a1079a0444b9c72affe3d19b089b60de
8QT5BASE_SITE = $(QT5_SITE)/qtbase/-/archive/$(QT5BASE_VERSION)
9QT5BASE_SOURCE = qtbase-$(QT5BASE_VERSION).tar.bz2
10
11QT5BASE_DEPENDENCIES = host-pkgconf pcre2 zlib
12QT5BASE_INSTALL_STAGING = YES
13QT5BASE_SYNC_QT_HEADERS = YES
14
15# From commits:
16# 4ce7053a59 "Avoid processing-intensive painting of high number of tiny dashes"
17# e7ea2ed27c "Improve fix for avoiding huge number of tiny dashes"
18QT5BASE_IGNORE_CVES += CVE-2021-38593
19# From commit 2766b2cba6ca4b1c430304df5437e2a6c874b107 "QProcess/Unix: ensure we don't accidentally execute something from CWD"
20QT5BASE_IGNORE_CVES += CVE-2022-25255
21# From commit e68ca8e51375d963b2391715f70b42707992dbd8 "Windows: use QSystemLibrary instead of LoadLibrary directly"
22QT5BASE_IGNORE_CVES += CVE-2022-25634
23
24# A few comments:
25#  * -no-pch to workaround the issue described at
26#     http://comments.gmane.org/gmane.comp.lib.qt.devel/5933.
27#  * -system-zlib because zlib is mandatory for Qt build, and we
28#     want to use the Buildroot packaged zlib
29#  * -system-pcre because pcre is mandatory to build Qt, and we
30#    want to use the one packaged in Buildroot
31#  * -no-feature-relocatable to work around path mismatch
32#     while searching qml files and buildroot BR2_ROOTFS_MERGED_USR
33#     feature enabled
34QT5BASE_CONFIGURE_OPTS += \
35	-optimized-qmake \
36	-no-iconv \
37	-system-zlib \
38	-system-pcre \
39	-no-pch \
40	-shared \
41	-no-feature-relocatable
42
43ifeq ($(BR2_PACKAGE_BINUTILS_ENABLE_GOLD),y)
44QT5BASE_CONFIGURE_OPTS += \
45	-linker gold
46endif
47
48# starting from version 5.9.0, -optimize-debug is enabled by default
49# for debug builds and it overrides -O* with -Og which is not what we
50# want.
51QT5BASE_CONFIGURE_OPTS += -no-optimize-debug
52
53QT5BASE_CFLAGS = $(TARGET_CFLAGS)
54QT5BASE_CXXFLAGS = $(TARGET_CXXFLAGS)
55
56ifeq ($(BR2_TOOLCHAIN_HAS_GCC_BUG_90620),y)
57QT5BASE_CFLAGS += -O0
58QT5BASE_CXXFLAGS += -O0
59endif
60
61ifeq ($(BR2_ARM_CPU_HAS_NEON),y)
62QT5BASE_CFLAGS += -mfpu=neon
63endif
64
65ifeq ($(BR2_X86_CPU_HAS_SSE2),)
66QT5BASE_CONFIGURE_OPTS += -no-sse2
67else ifeq ($(BR2_X86_CPU_HAS_SSE3),)
68QT5BASE_CONFIGURE_OPTS += -no-sse3
69else ifeq ($(BR2_X86_CPU_HAS_SSSE3),)
70QT5BASE_CONFIGURE_OPTS += -no-ssse3
71else ifeq ($(BR2_X86_CPU_HAS_SSE4),)
72QT5BASE_CONFIGURE_OPTS += -no-sse4.1
73else ifeq ($(BR2_X86_CPU_HAS_SSE42),)
74QT5BASE_CONFIGURE_OPTS += -no-sse4.2
75else ifeq ($(BR2_X86_CPU_HAS_AVX),)
76QT5BASE_CONFIGURE_OPTS += -no-avx
77else ifeq ($(BR2_X86_CPU_HAS_AVX2),)
78QT5BASE_CONFIGURE_OPTS += -no-avx2
79else
80# no buildroot BR2_X86_CPU_HAS_AVX512 option yet for qt configure
81# option '-no-avx512'
82endif
83
84ifeq ($(BR2_PACKAGE_LIBDRM),y)
85QT5BASE_CONFIGURE_OPTS += -kms
86QT5BASE_DEPENDENCIES += libdrm
87else
88QT5BASE_CONFIGURE_OPTS += -no-kms
89endif
90
91ifeq ($(BR2_PACKAGE_HAS_LIBGBM),y)
92QT5BASE_CONFIGURE_OPTS += -gbm
93QT5BASE_DEPENDENCIES += libgbm
94else
95QT5BASE_CONFIGURE_OPTS += -no-gbm
96endif
97
98ifeq ($(BR2_ENABLE_RUNTIME_DEBUG),y)
99QT5BASE_CONFIGURE_OPTS += -debug
100else
101QT5BASE_CONFIGURE_OPTS += -release
102endif
103
104QT5BASE_CONFIGURE_OPTS += -opensource -confirm-license
105QT5BASE_LICENSE = GPL-2.0+ or LGPL-3.0, GPL-3.0 with exception(tools), GFDL-1.3 (docs)
106QT5BASE_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT LICENSE.LGPLv3 LICENSE.FDL
107ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y)
108QT5BASE_LICENSE += , BSD-3-Clause (examples)
109endif
110
111QT5BASE_CONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_QT5BASE_CONFIG_FILE))
112
113ifneq ($(QT5BASE_CONFIG_FILE),)
114QT5BASE_CONFIGURE_OPTS += -qconfig buildroot
115endif
116
117ifeq ($(BR2_PACKAGE_HAS_UDEV),y)
118QT5BASE_DEPENDENCIES += udev
119endif
120
121ifeq ($(BR2_PACKAGE_CUPS), y)
122QT5BASE_DEPENDENCIES += cups
123QT5BASE_CONFIGURE_OPTS += -cups
124else
125QT5BASE_CONFIGURE_OPTS += -no-cups
126endif
127
128ifeq ($(BR2_PACKAGE_ZSTD),y)
129QT5BASE_DEPENDENCIES += zstd
130QT5BASE_CONFIGURE_OPTS += -zstd
131else
132QT5BASE_CONFIGURE_OPTS += -no-zstd
133endif
134
135# Qt5 SQL Plugins
136ifeq ($(BR2_PACKAGE_QT5BASE_SQL),y)
137ifeq ($(BR2_PACKAGE_QT5BASE_MYSQL),y)
138QT5BASE_CONFIGURE_OPTS += -plugin-sql-mysql -mysql_config $(STAGING_DIR)/usr/bin/mysql_config
139QT5BASE_DEPENDENCIES   += mysql
140else
141QT5BASE_CONFIGURE_OPTS += -no-sql-mysql
142endif
143
144ifeq ($(BR2_PACKAGE_QT5BASE_PSQL),y)
145QT5BASE_CONFIGURE_OPTS += -plugin-sql-psql -psql_config $(STAGING_DIR)/usr/bin/pg_config
146QT5BASE_DEPENDENCIES   += postgresql
147else
148QT5BASE_CONFIGURE_OPTS += -no-sql-psql
149endif
150
151QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_SQLITE_QT),-plugin-sql-sqlite)
152QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_SQLITE_SYSTEM),-system-sqlite)
153QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_QT5BASE_SQLITE_SYSTEM),sqlite)
154QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_SQLITE_NONE),-no-sql-sqlite)
155endif
156
157ifeq ($(BR2_PACKAGE_QT5BASE_GUI),y)
158QT5BASE_CONFIGURE_OPTS += -gui -system-freetype
159QT5BASE_DEPENDENCIES += freetype
160else
161QT5BASE_CONFIGURE_OPTS += -no-gui -no-freetype
162endif
163
164ifeq ($(BR2_PACKAGE_QT5BASE_HARFBUZZ),y)
165ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_4),y)
166# system harfbuzz in case __sync for 4 bytes is supported
167QT5BASE_CONFIGURE_OPTS += -system-harfbuzz
168QT5BASE_DEPENDENCIES += harfbuzz
169else
170# qt harfbuzz otherwise (using QAtomic instead)
171QT5BASE_CONFIGURE_OPTS += -qt-harfbuzz
172QT5BASE_LICENSE += , MIT (harfbuzz)
173QT5BASE_LICENSE_FILES += src/3rdparty/harfbuzz-ng/COPYING
174endif
175else
176QT5BASE_CONFIGURE_OPTS += -no-harfbuzz
177endif
178
179QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_WIDGETS),-widgets,-no-widgets)
180# We have to use --enable-linuxfb, otherwise Qt thinks that -linuxfb
181# is to add a link against the "inuxfb" library.
182QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_LINUXFB),--enable-linuxfb,-no-linuxfb)
183QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_DIRECTFB),-directfb,-no-directfb)
184QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_QT5BASE_DIRECTFB),directfb)
185
186ifeq ($(BR2_PACKAGE_LIBXKBCOMMON),y)
187QT5BASE_CONFIGURE_OPTS += -xkbcommon
188QT5BASE_DEPENDENCIES   += libxkbcommon
189endif
190
191ifeq ($(BR2_PACKAGE_QT5BASE_XCB),y)
192QT5BASE_CONFIGURE_OPTS += -xcb
193
194QT5BASE_DEPENDENCIES   += \
195	libxcb \
196	xcb-util-wm \
197	xcb-util-image \
198	xcb-util-keysyms \
199	xcb-util-renderutil \
200	xlib_libX11
201ifeq ($(BR2_PACKAGE_QT5BASE_WIDGETS),y)
202QT5BASE_DEPENDENCIES   += xlib_libXext
203endif
204else
205QT5BASE_CONFIGURE_OPTS += -no-xcb
206endif
207
208ifeq ($(BR2_PACKAGE_QT5BASE_OPENGL_DESKTOP),y)
209QT5BASE_CONFIGURE_OPTS += -opengl desktop
210QT5BASE_DEPENDENCIES   += libgl
211else ifeq ($(BR2_PACKAGE_QT5BASE_OPENGL_ES2),y)
212QT5BASE_CONFIGURE_OPTS += -opengl es2
213QT5BASE_DEPENDENCIES   += libgles
214else
215QT5BASE_CONFIGURE_OPTS += -no-opengl
216endif
217
218QT5BASE_DEFAULT_QPA = $(call qstrip,$(BR2_PACKAGE_QT5BASE_DEFAULT_QPA))
219QT5BASE_CONFIGURE_OPTS += $(if $(QT5BASE_DEFAULT_QPA),-qpa $(QT5BASE_DEFAULT_QPA))
220
221ifeq ($(BR2_arc),y)
222# In case of -Os (which is default in BR) gcc will use millicode implementation
223# from libgcc. That along with performance degradation may lead to issues during
224# linkage stage. In case of QtWebkit exactly that happens - millicode functions
225# get put way too far from caller functions and so linker fails.
226# To solve that problem we explicitly disable millicode call generation for Qt.
227# Also due to some Qt5 libs being really huge (the best example is QtWebKit)
228# it's good to firce compiler to not assume short or even medium-length calls
229# could be used. I.e. always use long jump instaructions.
230# Otherwise there's a high risk of hitting link-time failures.
231QT5BASE_CFLAGS += -mno-millicode -mlong-calls
232endif
233
234ifeq ($(BR2_PACKAGE_QT5BASE_EGLFS),y)
235QT5BASE_CONFIGURE_OPTS += -eglfs
236QT5BASE_DEPENDENCIES   += libegl
237
238# Avoid conflict with Rockchip BSP kernel's logo.
239define QT5BASE_INSTALL_TARGET_ENV
240	echo "export QT_QPA_EGLFS_ALWAYS_SET_MODE=1" > $(@D)/qt_eglfs.sh
241	$(INSTALL) -D -m 0644 $(@D)/qt_eglfs.sh \
242		$(TARGET_DIR)/etc/profile.d/qt_eglfs.sh
243endef
244QT5BASE_POST_INSTALL_TARGET_HOOKS += QT5BASE_INSTALL_TARGET_ENV
245
246else
247QT5BASE_CONFIGURE_OPTS += -no-eglfs
248endif
249
250QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_LIBOPENSSL),-openssl,-no-openssl)
251QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_LIBOPENSSL),openssl)
252
253QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_FONTCONFIG),-fontconfig,-no-fontconfig)
254QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_QT5BASE_FONTCONFIG),fontconfig)
255QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_GIF),,-no-gif)
256QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_JPEG),-system-libjpeg,-no-libjpeg)
257QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_QT5BASE_JPEG),jpeg)
258QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_PNG),-system-libpng,-no-libpng)
259QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_QT5BASE_PNG),libpng)
260
261QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_DBUS),-dbus,-no-dbus)
262QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_QT5BASE_DBUS),dbus)
263
264QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_TSLIB),-tslib,-no-tslib)
265QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_QT5BASE_TSLIB),tslib)
266
267QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_LIBGLIB2),-glib,-no-glib)
268QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_LIBGLIB2),libglib2)
269
270QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_LIBKRB5),libkrb5)
271
272QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_ICU),-icu,-no-icu)
273QT5BASE_DEPENDENCIES   += $(if $(BR2_PACKAGE_QT5BASE_ICU),icu)
274
275QT5BASE_CONFIGURE_OPTS += $(if $(BR2_PACKAGE_QT5BASE_EXAMPLES),-make,-nomake) examples
276
277# see qt5base-5.15.2/src/corelib/global/qlogging.cpp:110 - __has_include(<execinfo.h>)
278ifeq ($(BR2_PACKAGE_LIBEXECINFO),y)
279QT5BASE_DEPENDENCIES += libexecinfo
280define QT5BASE_CONFIGURE_ARCH_CONFIG_LIBEXECINFO
281	printf '!host_build { \n LIBS += -lexecinfo\n }' >$(QT5BASE_ARCH_CONFIG_FILE)
282endef
283endif
284
285ifeq ($(BR2_PACKAGE_LIBINPUT),y)
286QT5BASE_CONFIGURE_OPTS += -libinput
287QT5BASE_DEPENDENCIES += libinput
288else
289QT5BASE_CONFIGURE_OPTS += -no-libinput
290endif
291
292# only enable gtk support if libgtk3 X11 backend is enabled
293ifeq ($(BR2_PACKAGE_LIBGTK3)$(BR2_PACKAGE_LIBGTK3_X11),yy)
294QT5BASE_CONFIGURE_OPTS += -gtk
295QT5BASE_DEPENDENCIES += libgtk3
296else
297QT5BASE_CONFIGURE_OPTS += -no-gtk
298endif
299
300ifeq ($(BR2_PACKAGE_SYSTEMD),y)
301QT5BASE_CONFIGURE_OPTS += -journald
302QT5BASE_DEPENDENCIES += systemd
303else
304QT5BASE_CONFIGURE_OPTS += -no-journald
305endif
306
307ifeq ($(BR2_PACKAGE_QT5BASE_USE_RGA),y)
308QT5BASE_CONFIGURE_OPTS += \
309	QMAKE_CXXFLAGS+=-DQT_USE_RGA QMAKE_LFLAGS+=-lrga
310QT5BASE_DEPENDENCIES += rockchip-rga
311endif
312
313ifeq ($(BR2_PACKAGE_QT5BASE_LINUXFB_RGB565),y)
314QT5BASE_CONFIGURE_OPTS += QMAKE_CXXFLAGS+=-DQT_FB_DRM_RGB565
315else ifeq ($(BR2_PACKAGE_QT5BASE_LINUXFB_RGB32),y)
316QT5BASE_CONFIGURE_OPTS += QMAKE_CXXFLAGS+=-DQT_FB_DRM_RGB32
317else ifeq ($(BR2_PACKAGE_QT5BASE_LINUXFB_ARGB32),y)
318QT5BASE_CONFIGURE_OPTS += QMAKE_CXXFLAGS+=-DQT_FB_DRM_ARGB32
319endif
320
321ifeq ($(BR2_PACKAGE_QT5BASE_LINUXFB_DIRECT_PAINTING),y)
322QT5BASE_CONFIGURE_OPTS += QMAKE_CXXFLAGS+=-DQT_FB_DIRECT_PAINTING
323endif
324
325ifeq ($(BR2_PACKAGE_QT5BASE_SYSLOG),y)
326QT5BASE_CONFIGURE_OPTS += -syslog
327else
328QT5BASE_CONFIGURE_OPTS += -no-syslog
329endif
330
331ifeq ($(BR2_PACKAGE_IMX_GPU_VIV),y)
332# use vivante backend
333QT5BASE_EGLFS_DEVICE = EGLFS_DEVICE_INTEGRATION = eglfs_viv
334else ifeq ($(BR2_PACKAGE_SUNXI_MALI_UTGARD),y)
335# use mali backend
336QT5BASE_EGLFS_DEVICE = EGLFS_DEVICE_INTEGRATION = eglfs_mali
337else ifeq ($(BR2_PACKAGE_ROCKCHIP_MALI),y)
338# use kms backend
339QT5BASE_EGLFS_DEVICE = EGLFS_DEVICE_INTEGRATION = eglfs_kms
340endif
341
342ifneq ($(QT5BASE_CONFIG_FILE),)
343define QT5BASE_CONFIGURE_CONFIG_FILE
344	cp $(QT5BASE_CONFIG_FILE) $(@D)/src/corelib/global/qconfig-buildroot.h
345endef
346endif
347
348QT5BASE_ARCH_CONFIG_FILE = $(@D)/mkspecs/devices/linux-buildroot-g++/arch.conf
349ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
350# Qt 5.8 needs atomics, which on various architectures are in -latomic
351define QT5BASE_CONFIGURE_ARCH_CONFIG_LIBATOMIC
352	printf '!host_build { \n LIBS += -latomic\n }' >$(QT5BASE_ARCH_CONFIG_FILE)
353endef
354endif
355
356# This allows to use ccache when available
357ifeq ($(BR2_CCACHE),y)
358QT5BASE_CONFIGURE_OPTS += -ccache
359endif
360
361# Ensure HOSTCC/CXX is used
362define QT5BASE_CONFIGURE_HOSTCC
363	$(SED) 's,^QMAKE_CC\s*=.*,QMAKE_CC = $(HOSTCC_NOCCACHE),' $(@D)/mkspecs/common/g++-base.conf
364	$(SED) 's,^QMAKE_CXX\s*=.*,QMAKE_CXX = $(HOSTCXX_NOCCACHE),' $(@D)/mkspecs/common/g++-base.conf
365endef
366
367# Must be last so can override all options set by Buildroot
368QT5BASE_CONFIGURE_OPTS += $(call qstrip,$(BR2_PACKAGE_QT5BASE_CUSTOM_CONF_OPTS))
369
370define QT5BASE_CONFIGURE_CMDS
371	mkdir -p $(@D)/mkspecs/devices/linux-buildroot-g++/
372	sed 's/@EGLFS_DEVICE@/$(QT5BASE_EGLFS_DEVICE)/g' \
373		$(QT5BASE_PKGDIR)/qmake.conf.in > \
374		$(@D)/mkspecs/devices/linux-buildroot-g++/qmake.conf
375	$(INSTALL) -m 0644 -D $(QT5BASE_PKGDIR)/qplatformdefs.h \
376		$(@D)/mkspecs/devices/linux-buildroot-g++/qplatformdefs.h
377	$(QT5BASE_CONFIGURE_CONFIG_FILE)
378	touch $(QT5BASE_ARCH_CONFIG_FILE)
379	$(QT5BASE_CONFIGURE_ARCH_CONFIG_LIBATOMIC)
380	$(QT5BASE_CONFIGURE_ARCH_CONFIG_LIBEXECINFO)
381	$(QT5BASE_CONFIGURE_HOSTCC)
382	(cd $(@D); \
383		$(TARGET_MAKE_ENV) \
384		PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
385		MAKEFLAGS="-j$(PARALLEL_JOBS) $(MAKEFLAGS)" \
386		./configure \
387		-v \
388		-prefix /usr \
389		-hostprefix $(HOST_DIR) \
390		-headerdir /usr/include/qt5 \
391		-sysroot $(STAGING_DIR) \
392		-plugindir /usr/lib/qt/plugins \
393		-examplesdir /usr/lib/qt/examples \
394		-no-rpath \
395		-nomake tests \
396		-device buildroot \
397		-device-option CROSS_COMPILE="$(TARGET_CROSS)" \
398		-device-option BR_COMPILER_CFLAGS="$(QT5BASE_CFLAGS)" \
399		-device-option BR_COMPILER_CXXFLAGS="$(QT5BASE_CXXFLAGS)" \
400		$(QT5BASE_CONFIGURE_OPTS) \
401	)
402endef
403
404QT5BASE_POST_INSTALL_STAGING_HOOKS += QT5_INSTALL_QT_CONF
405
406$(eval $(qmake-package))
407