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 http://llvm.org/svn/llvm-project/llvm/trunk llvm-svn -r 42498 pushd llvm-svn ./configure --enable-optimized make ENABLE_OPTIMIZED=1 sudo make install LLVMOBJDIR=`pwd` popd
Check out a copy of the iphone-dev SVN repository.
svn checkout http://iphone-dev.googlecode.com/svn/trunk/ iphone-dev pushd iphone-dev
Make a directory to hold the toolchain.
sudo mkdir /usr/local/arm-apple-darwin
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.
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
pushd include ./configure --with-macosx-sdk=/Developer/SDKs/MacOSX10.4u.sdk sudo bash install-headers.sh 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
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 sed 's/^FLAGS_FOR_TARGET=$/FLAGS_FOR_TARGET=${FLAGS_FOR_TARGET-}/g' llvm-gcc-4.0-iphone/configure.old > llvm-gcc-4.0-iphone/configure sudo ln -s /usr/local/arm-apple-darwin/lib/crt1.o \/usr/local/arm-apple-darwin/lib/crt1.10.5.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" sh ../../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 \ --with-ld=/usr/local/bin/arm-apple-darwin-ld make LLVM_VERSION_INFO=2.0-svn-iphone-dev-0.3-svn sudo make install popd popd
You're done. Have fun!
- drudge