From: Mario E. <ma...@em...> - 2010-09-10 16:33:07
|
On 09/09/2010 05:05 AM, JonY wrote: > On 9/9/2010 04:27, Mario Emmenlauer wrote: >> >> Hi JonY, >> >> On 09/07/2010 12:03 PM, JonY wrote: >>> On 9/7/2010 15:20, Mario Emmenlauer wrote: >>>>> On 9/7/2010 01:34, Mario Emmenlauer wrote: >>>>>> On 09/06/2010 04:52 PM, JonY wrote: >>>>>>> On 9/6/2010 19:50, Mario Emmenlauer wrote: >>>>>>>>> On 9/6/2010 15:52, Mario Emmenlauer wrote: >>>>>>>>>> I'm the original author of the issue [0] that Ismail referenced. >>>>>>>>>> During >>>>>>>>>> the last months since my report, I've repeatedly re-tried >>>>>>>>>> numerous >>>>>>>>>> times, >>>>>>>>>> but failed to build the canadian cross. Actually, back then >>>>>>>>>> mostly >>>>>>>>>> the >>>>>>>>>> same suggestions where given, tried, and failed. As you can see >>>>>>>>>> from >>>>>>>>>> my >>>>>>>>>> post, I've tried the following compile instructions: >>>>>>>>>> - makefile: mingw64 svn >>>>>>>>>> experimental/buildsystem/makebuildroot-test.mk >>>>>>>>>> - makefile: mingw64 svn >>>>>>>>>> experimental/buildsystem/makebuildroot.mk >>>>>>>>>> - compile instructions from mingw64 sourceforge wiki >>>>>>>>>> all with variations of multilib, gcc-versions, ld-versions etc... >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Would it maybe be a good idea that someone who got the canadian >>>>>>>>>> cross >>>>>>>>>> running create a working Makefile? There are the excellent >>>>>>>>>> Makefiles >>>>>>>>>> "makebuildroot-test.mk" and "makebuildroot.mk" (from your >>>>>>>>>> project), >>>>>>>>>> that >>>>>>>>>> both follow the wiki compile instructions (more or less), but >>>>>>>>>> both >>>>>>>>>> fail >>>>>>>>>> in the pre-last step of ld linking. >>>>>>>>>> A working Makefile would be a good documentation, reference, >>>>>>>>>> and a >>>>>>>>>> perfect >>>>>>>>>> standard for regression testing. >>>>>>>>>> >>>>>>>>>> [0] >>>>>>>>>> http://www.mail-archive.com/min...@li.../msg00839.html >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> Did you link lib to lib64? And do you have lib32? Native >>>>>>>>> cross-back >>>>>>>>> works fine for me. >>>>>>>> >>>>>>>> As I wrote above, I tried amongst many other things your >>>>>>>> (unmodified) >>>>>>>> makefile "makebuildroot-test.mk", so yes lib was linked to lib64. >>>>>>>> >>>>>>>> >>>>>>>>> Are you talking about a triple cross? I tried >>>>>>>>> i686-linux->sparc-linux-mingw64 before, it works fine too. >>>>>>>>> >>>>>>>>> You might have better chance with makebuildroot-test.mk for >>>>>>>>> canadian >>>>>>>>> cross, I've used it for the sparc triple cross. >>>>>>>> >>>>>>>> Hmm not sure I follow here. Have you a running canadian cross fro >>>>>>>> mingw-w64 on Linux? As I wrote above, I have tried the suggested >>>>>>>> "makebuildroot-test.mk" for canadian cross, and it fails with the >>>>>>>> described error: "make all-target-libgcc", message is: >>>>>>>> [cut]/build/root/x86_64-w64-mingw32/bin/ld: skipping >>>>>>>> incompatible >>>>>>>> \ >>>>>>>> [cut]/build/root/mingw/lib/libmingw32.a when searching for >>>>>>>> -lmingw32 >>>>>>>> >>>>>>>> Which revision of the makefile have you tested? >>>>>>>> >>>>>>> >>>>>>> Those are actually warnings, ld will continue to walk through the >>>>>>> directories. Can you post the last command and all of its >>>>>>> errors/warnings? >>>>>> >>>>>> You are right, I posted the warnings only, sorry:( The error is that >>>>>> ld fails to find a compatible libmingw32. I don't have the log here >>>>>> right now, but can produce it if you like? Here a bit more >>>>>> information >>>>>> from my original post [0]: >>>>>> >>>>>> There are more identical errors for other libs like kernel32 and >>>>>> msvcrt. >>>>>> >>>>>> objdump lists the correct format: >>>>>> [cut]/build/root/bin/x86_64-w64-mingw32-objdump >>>>>> --archive-headers \ >>>>>> [cut]/build/root/x86_64-w64-mingw32/lib/libmingw32.a >>>>>> [...] >>>>>> lib64_libmingw32_a-tlsmcrt.o: file format pe-x86-64 >>>>>> >>>>>> Also, ld seems to be valid: >>>>>> [cut]/build/root/bin/x86_64-w64-mingw32-ld: supported targets: \ >>>>>> pe-x86-64 pei-x86-64 elf64-x86-64 elf64-l1om elf64-little >>>>>> elf64-big >>>>>> \ >>>>>> elf32-little elf32-big srec symbolsrec verilog tekhex >>>>>> binary ihex >>>>>> >>>>> >>>>> I suspect it was scanning for 32bit objects. 32bit support also >>>>> seems to >>>>> be missing in ld. >>>>> >>>>> Check the makefile if you've enabled multilib options. >>>> >>>> I have tried it about ten times repeatedly with and without multilib, >>>> and every time started from scratch (removing all sources and >>>> binaries). >>>> I have redirected all output to a logfile and checked that the switches >>>> for enabling or disabling multilib where indeed used, so I'm sure there >>>> was no error in that part. >>>> >>>> BTW, I once messed up the multilib switches, then it did not even >>>> compile until the second run, it failed in the first bootstrapping >>>> of gcc. Now it fails in the second run, final step when it should >>>> link gcc. >>>> >>> >>> This is very strange, can you attach the build logs, including the >>> command used to invoke the makefile? >> >> Here is the logfile: >> http://data.marssoft.de/makebuildroot-test.mk-log20100907a.txt.lzma >> >> I used the following changes and/or versions of packages (note esp. the >> gcc-4.5.1 and pthreads from 2010-02-28): >> >> GMP_VERSION ?= 5.0.1 >> MPFR_VERSION ?= 3.0.0 >> MPC_VERSION ?= 0.8.2 >> PPL_VERSION ?= 0.10.2 >> CLOOG_VERSION ?= 0.15.9 >> MINGW_BRANCH ?= trunk >> MINGW_REVISION ?= HEAD >> GCC_BRANCH ?= tags/gcc_4_5_1_release >> PTHREADS_CVS_CO_ARGS ?= -D 2010-02-28 >> MAKE_OPTS ?= -j4 >> >> The logfile is complete, starting with unpacking the updated source >> tree and ending with ld failing to link. Other than the options >> shown above I did not modify anything, except for adding the pthreads >> checkout revision to the CVS command. >> > > Something is not right about the logs. > > GCC was built with --disable-multilib, but the crt is able to build with > -m32 passes without errors. > > CRT also wasn't configured with --enable-lib32, but builds it anyway. It > should only build if configured explicitly. > > And finally ld could not understand its own libraries. I assume you are > using binutils from CVS, since that 32bit target is enabled > automatically even without specifying --enable-targets. > > I honestly do not know what is going on. > > Try doing ENABLE_MULTILIB=Y for the makefile. I tried to compile with ENABLE_MULTILIB=Y but with no success. I started from scratch, and used the command line: make -f makebuildroot-test.mk MAKE_OPTS="-j4" ENABLE_MULTILIB="Y" \ GCC_BRANCH="tags/gcc_4_5_1_release" Here is the logfile: http://data.marssoft.de/makebuildroot-test.mk-log20100910b.txt.lzma Any more things I could try? All the best, Mario |