Mac OSX 10.4 で x86_64 な Ruby 1.9

なんか 64 bit バイナリが走るのは Mac OSX 10.5 から…って思い込んでたんですが、 10.4 でも大丈夫だったと気付いたので、 Ruby をビルドしてみました。基本的には、

make CFLAGS='-fPIC -O -g -m64 -arch x86_64' LDSHARED='cc -m64 -arch x86_64 -dynamic -bundle -undefined suppress -flat_namespace'
sudo make CFLAGS='-fPIC -O -g -m64 -arch x86_64' LDSHARED='cc -m64 -arch x86_64 -dynamic -bundle -undefined suppress -flat_namespace' install-nodoc

って感じで(たぶんいらないオプションあるだろうけど)ビルド通ったのですけど、 x86_64 用 の libobjc が入ってないってことでビルドコケました。

Undefined symbols:
  _objc_msgSend, referenced from:
      _objcdummyfunction in main.o
ld64-62.1 failed: symbol(s) not found

こんな感じで。 libobjc はリンクする必要ないように思えるのですが、たぶん Cocoa の初期化とかの兼ね合いかなんかでリンクしたいのですかね。なんにせよ、解決としては、 main.c の RUBY_GLOBAL_SETUP をコメントアウトしてやれば終わりでした。めでたし。

拡張ライブラリは

make CXX='g++ -m64' LDSHARED='cc -dynamic -bundle -undefined suppress -flat_namespace -m64 -lstdc++' clean all

って感じでビルドしたら通りました。で、 Yajit がまた SSE でコケたので、やっぱ YARV の直訳でマシンのスタックを push pop するんじゃなくて、ちゃんと中間表現に落としてからレジスタほげほげとかしないとだなぁと思いました。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h