Skip to contentSkip to conversation

qtbase: Add OE clang specific mkspecs

PATCH New Khem Raj 1 participant 2 messages Sep 3, 2017

lore
Share & tools
lore

Khem Raj

author
#0 lore raw

PATCH 1/2 qtbase: Add OE clang specific mkspecs

We can not piggy back clang anymore on existing
OE mkspecs since starting 5.9 the configure is
asking compiler for include paths and it needs to
know if platform is clang-linux or g++-linux

Fixes:
ERROR: failed to parse default search paths from compiler output

---
 classes/qmake5_base.bbclass                        |  7 ++-
 recipes-qt/qt5/qtbase-native_git.bb                |  6 +-
 ...-Add-OE-specific-specs-for-clang-compiler.patch | 72 ++++++++++++++++++++++
 recipes-qt/qt5/qtbase_git.bb                       |  6 +-
 4 files changed, 87 insertions(+), 4 deletions(-)
 create mode 100644 recipes-qt/qt5/qtbase/0010-Add-OE-specific-specs-for-clang-compiler.patch
classes/qmake5_base.bbclass +5 -2
index a556f4f..8e1fe20 100644
@@ -1,6 +1,9 @@
 # hardcode linux, because that's what 0001-Add-linux-oe-g-platform.patch adds
-OE_QMAKE_PLATFORM_NATIVE = "linux-oe-g++"
-OE_QMAKE_PLATFORM = "linux-oe-g++"
+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 ?= ""
recipes-qt/qt5/qtbase-native_git.bb +5 -1
index 54a0b78..72b977d 100644
@@ -38,10 +38,14 @@ SRC_URI += "\
 # 5.9.meta-qt5-native.2
 SRC_URI += " \
     file://0009-Always-build-uic.patch \
+    file://0010-Add-OE-specific-specs-for-clang-compiler.patch \
 "
 
 CLEANBROKEN = "1"
 
+XPLATFORM_toolchain-clang = "linux-oe-clang"
+XPLATFORM ?= "linux-oe-g++"
+
 PACKAGECONFIG_CONFARGS = " \
     -sysroot ${STAGING_DIR_NATIVE} \
     -no-gcc-sysroot \
@@ -79,7 +83,7 @@ PACKAGECONFIG_CONFARGS = " \
     -nomake examples \
     -nomake tests \
     -no-rpath \
-    -platform linux-oe-g++ \
+    -platform ${XPLATFORM} \
 "
 
 # for qtbase configuration we need default settings
recipes-qt/qt5/qtbase/0010-Add-OE-specific-specs-for-clang-compiler.patch new file +72 -0

72 lines not on this page · raw message

recipes-qt/qt5/qtbase_git.bb +5 -1
index aaa59f3..25d99e8 100644
@@ -26,6 +26,7 @@ SRC_URI += "\
     file://0006-Pretend-Qt5-wasn-t-found-if-OE_QMAKE_PATH_EXTERNAL_H.patch \
     file://0007-Delete-qlonglong-and-qulonglong.patch \
     file://0008-Replace-pthread_yield-with-sched_yield.patch \
+    file://0010-Add-OE-specific-specs-for-clang-compiler.patch \
     file://run-ptest \
 "
 
@@ -160,6 +161,9 @@ QT_CONFIG_FLAGS += " \
 # since we cannot set empty set filename to a not existent file
 deltask generate_qt_config_file
 
+XPLATFORM_toolchain-clang = "linux-oe-clang"
+XPLATFORM ?= "linux-oe-g++"
+
 do_configure() {
     # Avoid qmake error "Cannot read [...]/usr/lib/qt5/mkspecs/oe-device-extra.pri: No such file or directory" during configuration
     touch ${S}/mkspecs/oe-device-extra.pri
@@ -188,7 +192,7 @@ do_configure() {
         -external-hostbindir ${OE_QMAKE_PATH_EXTERNAL_HOST_BINS} \
         -hostdatadir ${OE_QMAKE_PATH_HOST_DATA} \
         -platform ${OE_QMAKE_PLATFORM_NATIVE} \
-        -xplatform linux-oe-g++ \
+        -xplatform ${XPLATFORM} \
         ${QT_CONFIG_FLAGS}
 }
 
Signature · 1 line
2.14.1
author
#1 lore raw

PATCH 2/2 qtbase: Fix build with musl/clang

---
 0001-qtbase-Add-OE-clang-specific-mkspecs.patch    | 178 +++++++++++++++++++++
 recipes-qt/qt5/qtbase-native_git.bb                |   2 +
 ...-Invert-conditional-for-defining-QT_SOCKL.patch |  35 ++++
 ..._qlocale-Enable-QT_USE_FENV-only-on-glibc.patch |  28 ++++
 recipes-qt/qt5/qtbase_git.bb                       |   2 +
 5 files changed, 245 insertions(+)
 create mode 100644 0001-qtbase-Add-OE-clang-specific-mkspecs.patch
 create mode 100644 recipes-qt/qt5/qtbase/0011-linux-clang-Invert-conditional-for-defining-QT_SOCKL.patch
 create mode 100644 recipes-qt/qt5/qtbase/0012-tst_qlocale-Enable-QT_USE_FENV-only-on-glibc.patch
0001-qtbase-Add-OE-clang-specific-mkspecs.patch new file +178 -0
new file mode 100644
index 0000000..99c5331
@@ -0,0 +1,178 @@
+From 75aeb71530c456b9800bcc83c104e3906e47e9e4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <[email protected]>
+Date: Sun, 3 Sep 2017 09:29:02 -0700
+Subject: [PATCH] qtbase: Add OE clang specific mkspecs
+
+We can not piggy back clang anymore on existing
+OE mkspecs since starting 5.9 the configure is
+asking compiler for include paths and it needs to
+know if platform is clang-linux or g++-linux
+
+Fixes:
+ERROR: failed to parse default search paths from compiler output
+
+Signed-off-by: Khem Raj <[email protected]>
+---
+ classes/qmake5_base.bbclass                        |  7 ++-
+ recipes-qt/qt5/qtbase-native_git.bb                |  6 +-
+ ...-Add-OE-specific-specs-for-clang-compiler.patch | 72 ++++++++++++++++++++++
+ recipes-qt/qt5/qtbase_git.bb                       |  6 +-
+ 4 files changed, 87 insertions(+), 4 deletions(-)
+ create mode 100644 recipes-qt/qt5/qtbase/0010-Add-OE-specific-specs-for-clang-compiler.patch
+
+diff --git a/classes/qmake5_base.bbclass b/classes/qmake5_base.bbclass
+index a556f4f..8e1fe20 100644
+--- a/classes/qmake5_base.bbclass
++++ b/classes/qmake5_base.bbclass
+@@ -1,6 +1,9 @@
+ # hardcode linux, because that's what 0001-Add-linux-oe-g-platform.patch adds
+-OE_QMAKE_PLATFORM_NATIVE = "linux-oe-g++"
+-OE_QMAKE_PLATFORM = "linux-oe-g++"
++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 ?= ""
+diff --git a/recipes-qt/qt5/qtbase-native_git.bb b/recipes-qt/qt5/qtbase-native_git.bb
+index 54a0b78..72b977d 100644
+--- a/recipes-qt/qt5/qtbase-native_git.bb
++++ b/recipes-qt/qt5/qtbase-native_git.bb
+@@ -38,10 +38,14 @@ SRC_URI += "\
+ # 5.9.meta-qt5-native.2
+ SRC_URI += " \
+     file://0009-Always-build-uic.patch \
++    file://0010-Add-OE-specific-specs-for-clang-compiler.patch \
+ "
+ 
+ CLEANBROKEN = "1"
+ 
++XPLATFORM_toolchain-clang = "linux-oe-clang"
++XPLATFORM ?= "linux-oe-g++"
++
+ PACKAGECONFIG_CONFARGS = " \
+     -sysroot ${STAGING_DIR_NATIVE} \
+     -no-gcc-sysroot \
+@@ -79,7 +83,7 @@ PACKAGECONFIG_CONFARGS = " \
+     -nomake examples \
+     -nomake tests \
+     -no-rpath \
+-    -platform linux-oe-g++ \
++    -platform ${XPLATFORM} \
+ "
+ 
+ # for qtbase configuration we need default settings
+diff --git a/recipes-qt/qt5/qtbase/0010-Add-OE-specific-specs-for-clang-compiler.patch b/recipes-qt/qt5/qtbase/0010-Add-OE-specific-specs-for-clang-compiler.patch
+new file mode 100644
+index 0000000..b019f67
+--- /dev/null
++++ b/recipes-qt/qt5/qtbase/0010-Add-OE-specific-specs-for-clang-compiler.patch
+@@ -0,0 +1,72 @@
++From 3a46fb7b47d19c5261e1590f8d70fe41443def64 Mon Sep 17 00:00:00 2001
++From: Khem Raj <[email protected]>
++Date: Sun, 3 Sep 2017 09:11:44 -0700
++Subject: [PATCH] Add OE specific specs for clang compiler
++
++Signed-off-by: Khem Raj <[email protected]>
++---
++ mkspecs/linux-oe-clang/qmake.conf      | 43 ++++++++++++++++++++++++++++++++++
++ mkspecs/linux-oe-clang/qplatformdefs.h |  1 +
++ 2 files changed, 44 insertions(+)
++ create mode 100644 mkspecs/linux-oe-clang/qmake.conf
++ create mode 100644 mkspecs/linux-oe-clang/qplatformdefs.h
++
++diff --git a/mkspecs/linux-oe-clang/qmake.conf b/mkspecs/linux-oe-clang/qmake.conf
++new file mode 100644
++index 0000000000..ffc9f051db
++--- /dev/null
+++++ b/mkspecs/linux-oe-clang/qmake.conf
++@@ -0,0 +1,43 @@
+++#
+++# qmake configuration for linux-g++ with modifications for building with OpenEmbedded
+++#
+++
+++MAKEFILE_GENERATOR = UNIX
+++CONFIG += incremental
+++QMAKE_INCREMENTAL_STYLE = sublib
+++
+++include(../common/linux.conf)
+++
+++# QMAKE_<TOOL> (moc, uic, rcc) are gone, overwrite only ar and strip
+++QMAKE_AR              = $$(OE_QMAKE_AR) cqs
+++QMAKE_STRIP           = $$(OE_QMAKE_STRIP)
+++QMAKE_WAYLAND_SCANNER = $$(OE_QMAKE_WAYLAND_SCANNER)
+++
+++include(../common/gcc-base-unix.conf)
+++
+++# *FLAGS from gcc-base.conf
+++QMAKE_CFLAGS                += $$(OE_QMAKE_CFLAGS)
+++QMAKE_CXXFLAGS              += $$(OE_QMAKE_CXXFLAGS)
+++QMAKE_LFLAGS                += $$(OE_QMAKE_LDFLAGS)
+++
+++include(../common/clang.conf)
+++
+++# tc settings from g++-base.conf
+++QMAKE_COMPILER = $$(OE_QMAKE_COMPILER) clang
+++QMAKE_CC       = $$(OE_QMAKE_CC)
+++QMAKE_CXX      = $$(OE_QMAKE_CXX)
+++
+++QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$(OE_QMAKE_CFLAGS)
+++
+++QMAKE_LINK         = $$(OE_QMAKE_LINK)
+++QMAKE_LINK_SHLIB   = $$(OE_QMAKE_LINK)
+++QMAKE_LINK_C       = $$(OE_QMAKE_LINK)
+++QMAKE_LINK_C_SHLIB = $$(OE_QMAKE_LINK)
+++
+++# for the SDK
+++isEmpty(QMAKE_QT_CONFIG):QMAKE_QT_CONFIG = $$(OE_QMAKE_QT_CONFIG)
+++
+++include(../oe-device-extra.pri)
+++
+++load(device_config)
+++load(qt_config)
++diff --git a/mkspecs/linux-oe-clang/qplatformdefs.h b/mkspecs/linux-oe-clang/qplatformdefs.h
++new file mode 100644
++index 0000000000..880c927b21
++--- /dev/null
+++++ b/mkspecs/linux-oe-clang/qplatformdefs.h
++@@ -0,0 +1 @@
+++#include "../linux-clang/qplatformdefs.h"
++-- 
++2.14.1
++
+diff --git a/recipes-qt/qt5/qtbase_git.bb b/recipes-qt/qt5/qtbase_git.bb
+index aaa59f3..25d99e8 100644
+--- a/recipes-qt/qt5/qtbase_git.bb
++++ b/recipes-qt/qt5/qtbase_git.bb
+@@ -26,6 +26,7 @@ SRC_URI += "\
+     file://0006-Pretend-Qt5-wasn-t-found-if-OE_QMAKE_PATH_EXTERNAL_H.patch \
+     file://0007-Delete-qlonglong-and-qulonglong.patch \
+     file://0008-Replace-pthread_yield-with-sched_yield.patch \
++    file://0010-Add-OE-specific-specs-for-clang-compiler.patch \
+     file://run-ptest \
+ "
+ 
+@@ -160,6 +161,9 @@ QT_CONFIG_FLAGS += " \
+ # since we cannot set empty set filename to a not existent file
+ deltask generate_qt_config_file
+ 
++XPLATFORM_toolchain-clang = "linux-oe-clang"
++XPLATFORM ?= "linux-oe-g++"
++
+ do_configure() {
+     # Avoid qmake error "Cannot read [...]/usr/lib/qt5/mkspecs/oe-device-extra.pri: No such file or directory" during configuration
+     touch ${S}/mkspecs/oe-device-extra.pri
+@@ -188,7 +192,7 @@ do_configure() {
+         -external-hostbindir ${OE_QMAKE_PATH_EXTERNAL_HOST_BINS} \
+         -hostdatadir ${OE_QMAKE_PATH_HOST_DATA} \
+         -platform ${OE_QMAKE_PLATFORM_NATIVE} \
+-        -xplatform linux-oe-g++ \
++        -xplatform ${XPLATFORM} \
+         ${QT_CONFIG_FLAGS}
+ }
+ 
+-- 
+2.14.1
+
recipes-qt/qt5/qtbase-native_git.bb +2 -0
index 72b977d..5137dee 100644
@@ -39,6 +39,8 @@ SRC_URI += "\
 SRC_URI += " \
     file://0009-Always-build-uic.patch \
     file://0010-Add-OE-specific-specs-for-clang-compiler.patch \
+    file://0011-linux-clang-Invert-conditional-for-defining-QT_SOCKL.patch \
+    file://0012-tst_qlocale-Enable-QT_USE_FENV-only-on-glibc.patch \
 "
 
 CLEANBROKEN = "1"
recipes-qt/qt5/qtbase/0011-linux-clang-Invert-conditional-for-defining-QT_SOCKL.patch new file +35 -0
new file mode 100644
index 0000000..0c7fb87
@@ -0,0 +1,35 @@
+From 8394ad48f454aa292e4da57b3b75a3701dadcf96 Mon Sep 17 00:00:00 2001
+From: Khem Raj <[email protected]>
+Date: Sun, 3 Sep 2017 09:44:48 -0700
+Subject: [PATCH] linux-clang: Invert conditional for defining QT_SOCKLEN_T
+
+This helps to make sure that QT_SOCKLEN_T is defined to be 'int'
+only when its glibc < 2 and not for other libcswhich may define
+it as per standards but are not glibc, e.g. musl
+
+Signed-off-by: Khem Raj <[email protected]>
+---
+ mkspecs/linux-clang/qplatformdefs.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/mkspecs/linux-clang/qplatformdefs.h b/mkspecs/linux-clang/qplatformdefs.h
+index d29225f12f..a0cdb57343 100644
+--- a/mkspecs/linux-clang/qplatformdefs.h
++++ b/mkspecs/linux-clang/qplatformdefs.h
+@@ -84,10 +84,10 @@
+ 
+ #undef QT_SOCKLEN_T
+ 
+-#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+-#define QT_SOCKLEN_T            socklen_t
+-#else
++#if defined(__GLIBC__) && (__GLIBC__ < 2)
+ #define QT_SOCKLEN_T            int
++#else
++#define QT_SOCKLEN_T            socklen_t
+ #endif
+ 
+ #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+-- 
+2.14.1
+
recipes-qt/qt5/qtbase/0012-tst_qlocale-Enable-QT_USE_FENV-only-on-glibc.patch new file +28 -0
new file mode 100644
index 0000000..a177625
@@ -0,0 +1,28 @@
+From 30076434a9f651614db8c3e5db32d4acae54c600 Mon Sep 17 00:00:00 2001
+From: Khem Raj <[email protected]>
+Date: Sun, 3 Sep 2017 10:11:50 -0700
+Subject: [PATCH] tst_qlocale: Enable QT_USE_FENV only on glibc
+
+musl does not have feenableexcept function
+
+Signed-off-by: Khem Raj <[email protected]>
+---
+ tests/auto/corelib/tools/qlocale/tst_qlocale.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
+index 10d78b1f2f..a59f358f80 100644
+--- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
++++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
+@@ -46,7 +46,7 @@
+ #include <private/qlocale_tools_p.h>
+ #include <qnumeric.h>
+ 
+-#if defined(Q_OS_LINUX) && !defined(__UCLIBC__)
++#if defined(Q_OS_LINUX) && defined(__GLIBC__)
+ #    define QT_USE_FENV
+ #endif
+ 
+-- 
+2.14.1
+
recipes-qt/qt5/qtbase_git.bb +2 -0
index 25d99e8..dce2d77 100644
@@ -27,6 +27,8 @@ SRC_URI += "\
     file://0007-Delete-qlonglong-and-qulonglong.patch \
     file://0008-Replace-pthread_yield-with-sched_yield.patch \
     file://0010-Add-OE-specific-specs-for-clang-compiler.patch \
+    file://0011-linux-clang-Invert-conditional-for-defining-QT_SOCKL.patch \
+    file://0012-tst_qlocale-Enable-QT_USE_FENV-only-on-glibc.patch \
     file://run-ptest \
 "
 
Signature · 1 line
2.14.1