@@ -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++
new file mode 100644
@@ -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)
new file mode 100644
@@ -0,0 +1 @@
+#include "../../linux-g++/qplatformdefs.h"
new file mode 100644
@@ -0,0 +1,7 @@
+[Paths]
+Prefix=/usr
+HostPrefix=@@HOST_DIR@@
+HostData=@@STAGING_DIR@@/usr
+Sysroot=@@STAGING_DIR@@
+SysrootifyPrefix=true
+TargetSpec=devices/linux-buildroot-g++
@@ -55,6 +55,9 @@ QT6BASE_CONF_OPTS = \
-DFEATURE_system_zlib=ON \
-DFEATURE_system_libb2=ON
+QT6BASE_CFLAGS = $(TARGET_CFLAGS)
+QT6BASE_CXXFLAGS = $(TARGET_CXXFLAGS)
+
# x86 optimization options. While we have a BR2_X86_CPU_HAS_AVX512, it
# is not clear yet how it maps to all the avx512* options of Qt, so we
# for now keeps them disabled.
@@ -431,5 +434,19 @@ define QT6BASE_RM_USR_MKSPECS
endef
QT6BASE_TARGET_FINALIZE_HOOKS += QT6BASE_RM_USR_MKSPECS
+define QT6BASE_MAKE_BR_SPEC
+ mkdir -p $(@D)/mkspecs/devices/linux-buildroot-g++/
+ $(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="$(QT6BASE_CFLAGS)";BR_COMPILER_CXXFLAGS="$(QT6BASE_CXX_FLAGS)"
+
+QT6BASE_PRE_CONFIGURE_HOOKS += QT6BASE_MAKE_BR_SPEC
+
+QT6BASE_POST_INSTALL_STAGING_HOOKS += QT6_INSTALL_QT_CONF
+
$(eval $(cmake-package))
$(eval $(host-cmake-package))