All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 05/21] icu: remove BR2_ARCH_HAS_ATOMICS dependency
Date: Mon, 25 Jan 2016 19:42:57 +0100	[thread overview]
Message-ID: <20160125184257.GF3386@free.fr> (raw)
In-Reply-To: <1453676887-31236-6-git-send-email-thomas.petazzoni@free-electrons.com>

Thomas, All,

On 2016-01-25 00:07 +0100, Thomas Petazzoni spake thusly:
> The BR2_ARCH_HAS_ATOMICS was added because on ARC, atomic instructions
> may not be provided by the architecture and therefore the compiler
> does not provide the __sync_*() built-ins.
> 
> However, since then, icu was changed and is now able to use C++11
> atomics, or even no atomic operations at all. In fact, icu will:
> 
>  * If possible, it will use C++11 atomics, which internally rely on
>    the __atomic built-ins. These are available since gcc 4.7, and all
>    architectures provide it. On some architectures, you *must* link
>    with libatomic, on some other architectures, they are available
>    built-in, but in all cases, linking against libatomic does not
>    harm. Thanks to this, even ARC with no atomic support (which was
>    the original reason for adding the BR2_ARCH_HAS_ATOMICS) dependency
>    builds fine, provided -latomic is added to LIBS.
> 
>  * If C++11 atomics are not available, then it falls back to
>    __sync_*() built-ins, which allows compilers older than 4.7 to be
>    supported.
> 
>  * If really no atomic mechanism is available, then it falls back to a
>    basic implementation based on a mutex.
> 
> Conclusion:
> 
>  - The BR2_ARCH_HAS_ATOMICS dependency is no longer needed.
> 
>  - We need to link with -latomic when gcc >= 4.7 is used.
> 
> Note that reverse dependencies of icu are also changed accordingly.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Regards,
Yann E. MORIN.

> ---
>  package/beecrypt/Config.in        | 2 --
>  package/cppcms/Config.in          | 1 -
>  package/icu/Config.in             | 2 --
>  package/icu/icu.mk                | 8 ++++++++
>  package/php/Config.ext            | 2 --
>  package/qt-webkit-kiosk/Config.in | 1 -
>  package/qt5/qt5base/Config.in     | 1 -
>  package/qt5/qt5webkit/Config.in   | 1 -
>  8 files changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/package/beecrypt/Config.in b/package/beecrypt/Config.in
> index fc93a77..069f3d5 100644
> --- a/package/beecrypt/Config.in
> +++ b/package/beecrypt/Config.in
> @@ -16,7 +16,6 @@ config BR2_PACKAGE_BEECRYPT_CPP
>  	depends on BR2_INSTALL_LIBSTDCPP
>  	depends on BR2_USE_WCHAR # icu
>  	depends on !BR2_BINFMT_FLAT # icu
> -	depends on BR2_ARCH_HAS_ATOMICS # icu
>  	depends on !BR2_STATIC_LIBS
>  	select BR2_PACKAGE_ICU
>  	help
> @@ -24,7 +23,6 @@ config BR2_PACKAGE_BEECRYPT_CPP
>  
>  comment "C++ support needs a toolchain w/ C++, wchar, dynamic libraries"
>  	depends on !BR2_BINFMT_FLAT
> -	depends on BR2_ARCH_HAS_ATOMICS
>  	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR \
>  		|| BR2_STATIC_LIBS
>  
> diff --git a/package/cppcms/Config.in b/package/cppcms/Config.in
> index 85ba118..79f5474 100644
> --- a/package/cppcms/Config.in
> +++ b/package/cppcms/Config.in
> @@ -26,7 +26,6 @@ if BR2_PACKAGE_CPPCMS
>  config BR2_PACKAGE_CPPCMS_ICU
>  	bool "enable icu support"
>  	depends on !BR2_BINFMT_FLAT # icu
> -	depends on BR2_ARCH_HAS_ATOMICS # icu
>  	select BR2_PACKAGE_ICU
>  	help
>  	  Using ICU allows advanced localization features into CppCMS,
> diff --git a/package/icu/Config.in b/package/icu/Config.in
> index 4d47c32..d31c1fa 100644
> --- a/package/icu/Config.in
> +++ b/package/icu/Config.in
> @@ -7,7 +7,6 @@ config BR2_PACKAGE_ICU
>  	# file, and it cannot easily be changed to generate FLAT
>  	# format.
>  	depends on !BR2_BINFMT_FLAT
> -	depends on BR2_ARCH_HAS_ATOMICS
>  	help
>  	  International Components for Unicode.
>  
> @@ -28,6 +27,5 @@ endif
>  
>  comment "icu needs a toolchain w/ C++, wchar, threads"
>  	depends on !BR2_BINFMT_FLAT
> -	depends on BR2_ARCH_HAS_ATOMICS
>  	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \
>  		!BR2_TOOLCHAIN_HAS_THREADS
> diff --git a/package/icu/icu.mk b/package/icu/icu.mk
> index 5604504..7bc7f93 100644
> --- a/package/icu/icu.mk
> +++ b/package/icu/icu.mk
> @@ -17,6 +17,14 @@ ICU_CONF_OPTS = \
>  	--with-cross-build=$(HOST_ICU_DIR)/source \
>  	--disable-samples \
>  	--disable-tests
> +
> +# With gcc >= 4.7, icu prefers to use C++11 atomics, which rely on the
> +# __atomic builtins. On certain architectures, this requires linking
> +# with libatomic.
> +ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_4_7),y)
> +ICU_CONF_ENV += LIBS="-latomic"
> +endif
> +
>  HOST_ICU_CONF_OPTS = \
>  	--disable-samples \
>  	--disable-tests \
> diff --git a/package/php/Config.ext b/package/php/Config.ext
> index c044e45..ee51030 100644
> --- a/package/php/Config.ext
> +++ b/package/php/Config.ext
> @@ -207,13 +207,11 @@ config BR2_PACKAGE_PHP_EXT_INTL
>  	depends on BR2_USE_WCHAR
>  	depends on !BR2_BINFMT_FLAT # icu
>  	depends on BR2_TOOLCHAIN_HAS_THREADS # icu
> -	depends on BR2_ARCH_HAS_ATOMICS # icu
>  	help
>  	  Internationalization support
>  
>  comment "intl support needs a toolchain w/ C++, wchar, threads"
>  	depends on !BR2_BINFMT_FLAT
> -	depends on BR2_ARCH_HAS_ATOMICS
>  	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS
>  
>  config BR2_PACKAGE_PHP_EXT_MBSTRING
> diff --git a/package/qt-webkit-kiosk/Config.in b/package/qt-webkit-kiosk/Config.in
> index 51383f0..32952d7 100644
> --- a/package/qt-webkit-kiosk/Config.in
> +++ b/package/qt-webkit-kiosk/Config.in
> @@ -8,7 +8,6 @@ config BR2_PACKAGE_QT_WEBKIT_KIOSK
>  	select BR2_PACKAGE_QT5MULTIMEDIA
>  	depends on !BR2_STATIC_LIBS # qt5webkit
>  	depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5webkit
> -	depends on BR2_ARCH_HAS_ATOMICS # qt5webkit
>  	depends on !BR2_BINFMT_FLAT # qt5webkit
>  	help
>  	  Simple kiosk-mode browser powered by Qt5Webkit
> diff --git a/package/qt5/qt5base/Config.in b/package/qt5/qt5base/Config.in
> index 7cadcb2..64a7f65 100644
> --- a/package/qt5/qt5base/Config.in
> +++ b/package/qt5/qt5base/Config.in
> @@ -259,7 +259,6 @@ config BR2_PACKAGE_QT5BASE_DBUS
>  config BR2_PACKAGE_QT5BASE_ICU
>  	bool "Enable ICU support"
>  	select BR2_PACKAGE_ICU
> -	depends on BR2_ARCH_HAS_ATOMICS # icu
>  	depends on !BR2_BINFMT_FLAT # icu
>  	help
>  	  This option enables ICU support in Qt5. This is for example
> diff --git a/package/qt5/qt5webkit/Config.in b/package/qt5/qt5webkit/Config.in
> index eee82e8..96d97cc 100644
> --- a/package/qt5/qt5webkit/Config.in
> +++ b/package/qt5/qt5webkit/Config.in
> @@ -9,7 +9,6 @@ config BR2_PACKAGE_QT5WEBKIT
>  	# This module does not support static linking
>  	depends on !BR2_STATIC_LIBS
>  	depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE
> -	depends on BR2_ARCH_HAS_ATOMICS # icu
>  	depends on !BR2_BINFMT_FLAT # icu
>  	help
>  	  Qt is a cross-platform application and UI framework for
> -- 
> 2.6.4
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

  reply	other threads:[~2016-01-25 18:42 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-24 23:07 [Buildroot] [PATCH 00/21] Rework atomic handling Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 01/21] libftdi: C++ bindings need boost Thomas Petazzoni
2016-01-25 17:04   ` Yann E. MORIN
2016-01-25 20:04     ` Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 02/21] libftdi: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-25 17:15   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 03/21] toolchain: add BR2_TOOLCHAIN_HAS_SYNC_x hidden booleans Thomas Petazzoni
2016-01-25 18:27   ` Yann E. MORIN
2016-01-27 21:46     ` Thomas Petazzoni
2016-01-27 22:47       ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 04/21] docs/manual: document usage of BR2_TOOLCHAIN_HAS_SYNC_x Thomas Petazzoni
2016-01-25 18:38   ` Yann E. MORIN
2016-01-25 20:07     ` Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 05/21] icu: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-25 18:42   ` Yann E. MORIN [this message]
2016-01-24 23:07 ` [Buildroot] [PATCH 06/21] json-c: needs __sync_val_compare_and_swap_4 Thomas Petazzoni
2016-01-25 18:47   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 07/21] pulseaudio: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-25 18:52   ` Yann E. MORIN
2016-01-27 21:56     ` Thomas Petazzoni
2016-01-27 22:51       ` Yann E. MORIN
2016-01-27 23:01         ` Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 08/21] apache, apr: fix atomic handling Thomas Petazzoni
2016-01-25 20:59   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 09/21] jack2: use the proper BR2_TOOLCHAIN_HAS_SYNC_x symbol Thomas Petazzoni
2016-01-25 21:12   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 10/21] libtorrent: use the proper BR2_TOOLCHAIN_HAS_SYNC_x symbols Thomas Petazzoni
2016-01-25 21:45   ` Yann E. MORIN
2016-01-25 22:07     ` Thomas Petazzoni
2016-01-25 22:14       ` Yann E. MORIN
2016-01-25 22:22         ` Thomas Petazzoni
2016-01-26 22:13   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 11/21] gauche: disable on SPARC(64), remove atomics dependency Thomas Petazzoni
2016-01-25 21:52   ` Yann E. MORIN
2016-01-24 23:07 ` [Buildroot] [PATCH 12/21] cairo, harfbuzz: rework atomic dependencies Thomas Petazzoni
2016-01-24 23:07 ` [Buildroot] [PATCH 13/21] openocd: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-25 23:05   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 14/21] squid: rework atomic handling Thomas Petazzoni
2016-01-25 22:53   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 15/21] thrift: remove BR2_ARCH_HAS_ATOMICS dependency Thomas Petazzoni
2016-01-26 22:31   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 16/21] msgpack: rework " Thomas Petazzoni
2016-01-26 22:17   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 17/21] arch: remove BR2_ARCH_HAS_ATOMICS option Thomas Petazzoni
2016-01-26 22:22   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 18/21] glog: fix atomic built-in problem Thomas Petazzoni
2016-01-26 22:25   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 19/21] openal: add missing BR2_TOOLCHAIN_HAS_SYNC_4 dependency Thomas Petazzoni
2016-01-26 22:32   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 20/21] freerdp: " Thomas Petazzoni
2016-01-26 22:33   ` Yann E. MORIN
2016-01-24 23:08 ` [Buildroot] [PATCH 21/21] neard: " Thomas Petazzoni
2016-01-26 22:35   ` Yann E. MORIN
2016-01-26 20:28 ` [Buildroot] [PATCH 00/21] Rework atomic handling Thomas Petazzoni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160125184257.GF3386@free.fr \
    --to=yann.morin.1998@free.fr \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.