やねうら王のビルド手順

エンジン将棋盤のエンジンとしてやねうら王をMacでビルドする手順を説明します。

手順作成環境

次の環境で確認しました。(環境が変わると手順が変わる可能性があります)

  • ハードウェア:MacBook Pro 2019
  • OSバージョン:macOS 10.15.3

概略

大まかには、下記の手順で作成します。

  1. ビルドの準備(コンパイラg++9を使用できるようにする)
  2. ソースコードの取得
  3. 必要なファイルの取得(評価関数など)
  4. ビルド

※ 現時点(2020/02/02)での手順を後述しますが、細かな手順は将来的に変わる可能性が大いにあります。うまくいかない場合は、手順が変わっている可能性があるので、作業目的に合致する最新の手順を調べてやってみてください。

1. ビルドの準備

1.1. Homebrewをインストール

ビルドに使用するコンパイラg++バージョン9(最新バージョン)を簡単にインストールするためにHomebrewというパッケージ管理ツールを使用します。そこで、Homebrewをインストールします。

※ g++バージョン9が既にインストールされている場合や、Homebrewがインストール済みでbrewコマンドが使用できる環境では、この手順は不要です。

1.1.1 Xcodeのインストール

App StoreでXcodeを検索してインストールします。

1.1.2 コマンドラインツールをインストール

ターミナル.appを起動して、次のコマンドを実行します。

xcode-select --install

※ ターミナル.appは、アプリケーションフォルダの中のユーティリティフォルダにあります。

1.1.3 Homebrewのインストール

Homebrewのサイトに表示されているインストールコマンドを実行します。

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

※ 1行で上記コマンドを入力します。

1.2 g++のインストール

参考サイト:https://mem-archive.com/2019/08/17/post-2038/

1.2.1 インストール

次のコマンドで最新のバージョンをインストールします(現時点ではバージョン9)

brew install gcc

上記コマンドで次のコマンドがダウンロードされます

  • /usr/local/bin/gcc-9
  • /usr/local/bin/g++-9

1.2.2 リンクの設定

g++コマンドやgccコマンドを実行したら上記のバージョン9のコマンドが実行されるようにします。

ln -sf /usr/local/bin/g++-9 /usr/local/bin/g++
ln -sf /usr/local/bin/gcc-9 /usr/local/bin/gcc

次のコマンドを実行して、上記のコマンドが使えるようになっているかどうかを確認します。

which g++

/usr/local/bin/g++と表示されれば、問題ありません。次の「PATHの設定」をスキップして1.2.4の確認を行います。
/usr/bin/g++と表示される場合は、次のPATHの設定を行います。

1.2.3 PATHの設定

Macに元から入っているg++コマンドより先に上記のg++コマンドが使えるようにします。(環境変数PATHを設定)

ログイン時に参照されるシェルの設定ファイルにPATHの定義を追加します。

  • シェルの設定ファイル:
ログインシェルがbashの場合 ~/.bash_profile
ログインシェルがzshの場合 ~/.zshenv
  • 追加する内容:
export PATH="/usr/local/bin:$PATH"

追加した内容を次のコマンドを実行して反映させます。

  1. ログインシェルがbashの場合:
source ~/.bash_profile
  1. ログインシェルがzshの場合:
source ~/.zshenv 

1.2.4 確認

次のコマンドを実行してバージョンを表示し、インストールしたバージョンになっているかどうかを確認します。

g++ -v

2. ソースコードの取得

やねうら王用のフォルダを作成

フォルダ(例):~/_Develop/_Shogi/YaneuraOu

ターミナル.appで上記フォルダに移動

cd ~/_Develop/_Shogi/YaneuraOu

次のコマンドでGithubからソースファイル一式を取得します。

git clone https://github.com/yaneurao/YaneuraOu.git

3. 必要なファイルの取得(評価関数など)

3.1 評価関数ファイルの取得

ダウンロードしたソースファイルの中に入っている解説を読んで必要なファイルを取得します。

  • 解説ファイル:~/_Develop/_Shogi/YaneuraOu/docs/解説.txt

解説ファイルのビルドに関する部分のうち「Makefileを使ったmake方法」を読みます。現時点では、ビルドの実行例として次のコマンドが書いてあります。

make clean tournament TARGET_CPU=AVX2 YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE

また、次のビルドの設定ファイルを参照します。

  • ビルド設定ファイル:~/_Develop/_Shogi/YaneuraOu/source/Makefile

これらより、現時点では、NNUEという評価関数がデフォルトになっているためNNUEがお勧めの評価関数だとわかります。
そこで、NNUEの評価関数を取得します。

NNUE型の評価関数を探すと、現時点では、次のサイトがヒットします。

今回は、Qhapaqさんのリンクを使用させていただきます。リンクをクリックすると圧縮ファイルがダウンロードされるの、クリックして解凍します。

3.2 評価関数ファイルを所定の位置に保存

ダウンロードした評価関数を所定の場所に保存します。

  • 評価関数ファイル:nn.bin
  • 保存場所:~/_Develop/_Shogi/YaneuraOu/source/eval/nn.bin

4. Makefileの修正

次のファイルを修正します。

  • ビルド設定ファイル:~/_Develop/_Shogi/YaneuraOu/source/Makefile

コンパイラーをg++に設定します。

COMPILER = g++
#COMPILER = clang++

49行目あたりのCOMPILERの設定で、g++を指定している行の先頭の#を外し、clang++を設定している行の先頭に#を付けます。

5. ビルド

5.1 ビルド

ターミナル.appを起動します。

ソースファイルがある場所に移動します。

cd ~/_Develop/_Shogi/YaneuraOu/source

次のコマンドを実行してビルドします。

make clean tournament TARGET_CPU=AVX2 YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE

※ 1行で上記コマンドを入力します。

※ ビルドに使用するコマンドの引数は、前述の解説.txtに例が記述してあります。今回は、1つ目の例を使用しています。

makeのパラメータ(例ではAVX2)はご使用のMacのCPUに合わせて変更してください。パラメータはMakefileを見るとavx2, sse42, sse41, sse2, nosseがあり、extra/config.hにコメントで説明が書かれていてHaswell以降のCPUはavx2を指定するようです。

5.2 ビルドエラーの確認

ビルドでエラーが発生していないか確認します。

今回は、「ld コマンドのオプション-sはもう使用できないので無視する」という警告が出ています。ldコマンドのオプション-sについて調べてみると、「出力ファイルから全てのシンボル情報を削除する。」という意味だとわかります。そして、これはプログラムの実行には全く関係のない事なので、正常にビルドが完了した事がわかりました。

5.3 動作確認

ビルドが完了すると、次の場所に次のファイル名で将棋エンジンが作成されます。

  • 保存場所:~/_Develop/_Shogi/YaneuraOu/source/
  • 将棋エンジンのファイル名:YaneuraOu-by-gcc

ファイル名は前述のMakefile内で、TARGET変数の値として定義されています。

ターミナル.appで実行プログラムのある場所に移動します。

cd ~/_Develop/_Shogi/YaneuraOu/source

次のコマンド入力して、作成したプログラムを実行します。

./YaneuraOu-by-gcc

すると、入力待ち状態になるので、次のコマンドを入力してEnterを押します。

usi

次のようにオプションが表示され、最後にusiokと応答があればOKです。

quitと入力し、Enterを押してエンジンを終了させます。