オープンソースで強豪の囲碁プログラムであるPachiをWindowsでビルドして動かすことができたので、備忘録を兼ねて手順を記します。
PachiはWindowsのバイナリが配布されていますが、プログラムを開発する上ではソースコードをステップ実行して調べたいので、ソースからビルドしたい。
PachiはLinux用のソースになっているので、WindowsでビルドするにはMinGWが必要になります。
まず、MinGWのページから、mingw-get-setupをダウンロードしてインストールします。
GUIのパッケージマネージャかmingw-getコマンドを使って、以下のパッケージをインストールします。
MSYSをインストールすると、pthreadのヘッダーがMSYSのディレクトリにインストールされたので、MSYSはインストールしません。
環境変数の設定で、MinGWのbinディレクトリにPATHを通します。
makeとccコマンドが必要になりますが、それぞれ、mingw32-make.exeとgcc.exeとしてインストールされるので、コマンドラインでMinGWのbinディレクトリに移動して、mklinkコマンドでハードリンクを作成します。
C:\MinGW\bin>mklink /h make.exe mingw32-make.exe make.exe <<===>> mingw32-make.exe のハードリンクが作成されました C:\MinGW\bin>mklink /h cc.exe gcc.exe cc.exe <<===>> gcc.exe のハードリンクが作成されました
次に、PachiのソースをGitHubから取ってきます。
git colone https://github.com/pasky/pachi.git
gitコマンドはGit for Windowsからインストールしておきます。
以下の通りMakefileを編集します。
13行目の
# WIN=1
のコメントを外して、
WIN=1
とする。
67,68行目の
ifdef WIN SYS_CFLAGS?=
に「HAVE_STRUCT_TIMESPEC」マクロ定義を追加する。
ifdef WIN SYS_CFLAGS?=-DHAVE_STRUCT_TIMESPEC
これがないと、pthread.hで
redefinition of 'struct timespec'
というコンパイルエラーになります。
最後に、コマンドラインで、Pachiのディレクトリに移動してmakeコマンドに「WIN_HAVE_NO_REGEX_SUPPORT」マクロ定義を追加してビルドします。
make WIN_HAVE_NO_REGEX_SUPPORT=1
chat.cでregex.hをインクルードしていますが、MinGWにはregex.hがないので、WIN_HAVE_NO_REGEX_SUPPORTが必要です。
以上で、ビルドが成功すると、pachi.exeが作成されます。
GoGuiを使って、動作するかテストします。
新規プログラムのコマンドに、pachi.exeのパスを設定して登録します。
成功すれば、「Pachi UCT」という名前で登録されます。
新規対局を開始して、Pachiの手番で石が置かれればテスト成功です。
Core i7-3770で1手12秒くらいかかりました。