[FFmpeg-trac] #7790(build system:reopened): Endianness detection breaks when LTO is enabled through means other than the ffmpeg --enable-lto option

FFmpeg trac at avcodec.org
Thu Mar 14 14:33:53 EET 2019


#7790: Endianness detection breaks when LTO is enabled through means other than
the ffmpeg --enable-lto option
-------------------------------------+-------------------------------------
             Reporter:  RedDwarf82   |                    Owner:
                 Type:  enhancement  |                   Status:  reopened
             Priority:  normal       |                Component:  build
                                     |  system
              Version:  unspecified  |               Resolution:
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Changes (by RedDwarf82):

 * status:  closed => reopened
 * type:  defect => enhancement
 * resolution:  needs_more_info =>


Comment:

 Reopening since I really don't think this is a "needs_more_info" case.
 heleppkes has clearly described the issue. Also because doesn't even
 require the compiler to use LTO by default, so this may be a more common
 issue than I suggested before. Probably it's not more reported only
 because the more common desktop architecture happens to be little endian.

 But here you have the extra information requested:

 {{{
 $ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
 Cloning into 'ffmpeg'...
 remote: Counting objects: 563150, done.
 remote: Compressing objects: 100% (118600/118600), done.
 remote: Total 563150 (delta 450571), reused 554797 (delta 443403)
 Receiving objects: 100% (563150/563150), 133.44 MiB | 6.03 MiB/s, done.
 Resolving deltas: 100% (450571/450571), done.
 $ cd ffmpeg/
 $ git rev-parse HEAD
 0321370601833f4ae47e8e11c44570ea4bd382a4
 $ mkdir build_normal build_lto
 $ cd build_normal/
 $ ../configure --enable-cross-compile --cross-prefix=mips-linux- --target-
 os=linux --arch=mips --cpu=74kc --disable-all
 install prefix            /usr/local
 source path               /opt/ffmpeg
 C compiler                mips-linux-gcc
 C library                 uclibc
 host C compiler           gcc
 host C library            glibc
 ARCH                      mips (74kc)
 big-endian                yes
 runtime cpu detection     yes
 MIPS FPU enabled          no
 MIPS DSP R1 enabled       yes
 MIPS DSP R2 enabled       yes
 MIPS MSA enabled          no
 LOONGSON MMI enabled      no
 debug symbols             yes
 strip symbols             yes
 optimize for size         no
 optimizations             yes
 static                    yes
 shared                    no
 postprocessing support    no
 network support           no
 threading support         pthreads
 safe bitstream reader     yes
 texi2html enabled         no
 perl enabled              yes
 pod2man enabled           yes
 makeinfo enabled          no
 makeinfo supports HTML    no

 External libraries:
 alsa                      bzlib                     zlib

 External libraries providing hardware acceleration:

 Libraries:
 avutil

 Programs:

 Enabled decoders:

 Enabled encoders:

 Enabled hwaccels:

 Enabled parsers:

 Enabled demuxers:

 Enabled muxers:

 Enabled protocols:

 Enabled filters:

 Enabled bsfs:

 Enabled indevs:

 Enabled outdevs:

 License: LGPL version 2.1 or later

 WARNING: mips-linux-pkg-config not found, library detection may fail.
 $ cd ../build_lto
 $ CFLAGS='-flto' ../configure --enable-cross-compile --cross-prefix=mips-
 linux- --target-os=linux --arch=mips --cpu=74kc --disable-all --enable-lto
 install prefix            /usr/local
 source path               /opt/ffmpeg
 C compiler                mips-linux-gcc
 C library                 uclibc
 host C compiler           gcc
 host C library            glibc
 ARCH                      mips (74kc)
 big-endian                no
 runtime cpu detection     yes
 MIPS FPU enabled          no
 MIPS DSP R1 enabled       yes
 MIPS DSP R2 enabled       yes
 MIPS MSA enabled          no
 LOONGSON MMI enabled      yes
 debug symbols             yes
 strip symbols             yes
 optimize for size         no
 optimizations             yes
 static                    yes
 shared                    no
 postprocessing support    no
 network support           no
 threading support         pthreads
 safe bitstream reader     yes
 texi2html enabled         no
 perl enabled              yes
 pod2man enabled           yes
 makeinfo enabled          no
 makeinfo supports HTML    no

 External libraries:
 alsa                      bzlib                     zlib

 External libraries providing hardware acceleration:

 Libraries:
 avutil

 Programs:

 Enabled decoders:

 Enabled encoders:

 Enabled hwaccels:

 Enabled parsers:

 Enabled demuxers:

 Enabled muxers:

 Enabled protocols:

 Enabled filters:

 Enabled bsfs:

 Enabled indevs:

 Enabled outdevs:

 License: LGPL version 2.1 or later

 WARNING: mips-linux-pkg-config not found, library detection may fail.
 $ uname -a
 Linux 7d04a811e585 4.20.13-200.fc29.x86_64 #1 SMP Wed Feb 27 19:42:55 UTC
 2019 x86_64 x86_64 x86_64 GNU/Linux
 $ mips-linux-gcc -v
 Using built-in specs.
 COLLECT_GCC=/opt/buildroot_wdr3600/output/host/bin/mips-linux-gcc.br_real
 COLLECT_LTO_WRAPPER=/opt/buildroot_wdr3600/output/host/libexec/gcc/mips-
 buildroot-linux-uclibc/7.4.0/lto-wrapper
 Target: mips-buildroot-linux-uclibc
 Configured with: ./configure --prefix=/opt/buildroot_wdr3600/output/host
 --sysconfdir=/opt/buildroot_wdr3600/output/host/etc --enable-static
 --disable-libstdcxx-dual-abi --disable-symvers --target=mips-buildroot-
 linux-uclibc --with-sysroot=/opt/buildroot_wdr3600/output/host/mips-
 buildroot-linux-uclibc/sysroot --enable-__cxa_atexit --with-gnu-ld
 --disable-libssp --disable-multilib --disable-decimal-float --with-
 gmp=/opt/buildroot_wdr3600/output/host --with-
 mpc=/opt/buildroot_wdr3600/output/host --with-
 mpfr=/opt/buildroot_wdr3600/output/host --with-pkgversion='Buildroot
 2019.02-00010-g07502cdd25-dirty' --with-bugurl=http://bugs.buildroot.net/
 --disable-libquadmath --disable-libsanitizer --enable-tls --enable-plugins
 --enable-lto --disable-libmudflap --enable-threads --without-isl
 --without-cloog --with-float=soft --with-arch=mips32r2 --with-abi=32
 --with-nan=legacy --enable-languages=c,c++ --with-build-time-
 tools=/opt/buildroot_wdr3600/output/host/mips-buildroot-linux-uclibc/bin
 --enable-shared --disable-libgomp
 Thread model: posix
 gcc version 7.4.0 (Buildroot 2019.02-00010-g07502cdd25-dirty)
 $
 }}}

 I really don't think it's OK for ffmpeg to just say "it's the user's fault
 for using CFLAGS='-flto'" ("enable LTO behind FFmpegs back"). At the very
 least the configure scripts needs to notice the situation and report
 failure.

 Notice the "LOONGSON MMI" detection is also broken when using -flto.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/7790#comment:7>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list