Complete Yocto mirror with license table for TQMa6UL (2038-compliance)
- 264 license table entries with exact download URLs (224/264 resolved) - Complete sources/ directory with all BitBake recipes - Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl) - Full traceability for Softwarefreigabeantrag - GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4 - License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
11
sources/meta-qt6/classes/disable-build.bbclass
Normal file
11
sources/meta-qt6/classes/disable-build.bbclass
Normal file
@@ -0,0 +1,11 @@
|
||||
# Disable compilation steps for the recipe
|
||||
# Useful for passing CI builds when a Qt module does not compile with updated qtbase or qtdeclarative
|
||||
# Should be used only with the addon modules not officially supported in the Qt releases
|
||||
|
||||
do_configure[noexec] = "1"
|
||||
do_compile[noexec] = "1"
|
||||
do_install[noexec] = "1"
|
||||
|
||||
python () {
|
||||
bb.warn("%s is currenly not supported, build produces empty packages!" % d.getVar("BPN"))
|
||||
}
|
||||
5
sources/meta-qt6/classes/populate_sdk_qt6.bbclass
Normal file
5
sources/meta-qt6/classes/populate_sdk_qt6.bbclass
Normal file
@@ -0,0 +1,5 @@
|
||||
inherit populate_sdk_qt6_base
|
||||
|
||||
# include all available modules
|
||||
TOOLCHAIN_HOST_TASK:append = " nativesdk-packagegroup-qt6-toolchain-host"
|
||||
TOOLCHAIN_TARGET_TASK:append = " packagegroup-qt6-modules"
|
||||
146
sources/meta-qt6/classes/populate_sdk_qt6_base.bbclass
Normal file
146
sources/meta-qt6/classes/populate_sdk_qt6_base.bbclass
Normal file
@@ -0,0 +1,146 @@
|
||||
inherit qt6-paths
|
||||
|
||||
SDKIMAGE_FEATURES:append = " staticdev-pkgs"
|
||||
|
||||
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}"
|
||||
|
||||
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
|
||||
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 'QmlImports = ${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("${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}${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}${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
|
||||
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
|
||||
|
||||
# Generate a toolchain file for using Qt without running setup-environment script
|
||||
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} "${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 ${TARGET_SYSROOT})
|
||||
|
||||
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)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||
|
||||
set(CMAKE_SYSTEM_PROCESSOR ${TUNE_PKGARCH})
|
||||
|
||||
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=${TARGET_SYSROOT}")
|
||||
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}${NATIVE_SYSROOT}/usr/share/cmake/Qt6Toolchain.cmake
|
||||
|
||||
# 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=${NATIVE_SYSROOT}${QT6_INSTALL_BINDIR}/qt-configure-module
|
||||
EOF
|
||||
}
|
||||
|
||||
# default debug prefix map isn't valid in the SDK
|
||||
DEBUG_PREFIX_MAP = ""
|
||||
lcl_maybe_fortify = ""
|
||||
61
sources/meta-qt6/classes/qt6-cmake.bbclass
Normal file
61
sources/meta-qt6/classes/qt6-cmake.bbclass
Normal file
@@ -0,0 +1,61 @@
|
||||
inherit cmake python3native perlnative pkgconfig qt6-paths
|
||||
|
||||
DEPENDS:prepend = "qtbase-native "
|
||||
|
||||
QT_MESSAGE_LOG_LEVEL ?= "STATUS"
|
||||
EXTRA_OECMAKE += "\
|
||||
-DQT_CMAKE_DEBUG_EXTEND_TARGET=ON \
|
||||
-DQT_BUILD_INTERNALS_NO_FORCE_SET_INSTALL_PREFIX=ON \
|
||||
-DCMAKE_MESSAGE_LOG_LEVEL=${QT_MESSAGE_LOG_LEVEL} \
|
||||
"
|
||||
QT_FORCE_BUILD_TOOLS ?= "OFF"
|
||||
QT_INSTALL_EXAMPLES_SOURCES ?= "OFF"
|
||||
EXTRA_OECMAKE:append:class-target = "\
|
||||
-DQT_HOST_PATH:PATH=${RECIPE_SYSROOT_NATIVE}${prefix_native}/ \
|
||||
-DQT_FORCE_BUILD_TOOLS=${QT_FORCE_BUILD_TOOLS} \
|
||||
-DQT_INSTALL_EXAMPLES_SOURCES=${QT_INSTALL_EXAMPLES_SOURCES} \
|
||||
-D__harfbuzz_broken_config_file=TRUE \
|
||||
"
|
||||
EXTRA_OECMAKE:append:class-nativesdk = "\
|
||||
-DQT_HOST_PATH:PATH=${RECIPE_SYSROOT_NATIVE}${prefix_native}/ \
|
||||
-DQT_FORCE_BUILD_TOOLS=ON \
|
||||
"
|
||||
|
||||
EXTRA_OECMAKE += "\
|
||||
-DINSTALL_ARCHDATADIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_ARCHDATADIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_BINDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_BINDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_DATADIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_DATADIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_DESCRIPTIONSDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_DESCRIPTIONSDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_DOCDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_DOCDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_EXAMPLESDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_EXAMPLESDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_INCLUDEDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_INCLUDEDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_LIBDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_LIBDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_LIBEXECDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_LIBEXECDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_PLUGINSDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_PLUGINSDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_QMLDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_QMLDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_SYSCONFDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_SYSCONFDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_TESTSDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_TESTSDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_TRANSLATIONSDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_TRANSLATIONSDIR'), d.getVar('prefix') + '/')} \
|
||||
-DINSTALL_MKSPECSDIR:PATH=${@os.path.relpath(d.getVar('QT6_INSTALL_MKSPECSDIR'), d.getVar('prefix') + '/')} \
|
||||
"
|
||||
|
||||
do_install:append() {
|
||||
# Replace host paths with qmake built-in properties QTBUG-84725
|
||||
# remove all references to TMPDIR that could not be replaced QTBUG-105877
|
||||
find ${D} \( -name "*.pri" -or -name "*.prl" \) -exec \
|
||||
sed -i -e 's|${STAGING_DIR_NATIVE}|$$[QT_HOST_PREFIX/get]|g' \
|
||||
-e 's|${STAGING_DIR_HOST}|$$[QT_SYSROOT]|g' \
|
||||
-e '/QMAKE_PRL_BUILD_DIR/d' \
|
||||
-e '\|${WORKDIR}|d' {} \;
|
||||
|
||||
# Remove buildpaths from SBOM files
|
||||
# QTBUG-130557
|
||||
if [ -e ${D}${QT6_INSTALL_LIBDIR}/sbom ]; then
|
||||
sed -i ${D}${QT6_INSTALL_LIBDIR}/sbom/*.spdx \
|
||||
-e 's|${STAGING_DIR_NATIVE}||' \
|
||||
-e 's|${S}||g' \
|
||||
-e 's|${B}||'
|
||||
fi
|
||||
}
|
||||
|
||||
export QT_DISABLE_SHADER_DISK_CACHE = "1"
|
||||
33
sources/meta-qt6/classes/qt6-paths.bbclass
Normal file
33
sources/meta-qt6/classes/qt6-paths.bbclass
Normal file
@@ -0,0 +1,33 @@
|
||||
# Install locations:
|
||||
|
||||
# Executables [PREFIX/bin]
|
||||
QT6_INSTALL_BINDIR ?= "${bindir}"
|
||||
# Header files [PREFIX/include]
|
||||
QT6_INSTALL_INCLUDEDIR ?= "${includedir}"
|
||||
# Libraries [PREFIX/lib]
|
||||
QT6_INSTALL_LIBDIR ?= "${libdir}"
|
||||
# Arch-dependent data [PREFIX]
|
||||
QT6_INSTALL_ARCHDATADIR ?= "${libdir}"
|
||||
# Plugins [ARCHDATADIR/plugins]
|
||||
QT6_INSTALL_PLUGINSDIR ?= "${libdir}/plugins"
|
||||
# Helper programs [ARCHDATADIR/bin on Windows, ARCHDATADIR/libexec otherwise]
|
||||
QT6_INSTALL_LIBEXECDIR ?= "${libexecdir}"
|
||||
QT6_INSTALL_LIBEXECDIR:mingw32 ?= "${bindir}"
|
||||
# QML2 imports [ARCHDATADIR/qml]
|
||||
QT6_INSTALL_QMLDIR ?= "${libdir}/qml"
|
||||
# "Arch-independent data [PREFIX]
|
||||
QT6_INSTALL_DATADIR ?= "${datadir}"
|
||||
# Documentation [DATADIR/doc]
|
||||
QT6_INSTALL_DOCDIR ?= "${docdir}"
|
||||
# Translations [DATADIR/translations]
|
||||
QT6_INSTALL_TRANSLATIONSDIR ?= "${datadir}/translations"
|
||||
# Settings used by Qt programs [PREFIX/etc/xdg]
|
||||
QT6_INSTALL_SYSCONFDIR ?= "${sysconfdir}/xdg"
|
||||
# Examples [PREFIX/examples]
|
||||
QT6_INSTALL_EXAMPLESDIR ?= "${datadir}/examples"
|
||||
# Tests [PREFIX/tests]
|
||||
QT6_INSTALL_TESTSDIR ?= "${prefix}/tests"
|
||||
# Module description files directory [ARCHDATADIR/modules]
|
||||
QT6_INSTALL_DESCRIPTIONSDIR ?= "${libdir}/modules"
|
||||
# Mkspecs files [PREFIX/mkspecs]
|
||||
QT6_INSTALL_MKSPECSDIR ?= "${libdir}/mkspecs"
|
||||
272
sources/meta-qt6/classes/qt6-qmake.bbclass
Normal file
272
sources/meta-qt6/classes/qt6-qmake.bbclass
Normal file
@@ -0,0 +1,272 @@
|
||||
OE_QMAKE_PATH_PREFIX = "${prefix}"
|
||||
OE_QMAKE_PATH_HEADERS = "${QT6_INSTALL_INCLUDEDIR}"
|
||||
OE_QMAKE_PATH_LIBS = "${QT6_INSTALL_LIBDIR}"
|
||||
OE_QMAKE_PATH_ARCHDATA = "${QT6_INSTALL_ARCHDATADIR}"
|
||||
OE_QMAKE_PATH_DATA = "${QT6_INSTALL_DATADIR}"
|
||||
OE_QMAKE_PATH_BINS = "${QT6_INSTALL_BINDIR}"
|
||||
OE_QMAKE_PATH_LIBEXECS = "${QT6_INSTALL_LIBEXECDIR}"
|
||||
OE_QMAKE_PATH_PLUGINS = "${QT6_INSTALL_PLUGINSDIR}"
|
||||
OE_QMAKE_PATH_QML = "${QT6_INSTALL_QMLDIR}"
|
||||
OE_QMAKE_PATH_TRANSLATIONS = "${QT6_INSTALL_TRANSLATIONSDIR}"
|
||||
OE_QMAKE_PATH_DOCS = "${QT6_INSTALL_DOCDIR}"
|
||||
OE_QMAKE_PATH_SETTINGS = "${sysconfdir}"
|
||||
OE_QMAKE_PATH_EXAMPLES = "${QT6_INSTALL_EXAMPLESDIR}"
|
||||
OE_QMAKE_PATH_TESTS = "${QT6_INSTALL_TESTSDIR}"
|
||||
OE_QMAKE_PATH_HOST_PREFIX = ""
|
||||
OE_QMAKE_PATH_HOST_PREFIX:class-target = "${STAGING_DIR_NATIVE}"
|
||||
OE_QMAKE_PATH_HOST_BINS = "${QT6_INSTALL_BINDIR}"
|
||||
OE_QMAKE_PATH_HOST_DATA = "${QMAKE_MKSPEC_PATH_TARGET}"
|
||||
OE_QMAKE_PATH_HOST_LIBS = "${STAGING_LIBDIR}"
|
||||
OE_QMAKE_PATH_HOST_LIBEXECS = "${QT6_INSTALL_LIBEXECDIR}"
|
||||
OE_QMAKE_PATH_EXTERNAL_HOST_BINS = "${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_HOST_BINS}"
|
||||
|
||||
# This is useful for target recipes to reference native mkspecs
|
||||
QMAKE_MKSPEC_PATH_NATIVE = "${STAGING_LIBDIR_NATIVE}"
|
||||
QMAKE_MKSPEC_PATH_TARGET = "${STAGING_LIBDIR}"
|
||||
|
||||
QMAKE_MKSPEC_PATH = "${QMAKE_MKSPEC_PATH_TARGET}"
|
||||
QMAKE_MKSPEC_PATH:class-native = "${QMAKE_MKSPEC_PATH_NATIVE}"
|
||||
QMAKE_MKSPEC_PATH:class-nativesdk = "${QMAKE_MKSPEC_PATH_NATIVE}"
|
||||
|
||||
DEPENDS:prepend = "qtbase-native "
|
||||
|
||||
# hardcode linux, because that's what 0001-Add-linux-oe-g-platform.patch adds
|
||||
XPLATFORM:toolchain-clang = "linux-oe-clang"
|
||||
XPLATFORM ?= "linux-oe-g++"
|
||||
|
||||
OE_QMAKE_PLATFORM_NATIVE = "${XPLATFORM}"
|
||||
OE_QMAKE_PLATFORM = "${XPLATFORM}"
|
||||
|
||||
# Add -d to show debug output from every qmake call, but it prints *a lot*, better to add it only to debugged recipe
|
||||
OE_QMAKE_DEBUG_OUTPUT ?= ""
|
||||
|
||||
# Don't look through supplied directories recursively by default
|
||||
OE_QMAKE_RECURSIVE ?= ""
|
||||
|
||||
# Paths in .prl files contain SYSROOT value
|
||||
SSTATE_SCAN_FILES += "*.pri *.prl *.prf"
|
||||
|
||||
# drop default -e and add needed OE_QMAKE vars explicitly
|
||||
# the problem is that when generated Makefile has:
|
||||
# CFLAGS = -pipe $(OE_QMAKE_CFLAGS) -O2 -pthread -D_REENTRANT -Wall -W -fPIC $(DEFINES)
|
||||
# then OE_QMAKE_CFLAGS are exported and used correctly, but then whole CFLAGS is overwritten from env (and -fPIC lost and build fails)
|
||||
EXTRA_OEMAKE = " \
|
||||
MAKEFLAGS='${PARALLEL_MAKE}' \
|
||||
OE_QMAKE_CC='${OE_QMAKE_CC}' \
|
||||
OE_QMAKE_CXX='${OE_QMAKE_CXX}' \
|
||||
OE_QMAKE_CFLAGS='${OE_QMAKE_CFLAGS}' \
|
||||
OE_QMAKE_CXXFLAGS='${OE_QMAKE_CXXFLAGS}' \
|
||||
OE_QMAKE_LINK='${OE_QMAKE_LINK}' \
|
||||
OE_QMAKE_LDFLAGS='${OE_QMAKE_LDFLAGS}' \
|
||||
OE_QMAKE_AR='${OE_QMAKE_AR}' \
|
||||
OE_QMAKE_STRIP='${OE_QMAKE_STRIP}' \
|
||||
OE_QMAKE_INCDIR_QT='${STAGING_DIR_TARGET}/${OE_QMAKE_PATH_HEADERS}' \
|
||||
"
|
||||
|
||||
OE_QMAKE_QMAKE = "${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}/qmake"
|
||||
export OE_QMAKE_CC = "${CC}"
|
||||
export OE_QMAKE_CFLAGS = "${CFLAGS}"
|
||||
export OE_QMAKE_CXX = "${CXX}"
|
||||
export OE_QMAKE_CXXFLAGS = "${CXXFLAGS}"
|
||||
export OE_QMAKE_LINK = "${CXX}"
|
||||
export OE_QMAKE_LDFLAGS = "${LDFLAGS}"
|
||||
export OE_QMAKE_AR = "${AR}"
|
||||
export OE_QMAKE_STRIP = "echo"
|
||||
export OE_QMAKE_OBJCOPY = "${OBJCOPY}"
|
||||
export OE_QMAKE_AR_LTCG = "${HOST_PREFIX}gcc-ar"
|
||||
|
||||
# qmake reads if from shell environment
|
||||
export OE_QMAKE_QTCONF_PATH = "${WORKDIR}/qt.conf"
|
||||
|
||||
inherit qt6-paths remove-libtool
|
||||
|
||||
generate_target_qt_config_file() {
|
||||
qtconf="$1"
|
||||
cat > "$qtconf" <<EOF
|
||||
[Paths]
|
||||
Prefix = ${OE_QMAKE_PATH_PREFIX}
|
||||
Headers = ${OE_QMAKE_PATH_HEADERS}
|
||||
Libraries = ${OE_QMAKE_PATH_LIBS}
|
||||
ArchData = ${OE_QMAKE_PATH_ARCHDATA}
|
||||
Data = ${OE_QMAKE_PATH_DATA}
|
||||
Binaries = ${OE_QMAKE_PATH_BINS}
|
||||
LibraryExecutables = ${OE_QMAKE_PATH_LIBEXECS}
|
||||
Plugins = ${OE_QMAKE_PATH_PLUGINS}
|
||||
QmlImports = ${OE_QMAKE_PATH_QML}
|
||||
Translations = ${OE_QMAKE_PATH_TRANSLATIONS}
|
||||
Documentation = ${OE_QMAKE_PATH_DOCS}
|
||||
Settings = ${OE_QMAKE_PATH_SETTINGS}
|
||||
Examples = ${OE_QMAKE_PATH_EXAMPLES}
|
||||
Tests = ${OE_QMAKE_PATH_TESTS}
|
||||
HostBinaries = ${OE_QMAKE_PATH_BINS}
|
||||
HostData = ${OE_QMAKE_PATH_ARCHDATA}
|
||||
HostLibraries = ${OE_QMAKE_PATH_LIBS}
|
||||
HostSpec = ${OE_QMAKE_PLATFORM}
|
||||
TargetSpec = ${OE_QMAKE_PLATFORM}
|
||||
ExternalHostBinaries = ${OE_QMAKE_PATH_BINS}
|
||||
Sysroot =
|
||||
EOF
|
||||
}
|
||||
|
||||
do_generate_qt_config_file() {
|
||||
generate_qt_config_file_paths
|
||||
generate_qt_config_file_effective_paths
|
||||
}
|
||||
|
||||
generate_qt_config_file_paths() {
|
||||
cat > ${OE_QMAKE_QTCONF_PATH} <<EOF
|
||||
[Paths]
|
||||
Prefix = ${OE_QMAKE_PATH_PREFIX}
|
||||
Headers = ${OE_QMAKE_PATH_HEADERS}
|
||||
Libraries = ${OE_QMAKE_PATH_LIBS}
|
||||
ArchData = ${OE_QMAKE_PATH_ARCHDATA}
|
||||
Data = ${OE_QMAKE_PATH_DATA}
|
||||
Binaries = ${OE_QMAKE_PATH_BINS}
|
||||
LibraryExecutables = ${OE_QMAKE_PATH_LIBEXECS}
|
||||
Plugins = ${OE_QMAKE_PATH_PLUGINS}
|
||||
QmlImports = ${OE_QMAKE_PATH_QML}
|
||||
Translations = ${OE_QMAKE_PATH_TRANSLATIONS}
|
||||
Documentation = ${OE_QMAKE_PATH_DOCS}
|
||||
Settings = ${OE_QMAKE_PATH_SETTINGS}
|
||||
Examples = ${OE_QMAKE_PATH_EXAMPLES}
|
||||
Tests = ${OE_QMAKE_PATH_TESTS}
|
||||
HostBinaries = ${OE_QMAKE_PATH_HOST_BINS}
|
||||
HostData = ${OE_QMAKE_PATH_HOST_DATA}
|
||||
HostLibraries = ${OE_QMAKE_PATH_HOST_LIBS}
|
||||
HostLibraryExecutables = ${OE_QMAKE_PATH_HOST_LIBEXECS}
|
||||
HostSpec = ${OE_QMAKE_PLATFORM_NATIVE}
|
||||
TargetSpec = ${OE_QMAKE_PLATFORM}
|
||||
ExternalHostBinaries = ${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}
|
||||
Sysroot = ${STAGING_DIR_TARGET}
|
||||
SysrootifyPrefix=true
|
||||
EOF
|
||||
}
|
||||
|
||||
generate_qt_config_file_effective_paths() {
|
||||
cat >> ${OE_QMAKE_QTCONF_PATH} <<EOF
|
||||
[EffectivePaths]
|
||||
HostBinaries = ${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}
|
||||
HostLibraries = ${STAGING_LIBDIR_NATIVE}
|
||||
HostData = ${OE_QMAKE_PATH_HOST_DATA}
|
||||
HostPrefix = ${STAGING_DIR_NATIVE}
|
||||
HostLibraryExecutables = ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_HOST_LIBEXECS}
|
||||
EOF
|
||||
}
|
||||
#
|
||||
# Allows to override following values (as in version 5.0.1)
|
||||
# Prefix The default prefix for all paths.
|
||||
# Documentation The location for documentation upon install.
|
||||
# Headers The location for all headers.
|
||||
# Libraries The location of installed libraries.
|
||||
# LibraryExecutables The location of installed executables required by libraries at runtime.
|
||||
# Binaries The location of installed Qt binaries (tools and applications).
|
||||
# Plugins The location of installed Qt plugins.
|
||||
# Imports The location of installed QML extensions to import (QML 1.x).
|
||||
# QmlImports The location of installed QML extensions to import (QML 2.x).
|
||||
# ArchData The location of general architecture-dependent Qt data.
|
||||
# Data The location of general architecture-independent Qt data.
|
||||
# Translations The location of translation information for Qt strings.
|
||||
# Examples The location for examples upon install.
|
||||
# Tests The location of installed Qt testcases.
|
||||
# Settings The location for Qt settings. Not applicable on Windows.
|
||||
|
||||
# For bootstrapped
|
||||
# Sysroot The location of target sysroot
|
||||
# HostPrefix The prefix for host tools when cross compiling (building tools for both systems)
|
||||
# HostBinaries The location where to install host tools
|
||||
# HostData The location where to install host data
|
||||
# ExternalHostBinaries The location where we already have host tools (when cross compiling, but reusing existing tools)
|
||||
# TargetSpec The location where to install target mkspec
|
||||
# HostSpec The location where to install host mkspec
|
||||
|
||||
# qmake works fine with separate B, use it by default
|
||||
SEPB = "${WORKDIR}/build"
|
||||
B = "${SEPB}"
|
||||
|
||||
CONFIGURESTAMPFILE = "${WORKDIR}/qmake5_base_configure.sstate"
|
||||
|
||||
qmake5_base_preconfigure() {
|
||||
if [ -n "${CONFIGURESTAMPFILE}" -a -e "${CONFIGURESTAMPFILE}" ]; then
|
||||
if [ "`cat ${CONFIGURESTAMPFILE}`" != "${BB_TASKHASH}" -a "${S}" != "${B}" ]; then
|
||||
echo "Previously configured separate build directory detected, cleaning ${B}"
|
||||
rm -rf ${B}
|
||||
mkdir ${B}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
qmake5_base_postconfigure(){
|
||||
if [ -n "${CONFIGURESTAMPFILE}" ]; then
|
||||
echo ${BB_TASKHASH} > ${CONFIGURESTAMPFILE}
|
||||
fi
|
||||
}
|
||||
|
||||
EXTRAQCONFFUNCS ??= ""
|
||||
|
||||
do_configure[prefuncs] += "qmake5_base_preconfigure ${EXTRAQCONFFUNCS}"
|
||||
do_configure[postfuncs] += "qmake5_base_postconfigure"
|
||||
|
||||
addtask generate_qt_config_file after do_patch before do_configure
|
||||
|
||||
do_configure () {
|
||||
if [ -z "${QMAKE_PROFILES}" ]; then
|
||||
PROFILES="`ls ${S}/*.pro`"
|
||||
else
|
||||
PROFILES="${QMAKE_PROFILES}"
|
||||
bbnote "qmake using profiles: '${QMAKE_PROFILES}'"
|
||||
fi
|
||||
|
||||
if [ ! -z "${EXTRA_QMAKEVARS_POST}" ]; then
|
||||
AFTER="-after"
|
||||
QMAKE_VARSUBST_POST="${EXTRA_QMAKEVARS_POST}"
|
||||
bbnote "qmake postvar substitution: '${EXTRA_QMAKEVARS_POST}'"
|
||||
fi
|
||||
|
||||
if [ ! -z "${EXTRA_QMAKEVARS_PRE}" ]; then
|
||||
QMAKE_VARSUBST_PRE="${EXTRA_QMAKEVARS_PRE}"
|
||||
bbnote "qmake prevar substitution: '${EXTRA_QMAKEVARS_PRE}'"
|
||||
fi
|
||||
|
||||
if [ ! -z "${EXTRA_QMAKEVARS_CONFIGURE}" ]; then
|
||||
QMAKE_VARSUBST_CONFIGURE="${EXTRA_QMAKEVARS_CONFIGURE}"
|
||||
bbnote "qmake configure substitution: '${EXTRA_QMAKEVARS_CONFIGURE}'"
|
||||
fi
|
||||
|
||||
# for config.tests to read this
|
||||
export QMAKE_MAKE_ARGS="${EXTRA_OEMAKE}"
|
||||
|
||||
CMD="${OE_QMAKE_QMAKE} -makefile -o Makefile ${OE_QMAKE_DEBUG_OUTPUT} ${OE_QMAKE_RECURSIVE} $QMAKE_VARSUBST_PRE $AFTER $PROFILES $QMAKE_VARSUBST_POST -- $QMAKE_VARSUBST_CONFIGURE"
|
||||
${OE_QMAKE_QMAKE} -makefile -o Makefile ${OE_QMAKE_DEBUG_OUTPUT} ${OE_QMAKE_RECURSIVE} $QMAKE_VARSUBST_PRE $AFTER $PROFILES $QMAKE_VARSUBST_POST -- $QMAKE_VARSUBST_CONFIGURE || die "Error calling $CMD"
|
||||
}
|
||||
|
||||
do_install:class-native() {
|
||||
oe_runmake install INSTALL_ROOT=${D}
|
||||
find "${D}" -ignore_readdir_race -name "*.la" -delete
|
||||
if ls ${D}${libdir}/pkgconfig/Qt5*.pc >/dev/null 2>/dev/null; then
|
||||
sed -i "s@-L${STAGING_LIBDIR}@-L\${libdir}@g" ${D}${libdir}/pkgconfig/Qt5*.pc
|
||||
fi
|
||||
}
|
||||
|
||||
do_install() {
|
||||
# Fix install paths for all
|
||||
find . -name "Makefile*" | xargs -r sed -i "s,(INSTALL_ROOT)${STAGING_DIR_TARGET},(INSTALL_ROOT),g"
|
||||
find . -name "Makefile*" | xargs -r sed -i "s,(INSTALL_ROOT)${STAGING_DIR_HOST},(INSTALL_ROOT),g"
|
||||
find . -name "Makefile*" | xargs -r sed -i "s,(INSTALL_ROOT)${STAGING_DIR_NATIVE},(INSTALL_ROOT),g"
|
||||
|
||||
oe_runmake install INSTALL_ROOT=${D}
|
||||
|
||||
# Replace host paths with qmake built-in properties
|
||||
find ${D} \( -name "*.pri" -or -name "*.prl" \) -exec \
|
||||
sed -i -e 's|${STAGING_DIR_NATIVE}|$$[QT_HOST_PREFIX/get]|g' \
|
||||
-e 's|${STAGING_DIR_HOST}|$$[QT_SYSROOT]|g' {} \;
|
||||
|
||||
# Replace host paths with pkg-config built-in variable
|
||||
find ${D} -name "*.pc" -exec \
|
||||
sed -i -e 's|prefix=${STAGING_DIR_HOST}|prefix=|g' \
|
||||
-e 's|${STAGING_DIR_HOST}|${pc_sysrootdir}|g' {} \;
|
||||
|
||||
# Replace resolved lib path with the lib name
|
||||
find ${D} -name "*.cmake" -exec \
|
||||
sed -i -e 's@/[^;]*/lib\([^;]*\)\.\(so\|a\)@\1@g' {} \;
|
||||
|
||||
}
|
||||
40
sources/meta-qt6/classes/srcrev-update.bbclass
Normal file
40
sources/meta-qt6/classes/srcrev-update.bbclass
Normal file
@@ -0,0 +1,40 @@
|
||||
python do_srcrev_update() {
|
||||
import subprocess
|
||||
|
||||
recipe = d.getVar('FILE')
|
||||
srcrev_file = os.path.join(d.getVar('QT6BASE'), 'recipes-qt/qt6/qt6-git.inc')
|
||||
|
||||
module = d.getVar('QT_MODULE')
|
||||
|
||||
scms = []
|
||||
fetcher = bb.fetch2.Fetch(d.getVar('SRC_URI').split(), d)
|
||||
urldata = fetcher.ud
|
||||
for u in urldata:
|
||||
if urldata[u].method.supports_srcrev():
|
||||
scms.append(u)
|
||||
|
||||
if len(scms) == 0:
|
||||
return
|
||||
|
||||
d.setVar("__BBSEENSRCREV", "1")
|
||||
d.setVar("__BBSRCREV_SEEN", "1")
|
||||
for scm in scms:
|
||||
ud = urldata[scm]
|
||||
if hasattr(ud, 'names'):
|
||||
name = ud.names[0]
|
||||
else:
|
||||
name = ud.name
|
||||
rev = ud.method.latest_revision(ud, d, name)
|
||||
srcrev = d.getVar("SRCREV_%s" % name)
|
||||
if srcrev is None: srcrev = d.getVar("SRCREV")
|
||||
|
||||
if srcrev == rev:
|
||||
bb.plain("%s: %s is already latest" % (name, srcrev))
|
||||
continue
|
||||
|
||||
bb.plain("%s: %s -> %s" % (name, srcrev, rev))
|
||||
cmd = "sed -E -i %s %s -e '/SRCREV(_%s)? /s/%s/%s/'" % (recipe, srcrev_file, name, srcrev, rev)
|
||||
bb.process.run(cmd, log=None, shell=True, stderr=subprocess.PIPE, cwd=None)
|
||||
}
|
||||
do_srcrev_update[nostamp] = "1"
|
||||
addtask srcrev_update after do_fetch
|
||||
Reference in New Issue
Block a user