2

I’m trying to make QTAV lib for cubieboard2 environment and experiencing problems. Could you please help.

Here is what qmake says:

cubie@Cubian:~/QtAV/output$ qmake ../QtAV.pro
Project MESSAGE: BUILD_DIR=/home/cubie/QtAV/output
Info: creating cache file /home/cubie/QtAV/output/.qmake.cache
Project MESSAGE: target arch: arm
Project MESSAGE: target arch features:
Project MESSAGE: To disable config tests, you can use 1 of the following methods
Project MESSAGE: 1. create '.qmake.conf' in the root source dir, add 'CONFIG += no_config_tests'(Qt5)
Project MESSAGE: 2. pass 'CONFIG += no_config_tests' or '-config no_config_tests' to qmake
Project MESSAGE: 3. add 'CONFIG += no_config_tests' in /home/cubie/QtAV/user.conf
Project MESSAGE: To manually set a config test result to true, disable config tests and enable config_name like above
Checking for avutil... yes
Checking for avcodec... yes
Checking for avformat... yes
Checking for swscale... yes
Project MESSAGE: checking for optional features...
Checking for swresample... yes
Checking for avresample... no
Checking for gl... yes
Checking for avfilter... yes
Checking for sse4_1... no
Checking for openal... no
Checking for portaudio... yes
Checking for direct2d... no
Checking for gdiplus... no
Checking for dxva... no
Checking for xv... yes
Checking for vaapi... yes
Checking for libcedarv... yes
Project MESSAGE: To recheck the dependencies, delete '.qmake.cache' in the root of build dir, run qmake with argument 'CONFIG+=recheck' or '-config recheck’

Then i do make and here is the last message:

g++ -c -pipe -isystem /home/cubie/QtAV/src -isystem /home/cubie/QtAV/src/.. -O2 -Wall -W -D_REENTRANT -fPIC -DBUILD_QTAV_LIB -D__STDC_CONSTANT_MACROS -DQTAV_HAVE_AVFILTER=1 -DQTAV_HAVE_SWRESAMPLE=1 -DQTAV_HAVE_PORTAUDIO=1 -DQTAV_HAVE_XV=1 -DQTAV_HAVE_GL=1 -DQTAV_HAVE_CUDA=1 -DQTAV_HAVE_VAAPI=1 -DQTAV_HAVE_CEDARV=1 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/local/Qt-5.3.1/mkspecs/linux-g++ -I/home/cubie/QtAV/src -I/usr/local/Qt-5.3.1/include -isystem /home/cubie/QtAV/src -I/home/cubie/QtAV -isystem /home/cubie/QtAV/src/QtAV -isystem /home/cubie/QtAV/src/cuda -isystem /home/cubie/QtAV/src/cuda/dllapi -I/usr/local/Qt-5.3.1/include/QtOpenGL -I/usr/local/Qt-5.3.1/include/QtWidgets -I/usr/local/Qt-5.3.1/include/QtGui -I/usr/local/Qt-5.3.1/include/QtCore -I.moc/5.3.1/QtAV -I. -o .obj/QtAV_linux_arm/VideoDecoderCedarv.o /home/cubie/QtAV/src/VideoDecoderCedarv.cpp
{standard input}: Assembler messages:
{standard input}:730: Error: selected processor does not support Thumb mode `vuzp.8 d0,d1'
{standard input}:731: Error: selected processor does not support Thumb mode `vuzp.8 d2,d3'

I’m using Cubian (Debian clone for cubieboard):

cubie@Cubian:~/QtAV/output$ uname -a
Linux Cubian 3.4.75-sun7i #35 SMP PREEMPT Sat Feb 8 02:10:31 CST 2014 armv7l GNU/Linux

Here is my gcc version:

cubie@Cubian:~/QtAV/output$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.6/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Debian 4.6.3-14' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 4.6.3 (Debian 4.6.3-14)

Here is my cpuinfo

cubie@Cubian:~$ cat /proc/cpuinfo
Processor   : ARMv7 Processor rev 4 (v7l)
processor   : 0
BogoMIPS    : 2004.17

processor   : 1
BogoMIPS    : 2011.05

Features    : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xc07
CPU revision    : 4

Hardware    : sun7i
Revision    : 0000
Serial      : 0000000000000000
Chipid      : 16516592-80826652-56484848-088254ea

Also

cubie@Cubian:~$ gcc -dumpmachine
arm-linux-gnueabihf

What could be wrong?

  • Please post the output of cat /proc/cpuinfo for the stepping and family – eyoung100 Jul 23 '14 at 15:26
  • Also please post gcc -dumpmachine – eyoung100 Jul 23 '14 at 18:22
0

Your issue is here:

{standard input}: Assembler messages:
{standard input}:730: Error: selected processor does not support Thumb mode `vuzp.8 d0,d1'
{standard input}:731: Error: selected processor does not support Thumb mode `vuzp.8 d2,d3'

Explanation

From A Few Things iOS Developers ought to Know About the ARM Processor:

Thumb

The Thumb instruction set is a subset of the ARM instruction set, compressed so that instructions take only 16 bits (all ARM instructions are 32 bits in size; Thumb is still a 32-bit architecture, just the instructions take less space). It is not a different architecture, rather is should be seen as a shorthand for the most common ARM instructions and functionality. The advantage, of course, is that it allows an important reduction in code size, saving memory, cache, and code bandwidth; while this is more useful in microcontroller type applications where it allows hardware savings in the memory used, it is still useful on iOS devices, and as such it is enabled by default in Xcode iOS projects. The code size reduction is nice, but never actually reaches 50% as sometimes two Thumb instructions are required for one equivalent ARM instruction. ARM and Thumb instructions cannot be freely intermixed, the processor needs to switch mode when going from one to the other; this can only occur when calling or returning from a function. So a function has to either be Thumb or ARM as a whole; in practice you do not control whether code is compiled for Thumb or ARM at the function granularity but rather at the source file granularity.

From the Debian Wiki on Arm Hard Floats

Triplet

GCC when built to target the GNU arm-linux-gnueabi triplet will support both the hard-float and soft-float calling conventions.

dpkg relies on the triplet to identify the port (gcc -dumpmachine output). Some other projects such as multiarch rely on having distinct triplets across all Debian architectures.

One option would be to use the vendor field in the triplet to have distinct triplets. For instance, the triplet could be arm-hardfloat-linux-gnueabi.

arm-none-linux-gnueabi, just like in CodeSourcery compilers, would be an option but it is confusing to relate to arm-linux-gnueabi versus arm-none-linux-gnueabi; it is clearer to relate to arm-hardfloat-linux-gnueabi and also allows distinguishing between CodeSourcery and the new port.

The final descision was to use a triplet of arm-linux-gnueabihf


In short, the error message posted above indicates that the compiler at it's current setting, does not support part or all of the Thumb Instruction Set. While I can't tell you if another compiler is available, I can tell you that you need to check two things:

  1. Have you verified the compiler supports your model listed here?
  2. Have you setup the QTAV environment, as Described in the Wiki?

As a side note, and not to tout my distros horn, but have you thought of using Gentoo on ARM


Other Things You might need:

CHOST="armv7a-hardfloat-linux-gnueabi" CFLAGS="-O2 -march=armv7-a -mtune=cortex-a(7 or 8) -mfpu=vfpv3-d16 -mfloat-abi=hard -pipe -fomit-frame-pointer" CXXFLAGS="${CFLAGS}"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.