ruby-trunk-changes r62225 - r62249

今日も主に MJIT のヘッダ生成まわりのビルド関係の修正がありました。

k0kubun: r62225 2018-02-05 21:05:04 +0900

tool/transform_mjit_header.rb で rb_mjit_header.h に preprocessor が埋め込む __DATE__ とか __TIME__ といったマクロが先頭に入ることがあって、これを残しておくとビルド時に警告やエラーが出るので削るようにしています。このあたりコンパイラの挙動に深く依存しますね。

k0kubun: r62226 2018-02-05 21:19:38 +0900

tool/transform_mjit_header.rb で MinGW では MJITHeader.separate_macro_and_code がうまく機能しないそうなので Windows 環境かどうかで分岐しています。コミットログだと icc って書いてあるけど cl.exe のことかな。

k0kubun: r62227 2018-02-05 21:33:36 +0900

AIX でのビルドエラー対策として mjit.c のヘッダの #include の順を変更しています。

kazu: r62228 2018-02-05 21:34:35 +0900

tool/ruby_vm/views/_mjit_compile_insn.erb のコメントの typo 修正。

kazu: r62229 2018-02-05 21:34:37 +0900

tool/m4/ruby_check_va_copy.m4 で va_copy() の存在チェックのためのソースコードで va_end() が抜けてたのを修正しています。

k0kubun: r62230 2018-02-05 21:57:24 +0900

mjit.c でコンパイラが clang かどうかの判定に __MACH__ を見てましたが __clang__ を見るように修正しています。 OpenBSD で clang でビルドした時にうまく判定ができてなかったみたいです。 [ruby-core:85377] [Bug #14440]

k0kubun: r62231 2018-02-05 22:24:00 +0900

Fedora の RubyCI のテストで tool/downloader.rb が SocketError 例外を発生させたそうなので、ダウンロード時のリトライ対象の例外に SocketError も追加しています。

nobu: r62232 2018-02-05 22:58:48 +0900

tool/transform_mjit_header.rb でコンパイラ実行で標準エラー出力を捨てて実行してエラーがおきた時にリダイレクトをせずにもう一時実行するところで、コマンドラインを変数に格納して使いまわすようにしています。

k0kubun: r62235 2018-02-06 00:39:55 +0900

NetBSD での MJIT 用のヘッダ生成時に余計な関数宣言を処理してしまってビルドエラーになっていたそうなので、処理対象の関数名を正規表現で指定してそれだけ処理するようにしています。 [ruby-dev:50464] [Bug #14439]

svn: r62236 2018-02-06 00:39:56 +0900

version.h の日付更新。

k0kubun: r62237 2018-02-06 00:49:32 +0900

MJIT で実行時にビルドするコードで利用する simple_iseq_p() に rb_ の prefix をつけて rb_simple_iseq_p() に改名しています。ちょっとコミットログがよくわかってないのですが、extern してるので公開される symbol には rb_ を付けておかないといけないということかな。

k0kubun: r62238 2018-02-06 01:51:12 +0900

まず Makefile の変数 CPPFLAGS から -DLIBRUBY_LIBDIR オプションの指定は削り、MJIT コンパイラ用のヘッダファイルの場所を実行時に検出するようにして、バイナリをビルドしたのとは別の位置にインストールして使う時も MJIT を有効にするようにしているようです。けど実行形式が自分の位置を知る方法って難しいんだよな確か……と MJIT がパスを知るために使っている Ruby の定数 TMP_RUBY_PREFIX をセットしているところを調べてみると、LOAD_RELATIVE を使って libruby.so のパスから相対的に解決するやつを使ってるのかな、多分。 [ruby-core:85390] [Bug #14445]

k0kubun: r62239 2018-02-06 02:00:43 +0900

r62193 で mjit.c で MJIT_ATOMIC_SET() というマクロを独自に定義して、Windows 環境では InterlockedExchangePointer() を使うようにしてましたが、この引数に明示的なキャストを入れて MinGW での警告を抑制するようにしています。

nobu: r62240 2018-02-06 09:47:19 +0900

common.mk の rb_mjit_header.h の生成時のコンパイラオプションに $(CFLAGS_NO_ARCH) を使うようにしていましたが、$(CFLAGS) に戻し、tool/transform_mjit_header.rb で architecture 毎のヘッダ生成時のコンパイラコマンドの指定に ARCH_FLAG を渡したものを指定するようにしています。 64bit 環境で 32bit 向けビルドをする時などオプションの指定が必要だったとのこと。

nobu: r62241 2018-02-06 10:42:37 +0900

mjit.c で独自に定義してた get_string() を ruby_strdup() を利用するようにしています。

nobu: r62242 2018-02-06 10:42:38 +0900

thread_pthread.c の rb_thread_create_mjit_thread() の引数で関数ポインタを void * という型で受け取るようになっていたところを、明示的に関数の型を書くようにしています。

shyouhei: r62243 2018-02-06 11:08:13 +0900

aclocal.m4 から include している tool/m4/ac_checking.m4 と tool/m4/ruby_prepend_options.m4 は削除して、ac_checking.m4 の内容は configure.ac に直接書くようにしています。ruby_prepend_options.m4 のほうは単に RUBY_PREPEND_OPTIONS というコマンド? マクロ? がもう未使用なので削除したみたいです。

hsbt: r62244 2018-02-06 11:58:35 +0900

添付している RubyGems を 2.7.5 に更新しています。http://blog.rubygems.org/2018/02/06/2.7.5-released.html
Kernel#open から File.open への変更を含みいろいろ差分があるみたいです。

nobu: r62245 2018-02-06 12:19:42 +0900

universal binary 向けに MJIT 用のヘッダを rb_mjit_header.h から生成するのを頑張って、2通り作ってから1ファイルに連結して #ifdef で分岐するという力技をしてるそうです。コミットログだけ呼んでお腹いっぱいな気分になったので差分はちょっと読んでませんが、ツラい気分になれますね。

nobu: r62246 2018-02-06 16:42:44 +0900

rubygems のテストで Dir.tmpdir のパスが "/tmp" にあることを前提にしたテストがあったので assertion を修正しています。

nobu: r62247 2018-02-06 17:00:17 +0900

configure.ac で va_copy() マクロのチェックで m4_pushdef と m4_popdef というコマンド? マクロ? を使ってたのをやめています。うーむわからん。また shell っぽい if 文を書いてたところを AS_IF マクロを使うように修正しています。

nobu: r62248 2018-02-06 19:30:53 +0900

mjit.c で変換した mjit 用ヘッダの置き場所のファイルパスを組み立てる処理を関数に切り出してリファクタリングしています。コミットログ読むと basedir を頭に付けるって書いてあるけど、それは元も strcat(3) でしてたみたいなので、たぶん内容は変わってないんじゃないかと思います。

nobu: r62249 2018-02-06 19:36:03 +0900

mjit.c の init_header_filename() で Windows 向けの実装で変数の宣言が漏れてたので追加しています。