From patchwork Wed Aug 6 11:52:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4230 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 186B53F165 for ; Wed, 6 Aug 2025 13:53:21 +0200 (CEST) Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-458b5811c78sf2752445e9.1 for ; Wed, 06 Aug 2025 04:53:21 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1754481200; cv=pass; d=google.com; s=arc-20240605; b=ly/x0OwFrdMwdeJds8rTTmUv1M++UNoB1YO+lpEYgTQMuwVRTbaxcMRju88iDT1CEG NSEW87swWIS5Gx4IbIJlCT/WkzV7XQkclfWaj6m3rGhFb1KR2/Nj3kK5mue1iQN2YrCf 2gNtzRyugxw4u4+JXiHkeAkC/z0PAjDBNeIyF/OeA9u0/EdDuNtYrI3IV++TlSdbkgbU tD/4O3Iq71EYOEdjyZJcLYPy9+/nkY/jY1bOyD1dJIk+DEd6XNGhTlGS6CXw+L5U+HR/ FEfXM4pVXCCCzsVvd55i2drRIFwDks3nq2VC9tiqdOh+75471pWG9zjkmgNIQvTapKE7 LmrQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=a/hPFyPuJjgnSKa49G7GidrJQy26Du2dexaKSp4PEgA=; fh=ESx3X9rWrVedMOUW2Rkox+/aGNZ+dndgXjUhdJTCyAs=; b=Xen8aup9pgPgTQGg1kdYtttU7TLFt00FIZjNkNOgWLWE/a7sKs+hlNmrMh7FKn5yQ2 /1U0IUREfrvXOnEY7+l+XUCr3ly4+S7dsxdFH5LyLmcu/YYTqdzax2y8reCuF1TUtpzR qLzhZ92YYPDJhwygdLZxQqAMBb4xtQtLOKVPPpPFjoB6uya8w5OyqgcMVSLX21gA8Y3m nKsLlM15KUvqKiY7LWIl5ZbRoWgh/WMfHYBbFdIdVquefEO9Whv6h9/olLdKR0uzZ6Re lfzwhQhM177ZA+95YCyDAZ/WlNOMMCFeX3dFCM3dIX8m/1QvfqiHTBLiflw+aMsq4veq sXWQ==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=hAUy7Itv; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1754481200; x=1755086000; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=a/hPFyPuJjgnSKa49G7GidrJQy26Du2dexaKSp4PEgA=; b=TGChnPN9oojxy02tjXoh5DuxkYWPugvvN/q4b3CQJTxuHuLhFfg3dAHhPWaRM0ei6W OMpTjHMwZC1nTqvrUjY+E4z3yrdUoDza8yAic75bfyOYgGSUCvP2ysxliNYrQ24ckul0 Zlan9ewRl3czYHRwQXiJdcnGDaWP/iUaMVgJE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754481200; x=1755086000; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=a/hPFyPuJjgnSKa49G7GidrJQy26Du2dexaKSp4PEgA=; b=u6PthMM4I7MPqMfD7iQxlZafVO8+GMx7rqr5t6BKOf/2Lo975SsydaeqoVOkNBlvMQ Lr0jt9ZFmHeCvC+jvROylpGDCmKBvnSPR5Xux3BIk7nsp6gGvE38sbfVDjctgYaBMrdh Gm2nKW26BexRQlNFg1Mw2xEpciZRW0K33CcxHxx5R0DgysN09ARCmV2Kz8EBZOXTJU+D 4o2h5LWx1iKNPjg0EJh2lR0DMTGgmT8gqh1Ims+SXHbSgAN+gKxa0GaMKAS8xzZRX9lk 1b2U/a6rLaMVr6TQtiXiV7n1hb+YNM6TR5YpOHFdGU6GXeX4uBxsA+jqxaFsk6m/4DJA N+eQ== X-Forwarded-Encrypted: i=2; AJvYcCX7oGr6vn8y0Y/J8WxXGOhV5g70gWtA4G14if5DIypqOBK8R8RAOLFEaT4qkq6MwI74MuWWFO4iWe+bGUU4@patchwork.amarulasolutions.com X-Gm-Message-State: AOJu0YxlyRXqPJn4QBhwtITSXVOVsu2gDxIRSF6++L7xPfmSnVuKo/Je DQ9aoTsDeet9qvao0anlNFD9wRv5P1x1KUJgpLLKlLh2bCt0sUwj6h2NW3q0uTKTpM2irA== X-Google-Smtp-Source: AGHT+IH4aBXGaBN+i8PfORBUP8haaTtNcR4PrEl55igmLsJRmJkgQm2upbTUzQfj5TVIwiwOZP02uQ== X-Received: by 2002:a05:600c:348b:b0:43b:c844:a4ba with SMTP id 5b1f17b1804b1-459e7105b64mr10382865e9.3.1754481200390; Wed, 06 Aug 2025 04:53:20 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h=AZMbMZefUg7DOXHIX1ILvxBNQcrFad623fOT0MQGS3YFLKdcjQ== Received: by 2002:a05:600c:5246:b0:459:d904:8de9 with SMTP id 5b1f17b1804b1-459e65b6f5cls3111735e9.1.-pod-prod-00-eu; Wed, 06 Aug 2025 04:53:18 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVN2trS+8I6wmlCPSETMdXkC3zwpgf9tPKoQoCJ0WE8eLv2cgdMwg8c7UN51R7/jrqljF43G6h2gn7TqDsG@amarulasolutions.com X-Received: by 2002:a05:600c:45c6:b0:459:443e:b18a with SMTP id 5b1f17b1804b1-459e70e63c1mr26573105e9.14.1754481197867; Wed, 06 Aug 2025 04:53:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1754481197; cv=none; d=google.com; s=arc-20240605; b=do1I6+IOYm1JhUiAjdZ++R6nmYirnmVyE683fJ4iCa6Vf19Pp53T5CkeBmxSbnrTGD EzrL9WVkAsBiF/cxMDyPNcApcJpJJTxYUlB7PZBQ82g9TzjGyJ16e8xxrrP2329d7AyA Pd5hHEAiaj4RZc/T2T0uEHN0Mpj+Yx5G1q09Lcqtoj8zTh10AS/4YVN/aDxxXbQRCTy5 sVQrnbHuTVrfF4docdvgk4h7xEgfWl/da6WlVwKgLs3/y33greVaZRA92MrwWabEo3pn tQN+Ok/BiuSurqSTLG64Ag8DEADmFs/YmTRQs4/hDTwXa04wf7M2HOjy6fThGxtbpzPN ZOCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=Zz+b4daQ3kcyezTHGq11ULARpf1wrO0Pm6Sv30m815Y=; fh=NGkoX4rF5pq3f3+wKWl2AU3567wJQMn780+qpc4GPIE=; b=KkUzfH0a2izrIxqR7yqCm9q7bD4SHWrqB88j5LtpMRhYjMRKUBnDY51NA4FGqyQxxZ Z5EENR8Kf8Uorz/f591XP2jMvOGfNxOwO1HJZRNY1gc13Og2Q5XJPdOE06JJfIMtbhWf U3XFi6Ucd5Yy+HYXranBZEwT7nlT/DFHg98LpyVsEeMjFU0ixKg4A5RkR14qqxJ0LChO D/e52D5/DH++pex0Sb1grtQFHmZk96GkJRQRatdTqCDGTkh/tMhwRIpnLXH6b55iixQy gv8WYhyqo/Z6xi1f621L3cQc1lc8PbKmWzfgTTVf4/8cbR7gbXJrTRrACfxR6fmPX7J0 f67w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=hAUy7Itv; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id ffacd0b85a97d-3b79c23b9d0sor2804803f8f.3.2025.08.06.04.53.17 for (Google Transport Security); Wed, 06 Aug 2025 04:53:17 -0700 (PDT) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Forwarded-Encrypted: i=1; AJvYcCUc21DlH154kTymAQmSCUfAIzxX4IcDJwgshyZ5D2+27afEh8T5GdzGJcRfHViPqzE8BzAaDynDWv0Pu99H@amarulasolutions.com X-Gm-Gg: ASbGncsfSgz9uUxHTwYNNvgka3tmiUJLosGo0kW3e3MdpIF65cqGV7TxB3geI9zEKp8 xjHHVYNVV7/80iyz4Ec6KGsfQlDITC83sD3NrnPPwgIwHZXkmxb2O4f+O/LJ7gxkilhNd/aib+k 6NDFZw+m7HU98n29z+aKrXNbIMmZgN0aZiUBklf5xhsUr8/KD+oSszf7kWDKN4Fc8Z4DM1cvK59 3zwWu+ZC7DoqXFl2JCfqxgUShTyV68ZhvszpzDs6McCkuAPdD6yrOlDXLq9kBBrLfdBWdtRHopE 0K9uyLiTYV+c/jC6aMm3m4hbt+NX+YG2wj4rnStftJwHGjNk59HNrxCm78xcgWnqQL0TULCWSrz ggCLTarhAfF2GzXabZ8/EbmaPWS7pdWkKgKfIj0MQMRcpkzq/MQ69Og9vhuoT2kGpTwqezWosZG sLZUHktPF5sX3KgNACXw== X-Received: by 2002:a05:6000:25c3:b0:3b7:8ed8:1c80 with SMTP id ffacd0b85a97d-3b8f430f0a7mr1886781f8f.3.1754481197244; Wed, 06 Aug 2025 04:53:17 -0700 (PDT) Received: from dario-ThinkPad-T14s-Gen-2i.amarulasolutions.com ([2001:b07:6474:ebbf:3f96:8759:f916:8982]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459c58ed07fsm142606555e9.22.2025.08.06.04.53.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Aug 2025 04:53:16 -0700 (PDT) From: Dario Binacchi To: buildroot@buildroot.org Cc: Andreas Naumann , Jesse Van Gavere , Roy Kollen Svendsen , Thomas Petazzoni , linux-amarula@amarulasolutions.com, Angelo Compagnucci , Giuseppe D'Angelo , Angelo Compagnucci , Dario Binacchi Subject: [RFC PATCH 1/4] package/qt6: Add qmake functionality Date: Wed, 6 Aug 2025 13:52:16 +0200 Message-ID: <20250806115219.3307438-2-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250806115219.3307438-1-dario.binacchi@amarulasolutions.com> References: <20250806115219.3307438-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=hAUy7Itv; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=pass header.i=@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Jesse Van Gavere The qmake functionality had been missing due to the new host/target build requirement, to get it working the main parts of the qt5 qmake has been kept, we're still making our own device spec which we use to run qmake with along with passing some additional device options for our flags/cross-compiler the biggest difference is that where previously qt.conf was used to fixup per-paths builds, this is now always created with changed contents so qmake looks at the correct target directories. A big thanks to Angelo Compagnucci for the encouragement and testing. Signed-off-by: Jesse Van Gavere Tested-by: Angelo Compagnucci [dario: fix HostData in qt.conf.in] Signed-off-by: Dario Binacchi --- package/qt6/qt6.mk | 18 ++ package/qt6/qt6base/qmake.conf.in | 36 +++ package/qt6/qt6base/qplatformdefs.h | 1 + package/qt6/qt6base/qt.conf.in | 7 + package/qt6/qt6base/qt6base.mk | 18 ++ package/qt6/qt6base/qt6base.mk.save | 455 ++++++++++++++++++++++++++++ 6 files changed, 535 insertions(+) create mode 100644 package/qt6/qt6base/qmake.conf.in create mode 100644 package/qt6/qt6base/qplatformdefs.h create mode 100644 package/qt6/qt6base/qt.conf.in create mode 100644 package/qt6/qt6base/qt6base.mk.save diff --git a/package/qt6/qt6.mk b/package/qt6/qt6.mk index 33cbf7551f23..2d51c69269ac 100644 --- a/package/qt6/qt6.mk +++ b/package/qt6/qt6.mk @@ -12,3 +12,21 @@ QT6_SITE = https://download.qt.io/archive/qt/$(QT6_VERSION_MAJOR)/$(QT6_VERSION) QT6_GIT = git://code.qt.io include $(sort $(wildcard package/qt6/*/*.mk)) + +# The file "qt.conf" can be used to override the hard-coded paths that are +# compiled into the Qt library. We need it to make "qmake" relocatable and +# tweak the per-package install paths +define QT6_INSTALL_QT_CONF + rm -f $(HOST_DIR)/bin/qt.conf + sed -e "s|@@HOST_DIR@@|$(HOST_DIR)|" -e "s|@@STAGING_DIR@@|$(STAGING_DIR)|" \ + $(QT6BASE_PKGDIR)/qt.conf.in > $(HOST_DIR)/bin/qt.conf +endef + +ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y) +define QT6_QT_CONF_FIXUP + $(QT6_INSTALL_QT_CONF) +endef +endif + +# Variable for other Qt applications to use +QT6_QMAKE = $(HOST_DIR)/bin/qmake -spec devices/linux-buildroot-g++ diff --git a/package/qt6/qt6base/qmake.conf.in b/package/qt6/qt6base/qmake.conf.in new file mode 100644 index 000000000000..ebb8497d2df5 --- /dev/null +++ b/package/qt6/qt6base/qmake.conf.in @@ -0,0 +1,36 @@ +# Qt6 has a mechanism to support "device" profiles, so that people can +# specify the compiler, compiler flags and so on for a specific device. + +# We leverage this mechanism in the Buildroot packaging of qt6 to +# simplify cross-compilation: we have our own "device" definition, which +# allows us to easily pass the cross-compiler paths and flags from our +# qt6.mk. + +include(../common/linux_device_pre.conf) + +# modifications to g++-unix.conf +QMAKE_CC = $${CROSS_COMPILE}gcc +QMAKE_CXX = $${CROSS_COMPILE}g++ +QMAKE_LINK = $${CROSS_COMPILE}g++ + +# modifications to gcc-base.conf +QMAKE_CFLAGS += $${BR_COMPILER_CFLAGS} +QMAKE_CXXFLAGS += $${BR_COMPILER_CXXFLAGS} +# Remove all optimisation flags, we really only want our own. +QMAKE_CFLAGS_OPTIMIZE = +QMAKE_CFLAGS_OPTIMIZE_DEBUG = +QMAKE_CFLAGS_OPTIMIZE_FULL = +QMAKE_CFLAGS_OPTIMIZE_SIZE = +QMAKE_CFLAGS_DEBUG = +QMAKE_CXXFLAGS_DEBUG = +QMAKE_CFLAGS_RELEASE = +QMAKE_CXXFLAGS_RELEASE = +CONFIG += nostrip + +QMAKE_LIBS += -lrt -lpthread -ldl +QMAKE_CFLAGS_ISYSTEM = + +@EGLFS_DEVICE@ + +include(../common/linux_device_post.conf) +load(qt_config) diff --git a/package/qt6/qt6base/qplatformdefs.h b/package/qt6/qt6base/qplatformdefs.h new file mode 100644 index 000000000000..99e9a2792329 --- /dev/null +++ b/package/qt6/qt6base/qplatformdefs.h @@ -0,0 +1 @@ +#include "../../linux-g++/qplatformdefs.h" diff --git a/package/qt6/qt6base/qt.conf.in b/package/qt6/qt6base/qt.conf.in new file mode 100644 index 000000000000..fee209f38c00 --- /dev/null +++ b/package/qt6/qt6base/qt.conf.in @@ -0,0 +1,7 @@ +[Paths] +Prefix=/usr +HostPrefix=@@HOST_DIR@@ +HostData=@@STAGING_DIR@@/usr +Sysroot=@@STAGING_DIR@@ +SysrootifyPrefix=true +TargetSpec=devices/linux-buildroot-g++ diff --git a/package/qt6/qt6base/qt6base.mk b/package/qt6/qt6base/qt6base.mk index 51a4f1b5be7f..697d1a96a920 100644 --- a/package/qt6/qt6base/qt6base.mk +++ b/package/qt6/qt6base/qt6base.mk @@ -55,6 +55,9 @@ QT6BASE_CONF_OPTS = \ -DFEATURE_system_zlib=ON \ -DFEATURE_system_libb2=ON +QT6BASE_CFLAGS = $(TARGET_CFLAGS) +QT6BASE_CXXFLAGS = $(TARGET_CXXFLAGS) + # x86 optimization options. While we have a BR2_X86_CPU_HAS_AVX512, it # is not clear yet how it maps to all the avx512* options of Qt, so we # for now keeps them disabled. @@ -431,5 +434,20 @@ define QT6BASE_RM_USR_MKSPECS endef QT6BASE_TARGET_FINALIZE_HOOKS += QT6BASE_RM_USR_MKSPECS +define QT6BASE_MAKE_BR_SPEC + mkdir -p $(@D)/mkspecs/devices/linux-buildroot-g++/ + sed 's/@EGLFS_DEVICE@/$(QT6BASE_EGLFS_DEVICE)/g' \ + $(QT6BASE_PKGDIR)/qmake.conf.in > \ + $(@D)/mkspecs/devices/linux-buildroot-g++/qmake.conf + $(INSTALL) -m 0644 -D $(QT6BASE_PKGDIR)/qplatformdefs.h \ + $(@D)/mkspecs/devices/linux-buildroot-g++/qplatformdefs.h +endef + +QT6BASE_CONF_OPTS += -DQT_QMAKE_DEVICE_OPTIONS=CROSS_COMPILE="$(TARGET_CROSS)";BR_COMPILER_CFLAGS="$(QT6BASE_CFLAGS)";BR_COMPILER_CXXFLAGS="$(QT6BASE_CXX_FLAGS)" + +QT6BASE_PRE_CONFIGURE_HOOKS += QT6BASE_MAKE_BR_SPEC + +QT6BASE_POST_INSTALL_STAGING_HOOKS += QT6_INSTALL_QT_CONF + $(eval $(cmake-package)) $(eval $(host-cmake-package)) diff --git a/package/qt6/qt6base/qt6base.mk.save b/package/qt6/qt6base/qt6base.mk.save new file mode 100644 index 000000000000..7c5acfbd9805 --- /dev/null +++ b/package/qt6/qt6base/qt6base.mk.save @@ -0,0 +1,455 @@ +################################################################################ +# +# qt6base +# +################################################################################ + +QT6BASE_VERSION = $(QT6_VERSION) +QT6BASE_SITE = $(QT6_SITE) +QT6BASE_SOURCE = qtbase-$(QT6_SOURCE_TARBALL_PREFIX)-$(QT6BASE_VERSION).tar.xz +QT6BASE_CPE_ID_VENDOR = qt +QT6BASE_CPE_ID_PRODUCT = qt + +QT6BASE_CMAKE_BACKEND = ninja + +QT6BASE_LICENSE = \ + GPL-2.0+ or LGPL-3.0, \ + GPL-3.0 with exception (tools), \ + GFDL-1.3 (docs), \ + Apache-2.0, \ + BSD-3-Clause, \ + BSL-1.0, \ + MIT + +QT6BASE_LICENSE_FILES = \ + LICENSES/Apache-2.0.txt \ + LICENSES/BSD-3-Clause.txt \ + LICENSES/BSL-1.0.txt \ + LICENSES/GFDL-1.3-no-invariants-only.txt \ + LICENSES/GPL-2.0-only.txt \ + LICENSES/GPL-3.0-only.txt \ + LICENSES/LGPL-3.0-only.txt \ + LICENSES/MIT.txt \ + LICENSES/Qt-GPL-exception-1.0.txt + +QT6BASE_DEPENDENCIES = \ + host-qt6base \ + double-conversion \ + libb2 \ + pcre2 \ + zlib +QT6BASE_INSTALL_STAGING = YES + +QT6BASE_CONF_OPTS = \ + -DQT_HOST_PATH=$(HOST_DIR) \ + -DINSTALL_ARCHDATADIR=lib/qt6 \ + -DFEATURE_xml=OFF \ + -DFEATURE_sql=OFF \ + -DFEATURE_testlib=OFF \ + -DFEATURE_network=OFF \ + -DFEATURE_dbus=OFF \ + -DFEATURE_icu=OFF \ + -DFEATURE_glib=OFF \ + -DFEATURE_system_doubleconversion=ON \ + -DFEATURE_system_pcre2=ON \ + -DFEATURE_system_zlib=ON \ + -DFEATURE_system_libb2=ON + +QT6BASE_CFLAGS = $(TARGET_CFLAGS) +QT6BASE_CXXFLAGS = $(TARGET_CXXFLAGS) + +# x86 optimization options. While we have a BR2_X86_CPU_HAS_AVX512, it +# is not clear yet how it maps to all the avx512* options of Qt, so we +# for now keeps them disabled. +QT6BASE_CONF_OPTS += \ + -DFEATURE_sse2=$(if $(BR2_X86_CPU_HAS_SSE2),ON,OFF) \ + -DFEATURE_sse3=$(if $(BR2_X86_CPU_HAS_SSE3),ON,OFF) \ + -DFEATURE_sse4_1=$(if $(BR2_X86_CPU_HAS_SSE4),ON,OFF) \ + -DFEATURE_sse4_2=$(if $(BR2_X86_CPU_HAS_SSE42),ON,OFF) \ + -DFEATURE_ssse3=$(if $(BR2_X86_CPU_HAS_SSSE3),ON,OFF) \ + -DFEATURE_avx=$(if $(BR2_X86_CPU_HAS_AVX),ON,OFF) \ + -DFEATURE_avx2=$(if $(BR2_X86_CPU_HAS_AVX2),ON,OFF) \ + -DFEATURE_avx512bw=OFF \ + -DFEATURE_avx512cd=OFF \ + -DFEATURE_avx512dq=OFF \ + -DFEATURE_avx512er=OFF \ + -DFEATURE_avx512f=OFF \ + -DFEATURE_avx512ifma=OFF \ + -DFEATURE_avx512pf=OFF \ + -DFEATURE_avx512vbmi=OFF \ + -DFEATURE_avx512vbmi2=OFF \ + -DFEATURE_avx512vl=OFF \ + -DFEATURE_vaes=OFF + +HOST_QT6BASE_DEPENDENCIES = \ + host-double-conversion \ + host-libb2 \ + host-pcre2 \ + host-zlib + +HOST_QT6BASE_CONF_OPTS = \ + -DFEATURE_xml=ON \ + -DFEATURE_dbus=OFF \ + -DFEATURE_icu=OFF \ + -DFEATURE_glib=OFF \ + -DFEATURE_sql=OFF \ + -DFEATURE_system_doubleconversion=ON \ + -DFEATURE_system_libb2=ON \ + -DFEATURE_system_pcre2=ON \ + -DFEATURE_system_zlib=ON + +ifeq ($(BR2_PACKAGE_HOST_QT6BASE_CONCURRENT),y) +HOST_QT6BASE_CONF_OPTS += -DFEATURE_concurrent=ON +else +HOST_QT6BASE_CONF_OPTS += -DFEATURE_concurrent=OFF +endif + +# We need host-qt6base with Gui support when building host-qt6shadertools, +# otherwise the build is skipped and no qsb host tool is generated. +# qt6shadertools fail to build if qsb is not available. +ifeq ($(BR2_PACKAGE_HOST_QT6BASE_GUI),y) +HOST_QT6BASE_CONF_OPTS += \ + -DFEATURE_gui=ON \ + -DFEATURE_freetype=OFF \ + -DFEATURE_vulkan=OFF \ + -DFEATURE_linuxfb=ON \ + -DFEATURE_xcb=OFF \ + -DFEATURE_opengl=OFF -DINPUT_opengl=no \ + -DFEATURE_harfbuzz=OFF \ + -DFEATURE_png=OFF \ + -DFEATURE_gif=OFF \ + -DFEATURE_jpeg=OFF \ + -DFEATURE_printsupport=OFF \ + -DFEATURE_kms=OFF \ + -DFEATURE_fontconfig=OFF \ + -DFEATURE_libinput=OFF \ + -DFEATURE_tslib=OFF \ + -DFEATURE_eglfs=OFF + +ifeq ($(BR2_PACKAGE_HOST_QT6BASE_WIDGETS),y) +HOST_QT6BASE_CONF_OPTS += -DFEATURE_widgets=ON +else +HOST_QT6BASE_CONF_OPTS += -DFEATURE_widgets=OFF +endif + +else +HOST_QT6BASE_CONF_OPTS += -DFEATURE_gui=OFF +endif + +# The Network module is explicitly required by qt6tools. +ifeq ($(BR2_PACKAGE_HOST_QT6BASE_NETWORK),y) +HOST_QT6BASE_CONF_OPTS += -DFEATURE_network=ON +else +HOST_QT6BASE_CONF_OPTS += -DFEATURE_network=OFF +endif + +# We need host-qt6base with Testlib support when building host-qt6declarative +# with QuickTest support. QuickTest support is further required for building the +# qmltestrunner host tool. qt6declarative will fail to build if qmltestrunner is +# not available. +ifeq ($(BR2_PACKAGE_HOST_QT6BASE_TEST),y) +HOST_QT6BASE_CONF_OPTS += -DFEATURE_testlib=ON +else +HOST_QT6BASE_CONF_OPTS += -DFEATURE_testlib=OFF +endif + +# Conditional blocks below are ordered by alphabetic ordering of the +# BR2_PACKAGE_* option. + +ifeq ($(BR2_PACKAGE_HAS_UDEV),y) +QT6BASE_CONF_OPTS += -DFEATURE_libudev=ON +QT6BASE_DEPENDENCIES += udev +else +QT6BASE_CONF_OPTS += -DFEATURE_libudev=OFF +endif + +ifeq ($(BR2_PACKAGE_ICU),y) +QT6BASE_CONF_OPTS += -DFEATURE_icu=ON +QT6BASE_DEPENDENCIES += icu +else +QT6BASE_CONF_OPTS += -DFEATURE_icu=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBGLIB2),y) +QT6BASE_CONF_OPTS += -DFEATURE_glib=ON +QT6BASE_DEPENDENCIES += libglib2 +else +QT6BASE_CONF_OPTS += -DFEATURE_glib=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_GUI),y) +QT6BASE_CONF_OPTS += \ + -DFEATURE_gui=ON \ + -DFEATURE_freetype=ON \ + -DFEATURE_vulkan=OFF +QT6BASE_DEPENDENCIES += freetype + +ifeq ($(BR2_PACKAGE_QT6BASE_VULKAN),y) +QT6BASE_DEPENDENCIES += vulkan-headers vulkan-loader +QT6BASE_CONFIGURE_OPTS += -DFEATURE_vulkan=ON +else +QT6BASE_CONFIGURE_OPTS += -DFEATURE_vulkan=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_LINUXFB),y) +QT6BASE_CONF_OPTS += -DFEATURE_linuxfb=ON +else +QT6BASE_CONF_OPTS += -DFEATURE_linuxfb=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_XCB),y) +QT6BASE_CONF_OPTS += \ + -DFEATURE_xcb=ON \ + -DFEATURE_xcb_xlib=ON \ + -DFEATURE_xkbcommon=ON \ + -DFEATURE_xkbcommon_x11=ON +QT6BASE_DEPENDENCIES += \ + libxcb \ + libxkbcommon \ + xcb-util-cursor \ + xcb-util-wm \ + xcb-util-image \ + xcb-util-keysyms \ + xcb-util-renderutil \ + xlib_libX11 +else +QT6BASE_CONF_OPTS += -DFEATURE_xcb=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_HARFBUZZ),y) +QT6BASE_CONF_OPTS += -DFEATURE_harfbuzz=ON +ifeq ($(BR2_TOOLCHAIN_HAS_SYNC_4),y) +# system harfbuzz in case __sync for 4 bytes is supported +QT6BASE_CONF_OPTS += -DQT_USE_BUNDLED_BundledHarfbuzz=OFF +QT6BASE_DEPENDENCIES += harfbuzz +else #BR2_TOOLCHAIN_HAS_SYNC_4 +# qt harfbuzz otherwise (using QAtomic instead) +QT6BASE_CONF_OPTS += -DQT_USE_BUNDLED_BundledHarfbuzz=ON +QT6BASE_LICENSE += , MIT (harfbuzz) +QT6BASE_LICENSE_FILES += src/3rdparty/harfbuzz-ng/COPYING +endif +else +QT6BASE_CONF_OPTS += -DFEATURE_harfbuzz=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_PNG),y) +QT6BASE_CONF_OPTS += -DFEATURE_png=ON -DFEATURE_system_png=ON +QT6BASE_DEPENDENCIES += libpng +else +QT6BASE_CONF_OPTS += -DFEATURE_png=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_GIF),y) +QT6BASE_CONF_OPTS += -DFEATURE_gif=ON +else +QT6BASE_CONF_OPTS += -DFEATURE_gif=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_JPEG),y) +QT6BASE_CONF_OPTS += -DFEATURE_jpeg=ON +QT6BASE_DEPENDENCIES += jpeg +else +QT6BASE_CONF_OPTS += -DFEATURE_jpeg=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_PRINTSUPPORT),y) +QT6BASE_CONF_OPTS += -DFEATURE_printsupport=ON +ifeq ($(BR2_PACKAGE_CUPS),y) +QT6BASE_CONF_OPTS += -DFEATURE_cups=ON +QT6BASE_DEPENDENCIES += cups +else +QT6BASE_CONF_OPTS += -DFEATURE_cups=OFF +endif +else +QT6BASE_CONF_OPTS += -DFEATURE_printsupport=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBDRM),y) +QT6BASE_CONF_OPTS += -DFEATURE_kms=ON +QT6BASE_DEPENDENCIES += libdrm +else +QT6BASE_CONF_OPTS += -DFEATURE_kms=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_FONTCONFIG),y) +QT6BASE_CONF_OPTS += -DFEATURE_fontconfig=ON +QT6BASE_DEPENDENCIES += fontconfig +else +QT6BASE_CONF_OPTS += -DFEATURE_fontconfig=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_WIDGETS),y) +QT6BASE_CONF_OPTS += -DFEATURE_widgets=ON + +# only enable gtk support if libgtk3 X11 backend is enabled +ifeq ($(BR2_PACKAGE_LIBGTK3)$(BR2_PACKAGE_LIBGTK3_X11),yy) +QT6BASE_CONF_OPTS += -DFEATURE_gtk3=ON +QT6BASE_DEPENDENCIES += libgtk3 +else +QT6BASE_CONF_OPTS += -DFEATURE_gtk3=OFF +endif + +else +QT6BASE_CONF_OPTS += -DFEATURE_widgets=OFF +endif + +ifeq ($(BR2_PACKAGE_LIBINPUT),y) +QT6BASE_CONF_OPTS += -DFEATURE_libinput=ON +QT6BASE_DEPENDENCIES += libinput +else +QT6BASE_CONF_OPTS += -DFEATURE_libinput=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_TSLIB),y) +QT6BASE_CONF_OPTS += -DFEATURE_tslib=ON +QT6BASE_DEPENDENCIES += tslib +else +QT6BASE_CONF_OPTS += -DFEATURE_tslib=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_EGLFS),y) +QT6BASE_CONF_OPTS += -DFEATURE_egl=ON -DFEATURE_eglfs=ON +QT6BASE_DEPENDENCIES += libegl libgbm +else +QT6BASE_CONF_OPTS += -DFEATURE_eglfs=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_OPENGL_DESKTOP),y) +QT6BASE_CONF_OPTS += \ + -DFEATURE_opengl=ON \ + -DFEATURE_opengl_desktop=ON +QT6BASE_DEPENDENCIES += libgl +else ifeq ($(BR2_PACKAGE_QT6BASE_OPENGL_ES2),y) +QT6BASE_CONF_OPTS += \ + -DFEATURE_opengl=ON \ + -DFEATURE_opengles2=ON \ + -DFEATURE_opengl_desktop=OFF +QT6BASE_DEPENDENCIES += libgles +else +QT6BASE_CONF_OPTS += -DFEATURE_opengl=OFF -DINPUT_opengl=no +endif + +else +QT6BASE_CONF_OPTS += -DFEATURE_gui=OFF +endif + +QT6BASE_DEFAULT_QPA = $(call qstrip,$(BR2_PACKAGE_QT6BASE_DEFAULT_QPA)) +QT6BASE_CONF_OPTS += $(if $(QT6BASE_DEFAULT_QPA),-DQT_QPA_DEFAULT_PLATFORM=$(QT6BASE_DEFAULT_QPA)) + +ifeq ($(BR2_PACKAGE_OPENSSL),y) +QT6BASE_CONF_OPTS += -DINPUT_openssl=yes +QT6BASE_DEPENDENCIES += openssl +else +QT6BASE_CONF_OPTS += -DINPUT_openssl=no +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_CONCURRENT),y) +QT6BASE_CONF_OPTS += -DFEATURE_concurrent=ON +else +QT6BASE_CONF_OPTS += -DFEATURE_concurrent=OFF +endif + +# We need host-qt6base with D-Bus support, otherwise: "the tool +# "Qt6::qdbuscpp2xml" was not found in the Qt6DBusTools package." +ifeq ($(BR2_PACKAGE_QT6BASE_DBUS),y) +QT6BASE_CONF_OPTS += -DFEATURE_dbus=ON -DINPUT_dbus=linked +QT6BASE_DEPENDENCIES += dbus +HOST_QT6BASE_CONF_OPTS += -DFEATURE_dbus=ON +HOST_QT6BASE_DEPENDENCIES += host-dbus +else +QT6BASE_CONF_OPTS += -DFEATURE_dbus=OFF +HOST_QT6BASE_CONF_OPTS += -DFEATURE_dbus=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_NETWORK),y) +QT6BASE_CONF_OPTS += -DFEATURE_network=ON +else +QT6BASE_CONF_OPTS += -DFEATURE_network=OFF +endif + +# Qt6 SQL Plugins +ifeq ($(BR2_PACKAGE_QT6BASE_SQL),y) +QT6BASE_CONF_OPTS += -DFEATURE_sql=ON +QT6BASE_CONF_OPTS += -DFEATURE_sql_db2=OFF -DFEATURE_sql_ibase=OFF -DFEATURE_sql_oci=OFF -DFEATURE_sql_odbc=OFF + +ifeq ($(BR2_PACKAGE_QT6BASE_MYSQL),y) +QT6BASE_CONF_OPTS += -DFEATURE_sql_mysql=ON +QT6BASE_DEPENDENCIES += mariadb +else +QT6BASE_CONF_OPTS += -DFEATURE_sql_mysql=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_PSQL),y) +QT6BASE_CONF_OPTS += -DFEATURE_sql_psql=ON +QT6BASE_DEPENDENCIES += postgresql +else +QT6BASE_CONF_OPTS += -DFEATURE_sql_psql=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_SQLITE),y) +QT6BASE_CONF_OPTS += -DFEATURE_sql_sqlite=ON -DFEATURE_system_sqlite=ON +QT6BASE_DEPENDENCIES += sqlite +else +QT6BASE_CONF_OPTS += -DFEATURE_sql_sqlite=OFF +endif + +else +QT6BASE_CONF_OPTS += -DFEATURE_sql=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_SYSLOG),y) +QT6BASE_CONF_OPTS += -DFEATURE_syslog=ON +else +QT6BASE_CONF_OPTS += -DFEATURE_syslog=OFF +endif + +ifeq ($(BR2_PACKAGE_SYSTEMD),y) +QT6BASE_CONF_OPTS += -DFEATURE_journald=ON +QT6BASE_DEPENDENCIES += systemd +else +QT6BASE_CONF_OPTS += -DFEATURE_journald=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_TEST),y) +QT6BASE_CONF_OPTS += -DFEATURE_testlib=ON +else +QT6BASE_CONF_OPTS += -DFEATURE_testlib=OFF +endif + +ifeq ($(BR2_PACKAGE_QT6BASE_XML),y) +QT6BASE_CONF_OPTS += -DFEATURE_xml=ON +else +QT6BASE_CONF_OPTS += -DFEATURE_xml=OFF +endif + +ifeq ($(BR2_PACKAGE_ZSTD),y) +QT6BASE_CONF_OPTS += -DFEATURE_zstd=ON +QT6BASE_DEPENDENCIES += zstd +else +QT6BASE_CONF_OPTS += -DFEATURE_zstd=OFF +endif + +define QT6BASE_RM_USR_MKSPECS + $(Q)rm -rf $(TARGET_DIR)/usr/mkspecs +endef +QT6BASE_TARGET_FINALIZE_HOOKS += QT6BASE_RM_USR_MKSPECS + +define QT6BASE_MAKE_BR_SPEC + mkdir -p $(@D)/mkspecs/devices/linux-buildroot-g++/ + sed 's/@EGLFS_DEVICE@/$(QT6BASE_EGLFS_DEVICE)/g' \ + $(QT6BASE_PKGDIR)/qmake.conf.in > \ + $(@D)/mkspecs/devices/linux-buildroot-g++/qmake.conf + $(INSTALL) -m 0644 -D $(QT6BASE_PKGDIR)/qplatformdefs.h \ + $(@D)/mkspecs/devices/linux-buildroot-g++/qplatformdefs.h +endef + +QT6BASE_CONF_OPTS += -DQT_QMAKE_DEVICE_OPTIONS=CROSS_COMPILE="$(TARGET_CROSS)";BR_COMPILER_CFLAGS="$(QT6BASE_CFLAGS)";BR_COMPILER_CXXFLAGS="$(QT6BASE_CXX_FLAGS)" + +HOST_QT6BASE_PRE_CONFIGURE_HOOKS += QT6BASE_MAKE_BR_SPEC + +QT6BASE_PRE_CONFIGURE_HOOKS += QT6BASE_MAKE_BR_SPEC + +QT6BASE_POST_INSTALL_STAGING_HOOKS += QT6_INSTALL_QT_CONF + +$(eval $(cmake-package)) +$(eval $(host-cmake-package))