Darwin/Mac OS X Cross-Compiler for Linux

This is a set of tools for creating a Linux-based distcc node for compiling Mac OS X software. It is comparable to XCode 2.2.1 (GCC 4.0.1 build 5250, and GCC 3.3 build 1819).

Please note, the darwin7 (Mac OS X 10.3) support only works if you're using odcctools on your 10.3 box; these distcc packages will not work with the stock ld that comes with Mac OS X.

Setting Up a Compile Node

Installing on CentOS 3 (or RHEL 3)

Add the contents of this file to your /etc/yum.conf, and then install the "darwin-cross" package.

Installing on CentOS 4 (or RHEL 4)

Download this file, put it in your /etc/yum.repos.d/ directory, and install the "darwin-cross" package.

Installing on Fedora Core 5

Download this file, put it in your /etc/yum.repos.d/ directory, and install the "darwin-cross" package.

Installing on Another RPM-Based Distribution

You can try building the source RPMs. If it works, please e-mail me and I'll add the packages to this site.

Configuring the Server

Edit /etc/sysconfig/distcc-darwin and set any distcc options if you'd like. Then you can run "/sbin/service distccd-darwin start" to start it. If you want distccd to start when you boot, run "/sbin/chkconfig distccd-darwin on".

That's it!

Setting Up Your Client: Fink

If you're running fink unstable, do a "fink selfupdate-rsync" (or "fink selupdate-cvs") and then run "fink install distcc-default". You should end up with the distcc and distcc-default packages installed, version 2.18.3-7 on 10.3, 10.18.3-17 on 10.4-transitional, or 2.18.3-1027 on 10.4 (or higher).

For more details and the most up-to-date instructions on what to do once distcc-default is installed, see "Setting MAKEFLAGS in Fink" in the Fink wiki.

Setting Up Your Client: Other

If you're not running fink unstable, download this script and put it in a directory somewhere, like /usr/local/distcc. Edit the script and change $DISTCCBIN to the path to your distcc binary, and change $DATADIR to the directory you put gcc-translator.pl in. Then, in the /usr/local/distcc directory, create symlinks to gcc-translator.pl for each of the long-form compiler names, like so:

...and so on. This is required for distcc to be able to find the local compiler to run some stuff on the data before sending it to a compile node.

In addition, you'll need to compile and install distcc and ccache. When you're done, create symlinks to ccache for each of the compiler binaries in /usr/bin:

   for arch in powerpc i386; do
     for version in "" "-3.3" "-4.0"; do
       for gcc in cc c++ gcc g++; do
         if [ -f "/usr/bin/${gcc}${version}" ]; then
           ln -s "/usr/bin/${gcc}${version}" .
         fi
       done
     done
   done

Then, set up your environment:

   export DISTCC_TRANS=true
   export CCACHE_PREFIX="/usr/local/distcc/gcc-translator.pl"
   export PATH="/usr/local/distcc:/path/to/ccache/bindir:$PATH"
   export DISTCC_HOSTS="host1:port host2:port localhost"
   export MAKEFLAGS="-j4" (or however many compile hosts you have)

Compile Stuff

If all went well, you should be able to compile stuff, and connections will show up in /var/lib/distccd-darwin.log on the compile nodes.

Questions? Comments? Problems?

It Works For Me(TM) but is pretty much untested for any configuration other than my own. If you run into problems, please e-mail me and I'll see what I can do. :)