MacRuby 0.5 をビルド

さて、Snow Leopard にアップデートしたので MacRuby は 0.4 は動かず 0.5 に更新しないといけないから一旦 0.4 は削除しました、というのが前回のお話

RHCBK を買って MacRuby 熱が高まってきているので早く MacRuby をインストールせねばなりません。RHCBK のサポートページ では nightly build のパッケージでインストールする方法が紹介されています。わたしは MacRuby のソースにも興味があるのでソースからビルドする方法を試してみました。ちょっと追加の手順が必要だったので改めてメモを残しておきます。

([2009/10/03 追記]RHCBK のサポートサイトにも MacRuby をソースからインストールする方法について追記されてます。「takao7.net - PowerPC 向けのコンパイルオプションの記載があるので PowerPC のひとはこちらも参照。PowerPC でも MacRuby 動くんですね。てっきり Intel Mac のみだと思ってました[/追記])

以下のようなメニューとなっております

  1. MacRuby のソースを取得
  2. LLVM をインストール
  3. MacRuby をビルド&インストール
  4. NSSound のサンプルで動作確認
  5. AOT を試す

MacRuby のソースを取得

わたしは公式の git リポジトリから clone してきました。svn trunk のミラーになってる、はず。

$ git clone git://git.macruby.org/macruby/MacRuby.git MacRuby-0.5

実際は既に clone していたので pull で最新版に更新しただけです。

$ cd MacRuby-0.5
$ git pull

LLVM をインストール

以前はここでいきなり rake としてビルドできてたのですが、それだと llvm がないよと言われます。MacRuby のソースツリーにある README.rdoc に書いてありますが、 MacRuby のビルドするには LLVM のインストールが必要です。revision 82747 を使うのがおすすめとあるのでそれに従います。

わたしは最初はローカルに入れたい派なのでインストール先を ~/opt に変えてます。後述のとおり PATH が通ってて llvm-config や llc を呼ぶことができればビルドには問題なさそうです。
[2009-10-24 追記]この記事を書いた時は大丈夫だったのですが、最近のソースツリーだと llvm のインストール先を --prefix で変更すると MacRuby のビルド時に warning がでて失敗してしまいます。allow_build_warnings=1 という環境変数をつけて rake すれば通りますが、それで結果に問題がないかは不明です。[/追記]

$ svn co -r 82747 https://llvm.org/svn/llvm-project/llvm/trunk llvm-trunk
$ cd llvm-trunk
$ ./configure --prefix ~/opt
$ UNIVERSAL=1 UNIVERSAL_ARCH="i386 x86_64" ENABLE_OPTIMIZED=1 make -j2
$ UNIVERSAL=1 UNIVERSAL_ARCH="i386 x86_64" ENABLE_OPTIMIZED=1 make install

最後の make install はインストール先がホームディレクトリの下だからこれでよいのですが、システムディレクトリ(/usr/local)にインストールする場合は sudo で root 権限で実行しないといけません。

$ sudo env UNIVERSAL=1 UNIVERSAL_ARCH="i386 x86_64" ENABLE_OPTIMIZED=1 make install

llvm-config が呼びだせるようになっていれば OK です。

MacRuby をビルド&インストール

あとはほぼ以前と同じです。

$ rake
$ rake spec:ci
$ sudo rake install

rake spec:ci では RubySpec のチェックをしてるようです。全て success になりました。error や failure があったら何か問題があるかも。

また MacRuby では Framework や Xcode のテンプレート等もインストールされるようでしたから素直に root でインストールします。いざとなれば .installed.list に入れたファイルが記録されているから安心ですしね。

これで macruby や macirb が使えるようになりました。

$ which macruby
/usr/local/bin/macruby
$ macruby -v
MacRuby version 0.5 (ruby 1.9.0) [universal-darwin10.0, x86_64]
$ macirb --simple-prompt
>> RUBY_VERSION
=> "1.9.0"
>> MACRUBY_VERSION
=> 0.5
>> RUBY_ENGINE
=> "macruby"

NSSound のサンプルで動作確認

MacRuby+HotCocoa でオーディオファイルの再生 - PB memo で作成した NSSound で音声ファイルを再生するスクリプトを実行してみるとすんなり音が鳴りました。すばらしい。

AOT を試す

MacRuby 0.5 の新しい機能のひとつに native binary への compile という魅力的なものがあるのでさっそく試してみました。

とりあえずごく簡単なサンプルでやってみます。

puts "Hello, World!"

%w{ a b c }.each do |str|
  puts str.upcase
end

コンパイルには macrubyc を使います。

$ macrubyc -o test test.rb
$ file test.o test
test.o: Mach-O 64-bit object x86_64
test:   Mach-O 64-bit executable x86_64
$ ./test
Hello, World!
A
B
C

すごい、本当に動いてます。test.o のように .rb ファイルと同じディレクトリにオブジェクトファイルが残ってしまうのでご注意。

すばらしい!! と意気込んで NSSound のサンプルもコンパイルしてみたのですが…。

$ macrubyc -o nssound_sample nssound_sample.rb
$ ./nssound_sample test.mp3
$ # <- すぐに終了してしまう

コンパイルはできるものの、実行するとエラー終了(終了ステータス 1)してしまいました。何か未サポートなものを含んでいたからでしょうか。どうやら require "hotcocoa" のところで止まってしまうようです。

とりあえず今日のところはここまで。

[2009-10-03 追記] AOT で NSSound のサンプルも動くようになりました。 http://d.hatena.ne.jp/nagachika/20091003/macruby_05_aot_2 [/追記]