On 21/01/16 23:17, Michael Niedermayer wrote: > On Wed, Jan 20, 2016 at 02:33:21PM +0000, Vicente Olivert Riera wrote: >> On 20/01/16 13:15, Michael Niedermayer wrote: >>> On Wed, Jan 20, 2016 at 12:21:37PM +0000, Vicente Olivert Riera wrote: >>>> On 20/01/16 12:05, Michael Niedermayer wrote: >>>>> On Wed, Jan 20, 2016 at 11:37:52AM +0000, Vicente Olivert Riera wrote: >>>>>> Hello Michael, >>>>>> >>>>>> On 19/01/16 22:11, Michael Niedermayer wrote: >>>>>>> On Thu, Jan 14, 2016 at 02:59:03PM +0000, Vicente Olivert Riera wrote: >>>>>>>> Signed-off-by: Vicente Olivert Riera <vincent.ri...@imgtec.com> >>>>>>>> --- >>>>>>>> Changes v5 -> v6: >>>>>>>> - Multiple changes: >>>>>>>> - Use separate if blocks when detecting the MIPS ISA, this way when >>>>>>>> a block >>>>>>>> disables one ISA it will be detected by the next one. Before the >>>>>>>> elif was >>>>>>>> preventing this to be done. >>>>>>>> - Don't use check_cflags and use only check_ldflags instead, which >>>>>>>> will >>>>>>>> check if that flag is valid for compiling and linking. The >>>>>>>> compiler may >>>>>>>> accept some cflags for compiling but not for linking, so if we >>>>>>>> check first >>>>>>>> for the cflags it will succeed, and the cflags will be added to >>>>>>>> the CFLAGS >>>>>>>> variable despite of the check_ldflags failing after that. This >>>>>>>> can cause >>>>>>>> problems because of having multiple incompatible cflags enabled >>>>>>>> at the same >>>>>>>> time. >>>>>>>> - Check if mipsfpu has been disabled, and if so, then use >>>>>>>> -msoft-float. This >>>>>>>> way we override the compiler default behavious which can be >>>>>>>> building for >>>>>>>> hard-float. >>>>>>>> - Explicitly disable the features that fail any check by adding "|| >>>>>>>> disable >>>>>>>> $feature" at the end of the checks chain. >>>>>>>> >>>>>>>> Changes v4 -> v5: >>>>>>>> - Check for msa.h and disable msa if not found. >>>>>>>> >>>>>>>> Changes v3 -> v4: >>>>>>>> - Nothing. >>>>>>>> >>>>>>>> Changes v2 -> v3: >>>>>>>> - Nothing. >>>>>>>> >>>>>>>> Changes v1 -> v2: >>>>>>>> - Add a block of code for mipsdspr2 which was previously placed in the >>>>>>>> first patch of this series causing a syntax error in the configure >>>>>>>> script. >>>>>>>> >>>>>>>> https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2015-November/183444.html >>>>>>> >>>>>>> make distclean ; ../configure --cross-prefix=/usr/mips-linux-gnu/bin/ >>>>>>> --cc='ccache mips-linux-gnu-gcc-4.4' --arch=mips --target-os=linux >>>>>>> --enable-cross-compile --disable-mipsfpu && make -j12 >>>>>>> results in pages of: >>>>>>> >>>>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>>>>>> Warning: libavfilter/filtfmts-test uses hard float, >>>>>>> libswresample/libswresample.a(dither.o) uses soft float >>>>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>>>>>> Warning: libavfilter/filtfmts-test uses hard float, >>>>>>> libswresample/libswresample.a(resample.o) uses soft float >>>>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>>>>>> Warning: libavfilter/filtfmts-test uses hard float, >>>>>>> libswresample/libswresample.a(resample_dsp.o) uses soft float >>>>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>>>>>> Warning: libavfilter/filtfmts-test uses hard float, >>>>>>> libavutil/libavutil.a(adler32.o) uses soft float >>>>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>>>>>> Warning: libavfilter/filtfmts-test uses hard float, >>>>>>> libavutil/libavutil.a(aes.o) uses soft float >>>>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>>>>>> Warning: libavfilter/filtfmts-test uses hard float, >>>>>>> libavutil/libavutil.a(aes_ctr.o) uses soft float >>>>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>>>>>> Warning: libavfilter/filtfmts-test uses hard float, >>>>>>> libavutil/libavutil.a(audio_fifo.o) uses soft float >>>>>>> >>>>>>> >>>>>>> [...] >>>>>>> >>>>>> >>>>>> I can't reproduce your issue. Look: >>>>>> >>>>>> $ make distclean ; ./configure --cross-prefix=mips-linux-gnu- >>>>>> --arch=mips --target-os=linux --enable-cross-compile --disable-mipsfpu >>>>>> >>>>>> And then: >>>>>> >>>>>> $ make -j1 V=1 2>&1 | tee build.log >>>>>> >>>>>> And then: >>>>>> >>>>>> $ grep "uses soft float" build.log >>>>>> $ grep "filtfmts-test" build.log >>>>>> >>>>>> It gives me nothing. >>>>>> >>>>>> Also I try to find for that filtfmts-test file which your logs say that >>>>>> is using hard-float, and I cannot find it: >>>>>> >>>>> >>>>>> $ find . -name "filtfmts-test*" >>>>>> $ >>>>> >>>>> see libavfilter/filtfmts.c >>>> >>>> But do you have a generated filtfmts-test binary or a filtfmts.o file? >>>> Because when my build is finished I don't any anything of that. >>> >>> make libavfilter/filtfmts-test >>> CC libavfilter/filtfmts-test.o >>> libavfilter/filtfmts.c:141:9: warning: ignoring return value of function >>> declared with warn_unused_result attribute [-Wunused-result] >>> ff_default_query_formats(filter_ctx); >>> ^~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ >>> 1 warning generated. >>> LD libavfilter/filtfmts-test >>> >>> the source and object files differ in their names >>> >> >> I see. Ok, look at this: >> >> $ make libavfilter/filtfmts-test >> CC libavfilter/filtfmts-test.o >> libavfilter/filtfmts.c: In function 'main': >> libavfilter/filtfmts.c:141:9: warning: ignoring return value of >> 'ff_default_query_formats', declared with attribute warn_unused_result >> [-Wunused-result] >> ff_default_query_formats(filter_ctx); >> ^ >> LD libavfilter/filtfmts-test >> >> $ mips-linux-gnu-objdump -x libavfilter/filtfmts-test | grep "FP ABI" >> FP ABI: Soft float >> >> It shows to me that it has been for soft-float. >> >>>> >>>>> our compilers differ >>>>> the one i have here is a binary from emdebian >>>>> are you droping support for that ? >>>>> if so that should be clearly stated in the commit message, and the >>>>> compiler cleanly detected and a clear warning given to the user why >>>>> his/her compiler isnt supported and what is supported >>>> >>>> Well, my intention isn't dropping support for anything, although this is >>>> what the emdebian website says: >>>> >>>> "Status of Emdebian distributions >>>> >>>> As of July 2014, updates to the Emdebian distributions ceased. There >>>> will be no further updates and no further stable releases." >>> >>> i know, the problem is not me, i can update, IIRC you guys posted a >>> binary already >>> but others might use similarly build or old compilers >>> so keeping this one here gives some wider coverage ... and its less >>> work >> >> I also want to keep it. >> >>>> >>>> Anyway, how can I obtain the same compiler as you have in order to try >>>> reproducing the bug? >>> >>> i dont know, if they arent on emdian anymore >>> i dont seem to have the deb files in var/cache/apt/archive anymore >>> >>> Package: gcc-4.4-mips-linux-gnu >>> Status: install ok installed >>> Priority: extra >>> Section: devel >>> Installed-Size: 3088 >>> Maintainer: Debian GCC Maintainers <debian-...@lists.debian.org> >>> Architecture: amd64 >>> Source: gcc-4.4 >>> Version: 4.4.5-8 >>> Provides: c-compiler-mips-linux-gnu >>> Depends: gcc-4.4-mips-linux-gnu-base (= 4.4.5-8), cpp-4.4-mips-linux-gnu (= >>> 4.4.5-8), binutils-mips-linux-gnu (>= 2.20.1-15~), libgcc1-mips-cross (>= >>> 1:4.4.5-8), libgomp1-mips-cross (>= 4.4.5-8), libc6 (>= 2.11) >>> Recommends: libc6-dev-mips-cross (>= 2.5) >>> Suggests: gcc-4.4-multilib-mips-linux-gnu, libmudflap0-4.4-dev-mips-cross >>> (>= 4.4.5-8), gcc-4.4-doc (>= 4.4.4-17), gcc-4.4-locales (>= 4.4.4-17), >>> libgcc1-dbg-mips-cross, libgomp1-dbg-mips-cross, >>> libmudflap0-dbg-mips-cross, libcloog-ppl0 (>= 0.15.9-2~), libppl-c2, libppl7 >>> Description: The GNU C compiler >>> This is the GNU C compiler, a fairly portable optimizing compiler for C. >>> . >>> This package contains C cross-compiler for mips architecture. >>> Homepage: http://gcc.gnu.org/ >>> >> >> Ok then. >> >>>> >>>>> make distclean ; ../configure --cross-prefix=/usr/mips-linux-gnu/bin/ >>>>> --cc='mips-linux-gnu-gcc-4.4' --arch=mips --target-os=linux >>>>> --enable-cross-compile --disable-mipsfpu && make -j12 >& build >>>>> >>>>> grep 'uses soft float' build | wc >>>>> 2327 24879 389225 >>>>> >>>>> echo 'int main(void){ return 0; }' | mips-linux-gnu-gcc-4.4 -x c - -o >>>>> out.o >>>>> echo 'int main(void){ return 0; }' | mips-linux-gnu-gcc-4.4 -x c - -o >>>>> out.o -msoft-float >>>>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>>>> Warning: out.o uses hard float, /tmp/ccFlutMG.o uses soft float >>>>> >>>>> >>>> >>>> But I don't understand how your compiler built something for hard-float >>>> when the -msoft-float option should be used instead. This is what I have >>>> (note that I passed V=1 to the make command): >>>> >>>> $ grep '\-mhard-float' build.log | wc -l >>>> 0 >>>> $ grep '\-msoft-float' build.log | wc -l >>>> 1411 >>>> $ grep "mips-linux-gnu-gcc" build.log | wc -l >>>> 1411 >>>> >>>> So the -mhard-float option wasn't used at all, and the -msoft-float one >>>> was used every time the compiler was called. >>>> >>>> I'm curious, can you show me your output for those same commands, please? >>> >>> before the patch: >>> grep '\-mhard-float' build.log-V1-disable-mipsfpu | wc -l >>> 0 >>> >>> grep '\-msoft-float' build.log-V1-disable-mipsfpu | wc -l >>> 0 >> >> So, before the patch when you pass the --disable-mipsfpu option, what >> configure does is not adding the -mhard-float option to the CFLAGS. But >> also it doesn't add -msoft-float. So no float option is passed to the >> compiler at all. >> >> Given that you don't pass any of those two options to the compiler, the >> default one will be used, which I think it will be -mhard-float. >> >> Look at this simple test: >> >> $ cat test.c >> int main(){return 0;} >> $ # USING -mhard-float >> $ mips-linux-gnu-gcc -mhard-float test.c >> $ mips-linux-gnu-objdump -x a.out | grep "FP ABI" >> FP ABI: Hard float (double precision) >> $ # USING -msoft-float >> $ mips-linux-gnu-gcc -msoft-float test.c >> $ mips-linux-gnu-objdump -x a.out | grep "FP ABI" >> FP ABI: Soft float >> $ # USING COMPILER'S DEFAULT >> $ mips-linux-gnu-gcc test.c >> $ mips-linux-gnu-objdump -x a.out | grep "FP ABI" >> FP ABI: Hard float (double precision) >> >> So, as you can see, before that patch, when we were passing >> --disable-mipsfpu to the configure script, we weren't building ffmpeg >> for soft-float. We were actually building it for the compiler's default >> floatness, which could be either soft-float or (more likely) hard-float. >> >> That's why you didn't see those warnings, because everything was being >> built for hard-float. >> >>> after the patch: >>> grep '\-mhard-float' build.log-V1-disable-mipsfpu-with-patch | wc -l >>> 0 >>> grep '\-msoft-float' build.log-V1-disable-mipsfpu-with-patch | wc -l >>> 1428 >>> grep "mips-linux-gnu-gcc" build.log-V1-disable-mipsfpu-with-patch | wc -l >>> 1428 >> >> This is what doesn't make sense to me. Every time your compiler is >> called it has the -msoft-float option with it, so everything it has >> built was built for soft-float. >> >>> also forget about filtfmts, its not specifici to that >>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>> Warning: ffprobe_g uses hard float, libavutil/libavutil.a(samplefmt.o) uses >>> soft float >>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>> Warning: ffprobe_g uses hard float, libavutil/libavutil.a(sha.o) uses soft >>> float >>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>> Warning: ffprobe_g uses hard float, libavutil/libavutil.a(sha512.o) uses >>> soft float >>> /usr/lib/gcc/mips-linux-gnu/4.4.5/../../../../mips-linux-gnu/bin/ld: >>> Warning: ffprobe_g uses hard float, libavutil/libavutil.a(stereo3d.o) uses >>> soft float >> >> Can you grep the output of "mips-linux-gnu-objdump -x ffprobe_g" and >> search for "FP ABI" in order to see if it actually uses hard float? > > before and after the patch there is no match, greping for ABI > 1 .note.ABI-tag 00000020 004001a4 004001a4 000001a4 2**2 > 004001a4 l d .note.ABI-tag 00000000 .note.ABI-tag > > mips-linux-gnu-objdump -x ffprobe_g | grep 'ABI' > 1 .note.ABI-tag 00000020 004001a4 004001a4 000001a4 2**2 > 004001a4 l d .note.ABI-tag 00000000 .note.ABI-tag > > also both mips-linux-gnu-objdump and the normal hosts objdump give the > same result > > [...] >
Hello Michael, I don't know what else to do. The think is that those are warning messages, so it seems your build doesn't fail. Before, when you tried to build ffmpeg for MIPS soft-float (passing the --disable-mipsfpu option) you were actually building it for hard-float, but you didn't noticed. Now when you use the --disable-mipsfpu option, your ffmpeg (using that compiler) is built for soft-float, although some hard-float bits are included (I don't know why). With all the compilers I have tried the whole ffmpeg is build for soft-float. There are no warnings about that. So, what should we do here in order to get that patch applied? Should I remove the part where -msoft-float is added to the flags in order to have the useless behavior that we had before? I mean, building it always for hard-float even if you use the --disable-mipsfpu option. Or can we live with this small issue which happens only (as far as we know) with your compiler? Regards, Vincent. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel