ホーム将棋所Macのページ>macOS用エンジンのコンパイル方法


以下の内容は、2020年3月に将棋所Macを公開した時、Macで動作するエンジンがほとんど存在しなかったので、ソースからコンパイルして動作させるための方法を説明したものです。そのため、当時存在しなかったApple Silicon搭載Macでのコンパイル方法は書いてありません。
2022年以降はMac用にコンパイル済みのエンジンが公開されているので、Macで動作するエンジンを使いたいだけなら、それをダウンロードして使う方が簡単です。なので、今となっては読む必要はありませんが、当時の記録として残しておきます。


macOS用エンジンのコンパイル方法については、詳しく解説したサイトが既にいくつかあるので、それが参考になります。

Macにコンピュータ将棋ソフト「elmo」を導入した

macOSにelmoの実行環境をセットアップ

技巧をMac環境で使う

Macに「技巧」をインストールする方法

macOSにAperyをインストール


上記のリンクにある記事だけでも十分だと思いますが、このページでも上記の内容をまとめて補足しておきます。以下の説明は、Unix系のOSや、makeを使ったコンパイル方法について基本的な知識があることを前提にしています(とりあえず、ターミナルでのcdコマンドの使い方を知っていて、テキストエディタでMakefileの編集ができれば何とかなるとは思います)

コマンドラインツールのインストール
Homebrewとg++のインストール
g++のシンボリックリンクの作成について
g++のファイル名の確認
CPUの命令セットの確認
ソースのダウンロードとコンパイル

Apery
技巧
nozomi
やねうら王


コマンドラインツールのインストール

ターミナルを開き、場所はどこでもいいのでmakeコマンドを実行します。コマンドラインツールがまだインストールされていなければ次のようなダイアログが表示されます。

InstallTool.png

ここでインストールボタンをクリックして、次に出てくるダイアログで「同意する」ボタンを押すと、コマンドラインツールがインストールされます。

Homebrewとg++のインストール

Aperyや技巧をコンパイルする場合は、デフォルトのg++だとopenmp関係のエラーが出てコンパイルに失敗します。そのため、それらのエンジンをコンパイルするためにはg++を新しくインストールする必要がありますが、そのためにはまずHomebrewをインストールします。
Homebrewのサイトに書いてある、下のコマンドをターミナルで実行します。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

途中で質問が出るので内容を読んで、Enterキーを押したりパスワードを入力するとインストールされます。
これで準備ができたので、次にg++をインストールします。ターミナルで次のコマンドを実行します。

brew install gcc

これでgccとg++がインストールされます。

g++のシンボリックリンクの作成について

g++を新しくインストールしても、それだけだとデフォルトで入っているg++が使われてしまいます。そのため、上記の解説サイトのいくつかは、新しくインストールしたg++がデフォルトで使われるよう、そのシンボリックリンクを作成する方法を説明しています。
もちろんそれでもいいのですが、デフォルトの開発環境を変更したくないのでg++のシンボリックリンクを作成したくない、ということがあるかもしれません。その場合はエンジンごとにMakefileを書き換える必要があります。このページではシンボリックリンクを作成しない方法で説明します。

g++のファイル名の確認

新しくインストールしたg++のファイル名はバージョン番号を含んだ名前になっているので、Aperyや技巧のMakefileを書き換える場合、その名前を正確に書かなくてはいけません。そのため、そのファイル名をあらかじめ確認する必要があります。ターミナルで以下のコマンドを実行します。

ls /usr/local/bin | grep g++

2020年3月現在、このコマンドを実行すると、"g++-9"という文字列が表示されます。将来、g++のバージョンが上がった場合はこの文字列も変わる可能性があるので、その名前を確認してから使うようにしてください。

CPUの命令セットの確認

Aperyとやねうら王では、CPUが対応している命令セットに応じてコンパイル時の設定を変更する必要があります。といっても、最近のMacに使われているCPUであればSSE4.2には対応しているはずなので、AVX2に対応しているかどうかを調べることになります。ターミナルで下のコマンドを実行します。

sysctl machdep.cpu.features | grep FMA

この時に、"machdep.cpu.features: ..."で始まる数行が表示されたらAVX2対応、何も表示されなければ非対応となります(・・・と思いますが自信がありません。間違っていたらサポート掲示板で指摘して下さい)
これ以外の方法を使うのであれば、上記リンクの中にある「Macのスペックの確認」に詳しく書いてあるので、その方法で確認して下さい。

ソースのダウンロードとコンパイル

オープンソースの将棋エンジンの多くはGitHubで公開されているので、そこからダウンロードできます。GitHubのソースはgitコマンドでダウンロードできますが、コンパイルだけが目的であれば、Webブラウザでzipファイルをダウンロードすることもできます。以下はSafariでダウンロードする方法で説明します。
Safariでダウンロードする場合、デフォルトの設定だと、zipファイルは自動で展開されます。自動で展開しない設定にしてある場合は、ダウンロードしたzipファイルをダブルクリックすると展開します。以下の説明は自動展開する前提で書いています。

2020年3月現在、私のところでは、Apery・技巧・nozomi・やねうら王のコンパイルが実行できています(それ以外にもあるかもしれませんが、詳しく確認していません)
以下、それぞれのエンジンのコンパイル方法について説明します。コンパイル後の評価関数や定跡のファイルの配置についても簡単に説明しますが、基本的にWindows版と同じなので、Windowsでそれらのエンジンを使っているのであれば、そのフォルダ構成を参考にしてください。

なお、以下は、2020年3月時点での最新のソースを使う前提で説明しています。今後、新しいバージョンが公開された場合は、その新しいバージョンに置き換えて読むようにしてください。バージョンが変わってもコンパイル方法などに大きな変化はないと思います。


Apery

Aperyのページから、2020年3月時点での最新版であるapery_wcsc28.zipをダウンロードします(この中にソースも含まれています)。それが展開されるとapery_wcsc28というフォルダが作成されるので、それを適当な場所に置きます。
その中のsrcフォルダにあるMakefileを開くと、冒頭に次の行があります

COMPILER = g++

新しくインストールしたg++を使うように変更する必要がありますが、ここではg++のシンボリックリンクを作成しない方法を使うので、この行をコメントアウトして、上記のg++のファイル名確認で表示された名前に変更します。

#COMPILER = g++
COMPILER = g++-9

ターミナルでsrcディレクトリに移動して、AVX2対応のCPUであれば次のコマンドを実行してコンパイルします。

make bmi2

AVX2非対応でSSE4.2対応のCPUであれば次のコマンドを実行してコンパイルします。

make sse

これでsrcフォルダにaperyという名前のエンジンが作成されるので、このファイルを、apery_wcsc28フォルダの中にあるbinフォルダにコピーします。このフォルダには評価関数や定跡のファイルが最初から用意されているので、ここにコピーするとそれらの評価関数や定跡を使ってくれます。

Apery.png

そして将棋所Macでaperyを登録すると使えるようになります。


技巧

技巧のページから、2020年3月時点での最新版のソースであるv2.0.2.zipをダウンロードします。それが展開されるとGikou-2.0.2というフォルダが作成されるので、それを適当な場所に置きます。
そのフォルダにあるMakefileを開くと、冒頭に次の行があります。

CXX       = g++

これもAperyと同様にコメントアウトして、g++-9を使うように変更します。

#CXX       = g++
CXX       = g++-9

ターミナルでGikou-2.0.2に移動して、次のコマンドを実行してコンパイルします。

make release

これでGikou-2.0.2の中のbinフォルダにreleaseという名前のエンジンが作成されます。
次に、技巧のページからgikou2_win.zipをダウンロードすると、gikou2_winというフォルダが作成されるので、そのフォルダにある全てのファイルを先ほどのbinフォルダにコピーします。この中にあるgikou_ja.txtというファイルを、エンジン名に合わせてrelease_ja.txtという名前に変更すると、エンジン設定ダイアログの表示時に項目が日本語で表示されます。

Gikou.png

そして将棋所Macでreleaseを登録すると使えるようになります。

ただし、技巧の場合、対局を開始して20手から40手くらい進むと異常終了して対局が止まる問題があります。この問題の解決法がわかる方がいたらお知らせください。


nozomi

nozomiのページから、2020年3月時点での最新版のソースである20190519.zip(そのページで"Source code (zip)"と書いてある方)をダウンロードします。それが展開されるとnozomi-20190519というフォルダが作成されるので、それを適当な場所に置きます。
nozomiはデフォルトのg++でコンパイルできるので、Makefileを変更する必要はありません。ただし、CPUがAVX2に非対応だとコンパイルに失敗するようです。
ターミナルでsrcディレクトリに移動して、次のコマンドを実行してコンパイルします。

make

これでsrcフォルダにnozomiという名前のエンジンが作成されるので、このファイルを適当なフォルダにコピーします。
次に、nozomiのページから20190519.zip(先ほどの、"Source code (zip)"の一つ上)をダウンロードすると20190519というフォルダが作成されるので、その中にあるkppt_kkpt.binとmove_score.binを、nozomiのエンジンがあるフォルダにコピーします。

Nozomi.png

そして将棋所Macでnozomiを登録すると使えるようになります。


やねうら王

やねうら王のページから、2020年3月時点での最新版のソースであるV4.89.zipをダウンロードします。それが展開されるとYaneuraOu-4.89というフォルダが作成されるので、それを適当な場所に置きます。
その中のsourceフォルダにあるMakefileを開くと、33行目あたりから次のような行があります。

#TARGET_CPU = AVX512
TARGET_CPU = AVX2
#TARGET_CPU = SSE42
#TARGET_CPU = SSE41
...

もしCPUがAVX2非対応なら、AVX2の行をコメントアウトして、SSE42の行を使うように変更します。

#TARGET_CPU = AVX2
TARGET_CPU = SSE42

CPUがAVX2に対応していれば、この部分の変更は必要ありません。
さらに、49行目あたりに次のような行があります。

#COMPILER = g++
COMPILER = clang++

clang++の行はコメントアウトして、g++を使うように変更します(デフォルトのg++でコンパイルできるので、g++-9を指定する必要はありません。g++-9でもコンパイルはできますが)

COMPILER = g++
#COMPILER = clang++

以上の変更でコンパイルできるようになりますが、この場合、NNUE型の評価関数を使うようにコンパイルされます。最近の評価関数はNNUE型が多いので、通常はこれで問題ありませんが、KPPT型などの評価関数を使いたければ、それに合わせてMakefileも変更する必要があります。
18行目あたりに次のような行があります。

YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE
#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE_KP256
#YANEURAOU_EDITION = YANEURAOU_ENGINE_KPPT
#YANEURAOU_EDITION = YANEURAOU_ENGINE_KPP_KKPT
...

KPPT型用にコンパイルするのであれば、YANEURAOU_ENGINE_NNUEの行をコメントアウトして、YANEURAOU_ENGINE_KPPTの行を使うように変更します。

#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE
#YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE_KP256
YANEURAOU_EDITION = YANEURAOU_ENGINE_KPPT

ターミナルでsourceディレクトリに移動して、次のコマンドを実行してコンパイルします。

make

これでsourceフォルダにYaneuraOu-by-gccという名前のエンジンが作成されるので、このファイルを適当なフォルダにコピーします。
次に評価関数のファイルを入れる必要がありますが、やねうら王では様々なものが使えるので、好みのものを使って下さい。NNUE型の評価関数の一例として、KristallweizenのページにあるKristallweizen_kai.zipをダウンロードすると、evalというフォルダの中にnn.binというファイルができるので、evalフォルダごとエンジンと同じ場所に置きます。
エンジンをKPPT型用にコンパイルした場合は、それに応じた評価関数のファイル(例えばelmoの古いバージョンなど)ダウンロードして、そのevalフォルダをエンジンと同じ場所に置きます。。
定跡ファイルは必ずしも必要ではありませんが、用意されているものを使うことができます。
定跡の一例として、100テラショック定跡のファイル(700T-shock-book.zip)をダウンロードすると、700T-shock-bookというフォルダの中にuser_book1.dbというファイルができるので、そのフォルダ名をbookに変更して、エンジンと同じフォルダに置きます。この場合、将棋所Macでエンジン登録をしたあと、YaneuraOuのエンジン設定ダイアログを開き、「定跡ファイル」を「ユーザー定跡1」に変更する必要があります。(これ以外で、例えばelmoを使う場合、standard_book.dbというファイルが公開されているので、その名前のファイルを使うのであれば、「定跡ファイル」は「標準定跡」のままにしておきます)
最後に、YaneuraOu2019V489all.zipをダウンロードします。展開されたフォルダの中にあるYaneuraOu_KPPT_avx2_ja.txtというファイルをエンジンと同じフォルダにコピーして、名前をエンジンのファイル名に合わせてYaneuraOu-by-gcc_ja.txtに変更すると、エンジン設定ダイアログの表示時に項目が日本語で表示されます。

Yane.png

そして将棋所MacでYaneuraOu-by-gccを登録すると使えるようになります。


ホーム将棋所Macのページ>macOS用エンジンのコンパイル方法