diff options
author | Samuli Piippo <samuli.piippo@qt.io> | 2022-12-27 11:50:54 +0000 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-01-11 19:38:50 +0000 |
commit | 29fedc049074827cc62a85bbe9d57952c489178a (patch) | |
tree | 8c9f7a832ca46b2e723a4b170d38b94766e6e63f | |
parent | 79ee80eef51c18248e382811a8915354774dd421 (diff) |
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
Change-Id: Iee48f75edbc62e5adcca318a9f4cf17b7477f4a0
Reviewed-by: Ari Parkkila <ari.parkkila@qt.io>
(cherry picked from commit 0533b8907ee8c0adfab88ee3160ea38e225531bf)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | classes/populate_sdk_qt6_base.bbclass | 53 | ||||
-rw-r--r-- | recipes-core/meta/build-sysroots.bbappend | 10 |
2 files changed, 38 insertions, 25 deletions
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 <<EOF + cat > ${SDK_OUTPUT}${NATIVE_SYSROOT}/usr/share/cmake/Qt6Toolchain.cmake <<EOF cmake_minimum_required(VERSION 3.11) include_guard(GLOBAL) get_filename_component(SYSROOTS \${CMAKE_CURRENT_LIST_DIR}/../../../.. ABSOLUTE) -set(ENV{PATH} "${SDKPATHNATIVE}${bindir}${PATH_DELIM}\$ENV{PATH}") -set(ENV{PKG_CONFIG_SYSROOT_DIR} "${SDKTARGETSYSROOT}") -set(ENV{PKG_CONFIG_PATH} "${SDKTARGETSYSROOT}${libdir}/pkgconfig") +set(ENV{PATH} "${NATIVE_SYSROOT}${bindir}${PATH_DELIM}\$ENV{PATH}") +set(ENV{PKG_CONFIG_SYSROOT_DIR} "${TARGET_SYSROOT}") +set(ENV{PKG_CONFIG_PATH} "${TARGET_SYSROOT}${libdir}/pkgconfig") set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSROOT ${SDKTARGETSYSROOT}) +set(CMAKE_SYSROOT ${TARGET_SYSROOT}) -set(CMAKE_FIND_ROOT_PATH ${SDKTARGETSYSROOT}) +set(CMAKE_FIND_ROOT_PATH ${TARGET_SYSROOT}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) @@ -79,10 +82,10 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_SYSTEM_PROCESSOR ${TUNE_PKGARCH}) -set(CMAKE_C_COMPILER "${SDKPATHNATIVE}${bindir}/${TARGET_SYS}/${TARGET_PREFIX}gcc${EXE_EXT}") -set(CMAKE_CXX_COMPILER "${SDKPATHNATIVE}${bindir}/${TARGET_SYS}/${TARGET_PREFIX}g++${EXE_EXT}") +set(CMAKE_C_COMPILER "${NATIVE_SYSROOT}${bindir}/${TARGET_SYS}/${TARGET_PREFIX}gcc${EXE_EXT}") +set(CMAKE_CXX_COMPILER "${NATIVE_SYSROOT}${bindir}/${TARGET_SYS}/${TARGET_PREFIX}g++${EXE_EXT}") -set(TARGET_COMPILER_FLAGS "${TARGET_CC_ARCH} --sysroot=${SDKTARGETSYSROOT}") +set(TARGET_COMPILER_FLAGS "${TARGET_CC_ARCH} --sysroot=${TARGET_SYSROOT}") set(TARGET_LINKER_FLAGS "${TARGET_LDFLAGS}") include(CMakeInitializeConfigs) @@ -125,14 +128,14 @@ EOF # resolve absolute paths at runtime sed -i -e 's|${SDKPATH}/sysroots|\${SYSROOTS}|g' \ - ${SDK_OUTPUT}${SDKPATHNATIVE}/usr/share/cmake/Qt6Toolchain.cmake + ${SDK_OUTPUT}${NATIVE_SYSROOT}/usr/share/cmake/Qt6Toolchain.cmake # Conan profile - mkdir -p ${SDK_OUTPUT}${SDKPATHNATIVE}/usr/share/conan - cat > ${SDK_OUTPUT}${SDKPATHNATIVE}/usr/share/conan/profile <<EOF -include(${SDKTARGETSYSROOT}${datadir}/conan/profile) + mkdir -p ${SDK_OUTPUT}${NATIVE_SYSROOT}/usr/share/conan + cat > ${SDK_OUTPUT}${NATIVE_SYSROOT}/usr/share/conan/profile <<EOF +include(${TARGET_SYSROOT}${datadir}/conan/profile) [env] -QT_CONFIGURE_MODULE=${SDKPATHNATIVE}${QT6_INSTALL_BINDIR}/qt-configure-module +QT_CONFIGURE_MODULE=${NATIVE_SYSROOT}${QT6_INSTALL_BINDIR}/qt-configure-module EOF } diff --git a/recipes-core/meta/build-sysroots.bbappend b/recipes-core/meta/build-sysroots.bbappend new file mode 100644 index 0000000..626b99b --- /dev/null +++ b/recipes-core/meta/build-sysroots.bbappend @@ -0,0 +1,10 @@ +inherit populate_sdk_qt6_base + +TARGET_SYSROOT = "${STANDALONE_SYSROOT}" +NATIVE_SYSROOT = "${STANDALONE_SYSROOT_NATIVE}" +SDK_OUTPUT = "" + +do_qt6_support () { + create_qt6_sdk_files +} +addtask do_qt6_support after do_build_native_sysroot before do_build |