[pulseaudio: 3/3] Add upstream patch to fix compilation on ARM

Peter Robinson pbrobinson at fedoraproject.org
Thu Apr 7 15:43:00 UTC 2011


commit 8ffd5695103cc5c1fce3fe5a1c5eb75d6ce74504
Author: Peter Robinson <pbrobinson at gmail.com>
Date:   Thu Apr 7 16:28:46 2011 +0100

    Add upstream patch to fix compilation on ARM

 pulseaudio-arm6.patch |  102 +++++++++++++++++++++++++++++++++++++++++++++++++
 pulseaudio.spec       |    8 +++-
 2 files changed, 109 insertions(+), 1 deletions(-)
---
diff --git a/pulseaudio-arm6.patch b/pulseaudio-arm6.patch
new file mode 100644
index 0000000..2a798c2
--- /dev/null
+++ b/pulseaudio-arm6.patch
@@ -0,0 +1,102 @@
+From 12b900858ae82d435c100d6eb94cb7bb22fe5e29 Mon Sep 17 00:00:00 2001
+From: Arun Raghavan <arun.raghavan at collabora.co.uk>
+Date: Fri, 26 Nov 2010 11:55:57 +0530
+Subject: [PATCH] volume: Add explicit checks for ARMv6 instructions
+
+This ensures that the build does not fail if the ssat and pkhbt
+instructions are not available (armv5te and below).
+
+Fixes: http://www.pulseaudio.org/ticket/790
+---
+ configure.ac                |   33 ++++++++++++++++++++++++++++++++-
+ src/pulsecore/svolume_arm.c |    8 ++++----
+ 2 files changed, 36 insertions(+), 5 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index f93d461..0f6ff81 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -227,7 +227,7 @@ else
+                     [pulseaudio_cv_support_arm_atomic_ops=no])
+                  ])
+                AS_IF([test "$pulseaudio_cv_support_arm_atomic_ops" = "yes"], [
+-                   AC_DEFINE([ATOMIC_ARM_INLINE_ASM], 1, [Have ARMv6 instructions.])
++                   AC_DEFINE([ATOMIC_ARM_INLINE_ASM], 1, [Have ARM atomic instructions.])
+                    need_libatomic_ops=no
+                  ])
+            fi
+@@ -246,6 +246,37 @@ else
+     esac
+ fi
+ 
++# If we're on ARM, check for the ARMV6 instructions we need */
++case $host in
++  arm*)
++    AC_CACHE_CHECK([support for required armv6 instructions],
++      pulseaudio_cv_support_armv6,
++      [AC_COMPILE_IFELSE(
++         AC_LANG_PROGRAM([],
++           [[volatile int a = -60000, b = 0xaaaabbbb, c = 0xccccdddd;
++             asm volatile ("ldr r0, %2 \n"
++                           "ldr r2, %3 \n"
++                           "ldr r3, %4 \n"
++                           "ssat r1, #8, r0 \n"
++                           "str r1, %0 \n"
++                           "pkhbt r1, r3, r2, LSL #8 \n"
++                           "str r1, %1 \n"
++                           : "=m" (a), "=m" (b)
++                           : "m" (a), "m" (b), "m" (c)
++                           : "r0", "r1", "r2", "r3", "cc");
++             return (a == -128 && b == 0xaabbdddd) ? 0 : -1;
++           ]]),
++         [pulseaudio_cv_support_armv6=yes],
++         [pulseaudio_cv_support_armv6=no])
++      ])
++    AS_IF([test "$pulseaudio_cv_support_armv6" = "yes"], [
++        AC_DEFINE([HAVE_ARMV6], 1, [Have ARMv6 instructions.])
++      ])
++  ;;
++  *)
++  ;;
++esac
++
+ CC_CHECK_TLS
+ 
+ AC_CACHE_CHECK([whether $CC knows _Bool],
+diff --git a/src/pulsecore/svolume_arm.c b/src/pulsecore/svolume_arm.c
+index fdd8f09..3973e51 100644
+--- a/src/pulsecore/svolume_arm.c
++++ b/src/pulsecore/svolume_arm.c
+@@ -35,7 +35,7 @@
+ #include "sample-util.h"
+ #include "endianmacros.h"
+ 
+-#if defined (__arm__)
++#if defined (__arm__) && defined (HAVE_ARMV6)
+ 
+ #define MOD_INC() \
+     " subs  r0, r6, %2              \n\t" \
+@@ -182,11 +182,11 @@ static void run_test (void) {
+ }
+ #endif
+ 
+-#endif /* defined (__arm__) */
++#endif /* defined (__arm__) && defined (HAVE_ARMV6) */
+ 
+ 
+ void pa_volume_func_init_arm (pa_cpu_arm_flag_t flags) {
+-#if defined (__arm__)
++#if defined (__arm__) && defined (HAVE_ARMV6)
+     pa_log_info("Initialising ARM optimized functions.");
+ 
+ #ifdef RUN_TEST
+@@ -194,5 +194,5 @@ void pa_volume_func_init_arm (pa_cpu_arm_flag_t flags) {
+ #endif
+ 
+     pa_set_volume_func (PA_SAMPLE_S16NE,     (pa_do_volume_func_t) pa_volume_s16ne_arm);
+-#endif /* defined (__arm__) */
++#endif /* defined (__arm__) && defined (HAVE_ARMV6) */
+ }
+-- 
+1.6.3.3
+
diff --git a/pulseaudio.spec b/pulseaudio.spec
index db41c6c..377e874 100644
--- a/pulseaudio.spec
+++ b/pulseaudio.spec
@@ -1,7 +1,7 @@
 Name:           pulseaudio
 Summary:        Improved Linux Sound Server
 Version:        0.9.22
-Release:        4%{?dist}
+Release:        5%{?dist}
 License:        LGPLv2+
 Group:          System Environment/Daemons
 Source0:        http://0pointer.de/lennart/projects/pulseaudio/pulseaudio-%{version}.tar.gz
@@ -9,6 +9,8 @@ Source1:        default.pa-for-gdm
 
 # activate pulseaudio early at login
 Patch0:         pulseaudio-activation.patch
+# upstream patch to fix compilation of ARM platforms
+Patch1:         pulseaudio-arm6.patch
 URL:            http://pulseaudio.org/
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires:  m4
@@ -221,6 +223,7 @@ This package contains GDM integration hooks for the PulseAudio sound server.
 %prep
 %setup -q -T -b0
 %patch0 -p1 -b .activation
+%patch1 -p1 -b .arm
 
 %build
 autoreconf
@@ -469,6 +472,9 @@ exit 0
 %attr(0600, gdm, gdm) %{_localstatedir}/lib/gdm/.pulse/default.pa
 
 %changelog
+* Thu Apr  7 2011 Peter Robinson <pbrobinson at gmail.com> - 0.9.22-5
+- Add upstream patch to fix compilation on ARM
+
 * Mon Mar 28 2011 Matthias Clasen <mclasen at redhat.com> - 0.9.22-4
 - Activate pulseaudio earlier during login
 


More information about the scm-commits mailing list