2014/06/19

プログラミング言語RustがiOSでのクロスコンパイルに対応したので試してみた

最近のiOS界隈のSwiftネタとはちょっと外れますが、Mozilla製のプログラミング言語Rustも最近iOSでのクロスコンパイルに対応したとのことなので試してみました。

ちなみに、RustはMozilla製ウェブブラウザエンジンServoでも使われています。

クロスコンパイラの作成

Command Line Toolsを導入して、次の手順を実行するだけです。

$ git clone https://github.com/rust-lang/rust.git
$ cd rust 
$ mkdir build_ios ; cd build_ios
$ ../configure --target=arm-apple-ios,i386-apple-ios
$ make VERBOSE=1

手元の環境では約1時間後に./x86_64-apple-darwin/stage2/bin/rustcにバイナリが作成されていました。

$ ./x86_64-apple-darwin/stage2/bin/rustc -v   
rustc 0.11.0-pre (fe931c0 2014-06-18 10:46:41 +0000)
host: x86_64-apple-darwin

ちなみに、コンパイラターゲットをシミュレータと実機に指定するにはそれぞれ次のようにするようです。

$ rustc --target=i386-apple-ios foo.rs
$ rustc --target=arm-apple-ios foo.rs

サンプルプロジェクトのコンパイル

先ほど作成したクロスコンパイラを使って、サンプルプロジェクトのObjCrustをコンパイルしてみます。

$ git clone https://github.com/vhbit/ObjCrust.git
$ cd ObjCrust/Rust
$ make CROSS_IOS_RUST_ROOT=~/src/rust/build_ios/x86_64-apple-darwin/stage2
$ cd ../iOS
$ open ObjCrust.xcodeproj  # Xcodeでビルド

これでシミュレータを起動すると次のようなサンプルアプリが無事起動しました。

Makefileを見たところ、rustcでオブジェクトを生成してからlipo (1)でライブラリを作成し、XcodeのプロジェクトのLink Binary with Librariesでそれを指定しているだけのようです。

現状は、UIKitをRustで使えるわけではなかったり、#[no_mangle]指定が必要だったりします。

環境やライブラリが整備されて使いやすくなっていくとよいですね。

関連リンク

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。