Clangでruby-1.8.7をコンパイルしてみる
サポート外なのは承知の上なのです…
いつまでもApple版 gcc-4.2 (NOT LLVM)に頼ってるのも不安なので、ここ数日いろいろ試してみた。とりあえずまとめ。
Xcode | clang | 結果 |
---|---|---|
4.3.3 | 3.1 | -O0 -std=c89ならOK |
4.2.1 | 3.0 | (同上) |
4.1 | 2.1 | 動作しない |
make test-allがgcc-4.2と同等にパスすることをOKと定義して、Xcode 4.2以降のclangでCFLAGS="-O0 -std=c89"とした場合はOKになる。
最適化した場合
最適化した場合に起きる問題をいくつかリストアップ。
make途中で[BUG]。以下のエラーで死ぬ。
/usr/bin/clang -pipe -O2 -arch x86_64 -fno-common -pipe -fno-common -DRUBY_EXPORT -arch x86_64 -L. -L/opt/local/lib -arch x86_64 main.o dmydln.o libruby-static.a -lpthread -ldl -lobjc -o miniruby ./lib/fileutils.rb:1428: [BUG] unexpected local variable ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-darwin11] make: *** [.rbconfig.time] Abort trap: 6
make testのbignumが通らない。
not ok bignum 5 -- ./sample/test.rb:1279 not ok bignum 7 -- ./sample/test.rb:1281 not ok bignum 8 -- ./sample/test.rb:1282 not ok bignum 9 -- ./sample/test.rb:1284 not ok bignum 12 -- ./sample/test.rb:1292 test failed
ソケットを開くと(?)SEGV。drbとかhttpサーバをあげようとすると落ちる。