Message ID | 1456701407-18377-1-git-send-email-arnout@mind.be |
---|---|
State | Superseded |
Headers | show |
>>>>> "Arnout" == Arnout Vandecappelle (Essensium/Mind) <arnout@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@mind.be> > Cc: Vicente Olivert Riera <Vincent.Riera@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?
>>>>> "Arnout" == Arnout Vandecappelle (Essensium/Mind) <arnout@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@mind.be> > Cc: Vicente Olivert Riera <Vincent.Riera@imgtec.com> > --- > v2: improve commit message > The --isysroot is something we should probably do in the toolchain > wrapper. > --- > package/gstreamer1/gst1-libav/gst1-libav.mk | 23 ++++++++++++++++++++++- > 1 file changed, 22 insertions(+), 1 deletion(-) > diff --git a/package/gstreamer1/gst1-libav/gst1-libav.mk b/package/gstreamer1/gst1-libav/gst1-libav.mk > index 3a987a7..97ff40f 100644 > --- a/package/gstreamer1/gst1-libav/gst1-libav.mk > +++ b/package/gstreamer1/gst1-libav/gst1-libav.mk > @@ -10,7 +10,10 @@ GST1_LIBAV_SITE = http://gstreamer.freedesktop.org/src/gst-libav > GST1_LIBAV_DEPENDENCIES = host-pkgconf gstreamer1 gst1-plugins-base > -GST1_LIBAV_CONF_EXTRA_OPTS = --cross-prefix=$(TARGET_CROSS) --target-os=linux > +GST1_LIBAV_CONF_EXTRA_OPTS = \ > + --cross-prefix=$(TARGET_CROSS) \ > + --target-os=linux \ > + --sysroot=$(STAGING_DIR) What does this do exactly? As far as I can see this only sets the sysinclude_default variable (which apparently isn't used anywhere?) and passes --sysroot / --isysroot to the compiler, which should be a noop for us as we already do that in the wrapper.
On 02/29/16 12:27, Peter Korsgaard wrote: >>>>>> "Arnout" == Arnout Vandecappelle (Essensium/Mind) <arnout@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@mind.be> > > Cc: Vicente Olivert Riera <Vincent.Riera@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
diff --git a/package/gstreamer1/gst1-libav/gst1-libav.mk b/package/gstreamer1/gst1-libav/gst1-libav.mk index 3a987a7..97ff40f 100644 --- a/package/gstreamer1/gst1-libav/gst1-libav.mk +++ b/package/gstreamer1/gst1-libav/gst1-libav.mk @@ -10,7 +10,10 @@ GST1_LIBAV_SITE = http://gstreamer.freedesktop.org/src/gst-libav GST1_LIBAV_DEPENDENCIES = host-pkgconf gstreamer1 gst1-plugins-base -GST1_LIBAV_CONF_EXTRA_OPTS = --cross-prefix=$(TARGET_CROSS) --target-os=linux +GST1_LIBAV_CONF_EXTRA_OPTS = \ + --cross-prefix=$(TARGET_CROSS) \ + --target-os=linux \ + --sysroot=$(STAGING_DIR) ifeq ($(BR2_PACKAGE_ZLIB),y) GST1_LIBAV_CONF_EXTRA_OPTS += --enable-zlib @@ -26,6 +29,12 @@ else GST1_LIBAV_CONF_EXTRA_OPTS += --disable-bzlib endif +ifneq ($(call qstrip,$(BR2_GCC_TARGET_CPU)),) +GST1_LIBAV_CONF_EXTRA_OPTS += --cpu=$(BR2_GCC_TARGET_CPU) +else ifneq ($(call qstrip,$(BR2_GCC_TARGET_ARCH)),) +GST1_LIBAV_CONF_EXTRA_OPTS += --cpu=$(BR2_GCC_TARGET_ARCH) +endif + ifeq ($(BR2_X86_CPU_HAS_MMX),y) GST1_LIBAV_CONF_EXTRA_OPTS += --enable-yasm GST1_LIBAV_DEPENDENCIES += host-yasm @@ -74,6 +83,18 @@ else GST1_LIBAV_CONF_EXTRA_OPTS += --disable-altivec endif +# Since we don't have architecture options for the DSP ASE, always disable +GST1_LIBAV_CONF_EXTRA_OPTS += --disable-mipsdspr1 --disable-mipsdspr2 + +# We don't have mips32r5 +GST1_LIBAV_CONF_EXTRA_OPTS += --disable-mips32r5 + +ifeq ($(BR2_mips_64r6),y) +GST1_LIBAV_CONF_EXTRA_OPTS += --enable-mips64r6 +else +GST1_LIBAV_CONF_EXTRA_OPTS += --disable-mips64r6 +endif + GST1_LIBAV_CONF_OPTS = \ --with-libav-extra-configure="$(GST1_LIBAV_CONF_EXTRA_OPTS)"
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@mind.be> Cc: Vicente Olivert Riera <Vincent.Riera@imgtec.com> --- v2: improve commit message The --isysroot is something we should probably do in the toolchain wrapper. --- package/gstreamer1/gst1-libav/gst1-libav.mk | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)