[FFmpeg-trac] #2756(build system:new): Compilation fails on ARMv7 with GCC 4.8.1

FFmpeg trac at avcodec.org
Fri Jul 5 13:57:54 CEST 2013


#2756: Compilation fails on ARMv7 with GCC 4.8.1
--------------------------------------+----------------------------------
             Reporter:  cooper        |                     Type:  defect
               Status:  new           |                 Priority:  normal
            Component:  build system  |                  Version:  1.2.1
             Keywords:                |               Blocked By:
             Blocking:                |  Reproduced by developer:  0
Analyzed by developer:  0             |
--------------------------------------+----------------------------------
 Summary of the bug:

 While compiling FFMpeg 1.2.1 (gentoo ebuild) using GCC 4.8.1 on my
 Odroid-U2 I get a compilation error.

 How to reproduce:
 I've set CFLAGS to "-O3 -pipe -march=armv7-a -mcpu=cortex-a9 -mfpu=neon
 -mfloat-abi=hard" and enabled NEON. I get the following error during
 compilation:


 {{{
 armv7a-hardfloat-linux-gnueabi-gcc -I. -I/var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/ -D_ISOC99_SOURCE
 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112
 -D_XOPEN_SOURCE=600 -DPIC -DHAVE_AV_CONFIG_H -O3 -pipe -march=armv7-a
 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard  -O3 -pipe -march=armv7-a
 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -march=armv7-a -std=c99
 -fomit-frame-pointer -marm -fPIC -pthread -I/usr/include/harfbuzz
 -I/usr/include/fribidi -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
 -I/usr/include/freetype2 -D_REENTRANT -D_GNU_SOURCE=1 -D_REENTRANT
 -I/usr/include/SDL -Wdeclaration-after-statement -Wall -Wno-parentheses
 -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-
 arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits
 -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes
 -O3 -pipe -march=armv7-a -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -fno-
 math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=implicit-
 function-declaration -Werror=missing-prototypes -Werror=return-type
 -Werror=vla  -MMD -MF libavcodec/dct.d -MT libavcodec/dct.o -c -o
 libavcodec/dct.o /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/dct.c
 /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/dcaenc.c: In function
 'encode_init':
 /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/dcaenc.c:227:36: warning:
 iteration 256u invokes undefined behavior [-Waggressive-loop-
 optimizations]
          lfe_fir_64i[i] = lfe_fir_64[i] * (1 << 25); //float -> int32_t
                                     ^
 /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/dcaenc.c:226:5: note:
 containing loop
      for (i = 0; i < 512; i++)
      ^
 armv7a-hardfloat-linux-gnueabi-gcc -I. -I/var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/ -D_ISOC99_SOURCE
 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112
 -D_XOPEN_SOURCE=600 -DPIC -DHAVE_AV_CONFIG_H -O3 -pipe -march=armv7-a
 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard  -O3 -pipe -march=armv7-a
 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -march=armv7-a -std=c99
 -fomit-frame-pointer -marm -fPIC -pthread -I/usr/include/harfbuzz
 -I/usr/include/fribidi -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
 -I/usr/include/freetype2 -D_REENTRANT -D_GNU_SOURCE=1 -D_REENTRANT
 -I/usr/include/SDL -Wdeclaration-after-statement -Wall -Wno-parentheses
 -Wno-switch -Wno-format-zero-length -Wdisabled-optimization -Wpointer-
 arith -Wredundant-decls -Wno-pointer-sign -Wwrite-strings -Wtype-limits
 -Wundef -Wmissing-prototypes -Wno-pointer-to-int-cast -Wstrict-prototypes
 -O3 -pipe -march=armv7-a -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -fno-
 math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=implicit-
 function-declaration -Werror=missing-prototypes -Werror=return-type
 -Werror=vla  -MMD -MF libavcodec/dct32_fixed.d -MT
 libavcodec/dct32_fixed.o -c -o libavcodec/dct32_fixed.o /var/tmp/portage
 /media-video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/dct32_fixed.c
 In file included from /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/dcadec.c:51:0:
 /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/dcadec.c: In function
 'dca_xbr_parse_frame':
 /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/arm/dca.h:37:5: error:
 can't find a register in class 'CORE_REGS' while reloading 'asm'
      __asm__ ("smmul   %8,  %14, %18           \n"
      ^
 /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/arm/dca.h:37:5: error:
 'asm' operand has impossible constraints
 /var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1/libavcodec/dcadec.c:1891: confused by
 earlier errors, bailing out
 make: *** [libavcodec/dcadec.o] Error 1
 make: *** Waiting for unfinished jobs....
  * ERROR: media-video/ffmpeg-1.2.1 failed (compile phase):
  *   emake failed
  *
  * If you need support, post the output of `emerge --info '=media-
 video/ffmpeg-1.2.1'`,
  * the complete build log and the output of `emerge -pqv '=media-
 video/ffmpeg-1.2.1'`.
  * The complete build log is located at '/var/tmp/portage/media-
 video/ffmpeg-1.2.1/temp/build.log'.
  * The ebuild environment file is located at '/var/tmp/portage/media-
 video/ffmpeg-1.2.1/temp/environment'.
  * Working directory: '/var/tmp/portage/media-
 video/ffmpeg-1.2.1/work/ffmpeg-1.2.1_build'
  * S: '/var/tmp/portage/media-video/ffmpeg-1.2.1/work/ffmpeg-1.2.1'
 }}}

 I've tried compiling without NEON support, making sure to specify
 -mfpu=vfpv3 in the CFLAGS, but that changed nothing (I did verify that
 FFMpeg configured itself with NEON support disabled).
 I also tried, because of the '-Waggressive-loop-optimizations' warning, to
 compile with '-fno-aggressive-loop-optimizations' but that didn't change
 anything either.

 What's interesting, though, is that when I enabled THUMB support (-mthumb)
 compilation completes without any issues and I get a perfectly functioning
 FFMpeg.

 FFMpeg compiles just fine, for all these CFLAGS variations, on GCC 4.7.3
 as well as GCC 4.6.4.

-- 
Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/2756>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list