diff mbox

[1/1] package/kodi: needs BR2_TOOLCHAIN_HAS_SYNC_8

Message ID 1456610655-7183-1-git-send-email-bernd.kuhls@t-online.de
State Accepted
Headers show

Commit Message

Bernd Kuhls Feb. 27, 2016, 10:04 p.m. UTC
Fixes a build error on arm detected by autobuilders:
http://autobuild.buildroot.net/results/439/43939f65e4516adddc4385c6e0a2193abcab0446/
http://autobuild.buildroot.net/results/322/322e3cd3b444106c9b624675c2265d4fdfefe458/
http://autobuild.buildroot.net/results/3c1/3c1a0e35325828c554f49ab9dbeb4b9b16f9b1e5/
http://autobuild.buildroot.net/results/222/222e8f3392a794b693ff0a9617453bdffbce8aef/
http://autobuild.buildroot.net/results/d91/d91efe30996ddbb4706885b48ff6d5d3fa974df8/

and this build error on BR2_x86_i486

xbmc/filesystem/filesystem.a(FileCache.o): In function `std::__atomic_base<long long>::store(long long, std::memory_order)':
/home/bernd/buildroot/br6_kodi_next/output/host/usr/i486-buildroot-linux-uclibc/include/c++/4.9.3/bits/atomic_base.h:478: undefined reference to `__atomic_store_8'
/home/bernd/buildroot/br6_kodi_next/output/host/usr/i486-buildroot-linux-uclibc/include/c++/4.9.3/bits/atomic_base.h:478: undefined reference to `__atomic_store_8'
xbmc/filesystem/filesystem.a(FileCache.o): In function `std::__atomic_base<long long>::load(std::memory_order) const':
/home/bernd/buildroot/br6_kodi_next/output/host/usr/i486-buildroot-linux-uclibc/include/c++/4.9.3/bits/atomic_base.h:500: undefined reference to `__atomic_load_8'

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
 package/kodi/Config.in | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Thomas Petazzoni March 5, 2016, 2:27 p.m. UTC | #1
Bernd,

On Sat, 27 Feb 2016 23:04:15 +0100, Bernd Kuhls wrote:
> Fixes a build error on arm detected by autobuilders:
> http://autobuild.buildroot.net/results/439/43939f65e4516adddc4385c6e0a2193abcab0446/
> http://autobuild.buildroot.net/results/322/322e3cd3b444106c9b624675c2265d4fdfefe458/
> http://autobuild.buildroot.net/results/3c1/3c1a0e35325828c554f49ab9dbeb4b9b16f9b1e5/
> http://autobuild.buildroot.net/results/222/222e8f3392a794b693ff0a9617453bdffbce8aef/
> http://autobuild.buildroot.net/results/d91/d91efe30996ddbb4706885b48ff6d5d3fa974df8/
> 
> and this build error on BR2_x86_i486
> 
> xbmc/filesystem/filesystem.a(FileCache.o): In function `std::__atomic_base<long long>::store(long long, std::memory_order)':
> /home/bernd/buildroot/br6_kodi_next/output/host/usr/i486-buildroot-linux-uclibc/include/c++/4.9.3/bits/atomic_base.h:478: undefined reference to `__atomic_store_8'
> /home/bernd/buildroot/br6_kodi_next/output/host/usr/i486-buildroot-linux-uclibc/include/c++/4.9.3/bits/atomic_base.h:478: undefined reference to `__atomic_store_8'
> xbmc/filesystem/filesystem.a(FileCache.o): In function `std::__atomic_base<long long>::load(std::memory_order) const':
> /home/bernd/buildroot/br6_kodi_next/output/host/usr/i486-buildroot-linux-uclibc/include/c++/4.9.3/bits/atomic_base.h:500: undefined reference to `__atomic_load_8'

It is not completely true that it will fix this last problem. It will
*avoid* it for i486, but by accident. Because i486 doesn't implement
the 8-byte variant of __sync_*(), and because you're adding a
dependency on BR2_TOOLCHAIN_HAS_SYNC_8, Kodi will no longer be built
on i486. Which indeed avoids the second problem, but does not really
fix it.

In particular, if there is any architecture that provides the 8-byte
__sync_*() atomic intrinsic, but requires linking with libatomic to get
access to  the 8-byte __atomic_*() intrinsic, then you will again get a
compilation failure.

And according to my tests, i586 is such an architecture. Can you
attempt a build on i586 ?

> diff --git a/package/kodi/Config.in b/package/kodi/Config.in
> index 7d28882..1450b6e 100644
> --- a/package/kodi/Config.in
> +++ b/package/kodi/Config.in
> @@ -1,6 +1,8 @@
>  config BR2_PACKAGE_KODI_ARCH_SUPPORTS
>  	bool
> -	default y if (BR2_arm || (BR2_mipsel && BR2_TOOLCHAIN_USES_GLIBC) || BR2_i386 || BR2_x86_64) && BR2_PACKAGE_BOOST_ARCH_SUPPORTS
> +	default y if (BR2_arm || (BR2_mipsel && BR2_TOOLCHAIN_USES_GLIBC) || BR2_i386 || BR2_x86_64) \

Where is this list of ARM/MIPS/i386/x86-64 coming from? Why isn't the
list of support architectures derived just from
BR2_PACKAGE_BOOST_ARCH_SUPPORTS ? There is really some architecture
specific code in Kodi ?

> +		&& BR2_PACKAGE_BOOST_ARCH_SUPPORTS \
> +		&& BR2_TOOLCHAIN_HAS_SYNC_8

Due to the addition of the BR2_TOOLCHAIN_HAS_SYNC_8 dependency, then
there is no longer a need to have (BR2_mipsel &&
BR2_TOOLCHAIN_USES_GLIBC), since MIPS doesn't provide the 8 byte
__sync_*() intrinsics, and therefore BR2_TOOLCHAIN_HAS_SYNC_8 is false
on MIPS. Can you send a follow-up patch to disable MIPS, or
alternatively remove the list of architectures completely if
appropriate.

I've anyway applied your patch, as the BR2_TOOLCHAIN_HAS_SYNC_8 does
make sense.

Thanks!

Thomas
Bernd Kuhls March 6, 2016, 9:18 a.m. UTC | #2
[posted and mailed]

Hi Thomas,

Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote
in news:20160305152736.05cfcb80@free-electrons.com: 

> And according to my tests, i586 is such an architecture. Can you
> attempt a build on i586 ?

a Kodi build for i586 using unpatched git master (c6e3511) finished
without errors using this defconfig: 

$ cat defconfig
BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
# BR2_UCLIBC_INSTALL_UTILS is not set
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_INIT_NONE=y
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_KODI=y
BR2_PACKAGE_MESA3D=y
BR2_PACKAGE_MESA3D_DRI_DRIVER_I965=y
BR2_PACKAGE_XORG7=y
$ grep i586 .config
BR2_ARCH="i586"
BR2_GCC_TARGET_ARCH="i586"
BR2_x86_i586=y

> Where is this list of ARM/MIPS/i386/x86-64 coming from? Why isn't the
> list of support architectures derived just from
> BR2_PACKAGE_BOOST_ARCH_SUPPORTS ? There is really some architecture
> specific code in Kodi ?

Yes:
https://github.com/xbmc/xbmc/blob/Jarvis/m4/xbmc_arch.m4
https://github.com/xbmc/xbmc/blob/Jarvis/configure.ac#L554

>> +          && BR2_PACKAGE_BOOST_ARCH_SUPPORTS \
>> +          && BR2_TOOLCHAIN_HAS_SYNC_8
> 
> Due to the addition of the BR2_TOOLCHAIN_HAS_SYNC_8 dependency, then
> there is no longer a need to have (BR2_mipsel &&
> BR2_TOOLCHAIN_USES_GLIBC), since MIPS doesn't provide the 8 byte
> __sync_*() intrinsics, and therefore BR2_TOOLCHAIN_HAS_SYNC_8 is false
> on MIPS. Can you send a follow-up patch to disable MIPS
> [...]

Done: http://patchwork.ozlabs.org/patch/592530/

Regards, Bernd
diff mbox

Patch

diff --git a/package/kodi/Config.in b/package/kodi/Config.in
index 7d28882..1450b6e 100644
--- a/package/kodi/Config.in
+++ b/package/kodi/Config.in
@@ -1,6 +1,8 @@ 
 config BR2_PACKAGE_KODI_ARCH_SUPPORTS
 	bool
-	default y if (BR2_arm || (BR2_mipsel && BR2_TOOLCHAIN_USES_GLIBC) || BR2_i386 || BR2_x86_64) && BR2_PACKAGE_BOOST_ARCH_SUPPORTS
+	default y if (BR2_arm || (BR2_mipsel && BR2_TOOLCHAIN_USES_GLIBC) || BR2_i386 || BR2_x86_64) \
+		&& BR2_PACKAGE_BOOST_ARCH_SUPPORTS \
+		&& BR2_TOOLCHAIN_HAS_SYNC_8
 
 comment "kodi needs a toolchain w/ C++, threads, wchar, dynamic library"
 	depends on BR2_PACKAGE_KODI_ARCH_SUPPORTS