diff mbox

[v7,31/31] package/kodi: Add support for more archs

Message ID 20170429083751.19625-32-bernd.kuhls@t-online.de
State Changes Requested
Headers show

Commit Message

Bernd Kuhls April 29, 2017, 8:37 a.m. UTC
For the autoconf-based build system it was necessary to allow each
supported architecture separatly:
https://github.com/xbmc/xbmc/blob/Krypton/m4/xbmc_arch.m4

For the CMake build system this is not necessary anymore so we only
blacklist archs in Config.in known to be broken.

Tested with testpkg using this defconfig:

BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
BR2_PACKAGE_KODI=y
BR2_PACKAGE_KODI_ALSA_LIB=y
BR2_PACKAGE_KODI_EVENTCLIENTS=y
BR2_PACKAGE_KODI_LIBBLURAY=y
BR2_PACKAGE_KODI_LIBCEC=y
BR2_PACKAGE_KODI_INPUTSTREAM_ADAPTIVE=y
BR2_PACKAGE_KODI_INPUTSTREAM_RTMP=y
BR2_PACKAGE_KODI_PVR_HTS=y
BR2_PACKAGE_KODI_SCREENSAVER_RSXS=y
BR2_PACKAGE_KODI_VISUALISATION_GOOM=y
BR2_PACKAGE_MESA3D=y
BR2_PACKAGE_MESA3D_DRI_DRIVER_SWRAST=y
BR2_PACKAGE_MESA3D_OPENGL_EGL=y
BR2_PACKAGE_MESA3D_OPENGL_ES=y
BR2_PACKAGE_XORG7=y
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_PY_ONLY=y

with this result:

                armv5-ctng-linux-gnueabi [ 1/49]: OK
              armv7-ctng-linux-gnueabihf [ 2/49]: OK
                        br-aarch64-glibc [ 3/49]: OK
                           br-arcle-hs38 [ 4/49]: OK
                            br-arm-basic [ 5/49]: SKIPPED
                  br-arm-cortex-a9-glibc [ 6/49]: OK
                   br-arm-cortex-a9-musl [ 7/49]: SKIPPED
                   br-arm-cortex-m4-full [ 8/49]: SKIPPED
                             br-arm-full [ 9/49]: OK
                    br-arm-full-nothread [10/49]: SKIPPED
                      br-arm-full-static [11/49]: SKIPPED
                            br-bfin-full [12/49]: SKIPPED
                   br-i386-pentium4-full [13/49]: OK
                br-i386-pentium-mmx-musl [14/49]: SKIPPED
                       br-m68k-5208-full [15/49]: SKIPPED
                      br-m68k-68040-full [16/49]: SKIPPED
                    br-microblazeel-full [17/49]: SKIPPED
                 br-mips32r6-el-hf-glibc [18/49]: OK
                      br-mips64-n64-full [19/49]: OK
                 br-mips64r6-el-hf-glibc [20/49]: OK
                      br-mipsel-o32-full [21/49]: OK
                          br-nios2-glibc [22/49]: SKIPPED
                      br-openrisc-uclibc [23/49]: SKIPPED
               br-powerpc-603e-basic-cpp [24/49]: SKIPPED
             br-powerpc64le-power8-glibc [25/49]: OK
               br-powerpc64-power7-glibc [26/49]: OK
                  br-powerpc-e500mc-full [27/49]: OK
                             br-sh4-full [28/49]: OK
                        br-sparc64-glibc [29/49]: OK
                         br-sparc-uclibc [30/49]: SKIPPED
                    br-x86-64-core2-full [31/49]: OK
                          br-x86-64-musl [32/49]: SKIPPED
                          br-xtensa-full [33/49]: OK
                     i686-ctng-linux-gnu [34/49]: SKIPPED
                          linaro-aarch64 [35/49]: OK
                              linaro-arm [36/49]: OK
             mips64el-ctng_n32-linux-gnu [37/49]: OK
             mips64el-ctng_n64-linux-gnu [38/49]: OK
        powerpc-ctng_e500v2-linux-gnuspe [39/49]: SKIPPED
                     sourcery-arm-armv4t [40/49]: OK
                            sourcery-arm [41/49]: OK
                     sourcery-arm-thumb2 [42/49]: OK
                         sourcery-mips64 [43/49]: OK
                           sourcery-mips [44/49]: OK
                          sourcery-nios2 [45/49]: SKIPPED
                             sourcery-sh [46/49]: SKIPPED
                         sourcery-x86-64 [47/49]: OK
                            sourcery-x86 [48/49]: SKIPPED
           x86_64-ctng_locales-linux-gnu [49/49]: OK
49 builds, 20 skipped, 0 build failed, 0 legal-info failed

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
 package/kodi-pvr-mediaportal-tvserver/Config.in |   2 +
 package/kodi/0003-Add-support-for-sh4.patch     | 108 ++++++++++++++++++++++++
 package/kodi/0004-Add-support-for-sparc.patch   |  91 ++++++++++++++++++++
 package/kodi/0005-Add-support-for-arc.patch     |  91 ++++++++++++++++++++
 package/kodi/0006-Add-support-for-xtensa.patch  |  91 ++++++++++++++++++++
 package/kodi/Config.in                          |   6 +-
 package/kodi/kodi.mk                            |  51 ++++++++---
 7 files changed, 424 insertions(+), 16 deletions(-)
 create mode 100644 package/kodi/0003-Add-support-for-sh4.patch
 create mode 100644 package/kodi/0004-Add-support-for-sparc.patch
 create mode 100644 package/kodi/0005-Add-support-for-arc.patch
 create mode 100644 package/kodi/0006-Add-support-for-xtensa.patch

Comments

Thomas Petazzoni April 29, 2017, 11:44 a.m. UTC | #1
Hello,

On Sat, 29 Apr 2017 10:37:51 +0200, Bernd Kuhls wrote:

>  package/kodi/0003-Add-support-for-sh4.patch     | 108 ++++++++++++++++++++++++
>  package/kodi/0004-Add-support-for-sparc.patch   |  91 ++++++++++++++++++++
>  package/kodi/0005-Add-support-for-arc.patch     |  91 ++++++++++++++++++++
>  package/kodi/0006-Add-support-for-xtensa.patch  |  91 ++++++++++++++++++++

Have these patches any chance of being merged upstream? Indeed, it's
very unlikely that Kodi will ever be used on any of those
architectures, so having to carry forever those patches doesn't seem
like a great thing. I would prefer to exclude those architectures in
Config.in.

>  	depends on BR2_USE_MMU # libcdio, and others
> -	default y if (BR2_arm || (BR2_mipsel && BR2_TOOLCHAIN_USES_GLIBC) || BR2_i386 || BR2_x86_64) \
> -		&& BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS \
> -		&& BR2_TOOLCHAIN_HAS_SYNC_8
> +# i386: needs sse (see upstream PR 10351)
> +	default y if BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS \
> +		&& !(BR2_i386 && !BR2_X86_CPU_HAS_SSE)

Kodi doesn't really support all architectures, since it contains
architecture-specific definitions in several files...


> +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
> +KODI_CONF_OPTS += -DCORE_SYSTEM_NAME=rbpi
> +KODI_DEPENDENCIES += rpi-userland
> +ifeq ($(BR2_arm1176jzf_s)$(BR2_cortex_a7)$(BR2_cortex_a53),y)
> +KODI_CONF_OPTS += -DWITH_CPU=$(BR2_GCC_TARGET_CPU)

Why only for Raspberry Pi ?

> +endif
> +else  # BR2_PACKAGE_RPI_USERLAND
> +ifeq ($(BR2_arceb)$(BR2_arcle),y)
> +KODI_CONF_OPTS += -DWITH_ARCH=arc -DWITH_CPU=arc
> +else ifeq ($(BR2_armeb),y)
>  KODI_CONF_OPTS += -DWITH_ARCH=arm -DWITH_CPU=arm
> -else ifeq ($(BR2_mips),y)

MIPS is handled here...

> -KODI_CONF_OPTS += -DWITH_ARCH=mips -DWITH_CPU=mips
> -else ifeq ($(BR2_i386),y)
> -KODI_CONF_OPTS += -DWITH_ARCH=i486-linux -DWITH_CPU=$(BR2_GCC_TARGET_ARCH)
> -else ifeq ($(BR2_x86_64),y)
> -KODI_CONF_OPTS += -DWITH_ARCH=x86_64-linux -DWITH_CPU=x86_64
> +else ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y)

... and here.

> +KODI_CONF_OPTS += \
> +	-DWITH_ARCH=mips$(if $(BR2_ARCH_IS_64),64) \
> +	-DWITH_CPU=mips$(if $(BR2_ARCH_IS_64),64)
> +else ifeq ($(BR2_powerpc)$(BR2_powerpc64le),y)
> +KODI_CONF_OPTS += \
> +	-DWITH_ARCH=powerpc$(if $(BR2_ARCH_IS_64),64) \
> +	-DWITH_CPU=powerpc$(if $(BR2_ARCH_IS_64),64)
> +else ifeq ($(BR2_powerpc64)$(BR2_sparc64),y)
> +KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
> +else ifeq ($(BR2_sh4),y)
> +KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
> +else ifeq ($(BR2_xtensa),y)
> +KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)

You can refactor those in one single assignment.

Best regards,

Thomas
Bernd Kuhls April 29, 2017, 1:24 p.m. UTC | #2
Hi Thomas,

Am Sat, 29 Apr 2017 13:44:04 +0200 schrieb Thomas Petazzoni:

> Hello,
> 
> On Sat, 29 Apr 2017 10:37:51 +0200, Bernd Kuhls wrote:
> 
>>  package/kodi/0003-Add-support-for-sh4.patch     | 108
>>  ++++++++++++++++++++++++
>>  package/kodi/0004-Add-support-for-sparc.patch   |  91
>>  ++++++++++++++++++++ package/kodi/0005-Add-support-for-arc.patch     |
>>   91 ++++++++++++++++++++
>>  package/kodi/0006-Add-support-for-xtensa.patch  |  91
>>  ++++++++++++++++++++
> 
> Have these patches any chance of being merged upstream? Indeed, it's
> very unlikely that Kodi will ever be used on any of those architectures,
> so having to carry forever those patches doesn't seem like a great
> thing. I would prefer to exclude those architectures in Config.in.

the patches are currently under review upstream, based on their decision 
I will sent the next version of this patch.

>>  	depends on BR2_USE_MMU # libcdio, and others
>> -	default y if (BR2_arm || (BR2_mipsel && BR2_TOOLCHAIN_USES_GLIBC) 
||
>> BR2_i386 || BR2_x86_64) \
>> -		&& BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS \
>> -		&& BR2_TOOLCHAIN_HAS_SYNC_8 +# i386: needs sse (see 
upstream PR
>> 10351)
>> +	default y if BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS \
>> +		&& !(BR2_i386 && !BR2_X86_CPU_HAS_SSE)
> 
> Kodi doesn't really support all architectures, since it contains
> architecture-specific definitions in several files...

I am not sure that I understood what you mean here. The result of testpkg 
shows that Kodi is not built for all archs, mostly because of the 
restrictions from BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS and BR2_USE_MMU.

>> +ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
>> +KODI_CONF_OPTS += -DCORE_SYSTEM_NAME=rbpi +KODI_DEPENDENCIES +=
>> rpi-userland +ifeq
>> ($(BR2_arm1176jzf_s)$(BR2_cortex_a7)$(BR2_cortex_a53),y)
>> +KODI_CONF_OPTS += -DWITH_CPU=$(BR2_GCC_TARGET_CPU)
> 
> Why only for Raspberry Pi ?

These CPU-specific options are only needed for rbpi:
https://github.com/xbmc/xbmc/blob/Krypton/project/cmake/scripts/rbpi/
ArchSetup.cmake#L13

>> +endif +else  # BR2_PACKAGE_RPI_USERLAND +ifeq
>> ($(BR2_arceb)$(BR2_arcle),y)
>> +KODI_CONF_OPTS += -DWITH_ARCH=arc -DWITH_CPU=arc +else ifeq
>> ($(BR2_armeb),y)
>>  KODI_CONF_OPTS += -DWITH_ARCH=arm -DWITH_CPU=arm
>> -else ifeq ($(BR2_mips),y)
> 
> MIPS is handled here...

Not anymore, because I removed the check for mips ...

>> -KODI_CONF_OPTS += -DWITH_ARCH=mips -DWITH_CPU=mips -else ifeq
>> ($(BR2_i386),y)
>> -KODI_CONF_OPTS += -DWITH_ARCH=i486-linux
>> -DWITH_CPU=$(BR2_GCC_TARGET_ARCH)
>> -else ifeq ($(BR2_x86_64),y)
>> -KODI_CONF_OPTS += -DWITH_ARCH=x86_64-linux -DWITH_CPU=x86_64 +else
>> ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y)
> 
> ... and here.

and re-added it here for all mips archs.

>> +KODI_CONF_OPTS += \
>> +	-DWITH_ARCH=mips$(if $(BR2_ARCH_IS_64),64) \
>> +	-DWITH_CPU=mips$(if $(BR2_ARCH_IS_64),64)
>> +else ifeq ($(BR2_powerpc)$(BR2_powerpc64le),y)
>> +KODI_CONF_OPTS += \
>> +	-DWITH_ARCH=powerpc$(if $(BR2_ARCH_IS_64),64) \
>> +	-DWITH_CPU=powerpc$(if $(BR2_ARCH_IS_64),64)
>> +else ifeq ($(BR2_powerpc64)$(BR2_sparc64),y)
>> +KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
>> +else ifeq ($(BR2_sh4),y)
>> +KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
>> +else ifeq ($(BR2_xtensa),y)
>> +KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
> 
> You can refactor those in one single assignment.

Done.

Regards, Bernd
diff mbox

Patch

diff --git a/package/kodi-pvr-mediaportal-tvserver/Config.in b/package/kodi-pvr-mediaportal-tvserver/Config.in
index 733ca8859e..ff93c249b1 100644
--- a/package/kodi-pvr-mediaportal-tvserver/Config.in
+++ b/package/kodi-pvr-mediaportal-tvserver/Config.in
@@ -1,5 +1,7 @@ 
 config BR2_PACKAGE_KODI_PVR_MEDIAPORTAL_TVSERVER
 	bool "kodi-pvr-mediaportal-tvserver"
+	# ARC toolchain lacks xlocale.h
+	depends on !BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC
 	select BR2_PACKAGE_KODI_PLATFORM
 	help
 	  MediaPortal TVServer PVR client addon for Kodi
diff --git a/package/kodi/0003-Add-support-for-sh4.patch b/package/kodi/0003-Add-support-for-sh4.patch
new file mode 100644
index 0000000000..8e0d2e2af0
--- /dev/null
+++ b/package/kodi/0003-Add-support-for-sh4.patch
@@ -0,0 +1,108 @@ 
+From 61c13c85d4dad978f793d0e3b75e99d95bc226c3 Mon Sep 17 00:00:00 2001
+From: Bernd Kuhls <bernd.kuhls@t-online.de>
+Date: Wed, 26 Apr 2017 22:34:40 +0200
+Subject: [PATCH] Add support for sh4
+
+This commit fixes Kodi build with a buildroot toolchain for sh4, also
+rewrap code to prepare for more platforms.
+
+Patch sent upstream as PR 12015.
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ xbmc/cores/DllLoader/DllLoader.h                        | 7 ++++++-
+ xbmc/cores/DllLoader/ldt_keeper.c                       | 7 ++++++-
+ xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h | 8 +++++++-
+ xbmc/threads/Atomics.cpp                                | 6 +++++-
+ xbmc/utils/MathUtils.h                                  | 3 ++-
+ 5 files changed, 26 insertions(+), 5 deletions(-)
+
+diff --git a/xbmc/cores/DllLoader/DllLoader.h b/xbmc/cores/DllLoader/DllLoader.h
+index eb3c54c96b..f05c195b89 100644
+--- a/xbmc/cores/DllLoader/DllLoader.h
++++ b/xbmc/cores/DllLoader/DllLoader.h
+@@ -23,7 +23,12 @@
+ #include "coffldr.h"
+ #include "LibraryLoader.h"
+ 
+-#if defined(__linux__) && !defined(__powerpc__) && !defined(__arm__) && !defined(__aarch64__) && !defined(__mips__)
++#if defined(__linux__) && \
++    !defined(__powerpc__) && \
++    !defined(__arm__) && \
++    !defined(__aarch64__) && \
++    !defined(__mips__) && \
++    !defined(__SH4__)
+ #define USE_LDT_KEEPER
+ #include "ldt_keeper.h"
+ #endif
+diff --git a/xbmc/cores/DllLoader/ldt_keeper.c b/xbmc/cores/DllLoader/ldt_keeper.c
+index 3fe68541e6..ff230d8469 100644
+--- a/xbmc/cores/DllLoader/ldt_keeper.c
++++ b/xbmc/cores/DllLoader/ldt_keeper.c
+@@ -19,7 +19,12 @@
+  */
+ 
+ //#ifndef __powerpc__
+-#if !defined(__powerpc__) && !defined(__ppc__) && !defined(__arm__) && !defined(__aarch64__) && !defined(__mips__)
++#if !defined(__powerpc__) && \
++    !defined(__ppc__) && \
++    !defined(__arm__) && \
++    !defined(__aarch64__) && \
++    !defined(__mips__) && \
++    !defined(__SH4__)
+ 
+ #include "ldt_keeper.h"
+ 
+diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h b/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
+index ce3afe985b..731341ef3d 100644
+--- a/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
++++ b/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
+@@ -293,7 +293,13 @@ protected:
+ 
+ 
+ inline int NP2( unsigned x ) {
+-#if defined(TARGET_POSIX) && !defined(__POWERPC__) && !defined(__PPC__) && !defined(__arm__) && !defined(__aarch64__) && !defined(__mips__)
++#if defined(TARGET_POSIX) && \
++    !defined(__POWERPC__) && \
++    !defined(__PPC__) && \
++    !defined(__arm__) && \
++    !defined(__aarch64__) && \
++    !defined(__mips__) && \
++    !defined(__SH4__)
+   // If there are any issues compiling this, just append a ' && 0'
+   // to the above to make it '#if defined(TARGET_POSIX) && 0'
+ 
+diff --git a/xbmc/threads/Atomics.cpp b/xbmc/threads/Atomics.cpp
+index ecba3f1081..7aaea1f2ba 100644
+--- a/xbmc/threads/Atomics.cpp
++++ b/xbmc/threads/Atomics.cpp
+@@ -106,7 +106,11 @@ long cas(volatile long *pAddr, long expectedVal, long swapVal)
+ ///////////////////////////////////////////////////////////////////////////
+ long long cas2(volatile long long* pAddr, long long expectedVal, long long swapVal)
+ {
+-#if defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || defined(__aarch64__)// PowerPC and ARM
++#if defined(__ppc__) || \
++    defined(__powerpc__) || \
++    defined(__arm__) || \
++    defined(__aarch64__) || \
++    defined(__SH4__)
+ // Not available/required
+ // Hack to allow compilation
+   throw "cas2 is not implemented";
+diff --git a/xbmc/utils/MathUtils.h b/xbmc/utils/MathUtils.h
+index 9ec1edba87..0be12d9abf 100644
+--- a/xbmc/utils/MathUtils.h
++++ b/xbmc/utils/MathUtils.h
+@@ -36,7 +36,8 @@
+     defined(__powerpc__) || \
+     defined(__mips__) || \
+     defined(__arm__) || \
+-    defined(__aarch64__)
++    defined(__aarch64__) || \
++    defined(__SH4__)
+   #define DISABLE_MATHUTILS_ASM_ROUND_INT
+ #endif
+ 
+-- 
+2.11.0
+
diff --git a/package/kodi/0004-Add-support-for-sparc.patch b/package/kodi/0004-Add-support-for-sparc.patch
new file mode 100644
index 0000000000..301d11de73
--- /dev/null
+++ b/package/kodi/0004-Add-support-for-sparc.patch
@@ -0,0 +1,91 @@ 
+From 72ccf12d7760da4e77e70ae4cfed5caab986e8a9 Mon Sep 17 00:00:00 2001
+From: Bernd Kuhls <bernd.kuhls@t-online.de>
+Date: Thu, 27 Apr 2017 09:02:11 +0200
+Subject: [PATCH] Add support for sparc
+
+This commit fixes Kodi build with a buildroot toolchain for sparc.
+
+Patch sent upstream as PR 12015.
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ xbmc/cores/DllLoader/DllLoader.h                        | 3 ++-
+ xbmc/cores/DllLoader/ldt_keeper.c                       | 3 ++-
+ xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h | 3 ++-
+ xbmc/threads/Atomics.cpp                                | 3 ++-
+ xbmc/utils/MathUtils.h                                  | 3 ++-
+ 5 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/xbmc/cores/DllLoader/DllLoader.h b/xbmc/cores/DllLoader/DllLoader.h
+index f05c195b89..1e51014f1a 100644
+--- a/xbmc/cores/DllLoader/DllLoader.h
++++ b/xbmc/cores/DllLoader/DllLoader.h
+@@ -28,7 +28,8 @@
+     !defined(__arm__) && \
+     !defined(__aarch64__) && \
+     !defined(__mips__) && \
+-    !defined(__SH4__)
++    !defined(__SH4__) && \
++    !defined(__sparc__)
+ #define USE_LDT_KEEPER
+ #include "ldt_keeper.h"
+ #endif
+diff --git a/xbmc/cores/DllLoader/ldt_keeper.c b/xbmc/cores/DllLoader/ldt_keeper.c
+index ff230d8469..6aec5f8e67 100644
+--- a/xbmc/cores/DllLoader/ldt_keeper.c
++++ b/xbmc/cores/DllLoader/ldt_keeper.c
+@@ -24,7 +24,8 @@
+     !defined(__arm__) && \
+     !defined(__aarch64__) && \
+     !defined(__mips__) && \
+-    !defined(__SH4__)
++    !defined(__SH4__) && \
++    !defined(__sparc__)
+ 
+ #include "ldt_keeper.h"
+ 
+diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h b/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
+index 731341ef3d..67da6068b6 100644
+--- a/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
++++ b/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
+@@ -299,7 +299,8 @@ inline int NP2( unsigned x ) {
+     !defined(__arm__) && \
+     !defined(__aarch64__) && \
+     !defined(__mips__) && \
+-    !defined(__SH4__)
++    !defined(__SH4__) && \
++    !defined(__sparc__)
+   // If there are any issues compiling this, just append a ' && 0'
+   // to the above to make it '#if defined(TARGET_POSIX) && 0'
+ 
+diff --git a/xbmc/threads/Atomics.cpp b/xbmc/threads/Atomics.cpp
+index 7aaea1f2ba..90aabf947b 100644
+--- a/xbmc/threads/Atomics.cpp
++++ b/xbmc/threads/Atomics.cpp
+@@ -110,7 +110,8 @@ long long cas2(volatile long long* pAddr, long long expectedVal, long long swapV
+     defined(__powerpc__) || \
+     defined(__arm__) || \
+     defined(__aarch64__) || \
+-    defined(__SH4__)
++    defined(__SH4__) || \
++    defined(__sparc__)
+ // Not available/required
+ // Hack to allow compilation
+   throw "cas2 is not implemented";
+diff --git a/xbmc/utils/MathUtils.h b/xbmc/utils/MathUtils.h
+index 0be12d9abf..873fbb8b0f 100644
+--- a/xbmc/utils/MathUtils.h
++++ b/xbmc/utils/MathUtils.h
+@@ -37,7 +37,8 @@
+     defined(__mips__) || \
+     defined(__arm__) || \
+     defined(__aarch64__) || \
+-    defined(__SH4__)
++    defined(__SH4__) || \
++    defined(__sparc__)
+   #define DISABLE_MATHUTILS_ASM_ROUND_INT
+ #endif
+ 
+-- 
+2.11.0
+
diff --git a/package/kodi/0005-Add-support-for-arc.patch b/package/kodi/0005-Add-support-for-arc.patch
new file mode 100644
index 0000000000..faa8e7d8c0
--- /dev/null
+++ b/package/kodi/0005-Add-support-for-arc.patch
@@ -0,0 +1,91 @@ 
+From 4e2d40e592b11380db10ff72970f2ed89206766a Mon Sep 17 00:00:00 2001
+From: Bernd Kuhls <bernd.kuhls@t-online.de>
+Date: Thu, 27 Apr 2017 13:01:25 +0200
+Subject: [PATCH] Add support for arc
+
+This commit fixes Kodi build with a buildroot toolchain for arc.
+
+Patch sent upstream as PR 12015.
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ xbmc/cores/DllLoader/DllLoader.h                        | 3 ++-
+ xbmc/cores/DllLoader/ldt_keeper.c                       | 3 ++-
+ xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h | 3 ++-
+ xbmc/threads/Atomics.cpp                                | 3 ++-
+ xbmc/utils/MathUtils.h                                  | 3 ++-
+ 5 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/xbmc/cores/DllLoader/DllLoader.h b/xbmc/cores/DllLoader/DllLoader.h
+index 1e51014f1a..5618445d51 100644
+--- a/xbmc/cores/DllLoader/DllLoader.h
++++ b/xbmc/cores/DllLoader/DllLoader.h
+@@ -29,7 +29,8 @@
+     !defined(__aarch64__) && \
+     !defined(__mips__) && \
+     !defined(__SH4__) && \
+-    !defined(__sparc__)
++    !defined(__sparc__) && \
++    !defined(__arc__)
+ #define USE_LDT_KEEPER
+ #include "ldt_keeper.h"
+ #endif
+diff --git a/xbmc/cores/DllLoader/ldt_keeper.c b/xbmc/cores/DllLoader/ldt_keeper.c
+index 6aec5f8e67..a10acdb967 100644
+--- a/xbmc/cores/DllLoader/ldt_keeper.c
++++ b/xbmc/cores/DllLoader/ldt_keeper.c
+@@ -25,7 +25,8 @@
+     !defined(__aarch64__) && \
+     !defined(__mips__) && \
+     !defined(__SH4__) && \
+-    !defined(__sparc__)
++    !defined(__sparc__) && \
++    !defined(__arc__)
+ 
+ #include "ldt_keeper.h"
+ 
+diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h b/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
+index 67da6068b6..b0cd76da45 100644
+--- a/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
++++ b/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
+@@ -300,7 +300,8 @@ inline int NP2( unsigned x ) {
+     !defined(__aarch64__) && \
+     !defined(__mips__) && \
+     !defined(__SH4__) && \
+-    !defined(__sparc__)
++    !defined(__sparc__) && \
++    !defined(__arc__)
+   // If there are any issues compiling this, just append a ' && 0'
+   // to the above to make it '#if defined(TARGET_POSIX) && 0'
+ 
+diff --git a/xbmc/threads/Atomics.cpp b/xbmc/threads/Atomics.cpp
+index 90aabf947b..0c5b13ae73 100644
+--- a/xbmc/threads/Atomics.cpp
++++ b/xbmc/threads/Atomics.cpp
+@@ -111,7 +111,8 @@ long long cas2(volatile long long* pAddr, long long expectedVal, long long swapV
+     defined(__arm__) || \
+     defined(__aarch64__) || \
+     defined(__SH4__) || \
+-    defined(__sparc__)
++    defined(__sparc__) || \
++    defined(__arc__)
+ // Not available/required
+ // Hack to allow compilation
+   throw "cas2 is not implemented";
+diff --git a/xbmc/utils/MathUtils.h b/xbmc/utils/MathUtils.h
+index 873fbb8b0f..b79be9e3d6 100644
+--- a/xbmc/utils/MathUtils.h
++++ b/xbmc/utils/MathUtils.h
+@@ -38,7 +38,8 @@
+     defined(__arm__) || \
+     defined(__aarch64__) || \
+     defined(__SH4__) || \
+-    defined(__sparc__)
++    defined(__sparc__) || \
++    defined(__arc__)
+   #define DISABLE_MATHUTILS_ASM_ROUND_INT
+ #endif
+ 
+-- 
+2.11.0
+
diff --git a/package/kodi/0006-Add-support-for-xtensa.patch b/package/kodi/0006-Add-support-for-xtensa.patch
new file mode 100644
index 0000000000..10a006b6fd
--- /dev/null
+++ b/package/kodi/0006-Add-support-for-xtensa.patch
@@ -0,0 +1,91 @@ 
+From 1de2a0afc083888686be6f169d1477e25ab80848 Mon Sep 17 00:00:00 2001
+From: Bernd Kuhls <bernd.kuhls@t-online.de>
+Date: Thu, 27 Apr 2017 16:51:36 +0200
+Subject: [PATCH] Add support for xtensa
+
+This commit fixes Kodi build with a buildroot toolchain for xtensa.
+
+Patch sent upstream as PR 12015.
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ xbmc/cores/DllLoader/DllLoader.h                        | 3 ++-
+ xbmc/cores/DllLoader/ldt_keeper.c                       | 3 ++-
+ xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h | 3 ++-
+ xbmc/threads/Atomics.cpp                                | 3 ++-
+ xbmc/utils/MathUtils.h                                  | 3 ++-
+ 5 files changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/xbmc/cores/DllLoader/DllLoader.h b/xbmc/cores/DllLoader/DllLoader.h
+index 5618445d51..26b41e258b 100644
+--- a/xbmc/cores/DllLoader/DllLoader.h
++++ b/xbmc/cores/DllLoader/DllLoader.h
+@@ -30,7 +30,8 @@
+     !defined(__mips__) && \
+     !defined(__SH4__) && \
+     !defined(__sparc__) && \
+-    !defined(__arc__)
++    !defined(__arc__) && \
++    !defined(__xtensa__)
+ #define USE_LDT_KEEPER
+ #include "ldt_keeper.h"
+ #endif
+diff --git a/xbmc/cores/DllLoader/ldt_keeper.c b/xbmc/cores/DllLoader/ldt_keeper.c
+index a10acdb967..83fd023196 100644
+--- a/xbmc/cores/DllLoader/ldt_keeper.c
++++ b/xbmc/cores/DllLoader/ldt_keeper.c
+@@ -26,7 +26,8 @@
+     !defined(__mips__) && \
+     !defined(__SH4__) && \
+     !defined(__sparc__) && \
+-    !defined(__arc__)
++    !defined(__arc__) && \
++    !defined(__xtensa__)
+ 
+ #include "ldt_keeper.h"
+ 
+diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h b/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
+index b0cd76da45..32f8bc45c9 100644
+--- a/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
++++ b/xbmc/cores/VideoPlayer/VideoRenderers/LinuxRendererGL.h
+@@ -301,7 +301,8 @@ inline int NP2( unsigned x ) {
+     !defined(__mips__) && \
+     !defined(__SH4__) && \
+     !defined(__sparc__) && \
+-    !defined(__arc__)
++    !defined(__arc__) && \
++    !defined(__xtensa__)
+   // If there are any issues compiling this, just append a ' && 0'
+   // to the above to make it '#if defined(TARGET_POSIX) && 0'
+ 
+diff --git a/xbmc/threads/Atomics.cpp b/xbmc/threads/Atomics.cpp
+index 0c5b13ae73..7085a13882 100644
+--- a/xbmc/threads/Atomics.cpp
++++ b/xbmc/threads/Atomics.cpp
+@@ -112,7 +112,8 @@ long long cas2(volatile long long* pAddr, long long expectedVal, long long swapV
+     defined(__aarch64__) || \
+     defined(__SH4__) || \
+     defined(__sparc__) || \
+-    defined(__arc__)
++    defined(__arc__) || \
++    defined(__xtensa__)
+ // Not available/required
+ // Hack to allow compilation
+   throw "cas2 is not implemented";
+diff --git a/xbmc/utils/MathUtils.h b/xbmc/utils/MathUtils.h
+index b79be9e3d6..556787ef82 100644
+--- a/xbmc/utils/MathUtils.h
++++ b/xbmc/utils/MathUtils.h
+@@ -39,7 +39,8 @@
+     defined(__aarch64__) || \
+     defined(__SH4__) || \
+     defined(__sparc__) || \
+-    defined(__arc__)
++    defined(__arc__) || \
++    defined(__xtensa__)
+   #define DISABLE_MATHUTILS_ASM_ROUND_INT
+ #endif
+ 
+-- 
+2.11.0
+
diff --git a/package/kodi/Config.in b/package/kodi/Config.in
index f274019e99..bd2b226826 100644
--- a/package/kodi/Config.in
+++ b/package/kodi/Config.in
@@ -1,9 +1,9 @@ 
 config BR2_PACKAGE_KODI_ARCH_SUPPORTS
 	bool
 	depends on BR2_USE_MMU # libcdio, and others
-	default y if (BR2_arm || (BR2_mipsel && BR2_TOOLCHAIN_USES_GLIBC) || BR2_i386 || BR2_x86_64) \
-		&& BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS \
-		&& BR2_TOOLCHAIN_HAS_SYNC_8
+# i386: needs sse (see upstream PR 10351)
+	default y if BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS \
+		&& !(BR2_i386 && !BR2_X86_CPU_HAS_SSE)
 
 comment "kodi needs python w/ .py modules, a uClibc or glibc toolchain w/ C++, locale, threads, wchar, dynamic library, gcc >= 4.8, host gcc >= 4.6"
 	depends on BR2_PACKAGE_KODI_ARCH_SUPPORTS
diff --git a/package/kodi/kodi.mk b/package/kodi/kodi.mk
index dea4d4c97a..c2c6f45d68 100644
--- a/package/kodi/kodi.mk
+++ b/package/kodi/kodi.mk
@@ -70,17 +70,40 @@  KODI_CONF_OPTS += \
 	-DENABLE_OPENSSL=ON \
 	-DNATIVEPREFIX=$(HOST_DIR)/usr \
 	-DDEPENDS_PATH=$(@D) \
-	-DWITH_TEXTUREPACKER=$(HOST_DIR)/usr/bin/TexturePacker
+	-DWITH_TEXTUREPACKER=$(HOST_DIR)/usr/bin/TexturePacker \
+	-DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) $(KODI_CXX_FLAGS)"
 
-ifeq ($(BR2_arm),y)
+ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
+KODI_CONF_OPTS += -DCORE_SYSTEM_NAME=rbpi
+KODI_DEPENDENCIES += rpi-userland
+ifeq ($(BR2_arm1176jzf_s)$(BR2_cortex_a7)$(BR2_cortex_a53),y)
+KODI_CONF_OPTS += -DWITH_CPU=$(BR2_GCC_TARGET_CPU)
+endif
+else  # BR2_PACKAGE_RPI_USERLAND
+ifeq ($(BR2_arceb)$(BR2_arcle),y)
+KODI_CONF_OPTS += -DWITH_ARCH=arc -DWITH_CPU=arc
+else ifeq ($(BR2_armeb),y)
 KODI_CONF_OPTS += -DWITH_ARCH=arm -DWITH_CPU=arm
-else ifeq ($(BR2_mips),y)
-KODI_CONF_OPTS += -DWITH_ARCH=mips -DWITH_CPU=mips
-else ifeq ($(BR2_i386),y)
-KODI_CONF_OPTS += -DWITH_ARCH=i486-linux -DWITH_CPU=$(BR2_GCC_TARGET_ARCH)
-else ifeq ($(BR2_x86_64),y)
-KODI_CONF_OPTS += -DWITH_ARCH=x86_64-linux -DWITH_CPU=x86_64
+else ifeq ($(BR2_mips)$(BR2_mipsel)$(BR2_mips64)$(BR2_mips64el),y)
+KODI_CONF_OPTS += \
+	-DWITH_ARCH=mips$(if $(BR2_ARCH_IS_64),64) \
+	-DWITH_CPU=mips$(if $(BR2_ARCH_IS_64),64)
+else ifeq ($(BR2_powerpc)$(BR2_powerpc64le),y)
+KODI_CONF_OPTS += \
+	-DWITH_ARCH=powerpc$(if $(BR2_ARCH_IS_64),64) \
+	-DWITH_CPU=powerpc$(if $(BR2_ARCH_IS_64),64)
+else ifeq ($(BR2_powerpc64)$(BR2_sparc64),y)
+KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
+else ifeq ($(BR2_sh4),y)
+KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
+else ifeq ($(BR2_xtensa),y)
+KODI_CONF_OPTS += -DWITH_ARCH=$(BR2_ARCH) -DWITH_CPU=$(BR2_ARCH)
+else
+# Kodi auto-detects ARCH, tested: arm, aarch64, i386, x86_64
+# see project/cmake/scripts/linux/ArchSetup.cmake
+KODI_CONF_OPTS += -DWITH_CPU=$(BR2_ARCH)
 endif
+endif # !BR2_PACKAGE_RPI_USERLAND
 
 ifeq ($(BR2_X86_CPU_HAS_SSE),y)
 KODI_CONF_OPTS += -D_SSE_OK=ON -D_SSE_TRUE=ON
@@ -130,6 +153,11 @@  else
 KODI_CONF_OPTS += -D_AVX2_OK=OFF -D_AVX2_TRUE=OFF
 endif
 
+# mips: uses __atomic_load_8
+ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
+KODI_CXX_FLAGS += -latomic
+endif
+
 ifeq ($(BR2_PACKAGE_KODI_MYSQL),y)
 KODI_CONF_OPTS += -DENABLE_MYSQLCLIENT=ON
 KODI_DEPENDENCIES += mysql
@@ -145,11 +173,8 @@  else
 KODI_CONF_OPTS += -DENABLE_NONFREE=OFF
 endif
 
-ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
-KODI_CONF_OPTS += -DCORE_SYSTEM_NAME=rbpi
-KODI_DEPENDENCIES += rpi-userland
-else
 # these options only exist on non-rbpi systems
+ifeq ($(BR2_PACKAGE_RPI_USERLAND),)
 KODI_CONF_OPTS += -DENABLE_LDGOLD=OFF
 ifeq ($(BR2_PACKAGE_LIBAMCODEC),y)
 KODI_CONF_OPTS += -DENABLE_AML=ON
@@ -225,7 +250,7 @@  else
 KODI_CONF_OPTS += -DENABLE_OPENGL=OFF -DENABLE_X11=OFF
 ifeq ($(BR2_PACKAGE_KODI_EGL_GLES),y)
 KODI_DEPENDENCIES += libegl libgles
-KODI_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(TARGET_CXXFLAGS) `$(PKG_CONFIG_HOST_BINARY) --cflags --libs egl`"
+KODI_CXX_FLAGS += "`$(PKG_CONFIG_HOST_BINARY) --cflags --libs egl`"
 KODI_CONF_OPTS += -DCMAKE_C_FLAGS="$(TARGET_CFLAGS) `$(PKG_CONFIG_HOST_BINARY) --cflags --libs egl`"
 KODI_CONF_OPTS += -DENABLE_OPENGLES=ON
 else