Cross Compiling Gcc for PowerPC

 

Download the latest sources from ftp://ftp.gnu.org .

I tested the build with binutils-2.14, gcc-3.3.2, glibc-2.3.2, glibc-linuxthreads-2.3.2 and (optionally gdb-6.0).


1.) Binutils
As most of the sites suggest, start by building the toolchain in separate directories from where you downloaded and unzipped the sources. So, I do build-binutils, build-gcc and so on... Also, you can specify the PATH you want the cross-compiled binaries to go with --prefix option. The most convenient way is to do configure --help to know the oft needed arguments for configuration. The next step is to configure the binutils for powerpc as target.


mkdir build-binutils & cd build-binutils
../binutils-2.14/configure --target=powerpc-linux --prefix=/opt/buckeye/powerpc-linux
make all install


2.) Minimal Gcc
After binutils is done, add the cross-compiled binaries to your PATH by


export PATH=$PATH:/opt/buckeye/powerpc-linux
mkdir build-gcc & cd build-gcc
../gcc-3.3.2/configure --target=powerpc-linux --prefix=/opt/buckeye/powerpc-linux --disable-shared --disable-threads \

--enable-languages=c --with-newlib
make all-gcc install-gcc


You can very well cross-compile Linux kernel with this minimal gcc, though may not be able to compile other applications.

3.) Glibc
After the minimal gcc is done; the next major step is to cross-compile glibc. I have had troubles compiling glibc in the past what with some of the patches not being applied to the glibc tree. But after some help from googling, I was able to put the right combination of arguments in place. Be sure to download glibc-linuxthreads and unzip it in the glibc source directory. I found out that glibc needs linuxthreads to compile correctly. It might not be this way but I could not compile it otherwise. So, here is what to do


mkdir build-glibc & cd build-glibc
tar xv{zj}f ../glibc-linuxthreads-2.3.2.tar.{gb}z{2} ../glibc-2.3.2/
../glibc-2.3.2/configure --prefix=/opt/buckeye/powerpc-linux --target=powerpc-linux --host=powerpc-linux  \

--enable-add-ons=linuxthreads --with-headers=${Path_to_your_powerpc_linux_kernel_tree}/linuxppc_2_4_devel/include  \

--with-binutils=/opt/buckeye/powerpc-linux/powerpc-linux/bin
make all install


glibc would give a compile error for glibc-2.3.2/stdio-common/sscanf.c ... you have to change the parameter declaration for sscaf function in sscanf.c to


int
sscanf (const char *s, const char *format, ...)


It should be a breeze after that.
It was worth noting that --target option does not work with glibc, you have to use --host={target-platform}-linux for glibc to work. At my machine, glibc libraries were installed in /opt/buckeye/powerpc-linux/lib, but gcc would expect them to be at /opt/buckeye/powerpc-linux/powerpc-linux/lib ... so you might either make a symlink to the correct path or change the glibc configure option --libdir to point to the right place.


4.) Complete Gcc
After glibc is compiled, you can reconfigure gcc as


../gcc-3.3.2/configure --target=powerpc-linux --prefix=/opt/buckeye/powerpc-linux --enable-shared --enable-threads \

--enable-languages=c
make all install


Now you should have a complete working version of gcc.

5.) Gdb and other graphical debuggers like insight


mkdir build-gdb & cd build-gdb
../gdb-6.0/configure --target=powerpc-linux --enable-sim-powerpc --prefix=/opt/buckeye/gdb (any dir of your choice)
make all install


--enable-sim-powerpc builds gdb with inbuilt powerpc instruction set simulator.


Sharad Gupta

Last modified: Thu Nov 27 20:52:41 EST 2003