From 0533b8907ee8c0adfab88ee3160ea38e225531bf Mon Sep 17 00:00:00 2001 From: Samuli Piippo Date: Tue, 27 Dec 2022 11:50:54 +0000 Subject: [PATCH] Support SDK workflow inside a Yocto build Add support for using qmake directly from Yocto build sysroots with following workflow: bitbake meta-ide-support bitbake build-sysroots . ./tmp/deploy/images/qemuarm64/environment-setup-cortexa57-poky-linux qmake & make Use configurable sysroot paths in populate_qt6_sdk_base so that it can be reused also for yocto build sysroots. Fixes: QTBUG-108778 Pick-to: 6.5 6.4 6.2 Change-Id: Iee48f75edbc62e5adcca318a9f4cf17b7477f4a0 Reviewed-by: Ari Parkkila --- classes/populate_sdk_qt6_base.bbclass | 53 ++++++++++++----------- recipes-core/meta/build-sysroots.bbappend | 10 +++++ 2 files changed, 38 insertions(+), 25 deletions(-) create mode 100644 recipes-core/meta/build-sysroots.bbappend diff --git a/classes/populate_sdk_qt6_base.bbclass b/classes/populate_sdk_qt6_base.bbclass index 63643f1..676f3d1 100644 --- a/classes/populate_sdk_qt6_base.bbclass +++ b/classes/populate_sdk_qt6_base.bbclass @@ -10,6 +10,9 @@ PATH_DELIM:sdkmingw32 = ";" QT6_INSTALL_HOST_LIBEXECDIR = "${QT6_INSTALL_LIBEXECDIR}" QT6_INSTALL_HOST_LIBEXECDIR:sdkmingw32 = "${QT6_INSTALL_LIBEXECDIR:mingw32}" +TARGET_SYSROOT ?= "${SDKTARGETSYSROOT}" +NATIVE_SYSROOT ?= "${SDKPATHNATIVE}" + create_qt6_sdk_files () { # Generate a qt.conf file to be deployed with the SDK qtconf=${WORKDIR}/qt.conf @@ -28,23 +31,23 @@ create_qt6_sdk_files () { echo 'Settings = ${QT6_INSTALL_SYSCONFDIR}' >> $qtconf echo 'Examples = ${QT6_INSTALL_EXAMPLESDIR}' >> $qtconf echo 'Tests = ${QT6_INSTALL_TESTSDIR}' >> $qtconf - echo 'HostPrefix = ${@os.path.relpath(d.expand("${SDKPATHNATIVE}"), d.expand("${SDKPATHNATIVE}${QT6_INSTALL_BINDIR}"))}' >> $qtconf - echo 'HostData = ${@os.path.relpath(d.expand("${SDKTARGETSYSROOT}${QT6_INSTALL_ARCHDATADIR}"), d.expand("${SDKPATHNATIVE}"))}' >> $qtconf - echo 'HostBinaries = ${@os.path.relpath(d.expand("${SDKPATHNATIVE}${QT6_INSTALL_BINDIR}"), d.expand("${SDKPATHNATIVE}"))}' >> $qtconf - echo 'HostLibraries = ${@os.path.relpath(d.expand("${SDKPATHNATIVE}${QT6_INSTALL_LIBDIR}"), d.expand("${SDKPATHNATIVE}"))}' >> $qtconf - echo 'HostLibraryExecutables = ${@os.path.relpath(d.expand("${SDKPATHNATIVE}${QT6_INSTALL_HOST_LIBEXECDIR}"), d.expand("${SDKPATHNATIVE}"))}' >> $qtconf - echo 'Sysroot = ${@os.path.relpath(d.expand("${SDKTARGETSYSROOT}"), d.expand("${SDKPATHNATIVE}${QT6_INSTALL_BINDIR}"))}' >> $qtconf + echo 'HostPrefix = ${@os.path.relpath("${NATIVE_SYSROOT}", "${NATIVE_SYSROOT}${QT6_INSTALL_BINDIR}")}' >> $qtconf + echo 'HostData = ${@os.path.relpath("${TARGET_SYSROOT}${QT6_INSTALL_ARCHDATADIR}", "${NATIVE_SYSROOT}")}' >> $qtconf + echo 'HostBinaries = ${@os.path.relpath("${NATIVE_SYSROOT}${QT6_INSTALL_BINDIR}", "${NATIVE_SYSROOT}")}' >> $qtconf + echo 'HostLibraries = ${@os.path.relpath("${NATIVE_SYSROOT}${QT6_INSTALL_LIBDIR}", "${NATIVE_SYSROOT}")}' >> $qtconf + echo 'HostLibraryExecutables = ${@os.path.relpath("${NATIVE_SYSROOT}${QT6_INSTALL_HOST_LIBEXECDIR}", "${NATIVE_SYSROOT}")}' >> $qtconf + echo 'Sysroot = ${@os.path.relpath("${TARGET_SYSROOT}", "${NATIVE_SYSROOT}${QT6_INSTALL_BINDIR}")}' >> $qtconf echo 'HostSpec = linux-oe-g++' >> $qtconf echo 'TargetSpec = linux-oe-g++' >> $qtconf echo 'SysrootifyPrefix = true' >> $qtconf # add qt.conf to both bin and libexec dirs - cp ${WORKDIR}/qt.conf ${SDK_OUTPUT}${SDKPATHNATIVE}${QT6_INSTALL_BINDIR}/ - cp ${WORKDIR}/qt.conf ${SDK_OUTPUT}${SDKPATHNATIVE}${QT6_INSTALL_HOST_LIBEXECDIR}/ - cp ${WORKDIR}/qt.conf ${SDK_OUTPUT}${SDKPATHNATIVE}${QT6_INSTALL_BINDIR}/target_qt.conf + cp ${WORKDIR}/qt.conf ${SDK_OUTPUT}${NATIVE_SYSROOT}${QT6_INSTALL_BINDIR}/ + cp ${WORKDIR}/qt.conf ${SDK_OUTPUT}${NATIVE_SYSROOT}${QT6_INSTALL_HOST_LIBEXECDIR}/ + cp ${WORKDIR}/qt.conf ${SDK_OUTPUT}${NATIVE_SYSROOT}${QT6_INSTALL_BINDIR}/target_qt.conf - install -d ${SDK_OUTPUT}${SDKPATHNATIVE}/environment-setup.d - script=${SDK_OUTPUT}${SDKPATHNATIVE}/environment-setup.d/qt6.sh + install -d ${SDK_OUTPUT}${NATIVE_SYSROOT}/environment-setup.d + script=${SDK_OUTPUT}${NATIVE_SYSROOT}/environment-setup.d/qt6.sh touch $script echo 'export OE_QMAKE_CFLAGS="$CFLAGS"' >> $script echo 'export OE_QMAKE_CXXFLAGS="$CXXFLAGS"' >> $script @@ -58,20 +61,20 @@ create_qt6_sdk_files () { echo 'export OE_QMAKE_AR_LTCG="${HOST_PREFIX}gcc-ar"' >> $script # Generate a toolchain file for using Qt without running setup-environment script - cat > ${SDK_OUTPUT}${SDKPATHNATIVE}/usr/share/cmake/Qt6Toolchain.cmake < ${SDK_OUTPUT}${NATIVE_SYSROOT}/usr/share/cmake/Qt6Toolchain.cmake < ${SDK_OUTPUT}${SDKPATHNATIVE}/usr/share/conan/profile < ${SDK_OUTPUT}${NATIVE_SYSROOT}/usr/share/conan/profile <