[Buildroot] [git commit] mpd: fix build on SPARC

Arnout Vandecappelle arnout at mind.be
Fri Feb 12 20:50:24 UTC 2016


On 11-02-16 12:12, Jörg Krause wrote:
> 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

 I wonder if we shouldn't just copy all the libraries for the external
toolchains. If you're using an external toolchain, you probably don't care about
size too much. Or you'd use a buildroot-built external toolchain, and in that
case really everything is needed.


 Regards,
 Arnout


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF


More information about the buildroot mailing list