Windows で KiCad をビルドする

## はじめに
Windows 環境で KiCad をビルドする方法は(公式サイトの記述も含め)新旧の情報が混在している。
この記事では 2015/12/13 現在、確実に動作する手順を紹介する。

### 扱うこと
* Windows 上での KiCad ビルド環境構築
* KiCad のビルド手順
* KiCad のインストール手順
* KiCad のライブラリ導入手順

### 扱わないこと
* Linux 上でのビルド手順[^1]


## MSYS2 の導入
[MSYS2](http://msys2.github.io/) は、Windows 上で POSIX 環境を再現する Cygwin をベースに、GNU ツールチェインの Windows 移植である MinGW、ターミナル、パッケージマネージャなどが同梱された環境である。コンパイラや周辺ツール、実行時に読み込まれるライブラリなど、KiCad 開発に必要なものはすべて MSYS2 環境で簡単に揃えることができる。


### インストール
[公式サイト](https://msys2.github.io/)からインストーラを取得し、実行する。
以下の説明は MSYS2 64bit 版(msys2-x86_64)を前提に進める。

MSYS2 のインストール先は、デフォルトの C:\msys64 が推奨されている。パス名に空白や全角文字が入っていると正しく動作しない場合があるためで、別の場所にインストールする場合でも

* Program Files
* ユーザのホームディレクトリ以下

などは避けたほうがいいだろう。

インストールが完了すると、ターミナルが起動する。起動しない場合は、 C:\msys64\msys2_shell.bat を直接起動しよう。


### アップデート
インストール直後のパッケージはやや古いため、はじめに最新版への更新を行う。
MSYS2 はパッケージマネージャとして [pacman](https://www.archlinux.org/pacman/)を採用している。[^2]
パッケージの導入、更新には同名の pacman コマンドを使う。

```bash
# データベースの更新
$ pacman -Sy

# MSYS2 再起動が必要になるパッケージを先に更新する
$ pacman --needed -S bash pacman pacman-mirrors msys2-runtime
```

更新を反映するため、MSYS2 shell を再起動する。

### ツールチェインの導入
MSYS2 shell を再起動したら、次は KiCad のビルドに必要なパッケージを導入する。
時間がかかるため、コーヒーでも飲みながら待とう。

```bash
# 開発に必要な基本パッケージの導入
$ pacman -S base-devel git

# 各種ツールチェイン、ライブラリの導入
$ pacman -S mingw-w64-x86_64-toolchain
$ pacman -S mingw-w64-x86_64-cairo \
            mingw-w64-x86_64-openssl \
            mingw-w64-x86_64-wxPython \
            mingw-w64-x86_64-wxWidgets \
            mingw-w64-x86_64-cmake \
            mingw-w64-x86_64-doxygen \
            mingw-w64-x86_64-gcc \
            mingw-w64-x86_64-python2 \
            mingw-w64-x86_64-pkg-config \
            mingw-w64-x86_64-glm \
            mingw-w64-x86_64-glew \
            mingw-w64-x86_64-swig
```

MinGW 環境は用意できたが、まだパスが通っていない。
以下のバッチファイルを実行すると、パスが通った状態の MSYS2 shell が起動する。
C:\msys64\mingw64_shell.bat

以降の作業はこのパスが通ったシェルで行う。ツールチェインの導入に使った古いシェルは終了しておこう。

## boost のダウングレード
2015/12/13 現在、MSYS2 環境の boost は 1.59.0-3 が最新だが、不具合があり KiCad が正しく動作しない。
今回は、boost のバージョンを 1.57.0-4 に下げることで対応する。

```bash:
# boost-1.59.0-4 を導入している場合はアンインストール
$ pacman -R mingw-w64-x86_64-boost

# boost-1.57.0-4 のダウンロード
$ wget http://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-boost-1.57.0-4-any.pkg.tar.xz

# ローカルのパッケージをインストール
$ pacman -U mingw-w64-x86_64-boost-1.57.0-4-any.pkg.tar.xz
```

## KiCad のビルド
### 取得
KiCad のソースコードは [Launchpad](https://launchpad.net/) で管理されていて、ソースコードの取得には bazaar という~~あまり人気のない~~バージョン管理システムが必要だ。幸いなことに、 [KiCad 公式のミラーリポジトリ](https://github.com/KiCad/kicad-source-mirror)が github にあるため、git でもソースコードの取得ができる。今回は git を使おう。

```bash:
# 作業ディレクトリの作成
cd $HOME
mkdir kicad && cd kicad

# ソースコードの取得
git clone https://github.com/KiCad/kicad-source-mirror.git
cd kicad-source-mirror
```

### ビルド
KiCad のビルドには CMake を用いる。MSYS2 の環境構築で、必要なツールはすでに揃っている。

マシンスペックにもよるが、2時間ほどかかるためしばらく放置。

```bash:
# ソースコードのディレクトリへ移動
cd $HOME/kicad/kicad-source-mirror

# 作業ディレクトリの作成
mkdir build & cd build

# make ファイルの生成
cmake -DCMAKE_BUILD_TYPE=Release \
      -G "MSYS Makefiles" \
      -DCMAKE_PREFIX_PATH=/mingw64 \
      -DCMAKE_INSTALL_PREFIX=/mingw64 \
      -DDEFAULT_INSTALL_PATH=/mingw64 \
      -DOPENSSL_ROOT_DIR=/mingw64 \
      -DKICAD_SKIP_BOOST=ON \
      -DKICAD_SCRIPTING=ON \
      -DKICAD_SCRIPTING_MODULES=ON \
      -DKICAD_SCRIPTING_WXPYTHON=ON \
      ..

# ビルド
# 並列数は環境に合わせて適宜
make -j4

# インストール
make install
```

KiCad の実行ファイルは以下のパスにインストールされる。さっそく起動してみよう。
C:\msys64\mingw64\bin\kicad.exe

問題なく起動するが、部品ライブラリが空のため、このままでは使い物にならない。

## ライブラリの導入
KiCad のライブラリは、本体のソースコードとは別に、以下の github リポジトリで管理されている。[^3]
https://github.com/KiCad/kicad-library.git

### 取得
git clone するだけ。説明は不要だろう。

```bash:
$ cd $HOME/kicad
$ git clone https://github.com/KiCad/kicad-library.git
$ cd kicad-library
```

### インストール
コマンドは本体のビルド手順と同様だ。
同じディレクトリにインストールされるよう、 cmake に渡すオプションは本体ビルド時のコマンドと揃える。

```bash:
$ cd kicad-library
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release \
        -G "MSYS Makefiles" \ 
        -DCMAKE_PREFIX_PATH=/mingw64 \
        -DCMAKE_INSTALL_PREFIX=/mingw64 \
        ..
$ make
$ make install
```

改めて KiCad を起動してみよう。ライブラリも使えるはずだ。

## 今後の記事について
予告していた KiCad ソースコード・リーディングの記事は、現在準備中。
内容は

* part1: KiCad ソースコード・リーディング入門編 ~ 回路図エディタの実装を読む
* part2: KiCad ソースコード・リーディング番外編 ~ KiCad で読み込めるギリギリの回路図ファイルを作る
* part3: KiCad ソースコード・リーディング応用編 ~ KiCad 新機能の実装(仮)

まで3パートの予定。[^4]

---

この記事は [KiCad Advent Calendar 2015](http://qiita.com/advent-calendar/2015/kicad) の13日目の投稿です。
明日14日は [tunguska112](http://qiita.com/tunguska112) さんです。

---

[^1]: Linux 環境では素直にビルドできるため、説明するまでもない
[^2]: Arch Linux でおなじみ
[^3]: KiCad ライブラリのような派生プロジェクトは github が公式リポジトリであり、Launchpad は使われていないようだ
[^4]: 予定は未定。年度内には……