[Buildroot] [PATCH v2] gst1-av: fix cpu detection in libav configure
Arnout Vandecappelle
arnout at mind.be
Tue Mar 1 22:42:13 UTC 2016
On 02/29/16 12:27, Peter Korsgaard wrote:
>>>>>> "Arnout" == Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be> writes:
>
> > The configure script tries to guess a lot based on the cpu for which it
> > is configured. Without --cpu, it will use a 'generic' cpu and disable
> > any other options we pass to it.
>
> > In addition, we have to pass the --sysroot option like we do in the
> > ffmpeg package. This makes sure that regardless of the architecture
> > options that ffmpeg passes along, an external multilib toolchain
> > doesn't try to use a subdirectory of the sysroot. The libav build
> > system will pass a --isysroot argument which overrides the multilib
> > subdir.
>
> > Finally, we have to properly enable/disable the architecture-specific
> > optimisations. Autodetection of these things is completely borked in
> > the configure script.
>
> > Fixes:
> > http://autobuild.buildroot.net/results/ce83513135e7765c171353815947d715eb897d3d
>
> > Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be>
> > Cc: Vicente Olivert Riera <Vincent.Riera at imgtec.com>
> > ---
> > v2: improve commit message
>
> > The --isysroot is something we should probably do in the toolchain
> > wrapper.
>
> What is the advantage of --isysroot over --sysroot? I don't seem to find
> a lot about in the gcc documentation, but it seems like:
>
> - isysroot only applied to headers, not headers+libraries like --sysroot
> - Some versions of MacOSX/llvm only support --isysroot, not --sysroot
>
> Neither of these seems of much interest to us?
I actually didn't do proper research, i.e. I didn't consult the man page. I
just tried:
$ .../ext-toolchain/bin/mips-img-linux-gnu-gcc --sysroot
.../usr/mips64el-buildroot-linux-gnu/sysroot -mabi=64 -EL -std=gnu99 -I./ -D...
-Os -march=mips64r6 -std=c99 -fomit-frame-pointer -fPIC -mips64 -mips64r6
-msched-weight -mload-store-pairs -funroll-loops -mhard-float ... -c
libavformat/4xm.c
In file included from ./libavutil/intreadwrite.h:22:0,
from libavformat/4xm.c:30:
/gentoo/home2/arnout/br-out/libav/host/opt/ext-toolchain/lib/gcc/mips-img-linux-gnu/4.9.2/include/stdint.h:9:26:
fatal error: stdint.h: No such file or directory
# include_next <stdint.h>
^
compilation terminated.
$ .../ext-toolchain/bin/mips-img-linux-gnu-gcc --sysroot
.../usr/mips64el-buildroot-linux-gnu/sysroot --isysroot
.../usr/mips64el-buildroot-linux-gnu/sysroot -mabi=64 -EL -std=gnu99 -I./ -D...
-Os -march=mips64r6 -std=c99 -fomit-frame-pointer -fPIC -mips64 -mips64r6
-msched-weight -mload-store-pairs -funroll-loops -mhard-float ... -c
libavformat/4xm.c
$
I was also surprised that this made a difference. Previously I had done a
-print-sysroot with all of these options and it added mipsel-r1-hard to the
sysroot, so somehow I assumed that isysroot would override that.
So I ran with -v. With just --sysroot:
#include "..." search starts here:
#include <...> search starts here:
.
.../opt/ext-toolchain/bin/../lib/gcc/mips-img-linux-gnu/4.9.2/include
.../opt/ext-toolchain/bin/../lib/gcc/mips-img-linux-gnu/4.9.2/include-fixed/mipsel-r6-hard/lib64
.../opt/ext-toolchain/bin/../lib/gcc/mips-img-linux-gnu/4.9.2/../../../../mips-img-linux-gnu/include
End of search list.
And with the --sysroot -isysroot:
#include "..." search starts here:
#include <...> search starts here:
.
.../opt/ext-toolchain/bin/../lib/gcc/mips-img-linux-gnu/4.9.2/include
.../opt/ext-toolchain/bin/../lib/gcc/mips-img-linux-gnu/4.9.2/include-fixed/mipsel-r6-hard/lib64
.../opt/ext-toolchain/bin/../lib/gcc/mips-img-linux-gnu/4.9.2/../../../../mips-img-linux-gnu/include
.../usr/mips64el-buildroot-linux-gnu/sysroot/usr/include
End of search list.
So clearly it does make a difference...
So I tried with my host-gcc as well, and both gcc-4.9 and gcc-5 work as
expected, i.e. they have the --sysroot in the search path.
So it looks like this is actually a "feature" of the Codescape IMG toolchain.
Coming back to the patch: the idea of passing --sysroot to configure comes from
the ffmpeg package itself. It has been like that in the ffmpeg package from the
first commit.
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
More information about the buildroot
mailing list