Building PowerPC cross compilers on X86 Linux

Gregor Richards Richards at codu.org
Sat Feb 17 12:10:33 PST 2007


Matt Brandt wrote:
> I've been checking out D for quite a while now and I would really like to use it for some embedded stuff I do. We compile for powerpc-linux on x86-linux boxen and so I've been trying to generate a cross compiler. I did the obvious hack of using crosstool and repacking the gcc tarball with the D patches applied and then trying to run that. It gets a long way (all the way to trying to compile the Phobos libs) but then fails with:
> 
> checking If /home/mbrandt/Desktop/crosstool-0.43/build/powerpc-603-linux-gnu/gcc-4.1.1-glibc-2.3.6/build-gcc/./gcc/gdc -B/home/mbrandt/Desktop/crosstool-0.43/build/powerpc-603-linux-gnu/gcc-4.1.1-glibc-2.3.6/build-gcc/./gcc/ -B/lifesize/tools/cross/gcc-4.1.1-glibc-2.3.6/powerpc-603-linux-gnu/powerpc-603-linux-gnu/bin/ -B/lifesize/tools/cross/gcc-4.1.1-glibc-2.3.6/powerpc-603-linux-gnu/powerpc-603-linux-gnu/lib/ -isystem /lifesize/tools/cross/gcc-4.1.1-glibc-2.3.6/powerpc-603-linux-gnu/powerpc-603-linux-gnu/include -isystem /lifesize/tools/cross/gcc-4.1.1-glibc-2.3.6/powerpc-603-linux-gnu/powerpc-603-linux-gnu/sys-include can compile D sources... /home/mbrandt/Desktop/crosstool-0.43/build/powerpc-603-linux-gnu/gcc-4.1.1-glibc-2.3.6/build-gcc/./gcc/cc1d: error while loading shared libraries: /home/mbrandt/Desktop/crosstool-0.43/build/powerpc-603-linux-gnu/gcc-4.1.1-glibc-2.3.6/build-gcc/./gcc/libgcc_s.so.1: ELF file data encoding not little-endian
> no
> configure: error: can't compile D sources!
> make[1]: *** [configure-target-libphobos] Error 1
> make[1]: Leaving directory `/home/mbrandt/Desktop/crosstool-0.43/build/powerpc-603-linux-gnu/gcc-4.1.1-glibc-2.3.6/build-gcc'
> make: *** [all] Error 2
> 
> The cross compiled library ought to be big endian (and seems to be) but cc1d must be trying to load the target libraries instead of the native libraries when it runs the compiler passes. A cross compiler for c, c++, and objc builds fine with the same set of scripts, so this must be something specific to the D makefiles that is getting confused...
> 
> I just thought I would ask before I wade into this if the issue has come up before, or if anyone that has a working powerpc compiler running on x86 linux.
> 
> Thanks,
> 
> Matt
> 

I haven't made a powerpc cross-compiler, but I have successfully made 
GDC cross compilers.

I've never found it very productive to hack crosstool into doing what I 
want, so here's what I'd do:

1) Get a standard (C-capable) crosscompiler made with crosstool

2) Add it to your PATH (duh)

3) [standard GDC setup] tar jxf gcc-core-<version>.tar.bz2 ; tar jxf 
gcc-<anythingelse>-<version>.tar.bz2 ; cd gcc-<version>/gcc ; tar jxf 
../../gdc-src-0.22.tar.bz2 ; cd .. ; ./gcc/d/setup-gcc.sh

Now is the complicated part. Building a GDC cross compiler requires that 
you generate a few files /on the target/. So:

4) cd gcc/d/phobos/config

5) Compile with your target C compiler: gen_config1.c->gen_config1, 
gen_math.c->gen_math, gen_unix.c->gen_unix

6) ON THE TARGET, run gen_config1, gen_math and gen_unix to generate the 
files frag-gen, frag-math and frag-unix respectively.

7) Put those files into some directory on your host.

8) cd gcc-<version> ; mkdir build ; cd build

9) ../configure --prefix=<whatever> --build=`../config.guess` 
--target=powerpc-603-linux-gnu 
--enable-phobos-config-dir=<directory-with-frag-files>

10) make all install


That ought to give you what you want.

Good luck!

  - Gregor Richards

Disclaimer: This is off the top of my head. I've made several 
cross-compilers, but all of this is of course subject to memory degradation.


More information about the D.gnu mailing list