package/qt6: add qmake functionality

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.

qt6 has its own cross-compiling qmake wrapper script. However, that
hardcodes the paths to different places than where we have them.

QT6_INSTALL_QT_CONF will be used by the qmake-package infrastructure
later so it is put in qt6.mk, even though currently it's only used by
qt6base.

A big thanks to Angelo Compagnucci for the encouragement and testing.

[dario: fix HostData and add the target install dirs in qt.conf.in,
quote QT_QMAKE_DEVICE_OPTIONS, use TARGET_CFLAGS/TARGET_CXXFLAGS,
change the commit message]

Signed-off-by: Jesse Van Gavere <jesseevg@gmail.com>
Tested-by: Angelo Compagnucci <angelo@amarulasolutions.com>
Tested-by: Richard GENOUD <richard.genoud@bootlin.com>
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Signed-off-by: Arnout Vandecappelle <arnout@rnout.be>
This commit is contained in:
Jesse Van Gavere
2026-09-25 08:42:52 +02:00
committed by Arnout Vandecappelle
parent a2142664e9
commit 42d7900bbc
5 changed files with 72 additions and 0 deletions

View File

@@ -12,3 +12,15 @@ 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
# Variable for other Qt applications to use
QT6_QMAKE = $(HOST_DIR)/bin/qmake -spec devices/linux-buildroot-g++

View File

@@ -0,0 +1,34 @@
# 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 =
include(../common/linux_device_post.conf)
load(qt_config)

View File

@@ -0,0 +1 @@
#include "../../linux-g++/qplatformdefs.h"

View File

@@ -0,0 +1,11 @@
[Paths]
Prefix=/usr
HostPrefix=@@HOST_DIR@@
HostData=@@STAGING_DIR@@/usr
Sysroot=@@STAGING_DIR@@
SysrootifyPrefix=true
TargetSpec=devices/linux-buildroot-g++
ArchData=/usr/lib/qt6
LibraryExecutables=/usr/lib/qt6/libexec
Plugins=/usr/lib/qt6/plugins
QmlImports=/usr/lib/qt6/qml

View File

@@ -436,5 +436,19 @@ define QT6BASE_RM_SBOMS
endef
QT6BASE_TARGET_FINALIZE_HOOKS += QT6BASE_RM_SBOMS
define QT6BASE_MAKE_BR_SPEC
$(INSTALL) -m 0644 -D $(QT6BASE_PKGDIR)/qmake.conf \
$(@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=$(TARGET_CFLAGS);BR_COMPILER_CXXFLAGS=$(TARGET_CXXFLAGS)"
QT6BASE_PRE_CONFIGURE_HOOKS += QT6BASE_MAKE_BR_SPEC
QT6BASE_POST_INSTALL_STAGING_HOOKS += QT6_INSTALL_QT_CONF
$(eval $(cmake-package))
$(eval $(host-cmake-package))