Package: gnuradio
Version: 3.5.1-1
Severity: important
Tags: patch

gnuradio FTBFS on armel and armhf with assembler errors

On armel the build failed with the following error:

cd 
/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/build/gnuradio-core/src/lib 
&& /usr/bin/gcc  -Dgnuradio_core_EXPORTS -DTRY_SHM_VMCIRCBUF -DHAVE_NETDB_H 
-DHAVE_SYS_TIME_H -DHAVE_SYS_TYPES_H -DHAVE_SYS_SELECT_H -DHAVE_SYS_SOCKET_H 
-DHAVE_SYS_MMAN_H -DHAVE_SYS_IPC_H -DHAVE_SYS_SHM_H -DHAVE_SIGNAL_H -DHAVE_NETINET_IN_H 
-DHAVE_ARPA_INET_H -DHAVE_BYTESWAP_H -DHAVE_LINUX_PPDEV_H -DHAVE_UNISTD_H 
-DHAVE_MALLOC_H -DHAVE_SNPRINTF -DHAVE_SIGACTION -DHAVE_SELECT -DHAVE_SYSCONF 
-DHAVE_GETPAGESIZE -DHAVE_NANOSLEEP -DHAVE_GETTIMEOFDAY -DHAVE_POSIX_MEMALIGN 
-DHAVE_VALLOC -DALIGNED_MALLOC=0 -DHAVE_PTHREAD_SIGMASK -DHAVE_SHM_OPEN -DHAVE_SINCOS 
-DHAVE_SINCOSF -DHAVE_SINF -DHAVE_COSF -DHAVE_MMAP -DFFTW3F_THREADS -O3 -DNDEBUG -fPIC 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/hier 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gruel/src/include 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/build/gruel/src/include 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/runtime
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/build/gnuradio-core/src/lib/general
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/general
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/build/gnuradio-core/src/lib/gengen
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/gengen
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/build/gnuradio-core/src/lib/filter
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/filter
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/missing
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/reed-solomon
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/viterbi
 -I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/io 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/build/gnuradio-core/src/lib/swig
 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/swig 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/volk/include 
-I/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/build/volk/include    
-fvisibility=hidden -Wsign-compare -Wall -Wno-uninitialized -o 
CMakeFiles/gnuradio-core.dir/filter/dotprod_fff_armv7_a.c.o   -c 
/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.c
/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.c:
 In function 'dotprod_fff_armv7_a':
/build/buildd-gnuradio_3.6.1-1-armel-iHSnxc/gnuradio-3.6.1/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.c:67:5:
 error: inconsistent operand constraints in an 'asm'
make[3]: *** 
[gnuradio-core/src/lib/CMakeFiles/gnuradio-core.dir/filter/dotprod_fff_armv7_a.c.o]
 Error 1

I don't know exactly what this error means but it's clear from the
filenames that the problem is that gnuradio is trying to build armv7
code on a port that is targetting armv4t.

On armhf the build failed with the following error

[ 15%] Building C object 
gnuradio-core/src/lib/CMakeFiles/gnuradio-core.dir/filter/dotprod_fff_armv7_a.c.o
cd 
/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/build/gnuradio-core/src/lib 
&& /usr/bin/gcc  -Dgnuradio_core_EXPORTS -DTRY_SHM_VMCIRCBUF -DHAVE_NETDB_H 
-DHAVE_SYS_TIME_H -DHAVE_SYS_TYPES_H -DHAVE_SYS_SELECT_H -DHAVE_SYS_SOCKET_H 
-DHAVE_SYS_MMAN_H -DHAVE_SYS_IPC_H -DHAVE_SYS_SHM_H -DHAVE_SIGNAL_H -DHAVE_NETINET_IN_H 
-DHAVE_ARPA_INET_H -DHAVE_BYTESWAP_H -DHAVE_LINUX_PPDEV_H -DHAVE_UNISTD_H 
-DHAVE_MALLOC_H -DHAVE_SNPRINTF -DHAVE_SIGACTION -DHAVE_SELECT -DHAVE_SYSCONF 
-DHAVE_GETPAGESIZE -DHAVE_NANOSLEEP -DHAVE_GETTIMEOFDAY -DHAVE_POSIX_MEMALIGN 
-DHAVE_VALLOC -DALIGNED_MALLOC=0 -DHAVE_PTHREAD_SIGMASK -DHAVE_SHM_OPEN -DHAVE_SINCOS 
-DHAVE_SINCOSF -DHAVE_SINF -DHAVE_COSF -DHAVE_MMAP -DFFTW3F_THREADS -O3 -DNDEBUG -fPIC 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/hier 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gruel/src/include 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/build/gruel/src/include 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/runtime
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/build/gnuradio-core/src/lib/general
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/general
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/build/gnuradio-core/src/lib/gengen
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/gengen
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/build/gnuradio-core/src/lib/filter
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/filter
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/missing
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/reed-solomon
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/viterbi
 -I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/io 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/build/gnuradio-core/src/lib/swig
 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/swig 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/volk/include 
-I/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/build/volk/include    
-fvisibility=hidden -Wsign-compare -Wall -Wno-uninitialized -o 
CMakeFiles/gnuradio-core.dir/filter/dotprod_fff_armv7_a.c.o   -c 
/build/buildd-gnuradio_3.6.1-1-armhf-lGgCrF/gnuradio-3.6.1/gnuradio-core/src/lib/filter/dotprod_fff_armv7_a.c
/tmp/cc8g8itd.s: Assembler messages:
/tmp/cc8g8itd.s:30: Error: selected FPU does not support instruction -- 
`vmov.f32 q8,#0.0'
/tmp/cc8g8itd.s:31: Error: selected FPU does not support instruction -- 
`vmov.f32 q9,#0.0'
/tmp/cc8g8itd.s:36: Error: selected FPU does not support instruction -- 
`vmla.f32 q8,q0,q2'
/tmp/cc8g8itd.s:37: Error: selected FPU does not support instruction -- 
`vmla.f32 q9,q1,q3'
/tmp/cc8g8itd.s:39: Error: selected FPU does not support instruction -- 
`vadd.f32 q8,q8,q9'
/tmp/cc8g8itd.s:40: Error: selected processor does not support Thumb mode 
`vpadd.f32 d0,d16,d17'
make[3]: *** 
[gnuradio-core/src/lib/CMakeFiles/gnuradio-core.dir/filter/dotprod_fff_armv7_a.c.o]
 Error 1

In this case things are slightly more subtule, There are multiple
VFP variants allowed with armv7 and debian targets the baseline variant "vfpv3_d16" while this looks like neon code to me.

In both cases the assembler that gnuradio is shipping is
unsuitable for the versions of arm that debian is targetting.
(the latter case looks like it may be fixable with moderate
effort, the former case is probablly a rewrite job). Given that gnuradio has built recenly on all debian architectures except armel, armhf and hurd I was pretty sure that a fallback implementation must be available.

After some grepping I produced the attatched patch that forces
the use of the generic implementation on arm fixing the build
failure. Better fixes are probablly possible but this gets it
the code to build.

Unfortunately while the code built successfully the packaging
was not so succesful on my system failing with.

dh_python2 --no-guessing-versions
E: dh_python2:433: extension linked to libpython3.2 and shipped in python2.7's 
dist-packages: _atsc.so
make[1]: *** [override_dh_python2] Error 7
make[1]: Leaving directory `/gnuradio-3.6.1'
make: *** [binary] Error 2
dpkg-buildpackage: error: debian/rules binary gave error exit status 2
root@plugwash:/gnuradio-3.6.1#
Though this may simply be a missing build-conflicts

Description: force use of generic implementation on arm
 The build process try to use an "armv7" implemention
 that tries to use neon on both armel and armhf. This 
 fails since neon isn't a requirement on either
 debian armel or debian armhf.
Author: Peter Michael Green <[email protected]>

---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:

Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: http://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: <YYYY-MM-DD>

--- gnuradio-3.6.1.orig/gnuradio-core/src/lib/filter/CMakeLists.txt
+++ gnuradio-3.6.1/gnuradio-core/src/lib/filter/CMakeLists.txt
@@ -209,7 +209,7 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^
     list(APPEND test_gnuradio_core_sources
         ${CMAKE_CURRENT_SOURCE_DIR}/qa_dotprod_powerpc.cc
     )
-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^xarmx")
     list(APPEND gnuradio_core_sources
         ${CMAKE_CURRENT_SOURCE_DIR}/sysconfig_armv7_a.cc
         ${CMAKE_CURRENT_SOURCE_DIR}/gr_fir_sysconfig_armv7_a.cc

Reply via email to