From The Apple Wiki

This article is about a toolchain for iPhone OS 1.x.

Want a toolchain for developing for a newer version of iOS? See On-device_toolchains.

Mac OS X Tiger

Build iPhone Toolchain on Mac OS X Tiger

This is a brief description about how to install iPhone toolchain on Mac OS X Tiger. Needed Packages

  1. llvm source
  2. iphone-dev source
  3. iphone-filesystem

Put all the packages in your $HOME folder. How To Build

Make sure you’re running Mac OS X 10.4, and have installed Xcode development environment. 1. Extract packages

$ cd ~
$ tar xjvf llvm-svn.tar.bz2
$ tar xjvf iphone-dev.tar.bz2
$ cd /usr/local
$ sudo tar xjvf ~/iphone-filesystem.tar.bz2
$ sudo mkdir -p /usr/local/arm-apple-darwin
$ LLVMOBJDIR=~/llvm-svn
$ HEAVENLY=/usr/local/iphone-filesystem

2. Build LLVM

$ cd ~/llvm-svn
$ ./configure --enable-optimized
$ sudo make install

3. Build odcctools

$ mkdir -p ~/iphone-dev/build/odcctools
$ cd ~/iphone-dev/build/odcctools
$ ../../odcctools/configure --target=arm-apple-darwin --disable-ld64
$ make
$ sudo make install

4. Install headers

$ cd ~/iphone-dev/include
$ ./configure --with-macosx-sdk=/Developer/SDKs/MacOSX10.4u.sdk
$ sudo bash

5. Install csu (binary)

$ mkdir -p ~/iphone-dev/build/csu
$ cd ~/iphone-dev/build/csu
$ ../../csu/configure --host=arm-apple-darwin
$ sudo make install

6. Build LLVM-GCC

$ mkdir -p ~/iphone-dev/build/llvm-gcc-4.0-iphone
$ cd ~/iphone-dev/build/llvm-gcc-4.0-iphone
$ ../../llvm-gcc-4.0-iphone/configure --enable-llvm=`llvm-config --objc-root` \
  --enable-languages=c,c++,objc,obj-c++ --target=arm-apple-darwin --enable-sjlj-exceptions \
  --with-heavenly=$HEAVENLY --with-as=/usr/local/bin/arm-apple-darwin-as \
$ make LLVM_VERSION_INFO=2.0-svn-iphone-dev-0.3-svn
$ sudo make install


Mac OS X Leopard

Build iPhone Toolchain on Mac OS X Leopard

HOWTO build the toolchain for 1.1.1 on Leopard by drudge with pure ownage by lupinglade

Ensure that you have a copy of bison and flex installed on your system. All major systems should have these tools installed or available in package management systems.

$ bison --version
GNU Bison version 1.28
$ flex --version
flex version 2.5.4

Check out a copy of LLVM SVN, and build a release build (as opposed to a debug one). Currently, due to Issue 70, we are limited to revision 42498.

$ svn co [Archived 2008-11-20 at the Wayback Machine] llvm-svn -r 42498
$ pushd llvm-svn
$ ./configure --enable-optimized
$ sudo make install
$ popd

Check out a copy of the iphone-dev SVN repository.

$ svn checkout [Archived 2008-08-20 at the Wayback Machine] iphone-dev
$ pushd iphone-dev

Make a directory to hold the toolchain.

$ sudo mkdir /usr/local/arm-apple-darwin

Build odcctools.

$ mkdir -p build/odcctools
$ pushd build/odcctools
$ ../../odcctools/configure --target=arm-apple-darwin --disable-ld64
$ export INCPRIVEXT="-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
$ make
$ sudo make install
$ popd

Get a copy of the iPhone root filesystem. This is usually obtained by decrypting and extracting the iPhone restore software using these tools, but there are many other methods to obtain this, including simply using scp to download all the files from the iPhone over Wi-Fi. I would use the method describled here: [Archived 2008-01-01 at the Wayback Machine] to get the dmg.

To unpack the root filesystem, mount the dmg, open terminal and run

$ sudo mkdir /usr/local/share/iphone-filesystem
$ sudo cp -Rp /Volumes/Snowbird3A110a.N45Bundle/* /usr/local/share/iphone-filesystem/

Now, set the environment variable $HEAVENLY to its path:

$ HEAVENLY=/usr/local/share/iphone-filesystem

Patch the system headers

$ pushd include
$ ./configure --with-macosx-sdk=/Developer/SDKs/MacOSX10.4u.sdk
$ sudo bash
$ popd

Install csu, which includes crt1.o, dylib1.o, and bundle1.o. Don’t rebuild them from source, as this requires a working cross-GCC, which you don’t have yet (and the build-from-source process for csu is broken right now anyway). Binaries are provided for this reason.

$ mkdir -p build/csu
$ pushd build/csu
$ ../../csu/configure --host=arm-apple-darwin
$ sudo make install
$ popd

Configure and make LLVM-GCC. Make sure that $LLVMOBJDIR and $HEAVENLY are set per the instructions above.

$ mv llvm-gcc-4.0-iphone/configure llvm-gcc-4.0-iphone/configure.old
 llvm-gcc-4.0-iphone/configure.old > llvm-gcc-4.0-iphone/configure
$ sudo ln -s /usr/local/arm-apple-darwin/lib/crt1.o \
$ mkdir -p build/llvm-gcc-4.0-iphone
$ pushd build/llvm-gcc-4.0-iphone
$ export FLAGS_FOR_TARGET="-mmacosx-version-min=10.1"
 ../../llvm-gcc-4.0-iphone/configure --enable-llvm=`llvm-config --obj-root` \
 --enable-languages=c,c++,objc,obj-c++ --target=arm-apple-darwin --enable-sjlj-exceptions \
 --with-heavenly=$HEAVENLY --with-as=/usr/local/bin/arm-apple-darwin-as \
$ make LLVM_VERSION_INFO=2.0-svn-iphone-dev-0.3-svn
$ sudo make install
$ popd
$ popd

You’re done. Have fun!

Windows XP

Build iPhone Toolchain on Windows XP

This guide and binary installation server is provided by David Supuran . If you have any questions, comments, or suggestions please visit #iphone or email me at Requirements


To obtain this directory it is recommended that you download Xcode 2.5 Developer Tools (Disk Image) (902.9 MB as of 30 Oct 2007).

Once you have downloaded the disk image, you will need additional software to open and extract it such as PowerISO or HFSExplorer, then extract the following file:


Note: HFSExplorer is an open source Java-based application running on Windows XP. It opens the Xcode 2.5 disk image as well as the iPhoneOS 2.0 disk image. HFSExplorer can be downloaded from [Archived 2008-09-08 at the Wayback Machine].

Note: It has been reported that UltraISO and MacDrive do not work for extracting this package. This archive provides the necessary header files which will later be installed for the compiler to use.

Note: Due to Apple’s strict redistribution license the files required from this archive could not be included in the installer, so you are required to agree to the terms and licenses under your ADC account and download the full disk image.

iPhone/iTouch root filesystem

The easiest way to obtain the root filesystem is to have a wireless network and OpenSSH installed. If you have this please skip this part as the post-installation will walk you through obtaining the files automatically. You may alternatively decrypt a firmware ipsw manually and place the extracted filesystem in /usr/local/arm-apple-darwin/filesystem after Cygwin is installed. Installation

Download and run the Cygwin Setup. It is recommended you use the default settings and click Next until you get to the following window: Cygwin Setup Step 6 Type in the User URL: [Archived 2008-07-02 at the Wayback Machine], then click Add.

Once you see the URL added and highlighted in the Available Download Sites list click Next. Cygwin Setup Step 7 All the software is selected for you; it is recommended you use the default settings and click Next, then follow the on-screen instructions to finish the setup. Cygwin Setup Step 8 Click the Start button and select All Programs -> Cygwin -> Cygwin Bash Shell and you will see the following window: Cygwin Setup Step 9 Place the Archive.pax.gz file in your Cygwin home directory that you obtained earlier from the Xcode 2.5 Developer Tools (Disk Image). Example home directory: C:\cygwin\home\Administrator

When asked ‘Do you wish to connect to your device and download the required files?‘ Press y for Yes.

Type in the IP address of your iPhone / iTouch device on the next prompt that says ‘Please enter the remote IP address of your device:‘.

  • Note: If you do not know the IP address of your device go to Settings -> Wi-Fi and Click the blue arrow to the right of your wireless network you are currently connected to which is marked with a check on the left.

If SSH asks you ‘Are you sure you want to continue connecting (yes/no)?‘ Type yes. Cygwin Setup Step 10 NOTE: SSH will now create an archive of your root file system once you type in your password which takes approximately 5 minutes, so please be patient.

If you are asked ‘Do you wish to install the XCode header files now?‘ Press y for Yes. If you have been following the instructions so far, you will see the following:

Found Archive.pax.gz in current directory.
Extracting /home/David/Archive.pax.gz…

If everything goes well you will see:

Your toolchain installation is now complete!