x64-mswin64版Ruby 1.9.3をビルドした

2012-07-03追記: NokogiriのGitHubのURLが変更されたことへの追従。https://github.com/tenderlove/nokogirihttps://github.com/sparklemotion/nokogiri

以前から何度も玉砕している、x64-mswin64版Ruby 1.9.x(今回は1.9.3-p125)のビルドに成功したので、やったことをメモっておく。
環境はこんな感じ:

使用するソフトウェアはこんな感じ:

  • libiconv-1.11 (artonさんのASRのページから入手)
  • libxml2-2.7.8
  • libxslt-1.1.26
  • openssl-1.0.0g
  • readline-4.3-2 (artonさんのASRのページから入手)
  • yaml-0.1.4 (libyaml)
  • zlib-1.2.5 (artonさんのASRのページから入手)

目標:

  • Rubyやそれに関連するバイナリはすべて64bitにする。
  • ASRのruby console的なものを用意する。
  • Nokogiriインストール時のnative buildに対応する。

資料:

Visual C++ 2010 Express

正直64bitの開発環境を用意するところが一番時間がかかった。

などを踏まえてインストールしていったら最後のCompiler Updateができない(Windows SDKを見つけられない)とかいわれてVCのインストールからやり直したりした。
以下ライブラリやRubyのビルドの際は、vcvars32.batやvsvars32.batに相当するもの(C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd)を実行することで64bit開発環境のための設定を行えた。

関連ライブラリのインストール

libiconv、readline、zlibはRuby環境構築講座Windows編の記述通りに進めた。
libyamlはプラットフォームにx64を加えて、かつWindows SDK 7.1を使用するように設定を変更した上でビルドした。

OpenSSLはVC-WIN64Aでビルドした。
libxml2とlibxsltはのちほどNokogiriをインストールするために必要なもの。win32と同じビルド方法が使えた。

Rubyのインストール

都合によりRuby環境構築講座Windows編での方法と異なりインストール先のbinをPATHに加えずに進めたため、configureに--with-opt-dirを指定して関連ライブラリの検出を行えるようにした。ちなみに--prefixで指定するパスはバックスラッシュ(半角円マーク)区切りだが、--with-opt-dirで指定するパスはスラッシュ区切りにしないと上手くいかないことが過去にあったので、今回もそうした。
また、--platform=x64-mswin64を付けた(これを付けずに何度かビルドして泣きそうになった)。http://yanmo.info/?p=85

> win32\configure.bat --prefix=D:\private\tools\ruby-1.9.3-p125 --target=x64-mswin64 --with-opt-dir=D:/private/tools/ruby-1.9.3-p125

あとはwin32と同様にコンパイルとインストールを行えば良い。

ruby console的なものを用意する

インストールしたRubyのbinをPATHに追加して、かつVC 64bitの設定も行ったあとDOS窓を開きっぱなしにするため、二段構えのBATファイルを用意する。

REM ruby_console.bat
@ECHO OFF
CMD /k %~dp0\ruby_console_start.bat
REM ruby_console_start.bat
@ECHO OFF
PATH=%~dp0bin;%PATH%
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd"

Rubyのインストール先のフォルダにこの2つのBATファイルを置いて、一つ目のBATファイルを実行する。

Nokogiriのインストール

いくつかの理由によりnative buildが失敗するので、修正したgemファイルを作成してからgem installした。修正内容はこの記事を書く前にpull requestしておいたら、この記事を書いている最中にすでに取り込まれててビビった。Fix to build for x64-mswin64 by iwadon · Pull Request #629 · sparklemotion/nokogiri · GitHub

まとめ

VCの用意さえ出来れば、比較的容易に64bitバイナリを用意できた、気がする。なのでみんなもx64-mswin64版Rubyをビルドして使おう。使う人が多くなれば今回のNokogiriみたいに対応ライブラリを増やせていけると思うんだよね。
ちなみにこれらを終えたあとになってartonさんの能楽堂を発見した。能楽堂を使えば簡単に64bitなWindowsRubyを手に入れられる。というか次回があれば僕もこっち使うよ。NougakuDo Manual