msumimz's diary

RubyにJITコンパイラを実装する個人プロジェクトの情報発信ブログです。

フルRubyのビルドに対応しました

今まではminirubyのみだったのですが、今回、フルのRubyのビルドに対応しました(Windowsの32bit版のみ)。

ベースとなるRubyのバージョンは2.1.0です。LLVMはバージョン3.4を使っています。ビルドにはVisual Studio 10以降が必要です。

ビルド手順は、以下の通りです。

  1. LLVM公式サイトにあるGetting Started with the LLVM System using Microsoft Visual Studio — LLVM 3.4 documentationの指示に従って、LLVMをインストールします。
  2. githubからソースコードを入手します。
    git clone https://github.com/msumimz/ruby/tree/rbjit
  3. Visual Studioコマンド・プロンプト」を起動します。以後は、このコマンドプロンプトから作業します。
  4. 2.で入手したソースファイルのあるディレクトリに移動します。
  5. LLVMの場所を指定するため、win32\configure.batに「--llvm-prefix」というオプションを追加しています。1.でインストールしたLLVMライブラリの場所を、--llvm-prefixの引数に指定してwin32\configure.batを実行します。
  6. あとは通常のビルドと同じようにnmakeします。
  7. 必要に応じてnmake testなりnmake installなりしてください。テストにすべてパスすることを確認しています(もちろんインタープリタとしての動作です)。

コマンド入力は以下のようになるでしょう。

$git clone https://github.com/msumimz/ruby/tree/rbjit
$cd ruby
$win32\configure.bat --llvm-prefix=c:\llvm\llvm-3.4
$nmake
$nmake test
$nmake install

このようにしてビルドした実行ファイルには、-vで表示されるバージョン文字列の最後に"rbjit"がつきます。

$ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44417) [i386-mswin32_100] rbjit

今のところ、precompileで明示的にJITコンパイルを行わない限り、自動でのコンパイルはしませんので、このようにしてビルドしたRubyは、通常のRubyコマンドとして使えます。

今後の方針

ところで、前回の記事で、今後は言語機能の実装をする予定だと書いたのですが、ふと思い立ちまして、まずは以下の作業を行うことにします。

  • フルRubyのビルド(今回の記事です)。
  • インターフェイス周りを整理して、使いやすいものにします。今までは未対応の言語機能をコンパイルしようとするとabortしていましたが、ちゃんとエラーを返すようにします。
  • メソッドや定数の再定義などのガードの実装。
  • ビルド・インストールと使い方のドキュメント作成。
  • Linux対応。

要は、普通の人が使えるように、パッケージングを整えようということです。まだ実用的に使うには機能不足ですが、まずは形を整えてから、少しずつ機能拡充していこうという方針です。

もともと、普通のRubyとしても動くのがメリットですので、実用性が増すにすれて、使ってみてくれる人も出てくると期待しています。