Skip to contentSkip to conversation

qt: depends on BR2_TOOLCHAIN_HAS_SYNC_4

PATCH New Gustavo Zacarias 2 participants 6 messages Feb 23, 2016 – Feb 24, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 qt: depends on BR2_TOOLCHAIN_HAS_SYNC_4

It uses __sync_add_and_fetch_4() and other 32-bit atomics, fixes:
http://autobuild.buildroot.net/results/7ac/7acdbc54e26ad2ba4756512614192be0a086f563/

---
 package/opencv/Config.in      | 1 +
 package/pinentry/Config.in    | 1 +
 package/python-pyqt/Config.in | 2 ++
 package/python-sip/Config.in  | 2 ++
 package/qt/Config.in          | 2 ++
 5 files changed, 8 insertions(+)
package/opencv/Config.in +1 -0
index 8bc6c34..8ebca21 100644
@@ -210,6 +210,7 @@ config BR2_PACKAGE_OPENCV_WITH_QT
 	depends on BR2_INSTALL_LIBSTDCPP
 	depends on BR2_USE_MMU # qt
 	depends on BR2_PACKAGE_OPENCV_LIB_HIGHGUI
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # qt
 	select BR2_PACKAGE_QT
 	select BR2_PACKAGE_QT_STL
 	select BR2_PACKAGE_QT_GUI_MODULE
package/pinentry/Config.in +1 -0
index f5a8159..8f6bdb9 100644
@@ -40,6 +40,7 @@ config BR2_PACKAGE_PINENTRY_QT4
 	depends on BR2_USE_MMU # fork
 	depends on BR2_INSTALL_LIBSTDCPP
 	depends on BR2_TOOLCHAIN_HAS_THREADS
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # qt
 	select BR2_PACKAGE_QT
 	select BR2_PACKAGE_QT_GUI_MODULE
 	help
package/python-pyqt/Config.in +2 -0
index a50cb74..f2d06c4 100644
@@ -1,5 +1,6 @@
 comment "python-pyqt needs a toolchain w/ C++, threads"
 	depends on BR2_USE_MMU
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4
 	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
 
 config BR2_PACKAGE_PYTHON_PYQT
@@ -7,6 +8,7 @@ config BR2_PACKAGE_PYTHON_PYQT
 	depends on BR2_INSTALL_LIBSTDCPP
 	depends on BR2_TOOLCHAIN_HAS_THREADS # qt
 	depends on BR2_USE_MMU # qt
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # qt
 	select BR2_PACKAGE_QT
 	select BR2_PACKAGE_PYTHON_SIP
 	help
package/python-sip/Config.in +2 -0
index 45e48ad..9a4296a 100644
@@ -1,5 +1,6 @@
 comment "python-sip needs a toolchain w/ C++, threads"
 	depends on BR2_USE_MMU
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4
 	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
 
 config BR2_PACKAGE_PYTHON_SIP
@@ -7,6 +8,7 @@ config BR2_PACKAGE_PYTHON_SIP
 	depends on BR2_INSTALL_LIBSTDCPP # qt
 	depends on BR2_TOOLCHAIN_HAS_THREADS # qt
 	depends on BR2_USE_MMU # qt
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # qt
 	select BR2_PACKAGE_QT
 	help
 	  SIP is a tool that makes it very easy to create Python
package/qt/Config.in +2 -0
index bf14724..06444ed 100644
@@ -1,5 +1,6 @@
 comment "qt needs a toolchain w/ C++, threads"
 	depends on BR2_USE_MMU
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4
 	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
 
 menuconfig BR2_PACKAGE_QT
@@ -7,6 +8,7 @@ menuconfig BR2_PACKAGE_QT
 	depends on BR2_USE_MMU # fork
 	depends on BR2_INSTALL_LIBSTDCPP
 	depends on BR2_TOOLCHAIN_HAS_THREADS
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4
 	help
 	  Qt is a cross-platform application and UI framework for
 	  developers using C++.
Signature · 1 line
2.4.10
#1 lore raw

PATCH 1/1 qt: depends on BR2_TOOLCHAIN_HAS_SYNC_4

Gustavo,

package/qt/Config.in menuconfig BR2_PACKAGE_QT · line 11

Quoted 6 lines · Gustavo Zacarias

menuconfig BR2_PACKAGE_QT

package/qt/Config.in +1 -0
@@ -7,6 +8,7 @@ menuconfig BR2_PACKAGE_QT
 	depends on BR2_USE_MMU # fork
 	depends on BR2_INSTALL_LIBSTDCPP
 	depends on BR2_TOOLCHAIN_HAS_THREADS
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4

Isn't this broader than it needs to be? Only the Javascript code seems to use this atomic operation, so maybe we could just make BR2_PACKAGE_QT_ARCH_SUPPORTS_SCRIPT depends on BR2_TOOLCHAIN_HAS_SYNC_4. Or maybe it's BR2_PACKAGE_QT_ARCH_SUPPORTS_WEBKIT.

By doing this, it also simplifies the patch quite a bit, since you don't need to propagate the dependency to too many packages (if any).

I've indeed tested, and the following defconfig builds fine:

BR2_sparc=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-sparc-glibc-2015.11-rc1-71-g90d1299.tar.bz2" BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_QT=y
BR2_PACKAGE_QT_LICENSE_APPROVED=y
# BR2_PACKAGE_QT_GUI_MODULE is not set
# BR2_PACKAGE_QT_XML is not set
# BR2_PACKAGE_QT_NETWORK is not set
# BR2_PACKAGE_QT_SCRIPT is not set
# BR2_TARGET_ROOTFS_TAR is not set

Which proves that Qt by itself doesn't use those atomic operations. Could you research which specific sub-option(s) are causing problems? I'm pretty sure it's either script or webkit, or possibly both.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 qt: depends on BR2_TOOLCHAIN_HAS_SYNC_4

Quoted 30 lines · Thomas Petazzoni

Isn't this broader than it needs to be? Only the Javascript code seems to use this atomic operation, so maybe we could just make BR2_PACKAGE_QT_ARCH_SUPPORTS_SCRIPT depends on BR2_TOOLCHAIN_HAS_SYNC_4. Or maybe it's BR2_PACKAGE_QT_ARCH_SUPPORTS_WEBKIT.

By doing this, it also simplifies the patch quite a bit, since you don't need to propagate the dependency to too many packages (if any).

I've indeed tested, and the following defconfig builds fine:

BR2_sparc=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-sparc-glibc-2015.11-rc1-71-g90d1299.tar.bz2" BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_QT=y
BR2_PACKAGE_QT_LICENSE_APPROVED=y
# BR2_PACKAGE_QT_GUI_MODULE is not set
# BR2_PACKAGE_QT_XML is not set
# BR2_PACKAGE_QT_NETWORK is not set
# BR2_PACKAGE_QT_SCRIPT is not set
# BR2_TARGET_ROOTFS_TAR is not set

Quoted 3 lines

Which proves that Qt by itself doesn't use those atomic operations. Could you research which specific sub-option(s) are causing problems? I'm pretty sure it's either script or webkit, or possibly both.

It's possible, however how likely is it an arch that doesn't support atomics (normally meaning very old) running a QT gui?
SPARC v8 is normally used these days for rad-hard/aerospace/avionics solutions (gaisler), it's doubtful anyone with an old sparcstation (pre 1995) with known broken kernel support will care.
Regards.

#3 lore raw

PATCH 1/1 qt: depends on BR2_TOOLCHAIN_HAS_SYNC_4

Hello,

Quoted 2 lines · Gustavo Zacarias

It's possible, however how likely is it an arch that doesn't support atomics (normally meaning very old) running a QT gui?

The specific config I tested had the GUI support disabled, i.e just QtCore, not QtGui.

Though I agree with you that generally speaking, usage on SPARC is unlikely. But by narrowing the dependency to just script and/or webkit, we have to propagate it to a lot less packages, which actually means that supporting this weird SPARC architecture creates less noise, which is what we want.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#4 lore raw

PATCH 1/1 qt: depends on BR2_TOOLCHAIN_HAS_SYNC_4

Quoted 10 lines · Thomas Petazzoni

Hello,

Quoted 2 lines · Gustavo Zacarias

It's possible, however how likely is it an arch that doesn't support atomics (normally meaning very old) running a QT gui?

The specific config I tested had the GUI support disabled, i.e just QtCore, not QtGui.

Quoted 7 lines

Though I agree with you that generally speaking, usage on SPARC is unlikely. But by narrowing the dependency to just script and/or webkit, we have to propagate it to a lot less packages, which actually means that supporting this weird SPARC architecture creates less noise, which is what we want.

Thomas

It seems it's both script & webkit that need atomics. However i think the arch supports list is flawed as well, webkit hasn't worked for many of those architectures in the past - they build, yes, but they'll probably crash on startup.
But i'm not about to test all of them since that would require hardware, so i'm removing sparc as well since it's a cliche that can't be fixed. Regards.

#5 lore raw

PATCH 1/1 qt: depends on BR2_TOOLCHAIN_HAS_SYNC_4

Hello,

Quoted 6 lines · Gustavo Zacarias

It seems it's both script & webkit that need atomics. However i think the arch supports list is flawed as well, webkit hasn't worked for many of those architectures in the past - they build, yes, but they'll probably crash on startup.
But i'm not about to test all of them since that would require hardware, so i'm removing sparc as well since it's a cliche that can't be fixed.

Fully agreed to remove SPARC from the list of supported architectures for webkit and script. However, I believe it would still be good to add the BR2_TOOLCHAIN_HAS_SYNC_4 dependency as well.

Regarding the architectures that build but don't work at runtime, I guess all we can do is leave things are they are, and change them when/if someone complains/reports an issue. We are indeed not going to test Webkit/Script on every possible funky architecture.

Best regards,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com