iphone/ipod touch toolchain

ipod touch がハックされ、いろいろといじれるようになってきたので、クロスコンパイラ環境を整えてみる。OSX があればバイナリイメージがあるらしいのですが、サーバの Linux しかないので iphone-dev*1 を参考に地道に make。が、なかなか手順通りにいかなかったのでメモ。

手順

svnからそのままとってくると LLVMiphone-dev の整合性がとれないので注意。

  • LLVM をとってくる
$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm-svn -r 42286
$ pushd llvm-svn
$ ./configure --enable-optimized
$ make ENABLE_OPTIMIZED=1
$ sudo make install
$ export LLVMOBJDIR=`pwd`
$ popd
  • iphone-dev をとってくる
$ svn checkout http://iphone-dev.googlecode.com/svn/trunk/ iphone-dev -r 198
$ pushd iphone-dev
$ sudo mkdir /usr/local/arm-apple-darwin
  • odcctools を作成
$ mkdir -p build/odcctools
$ pushd build/odcctools
$ ../../odcctools/configure --target=arm-apple-darwin --disable-ld64
$ make
$ sudo make install
$ popd
  • iphone のファイルイメージを指定
$ export HEAVENLY=/usr/local/share/iphone-filesystem

ipod touch から / 以下のファイルを全て抜き出して保存しておいて、その場所を指定。

  • OSX の include ファイルを指定
$ pushd include
$ ./configure --with-macosx-sdk=/usr/local/share/MacOSX10.4-Universal-SDK/Developer/SDKs/MacOSX10.4u.sdk
$ sudo bash install-headers.sh
$ popd

こちらも別途 OSX から SDK を抜き出し、その場所を configure のところで指定。

  • csu を作成
$ mkdir -p build/csu
$ pushd build/csu
$ ../../csu/configure --target=arm-apple-darwin
$ sudo make install
$ popd
$ mkdir -p build/llvm-gcc-4.0-iphone
$ pushd build/llvm-gcc-4.0-iphone
$ ../../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

とりあえず環境ができたところで終了。ちゃんと動くかしら・・・。
追記:ちゃんと HelloWorld 動いた。これでいろんなもの作れるなぁ。楽しみ楽しみ。