[Buildroot] [git commit] mpd: fix build on SPARC
Jörg Krause
joerg.krause at embedded.rocks
Thu Feb 11 11:12:33 UTC 2016
Dear Thomas Petazzoni,
On So, 2016-02-07 at 22:02 +0100, Thomas Petazzoni wrote:
> commit: https://git.buildroot.net/buildroot/commit/?id=84533029c70a4d
> ffb2cd2e4f05e3903fd1b8fcd9
> branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/mas
> ter
>
> mpd uses __atomic_*() built-ins, but forgets to link with -latomic
> when needed, so this commit adds a patch that ensures it will link
> with libatomic, and adds a dependency on BR2_TOOLCHAIN_HAS_ATOMIC.
>
> Fixes:
>
> http://autobuild.buildroot.net/results/e2207280f3a177e12dba502b1c01
> f5aeb431d04c/
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> ---
> ...configure.ac-check-if-libatomic-is-needed.patch | 40
> ++++++++++++++++++++++
> package/mpd/Config.in | 2 ++
> package/mpd/mpd.mk | 1 +
> 3 files changed, 43 insertions(+)
>
> diff --git a/package/mpd/0005-configure.ac-check-if-libatomic-is-
> needed.patch b/package/mpd/0005-configure.ac-check-if-libatomic-is-
> needed.patch
> new file mode 100644
> index 0000000..a9873a7
> --- /dev/null
> +++ b/package/mpd/0005-configure.ac-check-if-libatomic-is-
> needed.patch
> @@ -0,0 +1,40 @@
> +From 8eaf14a17244aaf000b4d19e4fde4a637576939f Mon Sep 17 00:00:00
> 2001
> +From: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> +Date: Sun, 7 Feb 2016 21:40:47 +0100
> +Subject: [PATCH] configure.ac: check if libatomic is needed
> +
> +The mpd source code uses the C++11 <atomic> functionality, which
> +internally is implemented using the __atomic_*() gcc built-ins. On
> +certain architectures, the __atomic_*() built-ins are implemented in
> +the libatomic library that comes with the rest of the gcc runtime.
> Due
> +to this, code using <atomic> might need to link against libatomic,
> +otherwise one hits build issues such as:
> +
> +GlobalEvents.cxx:(.text._ZN12GlobalEvents4EmitENS_5EventE+0x14):
> undefined reference to `__atomic_fetch_or_4'
> +
> +on an architecture like SPARC.
> +
> +To solve this, a configure.ac check is added to know if we need to
> +link against libatomic or not.
> +
> +Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com
> >
> +---
> + configure.ac | 2 ++
> + 1 file changed, 2 insertions(+)
> +
> +diff --git a/configure.ac b/configure.ac
> +index 107b45a..8e6fab7 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -233,6 +233,8 @@ if test x$have_pthread_setname_np = xyes; then
> + AC_DEFINE(HAVE_PTHREAD_SETNAME_NP, 1, [Is
> pthread_setname_np() available?])
> + fi
> +
> ++AC_SEARCH_LIBS([__atomic_load_4], [atomic])
> ++
> + dnl -------------------------------------------------------------
> --------------
> + dnl Event loop selection
> + dnl -------------------------------------------------------------
> --------------
> +--
> +2.6.4
> +
> diff --git a/package/mpd/Config.in b/package/mpd/Config.in
> index b368397..3ac806f 100644
> --- a/package/mpd/Config.in
> +++ b/package/mpd/Config.in
> @@ -6,6 +6,7 @@ menuconfig BR2_PACKAGE_MPD
> depends on BR2_USE_MMU # libglib2
> depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
> depends on BR2_PACKAGE_BOOST_ARCH_SUPPORTS
> + depends on BR2_TOOLCHAIN_HAS_ATOMIC
> select BR2_PACKAGE_BOOST
> select BR2_PACKAGE_LIBGLIB2
> select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
> @@ -312,5 +313,6 @@ endif
> comment "mpd needs a toolchain w/ C++, threads, wchar, gcc >= 4.6"
> depends on BR2_USE_MMU
> depends on BR2_PACKAGE_BOOST_ARCH_SUPPORTS
> + depends on BR2_TOOLCHAIN_HAS_ATOMIC
> depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \
> !BR2_TOOLCHAIN_HAS_THREADS ||
> !BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
> diff --git a/package/mpd/mpd.mk b/package/mpd/mpd.mk
> index 7a265f4..d5d77a6 100644
> --- a/package/mpd/mpd.mk
> +++ b/package/mpd/mpd.mk
> @@ -11,6 +11,7 @@ MPD_SITE = http://www.musicpd.org/download/mpd/$(MP
> D_VERSION_MAJOR)
> MPD_DEPENDENCIES = host-pkgconf boost libglib2
> MPD_LICENSE = GPLv2+
> MPD_LICENSE_FILES = COPYING
> +MPD_AUTORECONF = YES
>
> # Some options need an explicit --disable or --enable
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
With this commit mpd requires libatomic.so to be installed on the
target:
$ output/host/usr/bin/arm-linux-readelf -d output/target/usr/bin/mpd
| grep libatomic
0x00000001 (NEEDED) Shared library:
[libatomic.so.1]
Otherwise mpd fails with:
"Error loading shared library libatomic.so.1: No such file or
directory (needed by /usr/bin/mpd)".
However, with an external musl toolchain built with Buildroot no
libatomic.so will be installed on the target, it only exists in
sysroot:
$ find output/ -type f -name "libatomic.so*"
output/host/usr/arm-buildroot-linux-
musleabi/sysroot/lib/libatomic.so.1.1.0
Best regards
Jörg Krause
More information about the buildroot
mailing list