[RFC,v4,1/5] package/qt6: Add qmake functionality
Commit Message
From: Jesse Van Gavere <jesseevg@gmail.com>
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.
A big thanks to Angelo Compagnucci for the encouragement and testing.
Signed-off-by: Jesse Van Gavere <jesseevg@gmail.com>
Tested-by: Angelo Compagnucci <angelo@amarulasolutions.com>
[dario: fix HostData in qt.conf.in and change the commit message]
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
---
Changes v3 -> v4:
- Drop QT6_QT_CONF_FIXUP
- Drop -@EGLFS_DEVICE@
- Update the commit message
Changes v2 -> v3:
- Drop package/qt6/qt6base/qt6base.mk.save
package/qt6/qt6.mk | 12 ++++++++++
package/qt6/qt6base/qmake.conf | 34 +++++++++++++++++++++++++++++
package/qt6/qt6base/qplatformdefs.h | 1 +
package/qt6/qt6base/qt.conf.in | 7 ++++++
package/qt6/qt6base/qt6base.mk | 17 +++++++++++++++
5 files changed, 71 insertions(+)
create mode 100644 package/qt6/qt6base/qmake.conf
create mode 100644 package/qt6/qt6base/qplatformdefs.h
create mode 100644 package/qt6/qt6base/qt.conf.in
@@ -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))