mirror of
http://code.qt.io/yocto/meta-qt6.git
synced 2026-01-01 13:58:07 +00:00
After qtbase change 0f8017efb6d037c4f33f947eb3c56aeafa28313c, QT_HOST_PATH
is no longer set in qt.toolchain.cmake, but it was moved to Qt6 package
cmake files. Since the package is in target sysroot, we can no longer use
its location to determine the absolute path of the host sysroot. Instead,
resolve QT_HOST_PATH now in the CMake subscripts and use them also without
the environment-setup script from Qt6Toolchain.cmake.
Change-Id: I81d908321c0d05ab589b9340a62a45800e936252
Reviewed-by: Mikko Gronoff <mikko.gronoff@qt.io>
(cherry picked from commit 0b55d8ec94)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
157 lines
6.9 KiB
Plaintext
157 lines
6.9 KiB
Plaintext
inherit qt6-paths
|
|
|
|
SDK_POSTPROCESS_COMMAND:prepend = "create_qt6_sdk_files;"
|
|
|
|
EXE_EXT = ""
|
|
EXE_EXT:sdkmingw32 = ".exe"
|
|
PATH_DELIM = ":"
|
|
PATH_DELIM:sdkmingw32 = ";"
|
|
|
|
QT6_INSTALL_HOST_LIBEXECDIR = "${QT6_INSTALL_LIBEXECDIR}"
|
|
QT6_INSTALL_HOST_LIBEXECDIR:sdkmingw32 = "${QT6_INSTALL_LIBEXECDIR:mingw32}"
|
|
|
|
create_qt6_sdk_files () {
|
|
# Generate a qt.conf file to be deployed with the SDK
|
|
qtconf=${WORKDIR}/qt.conf
|
|
echo '[Paths]' > $qtconf
|
|
echo 'Prefix = ${prefix}' >> $qtconf
|
|
echo 'Headers = ${QT6_INSTALL_INCLUDEDIR}' >> $qtconf
|
|
echo 'Libraries = ${QT6_INSTALL_LIBDIR}' >> $qtconf
|
|
echo 'ArchData = ${QT6_INSTALL_ARCHDATADIR}' >> $qtconf
|
|
echo 'Data = ${QT6_INSTALL_DATADIR}' >> $qtconf
|
|
echo 'Binaries = ${QT6_INSTALL_BINDIR}' >> $qtconf
|
|
echo 'LibraryExecutables = ${QT6_INSTALL_LIBEXECDIR}' >> $qtconf
|
|
echo 'Plugins = ${QT6_INSTALL_PLUGINSDIR}' >> $qtconf
|
|
echo 'Qml2Imports = ${QT6_INSTALL_QMLDIR}' >> $qtconf
|
|
echo 'Translations = ${QT6_INSTALL_TRANSLATIONSDIR}' >> $qtconf
|
|
echo 'Documentation = ${QT6_INSTALL_DOCDIR}' >> $qtconf
|
|
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 '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
|
|
|
|
install -d ${SDK_OUTPUT}${SDKPATHNATIVE}/environment-setup.d
|
|
script=${SDK_OUTPUT}${SDKPATHNATIVE}/environment-setup.d/qt6.sh
|
|
touch $script
|
|
echo 'export OE_QMAKE_CFLAGS="$CFLAGS"' >> $script
|
|
echo 'export OE_QMAKE_CXXFLAGS="$CXXFLAGS"' >> $script
|
|
echo 'export OE_QMAKE_LDFLAGS="$LDFLAGS"' >> $script
|
|
echo 'export OE_QMAKE_CC="$CC"' >> $script
|
|
echo 'export OE_QMAKE_CXX="$CXX"' >> $script
|
|
echo 'export OE_QMAKE_LINK="$CXX"' >> $script
|
|
echo 'export OE_QMAKE_AR="$AR"' >> $script
|
|
echo 'export OE_QMAKE_STRIP="$STRIP"' >> $script
|
|
echo 'export OE_QMAKE_OBJCOPY="$OBJCOPY"' >> $script
|
|
echo 'export OE_QMAKE_AR_LTCG="${HOST_PREFIX}gcc-ar"' >> $script
|
|
|
|
mkspec=${SDK_OUTPUT}${SDKTARGETSYSROOT}${QT6_INSTALL_MKSPECSDIR}/linux-oe-g++/qmake.conf
|
|
echo "count(QMAKE_AR, 1): QMAKE_AR = ${AR} cqs" >> $mkspec
|
|
echo "count(QMAKE_AR_LTCG, 1): QMAKE_AR_LTCG = ${HOST_PREFIX}gcc-ar cqs" >> $mkspec
|
|
echo "isEmpty(QMAKE_STRIP): QMAKE_STRIP = ${STRIP}" >> $mkspec
|
|
echo "isEmpty(QMAKE_OBJCOPY): QMAKE_OBJCOPY = ${OBJCOPY}" >> $mkspec
|
|
echo "isEmpty(QMAKE_CC): QMAKE_CC = ${CC}" >> $mkspec
|
|
echo "isEmpty(QMAKE_CFLAGS): QMAKE_CFLAGS = ${CFLAGS}" >> $mkspec
|
|
echo "isEmpty(QMAKE_CXX): QMAKE_CXX = ${CXX}" >> $mkspec
|
|
echo "isEmpty(QMAKE_CXXFLAGS): QMAKE_CXXFLAGS = ${CXXFLAGS}" >> $mkspec
|
|
echo "isEmpty(QMAKE_LINK): QMAKE_LINK = ${CXX}" >> $mkspec
|
|
echo "isEmpty(QMAKE_LFLAGS): QMAKE_LFLAGS = ${LDFLAGS}" >> $mkspec
|
|
sed -i $mkspec \
|
|
-e 's:${RECIPE_SYSROOT}:$$[QT_SYSROOT]:' \
|
|
-e 's:${TARGET_PREFIX}:$$[QT_HOST_PREFIX]${bindir}/${TARGET_SYS}/${TARGET_PREFIX}:'
|
|
|
|
# Generate a toolchain file for using Qt without running setup-environment script
|
|
cat > ${SDK_OUTPUT}${SDKPATHNATIVE}/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(CMAKE_SYSTEM_NAME Linux)
|
|
set(CMAKE_SYSROOT ${SDKTARGETSYSROOT})
|
|
|
|
set(CMAKE_FIND_ROOT_PATH ${SDKTARGETSYSROOT})
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
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(TARGET_COMPILER_FLAGS "${TARGET_CC_ARCH} --sysroot=${SDKTARGETSYSROOT}")
|
|
set(TARGET_LINKER_FLAGS "${TARGET_LDFLAGS}")
|
|
|
|
include(CMakeInitializeConfigs)
|
|
|
|
function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING)
|
|
if (_PREFIX MATCHES "CMAKE_(C|CXX|ASM)_FLAGS")
|
|
set(CMAKE_\${CMAKE_MATCH_1}_FLAGS_INIT "\${TARGET_COMPILER_FLAGS}")
|
|
|
|
foreach (config DEBUG RELEASE MINSIZEREL RELWITHDEBINFO)
|
|
if (DEFINED TARGET_COMPILER_FLAGS_\${config})
|
|
set(CMAKE_\${CMAKE_MATCH_1}_FLAGS_\${config}_INIT "\${TARGET_COMPILER_FLAGS_\${config}}")
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
if (_PREFIX MATCHES "CMAKE_(SHARED|MODULE|EXE)_LINKER_FLAGS")
|
|
foreach (config SHARED MODULE EXE)
|
|
set(CMAKE_\${config}_LINKER_FLAGS_INIT "\${TARGET_LINKER_FLAGS}")
|
|
endforeach()
|
|
endif()
|
|
|
|
_cmake_initialize_per_config_variable(\${ARGV})
|
|
endfunction()
|
|
|
|
if(CMAKE_HOST_WIN32)
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
|
|
endif()
|
|
|
|
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
|
|
set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 1)
|
|
endif()
|
|
set(CMAKE_INSTALL_PREFIX "${prefix}" CACHE PATH "Install path prefix")
|
|
|
|
# Include the toolchain configuration subscripts
|
|
file( GLOB toolchain_config_files "\${CMAKE_CURRENT_LIST_DIR}/OEToolchainConfig.cmake.d/*.cmake" )
|
|
foreach(config \${toolchain_config_files})
|
|
include(\${config})
|
|
endforeach()
|
|
EOF
|
|
|
|
# resolve absolute paths at runtime
|
|
sed -i -e 's|${SDKPATH}/sysroots|\${SYSROOTS}|g' \
|
|
${SDK_OUTPUT}${SDKPATHNATIVE}/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)
|
|
[env]
|
|
QT_CONFIGURE_MODULE=${SDKPATHNATIVE}${QT6_INSTALL_BINDIR}/qt-configure-module
|
|
EOF
|
|
}
|
|
|
|
# default debug prefix map isn't valid in the SDK
|
|
DEBUG_PREFIX_MAP = ""
|
|
SECURITY_CFLAGS = ""
|