Why is building a cross compiler "out-of-the-box" always broken?

Steve Kenton skenton@ou.edu
Mon Aug 20 02:09:00 GMT 2007


Thanks, I git cloned buildall and it sure looks simple (now that you 
have made it work) :-!
Although, that combination of options was not exactly obvious at first 
glance.  Time to re-read
all the config --help stuff.

I'll try it on my build system at work tomorrow and see what bites me 
next. I expect that I am
having old nightmares from when I was trying to do this under Solaris 
and made it harder than
I needed to on a Linux host.  Apparently, I'm not the only one who got 
lead astray though.

Thank again - Steve

Segher Boessenkool wrote:
>>> 4. Use the minimal cross-compiler produced in step 3 to configure 
>>> glibc and do "make install-headers" to get glibc headers. At this 
>>> point you should be able to delete the minimal cross-compiler, it's 
>>> job has been done.
>>>
>>> 5. Make distclean and then configure, make, and install a normal gcc 
>>> cross-compiler for the target using the glibc headers produced in 
>>> step 4.
>>>
>>> 6. Make distclean and then configure, make, and install the complete 
>>> glibc header and libraries etc. for the target.
>
> Sometimes you need to repeat 4,5,6 (but using the full toolchain
> produced in the previous run, not the minimal one obviously).
>
> It's a good sanity check anyway ;-)
>
>>> 1. Seems to be a good reliable source of sanitized headers for 
>>> recent kernels. I know of no problems with the current release.
>
> There still are problems so you're advised to use the separate kernel
> headers package instead.
>
>>> 2. Seems to build and work out-of-the-box using the headers from 
>>> step 1.  I know of no problems with current release.
>
> Binutils doesn't need any kernel headers AFAIK.
>
>>> 3. Figuring out the correct combination of --with-newlib, 
>>> --with-sysroot, and --with-headers (or --without, or =no etc.) to 
>>> get inhibit_libc set and then figuring out which of the myriad of 
>>> --with-this-that-and-the-other options can or must be disabled to 
>>> get a functional minimal compiler is a real pain in the neck.
>
> configure --verbose --help
>
> I posted the full set you currently need.
>
>>>   Further more, the make file may try (and fail) to make additional 
>>> things like crt0 in EXTRA_PARTS=
>
> Don't use --with-newlib if you don't want to build newlib.
>
>>> Right now it's a question of "wtf caused that to die?"
>
> Yeah, it's a fun voyage, isn't it :-)
>
>>> Also, should the inhibit_libc hack also disable things like the 
>>> unwind support that requires kernel headers?  That not scrictly 
>>> libc, but --without-headers sort of assume neither are present.
>
> Yeah, that's a good point.  I use --enable-sjlj-exceptions to
> avoid the need for those headers, but that's not enough for
> building ia64-linux (it _is_ enough for all other Linux targets).
>
>>> Some people advocate combining steps 3,4,5 by either cribbing a set 
>>> of headers from someone elses sysroot,
>
> That's the "normal" procedure for building a cross-toolchain, yes.
>
>>> or by fooling glibc configure in to producing them without having a 
>>> minimal cross compiler.
>
> You should only need this if you're porting to a new target.  And
> then this all is the least of your troubles ;-)
>
>>> However, it's probably not viable for someone trying to build 20 or 
>>> so tools chains so they can check for kernel build failure tree wide 
>>> etc.
>
> That's exactly what I'm doing.  Feel free to take a look at my scripts:
>
>     git://git.infradead.org/~segher/buildall.git
>
> or browse it at:
>
>     http://git.infradead.org/?p=users/segher/buildall.git
>
>>> And besides, it would sure be nice if gcc would build a 
>>> cross-compiler out-of-the-box if there is no problem with some other 
>>> part of the tool chain.  That does not seem to be the case for all 
>>> targets at this point.
>
> Bugs happen :-)
>
>>> So, that's the situation as I see it. How should things work in an 
>>> ideal world and where do we go from here? Or, are other people happy 
>>> enough with the current ecosystem and think nothing needs to change?
>
> It would be nice if things were a bit easier; maybe a single configure
> flag "--from-scratch" or something like that.  Someone needs to create
> that though.
>
>
> Segher



More information about the Gcc mailing list