TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【囲碁プログラム】 WindowsでPachiをビルドして動かす

オープンソースで強豪の囲碁プログラムであるPachiをWindowsでビルドして動かすことができたので、備忘録を兼ねて手順を記します。


PachiWindowsのバイナリが配布されていますが、プログラムを開発する上ではソースコードをステップ実行して調べたいので、ソースからビルドしたい。

PachiはLinux用のソースになっているので、WindowsでビルドするにはMinGWが必要になります。

まず、MinGWのページから、mingw-get-setupをダウンロードしてインストールします。

GUIのパッケージマネージャかmingw-getコマンドを使って、以下のパッケージをインストールします。

  • mingw32-base
  • mingw32-binutils
  • mingw32-gcc
  • mingw32-libpthreadgc
  • mingw32-pthreads-win32

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秒くらいかかりました。