Cross-compiling using distcc
From gc-linux
Contents |
Introduction
This page describes a novel technique that eliminates some of the complexity of normal cross-compiling. A classic problem with cross-compiling software for Unix-like systems is that many of the build systems (particularly the GNU auto tools) run small test programs as part of the build system to check for specific features or bugs. Traditional cross-compilation environments do not allow these programs to run and the builds therefore fail. Using distcc allows the build system to be run on the GameCube while delegating the actual compilation to a more powerful machine. This hybrid combines the convenience of local builds without the delays (sometimes many hours for a complex C file) associated with compling on the GameCube.
Pros
- Faster compiling than on strictly a Gamecube.
Example of compiling SDL-1.2.8 without distcc
time make real 22m7.788s user 2m51.999s sys 0m51.555s
Compiling SDL-1.2.8 with distcc
time make -j2 CC="distcc powerpc-unknown-linux-gnu-gcc" real 5m7.033s user 0m59.627s sys 0m49.935s
- Typically less problems then with attempting to strictly cross compile since configure scripts run natively.
Cons
- Need a Linux that is already setup to run on a GameCube.
- Doesn't eliminate need to build cross compiler. [Well, it's not really a con, but should be noted.]
TODO Cleanup these two sections below
Host Side
Host side is quite easy to do to be honest.
- Install distcc.
- Run: distccd --daemon --allow 192.168.0.102
where 192.168.0.102 is the IP of the GameCube
That's it really, distccd has a few other options, but nothing worth mentioning. The nice thing is that you don't need root privileges to run distccd. Remember that the cross compiler must be in your PATH when you start up distccd.
Also remeber, The compiler should be named on both GameCube and the host. If your GameCube's compiler is powerpc-linux-uclibc-gcc, the host cross compiler should also be powerpc-linux-uclibc-gcc.
Client Side
Here is what you do for the client:
- Install distcc for the GameCube.
- Run: export DISTCC_HOSTS='hostname localhost'
You don't have to have localhost if you don't want to. If you're going to use this often, you should put it in your login script.
- Now test by running "distcc powerpc-linux-uclibc-gcc -c test.c" on this file (test.c): int main() {}
It shouldn't give any errors.
- To compile projects with makefiles you typically can do: make -j2 CC="distcc powerpc-linux-uclibc-gcc"
What I do is:
echo 'make -j2 CC="distcc powerpc-linux-uclibc-gcc" $@' > /usr/bin/makedistcc chmod +x /usr/bin/makedistcc
That way I can just call makedistcc. You could also use an alias put into your login script.

