最近のiOS界隈のSwiftネタとはちょっと外れますが、Mozilla製のプログラミング言語Rustも最近iOSでのクロスコンパイルに対応したとのことなので試してみました。
ちなみに、RustはMozilla製ウェブブラウザエンジンServoでも使われています。
クロスコンパイラの作成
Command Line Toolsを導入して、次の手順を実行するだけです。
1 2 3 4 5 | $ 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
にバイナリが作成されていました。
1 2 3 | $ . /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 |
ちなみに、コンパイラターゲットをシミュレータと実機に指定するにはそれぞれ次のようにするようです。
1 2 | $ rustc --target=i386-apple-ios foo.rs $ rustc --target=arm-apple-ios foo.rs |
サンプルプロジェクトのコンパイル
先ほど作成したクロスコンパイラを使って、サンプルプロジェクトのObjCrustをコンパイルしてみます。
1 2 3 4 5 | $ 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]
指定が必要だったりします。
環境やライブラリが整備されて使いやすくなっていくとよいですね。
関連リンク
- The Rust Programming Language
- [[rust-dev] iOS cross compilation](https://mail.mozilla.org/pipermail/rust-dev/2014-June/010323.html)
- Doc building for ios · rust-lang/rust Wiki · GitHub
- vhbit/ObjCrust · GitHub
- MozillaのウェブブラウザエンジンServoをコンパイルしてみた
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。