読者です 読者をやめる 読者になる 読者になる

しーくさんのUp & Down - Thinking Notes

更新頻度はあまり高くないです。プログラミングやLinuxなどのことについてや、果てはゲーム記事まで。

Windows7上でRuby2.0系(x86-64)ソースコードからのビルドメモ

※当記事の内容は、ド素人が書いた不正確なメモであることを承知の上で利用してください。当記事の一部または全てを信用して実行した結果については自己責任でお願いします。
※正確かつ正しい方法を知りたい方は、各所一次資料やソースコード付属の解説をよくお読みください。
【前提】
・CPUがCorei7で、OSがWindows-7(x64)な環境
・これより、片っ端からx86-64なバイナリを吐き出す予定
VC++(Expressでもいいが、2010以上が理想)をインストール済み。
・何らかの形で、perlをインストール済み.
・かつコマンドラインからVC++を使ってコンパイルする方法を知っていること(詳細は省くので)
MinGW(各種コマンド及び、x86-64gcc)などを使える状態にしてあること。
・ライセンスの種類はここでは言及しない(自分用なので)
・余談だが、私の場合はディレクトリ構造が以下になっている。
 システムフォルダになんでもかんでもぶち込むのが嫌だってのもある。
  VisualStudio一式 ほぼデフォルトの場所
  以下全部、欲しいところにPATH処理済み。
  /mingw 各種コマンド。MSYS込み。
/mingw64 mingw64なgcc/g++
/usr/bin 自分で放り込んだソフトやコマンド、及びそれらの設定ファイル置き場。
/usr/local/* 各種ZIP配布のソフトや自力ビルド済みな個別のソフト類のフォルダ。それぞれのbinフォルダなどにPATH通し。
まあ、うん、本来の配置の意味合いとはまったくもって違うと思うが、自分でわかりやすい構成ならなんでもいいよね。
【下準備】
各種公式サイトから以下のソースコード最新版Stable(Win対応。ついでにパッチなど)をダウンロード
・Ruby2.0
・nasm
・zlib-1.2.7
・openssl-1.0.1e
・readline-4.3.2

早速ビルド作業。
まずはアセンブラ=nasmをコンパイルする。(実は要らない気がする)
アーカイブ展開後、普通にgcc/MinGWでビルド。
$ make
出来上がったnasm.exeとndisasm.exeを/usr/binに配置。

次。
zlibソースコードを展開してそこに移動。
アセンブラを利用して高速化/最適化するため、次のようにしてビルド。
$ cp contrib\amd64\match.S .
$ nmake -f win32/Makefile.msc LOC="-DASMV -s -mms-bitfields -march=corei7" --prefix=/usr/local/zlib

OpenSSLのビルド。
$ perl Configure VC-WIN64A
$ ms\do_win64a
$ nmake -f ms\ntdll.mak
$ cd out32dll
$..\ms\test
openssl.exe ssleay32.dllをコピー。

readlineのビルド。
$ cd readline/win32
$ nmake
$ nmake install DESTDIR=/usr/local/readline
若干散らかったきがするので、整理しておく(/usr/local/readlineの中に、readlineのものをまとめる)


【本番】
$ ./win32/configure --target=x64-mswin64 --with-openssl-dir=/usr/local/openssl --with-readline-dir=/usr/local/readline --with-zlib-dir=/usr/local/zlib
$ nmake
このとき、openssl,zlib,readlineがcongiuringされてること(It will not be installedが表示されないこと)を確認しておく
$ nmake test
$ nmake install DESTDIR=/usr/local/ruby
その後、PATH設定して、
$ ruby -v && gem -v
$ ruby -ropenssl -rzlib -rreadline -e "puts :success"
$ gem list && gem update --system
が正しい/成功すればおk。

※dlモジュールがdeprecatedで「fiddle」使えという警告が出るようになったが(2.0から?)、対処模索中。