aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorprspkt <prspkt@protonmail.com>2021-02-19 00:47:02 +0200
committerLeo <thinkabit.ukim@gmail.com>2021-02-19 00:12:07 +0000
commitcaf987cdb585dc48ce5a55ba2f7542111a7797c6 (patch)
treec41d7016b3f4a682aedc8fc80b479d399677ee56
parentfe47440769004138aeded3312056bc443aa7b72a (diff)
downloadaports-caf987cdb585dc48ce5a55ba2f7542111a7797c6.tar.gz
aports-caf987cdb585dc48ce5a55ba2f7542111a7797c6.tar.bz2
aports-caf987cdb585dc48ce5a55ba2f7542111a7797c6.tar.xz
community/sbc: upgrade to 1.5
- Drop patch for armv6. - Add upstream patch to fix building on non-x86 arches.
-rw-r--r--community/sbc/APKBUILD10
-rw-r--r--community/sbc/fix-armv6-assembly.patch364
-rw-r--r--community/sbc/fix-build-on-non-x86.patch45
3 files changed, 50 insertions, 369 deletions
diff --git a/community/sbc/APKBUILD b/community/sbc/APKBUILD
index c5fa5820ef..3f282790df 100644
--- a/community/sbc/APKBUILD
+++ b/community/sbc/APKBUILD
@@ -1,7 +1,7 @@
# Contributor: Carlo Landmeter <clandmeter@alpinelinux.org>
# Maintainer: Mark Riedesel <mark@klowner.com>
pkgname=sbc
-pkgver=1.4
+pkgver=1.5
pkgrel=0
pkgdesc="Bluetooth Subband Codec (SBC) library"
url="http://www.bluez.org/"
@@ -12,8 +12,8 @@ depends_dev="libsndfile-dev"
makedepends="$depends_dev linux-headers"
subpackages="$pkgname-dev $pkgname-utils"
source="https://www.kernel.org/pub/linux/bluetooth/sbc-$pkgver.tar.xz
- fix-armv6-assembly.patch
- "
+ fix-build-on-non-x86.patch"
+
build() {
./configure \
--build=$CBUILD \
@@ -38,5 +38,5 @@ utils() {
"$subpkgdir"/usr/
}
-sha512sums="f35250c202034e93ce4046d29883d76b162164d42fb59e6af8ff5e57f197244238f5f8087309cef2d44755c179e7f0869cf096735c8de510b1ac7e0f6c29d84f sbc-1.4.tar.xz
-73e8f3ab7962c5a32d533bd9cdba3e84f2ae54c02fc157cccb0b9c6b6fa227b2a7d6c1d52fffc77cb74951ebc225e60b58d0177dc3d488fd870ea17bb540f102 fix-armv6-assembly.patch"
+sha512sums="0243586188acede595317f2afbfdb41be5850d2a6133c374edbe5cbcf59a2a0fd4570d0b8f2d13ce9637ce48b2f1910c3e4ab1c0354dbf273ee67b09db8c4915 sbc-1.5.tar.xz
+415e181b928b492b364d08e47e75a92b3b0f0f5a9e4e234b779f917375af4553bc509f5ed0cee66f4793f818f82029b2a88c0febc98ed43aaeb0cf11e3b0ec25 fix-build-on-non-x86.patch"
diff --git a/community/sbc/fix-armv6-assembly.patch b/community/sbc/fix-armv6-assembly.patch
deleted file mode 100644
index e0ae2232aa..0000000000
--- a/community/sbc/fix-armv6-assembly.patch
+++ /dev/null
@@ -1,364 +0,0 @@
-diff --git a/sbc/sbc_primitives_armv6.c b/sbc/sbc_primitives_armv6.c
-index 665f157..9c58afc 100644
---- a/sbc/sbc_primitives_armv6.c
-+++ b/sbc/sbc_primitives_armv6.c
-@@ -38,58 +38,55 @@
-
- #ifdef SBC_BUILD_WITH_ARMV6_SUPPORT
-
--static void __attribute__((naked)) sbc_analyze_four_armv6()
-+static void sbc_analyze_four_armv6(int16_t *in, int32_t *out, const FIXED_T* consts)
- {
-- /* r0 = in, r1 = out, r2 = consts */
- __asm__ volatile (
-- "push {r1, r4-r7, lr}\n"
-- "push {r8-r11}\n"
-- "ldrd r4, r5, [r0, #0]\n"
-- "ldrd r6, r7, [r2, #0]\n"
-- "ldrd r8, r9, [r0, #16]\n"
-- "ldrd r10, r11, [r2, #16]\n"
-+ "ldrd r4, r5, [%1, #0]\n"
-+ "ldrd r6, r7, [%2, #0]\n"
-+ "ldrd r8, r9, [%1, #16]\n"
-+ "ldrd r10, r11, [%2, #16]\n"
- "mov r14, #0x8000\n"
- "smlad r3, r4, r6, r14\n"
- "smlad r12, r5, r7, r14\n"
-- "ldrd r4, r5, [r0, #32]\n"
-- "ldrd r6, r7, [r2, #32]\n"
-+ "ldrd r4, r5, [%1, #32]\n"
-+ "ldrd r6, r7, [%2, #32]\n"
- "smlad r3, r8, r10, r3\n"
- "smlad r12, r9, r11, r12\n"
-- "ldrd r8, r9, [r0, #48]\n"
-- "ldrd r10, r11, [r2, #48]\n"
-+ "ldrd r8, r9, [%1, #48]\n"
-+ "ldrd r10, r11, [%2, #48]\n"
- "smlad r3, r4, r6, r3\n"
- "smlad r12, r5, r7, r12\n"
-- "ldrd r4, r5, [r0, #64]\n"
-- "ldrd r6, r7, [r2, #64]\n"
-+ "ldrd r4, r5, [%1, #64]\n"
-+ "ldrd r6, r7, [%2, #64]\n"
- "smlad r3, r8, r10, r3\n"
- "smlad r12, r9, r11, r12\n"
-- "ldrd r8, r9, [r0, #8]\n"
-- "ldrd r10, r11, [r2, #8]\n"
-+ "ldrd r8, r9, [%1, #8]\n"
-+ "ldrd r10, r11, [%2, #8]\n"
- "smlad r3, r4, r6, r3\n" /* t1[0] is done */
- "smlad r12, r5, r7, r12\n" /* t1[1] is done */
-- "ldrd r4, r5, [r0, #24]\n"
-- "ldrd r6, r7, [r2, #24]\n"
-+ "ldrd r4, r5, [%1, #24]\n"
-+ "ldrd r6, r7, [%2, #24]\n"
- "pkhtb r3, r12, r3, asr #16\n" /* combine t1[0] and t1[1] */
- "smlad r12, r8, r10, r14\n"
- "smlad r14, r9, r11, r14\n"
-- "ldrd r8, r9, [r0, #40]\n"
-- "ldrd r10, r11, [r2, #40]\n"
-+ "ldrd r8, r9, [%1, #40]\n"
-+ "ldrd r10, r11, [%2, #40]\n"
- "smlad r12, r4, r6, r12\n"
- "smlad r14, r5, r7, r14\n"
-- "ldrd r4, r5, [r0, #56]\n"
-- "ldrd r6, r7, [r2, #56]\n"
-+ "ldrd r4, r5, [%1, #56]\n"
-+ "ldrd r6, r7, [%2, #56]\n"
- "smlad r12, r8, r10, r12\n"
- "smlad r14, r9, r11, r14\n"
-- "ldrd r8, r9, [r0, #72]\n"
-- "ldrd r10, r11, [r2, #72]\n"
-+ "ldrd r8, r9, [%1, #72]\n"
-+ "ldrd r10, r11, [%2, #72]\n"
- "smlad r12, r4, r6, r12\n"
- "smlad r14, r5, r7, r14\n"
-- "ldrd r4, r5, [r2, #80]\n" /* start loading cos table */
-+ "ldrd r4, r5, [%2, #80]\n" /* start loading cos table */
- "smlad r12, r8, r10, r12\n" /* t1[2] is done */
- "smlad r14, r9, r11, r14\n" /* t1[3] is done */
-- "ldrd r6, r7, [r2, #88]\n"
-- "ldrd r8, r9, [r2, #96]\n"
-- "ldrd r10, r11, [r2, #104]\n" /* cos table fully loaded */
-+ "ldrd r6, r7, [%2, #88]\n"
-+ "ldrd r8, r9, [%2, #96]\n"
-+ "ldrd r10, r11, [%2, #104]\n" /* cos table fully loaded */
- "pkhtb r12, r14, r12, asr #16\n" /* combine t1[2] and t1[3] */
- "smuad r4, r3, r4\n"
- "smuad r5, r3, r5\n"
-@@ -99,196 +96,191 @@ static void __attribute__((naked)) sbc_analyze_four_armv6()
- "smuad r7, r3, r7\n"
- "smlad r6, r12, r10, r6\n"
- "smlad r7, r12, r11, r7\n"
-- "pop {r8-r11}\n"
-- "stmia r1, {r4, r5, r6, r7}\n"
-- "pop {r1, r4-r7, pc}\n"
-+ "stmia %0, {r4, r5, r6, r7}\n"
-+ : "+r" (out)
-+ : "r" (in), "r" (consts)
-+ : "memory",
-+ "r3", "r4", "r5", "r6", "r7", "r8",
-+ "r9", "r10", "r11", "r12", "r14"
- );
- }
-
--#define sbc_analyze_four(in, out, consts) \
-- ((void (*)(int16_t *, int32_t *, const FIXED_T*)) \
-- sbc_analyze_four_armv6)((in), (out), (consts))
--
--static void __attribute__((naked)) sbc_analyze_eight_armv6()
-+static void sbc_analyze_eight_armv6(int16_t *in, int32_t *out, const FIXED_T* consts)
- {
-- /* r0 = in, r1 = out, r2 = consts */
- __asm__ volatile (
-- "push {r1, r4-r7, lr}\n"
-- "push {r8-r11}\n"
-- "ldrd r4, r5, [r0, #24]\n"
-- "ldrd r6, r7, [r2, #24]\n"
-- "ldrd r8, r9, [r0, #56]\n"
-- "ldrd r10, r11, [r2, #56]\n"
-+ "ldrd r4, r5, [%1, #24]\n"
-+ "ldrd r6, r7, [%2, #24]\n"
-+ "ldrd r8, r9, [%1, #56]\n"
-+ "ldrd r10, r11, [%2, #56]\n"
- "mov r14, #0x8000\n"
- "smlad r3, r4, r6, r14\n"
- "smlad r12, r5, r7, r14\n"
-- "ldrd r4, r5, [r0, #88]\n"
-- "ldrd r6, r7, [r2, #88]\n"
-+ "ldrd r4, r5, [%1, #88]\n"
-+ "ldrd r6, r7, [%2, #88]\n"
- "smlad r3, r8, r10, r3\n"
- "smlad r12, r9, r11, r12\n"
-- "ldrd r8, r9, [r0, #120]\n"
-- "ldrd r10, r11, [r2, #120]\n"
-+ "ldrd r8, r9, [%1, #120]\n"
-+ "ldrd r10, r11, [%2, #120]\n"
- "smlad r3, r4, r6, r3\n"
- "smlad r12, r5, r7, r12\n"
-- "ldrd r4, r5, [r0, #152]\n"
-- "ldrd r6, r7, [r2, #152]\n"
-+ "ldrd r4, r5, [%1, #152]\n"
-+ "ldrd r6, r7, [%2, #152]\n"
- "smlad r3, r8, r10, r3\n"
- "smlad r12, r9, r11, r12\n"
-- "ldrd r8, r9, [r0, #16]\n"
-- "ldrd r10, r11, [r2, #16]\n"
-+ "ldrd r8, r9, [%1, #16]\n"
-+ "ldrd r10, r11, [%2, #16]\n"
- "smlad r3, r4, r6, r3\n" /* t1[6] is done */
- "smlad r12, r5, r7, r12\n" /* t1[7] is done */
-- "ldrd r4, r5, [r0, #48]\n"
-- "ldrd r6, r7, [r2, #48]\n"
-+ "ldrd r4, r5, [%1, #48]\n"
-+ "ldrd r6, r7, [%2, #48]\n"
- "pkhtb r3, r12, r3, asr #16\n" /* combine t1[6] and t1[7] */
- "str r3, [sp, #-4]!\n" /* save to stack */
- "smlad r3, r8, r10, r14\n"
- "smlad r12, r9, r11, r14\n"
-- "ldrd r8, r9, [r0, #80]\n"
-- "ldrd r10, r11, [r2, #80]\n"
-+ "ldrd r8, r9, [%1, #80]\n"
-+ "ldrd r10, r11, [%2, #80]\n"
- "smlad r3, r4, r6, r3\n"
- "smlad r12, r5, r7, r12\n"
-- "ldrd r4, r5, [r0, #112]\n"
-- "ldrd r6, r7, [r2, #112]\n"
-+ "ldrd r4, r5, [%1, #112]\n"
-+ "ldrd r6, r7, [%2, #112]\n"
- "smlad r3, r8, r10, r3\n"
- "smlad r12, r9, r11, r12\n"
-- "ldrd r8, r9, [r0, #144]\n"
-- "ldrd r10, r11, [r2, #144]\n"
-+ "ldrd r8, r9, [%1, #144]\n"
-+ "ldrd r10, r11, [%2, #144]\n"
- "smlad r3, r4, r6, r3\n"
- "smlad r12, r5, r7, r12\n"
-- "ldrd r4, r5, [r0, #0]\n"
-- "ldrd r6, r7, [r2, #0]\n"
-+ "ldrd r4, r5, [%1, #0]\n"
-+ "ldrd r6, r7, [%2, #0]\n"
- "smlad r3, r8, r10, r3\n" /* t1[4] is done */
- "smlad r12, r9, r11, r12\n" /* t1[5] is done */
-- "ldrd r8, r9, [r0, #32]\n"
-- "ldrd r10, r11, [r2, #32]\n"
-+ "ldrd r8, r9, [%1, #32]\n"
-+ "ldrd r10, r11, [%2, #32]\n"
- "pkhtb r3, r12, r3, asr #16\n" /* combine t1[4] and t1[5] */
- "str r3, [sp, #-4]!\n" /* save to stack */
- "smlad r3, r4, r6, r14\n"
- "smlad r12, r5, r7, r14\n"
-- "ldrd r4, r5, [r0, #64]\n"
-- "ldrd r6, r7, [r2, #64]\n"
-+ "ldrd r4, r5, [%1, #64]\n"
-+ "ldrd r6, r7, [%2, #64]\n"
- "smlad r3, r8, r10, r3\n"
- "smlad r12, r9, r11, r12\n"
-- "ldrd r8, r9, [r0, #96]\n"
-- "ldrd r10, r11, [r2, #96]\n"
-+ "ldrd r8, r9, [%1, #96]\n"
-+ "ldrd r10, r11, [%2, #96]\n"
- "smlad r3, r4, r6, r3\n"
- "smlad r12, r5, r7, r12\n"
-- "ldrd r4, r5, [r0, #128]\n"
-- "ldrd r6, r7, [r2, #128]\n"
-+ "ldrd r4, r5, [%1, #128]\n"
-+ "ldrd r6, r7, [%2, #128]\n"
- "smlad r3, r8, r10, r3\n"
- "smlad r12, r9, r11, r12\n"
-- "ldrd r8, r9, [r0, #8]\n"
-- "ldrd r10, r11, [r2, #8]\n"
-+ "ldrd r8, r9, [%1, #8]\n"
-+ "ldrd r10, r11, [%2, #8]\n"
- "smlad r3, r4, r6, r3\n" /* t1[0] is done */
- "smlad r12, r5, r7, r12\n" /* t1[1] is done */
-- "ldrd r4, r5, [r0, #40]\n"
-- "ldrd r6, r7, [r2, #40]\n"
-+ "ldrd r4, r5, [%1, #40]\n"
-+ "ldrd r6, r7, [%2, #40]\n"
- "pkhtb r3, r12, r3, asr #16\n" /* combine t1[0] and t1[1] */
- "smlad r12, r8, r10, r14\n"
- "smlad r14, r9, r11, r14\n"
-- "ldrd r8, r9, [r0, #72]\n"
-- "ldrd r10, r11, [r2, #72]\n"
-+ "ldrd r8, r9, [%1, #72]\n"
-+ "ldrd r10, r11, [%2, #72]\n"
- "smlad r12, r4, r6, r12\n"
- "smlad r14, r5, r7, r14\n"
-- "ldrd r4, r5, [r0, #104]\n"
-- "ldrd r6, r7, [r2, #104]\n"
-+ "ldrd r4, r5, [%1, #104]\n"
-+ "ldrd r6, r7, [%2, #104]\n"
- "smlad r12, r8, r10, r12\n"
- "smlad r14, r9, r11, r14\n"
-- "ldrd r8, r9, [r0, #136]\n"
-- "ldrd r10, r11, [r2, #136]!\n"
-+ "ldrd r8, r9, [%1, #136]\n"
-+ "ldrd r10, r11, [%2, #136]!\n"
- "smlad r12, r4, r6, r12\n"
- "smlad r14, r5, r7, r14\n"
-- "ldrd r4, r5, [r2, #(160 - 136 + 0)]\n"
-+ "ldrd r4, r5, [%2, #(160 - 136 + 0)]\n"
- "smlad r12, r8, r10, r12\n" /* t1[2] is done */
- "smlad r14, r9, r11, r14\n" /* t1[3] is done */
-- "ldrd r6, r7, [r2, #(160 - 136 + 8)]\n"
-+ "ldrd r6, r7, [%2, #(160 - 136 + 8)]\n"
- "smuad r4, r3, r4\n"
- "smuad r5, r3, r5\n"
- "pkhtb r12, r14, r12, asr #16\n" /* combine t1[2] and t1[3] */
- /* r3 = t2[0:1] */
- /* r12 = t2[2:3] */
- "pop {r0, r14}\n" /* t2[4:5], t2[6:7] */
-- "ldrd r8, r9, [r2, #(160 - 136 + 32)]\n"
-+ "ldrd r8, r9, [%2, #(160 - 136 + 32)]\n"
- "smuad r6, r3, r6\n"
- "smuad r7, r3, r7\n"
-- "ldrd r10, r11, [r2, #(160 - 136 + 40)]\n"
-+ "ldrd r10, r11, [%2, #(160 - 136 + 40)]\n"
- "smlad r4, r12, r8, r4\n"
- "smlad r5, r12, r9, r5\n"
-- "ldrd r8, r9, [r2, #(160 - 136 + 64)]\n"
-+ "ldrd r8, r9, [%2, #(160 - 136 + 64)]\n"
- "smlad r6, r12, r10, r6\n"
- "smlad r7, r12, r11, r7\n"
-- "ldrd r10, r11, [r2, #(160 - 136 + 72)]\n"
-+ "ldrd r10, r11, [%2, #(160 - 136 + 72)]\n"
- "smlad r4, r0, r8, r4\n"
- "smlad r5, r0, r9, r5\n"
-- "ldrd r8, r9, [r2, #(160 - 136 + 96)]\n"
-+ "ldrd r8, r9, [%2, #(160 - 136 + 96)]\n"
- "smlad r6, r0, r10, r6\n"
- "smlad r7, r0, r11, r7\n"
-- "ldrd r10, r11, [r2, #(160 - 136 + 104)]\n"
-+ "ldrd r10, r11, [%2, #(160 - 136 + 104)]\n"
- "smlad r4, r14, r8, r4\n"
- "smlad r5, r14, r9, r5\n"
-- "ldrd r8, r9, [r2, #(160 - 136 + 16 + 0)]\n"
-+ "ldrd r8, r9, [%2, #(160 - 136 + 16 + 0)]\n"
- "smlad r6, r14, r10, r6\n"
- "smlad r7, r14, r11, r7\n"
-- "ldrd r10, r11, [r2, #(160 - 136 + 16 + 8)]\n"
-- "stmia r1!, {r4, r5}\n"
-+ "ldrd r10, r11, [%2, #(160 - 136 + 16 + 8)]\n"
-+ "stmia %0!, {r4, r5}\n"
- "smuad r4, r3, r8\n"
- "smuad r5, r3, r9\n"
-- "ldrd r8, r9, [r2, #(160 - 136 + 16 + 32)]\n"
-- "stmia r1!, {r6, r7}\n"
-+ "ldrd r8, r9, [%2, #(160 - 136 + 16 + 32)]\n"
-+ "stmia %0!, {r6, r7}\n"
- "smuad r6, r3, r10\n"
- "smuad r7, r3, r11\n"
-- "ldrd r10, r11, [r2, #(160 - 136 + 16 + 40)]\n"
-+ "ldrd r10, r11, [%2, #(160 - 136 + 16 + 40)]\n"
- "smlad r4, r12, r8, r4\n"
- "smlad r5, r12, r9, r5\n"
-- "ldrd r8, r9, [r2, #(160 - 136 + 16 + 64)]\n"
-+ "ldrd r8, r9, [%2, #(160 - 136 + 16 + 64)]\n"
- "smlad r6, r12, r10, r6\n"
- "smlad r7, r12, r11, r7\n"
-- "ldrd r10, r11, [r2, #(160 - 136 + 16 + 72)]\n"
-+ "ldrd r10, r11, [%2, #(160 - 136 + 16 + 72)]\n"
- "smlad r4, r0, r8, r4\n"
- "smlad r5, r0, r9, r5\n"
-- "ldrd r8, r9, [r2, #(160 - 136 + 16 + 96)]\n"
-+ "ldrd r8, r9, [%2, #(160 - 136 + 16 + 96)]\n"
- "smlad r6, r0, r10, r6\n"
- "smlad r7, r0, r11, r7\n"
-- "ldrd r10, r11, [r2, #(160 - 136 + 16 + 104)]\n"
-+ "ldrd r10, r11, [%2, #(160 - 136 + 16 + 104)]\n"
- "smlad r4, r14, r8, r4\n"
- "smlad r5, r14, r9, r5\n"
- "smlad r6, r14, r10, r6\n"
- "smlad r7, r14, r11, r7\n"
-- "pop {r8-r11}\n"
-- "stmia r1!, {r4, r5, r6, r7}\n"
-- "pop {r1, r4-r7, pc}\n"
-+ "stmia %0!, {r4, r5, r6, r7}\n"
-+ : "+r" (out)
-+ : "r" (in), "r" (consts)
-+ : "memory",
-+ "r3", "r4", "r5", "r6", "r7", "r8",
-+ "r9", "r10", "r11", "r12", "r14"
- );
- }
-
--#define sbc_analyze_eight(in, out, consts) \
-- ((void (*)(int16_t *, int32_t *, const FIXED_T*)) \
-- sbc_analyze_eight_armv6)((in), (out), (consts))
--
- static void sbc_analyze_4b_4s_armv6(struct sbc_encoder_state *state,
- int16_t *x, int32_t *out, int out_stride)
- {
- /* Analyze blocks */
-- sbc_analyze_four(x + 12, out, analysis_consts_fixed4_simd_odd);
-+ sbc_analyze_four_armv6(x + 12, out, analysis_consts_fixed4_simd_odd);
- out += out_stride;
-- sbc_analyze_four(x + 8, out, analysis_consts_fixed4_simd_even);
-+ sbc_analyze_four_armv6(x + 8, out, analysis_consts_fixed4_simd_even);
- out += out_stride;
-- sbc_analyze_four(x + 4, out, analysis_consts_fixed4_simd_odd);
-+ sbc_analyze_four_armv6(x + 4, out, analysis_consts_fixed4_simd_odd);
- out += out_stride;
-- sbc_analyze_four(x + 0, out, analysis_consts_fixed4_simd_even);
-+ sbc_analyze_four_armv6(x + 0, out, analysis_consts_fixed4_simd_even);
- }
-
- static void sbc_analyze_4b_8s_armv6(struct sbc_encoder_state *state,
- int16_t *x, int32_t *out, int out_stride)
- {
- /* Analyze blocks */
-- sbc_analyze_eight(x + 24, out, analysis_consts_fixed8_simd_odd);
-+ sbc_analyze_eight_armv6(x + 24, out, analysis_consts_fixed8_simd_odd);
- out += out_stride;
-- sbc_analyze_eight(x + 16, out, analysis_consts_fixed8_simd_even);
-+ sbc_analyze_eight_armv6(x + 16, out, analysis_consts_fixed8_simd_even);
- out += out_stride;
-- sbc_analyze_eight(x + 8, out, analysis_consts_fixed8_simd_odd);
-+ sbc_analyze_eight_armv6(x + 8, out, analysis_consts_fixed8_simd_odd);
- out += out_stride;
-- sbc_analyze_eight(x + 0, out, analysis_consts_fixed8_simd_even);
-+ sbc_analyze_eight_armv6(x + 0, out, analysis_consts_fixed8_simd_even);
- }
-
- static inline void sbc_analyze_1b_8s_armv6_even(struct sbc_encoder_state *state,
diff --git a/community/sbc/fix-build-on-non-x86.patch b/community/sbc/fix-build-on-non-x86.patch
new file mode 100644
index 0000000000..0d54ae2865
--- /dev/null
+++ b/community/sbc/fix-build-on-non-x86.patch
@@ -0,0 +1,45 @@
+From 909a9bdf7ab143e1f0baaf9736baebd3cd79aacf Mon Sep 17 00:00:00 2001
+From: Marius Bakke <marius@gnu.org>
+Date: Tue, 22 Dec 2020 11:04:26 +0000
+Subject: [PATCH] sbc_primitives: Fix build on non-x86.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Don't call __builtin_cpu_init unless targeting i386 or x86_64.
+Otherwise we get an error at link time:
+
+ CC sbc/sbc_primitives.lo
+sbc/sbc_primitives.c: In function ‘sbc_init_primitives_x86’:
+sbc/sbc_primitives.c:596:2: warning: implicit declaration of function ‘__builtin_cpu_init’; did you mean ‘__builtin_irint’? [-Wimplicit-function-declaration]
+[...]
+ CCLD src/sbcdec
+ld: sbc/.libs/libsbc-private.a(sbc_primitives.o): in function `sbc_init_primitives':
+sbc_primitives.c:(.text+0x3a30): undefined reference to `__builtin_cpu_init'
+---
+ sbc/sbc_primitives.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/sbc/sbc_primitives.c b/sbc/sbc_primitives.c
+index 97a75be..09c214a 100644
+--- a/sbc/sbc_primitives.c
++++ b/sbc/sbc_primitives.c
+@@ -593,6 +593,7 @@ static int sbc_calc_scalefactors_j(
+
+ static void sbc_init_primitives_x86(struct sbc_encoder_state *state)
+ {
++#if defined(__x86_64__) || defined(__i386__)
+ __builtin_cpu_init();
+
+ #ifdef SBC_BUILD_WITH_MMX_SUPPORT
+@@ -604,6 +605,7 @@ static void sbc_init_primitives_x86(struct sbc_encoder_state *state)
+ if (__builtin_cpu_supports("sse4.2"))
+ sbc_init_primitives_sse(state);
+ #endif
++#endif
+ }
+
+ /*
+--
+2.30.1
+