From: "桑村慎哉" Date: 2003-09-25T13:51:56+09:00 Subject: [ruby-dev:21405] Re: Building 1.8.0 on Solaris with Sun CC 桑村です。 で、 Masahiro TANAKAさんは書きました: masa> Sun CC でコンパイルが通らないという [ruby-core:1547] ですけど、以下の masa> ようにすると問題なくコンパイルできましたので、一応お知らせしておきます。 asmにvolatileがついているのが気に入らないみたいなので、 私は単にvolatileを取ってコンパイルしました。 パッチは最後につけます。 32ビットはこれでいいのですが、64ビットは asm volatile ("flushw" : :); のコンパイルがエラーになり、よく分からなかったので手付かずです。 パッチのままだと32ビットのときと同じ命令になります。 # なお、Sun ccでは64ビットの場合 __sparcv9 が定義されます。 さらに、Sun ccはもう一つ問題があります。拡張ライブラリが一部作成されません。 例えばreadlineの場合、readline.hをチェックしている部分が次のようになります。 # 諸事情により64ビットモードのログになっています。 have_header: checking for readline/readline.h... -------------------- cc -E -I/home/mu/kuwa/src/ruby-1.8.0 -I/home/mu/kuwa/src/ruby-1.8.0 -I/usr/local /include -xO4 -xarch=v9 -KPIC > conftest.i conftest.c >: コマンド行: 致命的エラー: ファイルを開けません >: ファイルもディレクトリもあり ません。 cc: > に対して、acomp が失敗しました。 conftest.i: cc: 警告: オプション -E と conftest.i は同時には指定できません。 conftest.c: # 1 "conftest.c" # 1 "/usr/local/include/readline/readline.h" (以下略) どうも、">"を含むコマンドのsystem()呼び出しがうまくいかないみたいです。 こちらはとりあえず">"を使わないようにしたら作成されました。 どう修正すべきなのかはよく分かりません。 --- mkmf.rb.orig Sat Aug 2 15:42:45 2003 +++ mkmf.rb Wed Aug 6 13:29:36 2003 @@ -211,7 +211,7 @@ def cpp_command(outfile, opt="") "$(CPP) #$INCFLAGS -I#{$hdrdir} " \ - "#$CPPFLAGS #$CFLAGS #{outfile} #{opt} #{CONFTEST_C}" + "#$CPPFLAGS #$CFLAGS #{opt} #{CONFTEST_C}" end def libpathflag(libpath=$LIBPATH) なお、コンパイラのバージョンはちょっと古く cc: Sun WorkShop 6 update 2 C 5.3 Patch 111679-12 2003/05/18 です。 最後に、defines.hへのパッチは次のようになります。 --- defines.h.org Fri Aug 1 19:57:18 2003 +++ defines.h Wed Aug 6 15:21:29 2003 @@ -144,7 +144,11 @@ # elif defined(linux) || defined(__linux__) asm volatile ("ta 0x83"); # else /* Solaris, OpenBSD, NetBSD, etc. */ +# ifdef __SUNPRO_C + asm ("ta 0x03"); +# else asm volatile ("ta 0x03"); +# endif # endif /* trap always to flush register windows if we are on a Sparc system */ } # define FLUSH_REGISTER_WINDOWS flush_register_windows() -- 桑村 慎哉 (株) 富士通研究所 ITメディア研究所 CAD研究部