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