[Blender] ソースコードからBlender本体をビルドする

Blenderはオープンソースソフトウェアのため、公開されているソースコードからBlender本体をビルドすることができます。
そこで、Blenderコミュニティの一部でソースコードリーディングが流行っているこの期に、ソースコードリーディングの最初の関門となる、Blenderをソースからビルドする方法を書いてみました。
英語でよければ、ビルドの手順は [Blender Wiki](http://wiki.blender.org/index.php/Dev:Doc/Building_Blender/Windows/msvc/CMake) にも書かれていますので、必要に応じて参考にしてみてください。
今回紹介するのはWindowsでビルドした時の方法になりますが、OSによりビルド手順が異なるため、Mac/Linuxでビルドする場合も  [Blender Wiki](http://wiki.blender.org/index.php/Dev:Doc/Building_Blender/Windows/msvc/CMake) を確認してください。

※ 環境によってうまくビルドできないケースがあると思いますので、今回紹介する手順でうまくいかない場合や他のよりよい方法がある場合は、今後Blenderのビルドを試そうとしている人たちのために、ぜひコメントに残していただけれると助かります。

# ソースコードからビルドする利点

具体的な手順の前にソースコードからBlenderをビルドする利点をまとめてみたいと思います。

* 最新のBlenderの機能を利用できる
* Modifierなど、Python APIが用意されていなくアドオンでは実現できない機能を追加/改良できる
* Blenderのバグを修正できる
* バグの修正パッチを次のバージョンのリリースを待たずに随時利用できる
* IDEやデバッガなどを利用することで、Blenderのソースコードをより深く知ることができる
* 改善/追加した機能をコミュニティにフィードバックすることで、Blenderユーザや開発者から感謝される
* ソースコードのコメントやコミュニティでのやり取りは全て英語であるため、英語に触れる機会を増やせる
* 3DCGソフトで利用されている技術を知ることが出来る
* Blenderのバージョン何使ってるのと聞かれたときに、自前ビルドしてるぜと（ちょっとだけ）自慢できる

とまあ挙げたらきりがないので、早速Blenderのビルド手順を見ていきたいと思います。

# Windowsにおけるビルド手順

## ビルドに必要なソフトウェアのインストール

### Visual C++ Express のインストール

Blenderのコアの部分はC言語とC++混在で書かれているため、Blenderをビルドするためには、Windows上でビルドするための環境が必要です。
ここでは、Microsoftが提供しているIDEである **Visual C++ Express** を用いてビルドすることにします。

Visual C++ Express の最新版は以下のURLからダウンロードすることが可能です。
https://www.visualstudio.com/ja-jp/products/visual-studio-express-vs.aspx

### CMakeのインストール

Blenderはクロスプラットフォームの3DCG作成ソフトで、執筆時点ではWindows/Linux/Macに対応しています。
複数のプラットフォームに対応させるため、Blenderは複数のOSや複数のコンパイラでコンパイルできなくてはなりません。
Blenderでは、**CMake** を利用してプロジェクトファイルやMakefileを作成し、様々な環境でビルドできるようにしています。
このため、Windows向けに提供されているCMakeをインストールする必要があります。

CMakeの最新版は以下からダウンロードすることができます。
http://www.cmake.org/download/

### Gitのインストール

Blender本体のソースコードは、 **Git** と呼ばれるバージョン管理ツールで管理されています。
Windows向けのGitをインストールする必要がありますが、ここでは **GitHub for Windows** をインストールすることにします。
GitHub for Windows は、GitHubのWindowsクライアントアプリで、GitHub for Windows をインストールすることで、Git本体もインストールされます。

GitHub for Windows の最新版は以下から入手することが出来ます。
https://windows.github.com/

### SVNのインストール

Blenderのビルドには、コンパイル済みのライブラリが必要になります。
Git はバイナリのバージョン管理には不向きであるため、コンパイル済みのライブラリは **SVN** で管理されています。
（参考：[Git、Mercurial、Subversion、Perforce、どれを使う？](http://qiita.com/tarosuke@github/items/1eab3cff3273a488a499)）

WindowsにSVNをインストールするため、ここでは **SlickSVN** をインストールすることにしました。
最新の SlickSVN は以下から入手することが可能です。
https://sliksvn.com/download/

## ソースコード・バイナリの取得

```sh
$ cd D:\workspace\blender_dev
$ git clone git://git.blender.org/blender.git
$ cd blender
$ git submodule update --init --recursive
$ git submodule foreach git checkout master
$ git submodule foreach git pull --rebase origin master
$ cd D:\workspace\blender_dev
$ svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/win64_vc12 lib/win64_vc12
```

## プロジェクトファイルの作成

ビルド後のBlenderのバイナリを置くためのディレクトリを作成します。

```sh
$ echo %cd%
D:\workspace\blender_dev\blender
$ cd ..
$ mkdir build
```

CMakeを起動します。
**ソースが置かれたディレクトリ** と **ビルドにより作られるデータを置くディレクトリ** を指定し、 **Configure** をクリックします。

![20150725-1.png](https://qiita-image-store.s3.amazonaws.com/0/38888/4fc5aa9a-b33e-3cd9-812a-1b5c612d8b5d.png)

続いて表示されるウインドウでは、**インストールした Visual C++** を指定して **Finish** をクリックします。

![20150725-2.png](https://qiita-image-store.s3.amazonaws.com/0/38888/e16c0d3c-8d8c-c6e6-a8d9-8285bf78d9bb.png)

しばらく時間が経った後 ```Configuring done``` という文字が表示されたらBlenderのビルド設定が完了したことになります。
※ プロジェクトファイルの作成に失敗した場合など、ビルドの設定をし直したい場合は、メニューの **File** - **Delete Cache** でCMakeのキャッシュを削除してから再度実行しましょう。

続いて、 **Generate** をクリックします。
しばらく時間が経った後 ```Generating done``` という文字が表示されたらプロジェクトファイルの作成に成功しています。

![20150725-3.png](https://qiita-image-store.s3.amazonaws.com/0/38888/319a3bc6-f1c7-6630-03e0-d621cc1f8760.png)

![20150725-4.png](https://qiita-image-store.s3.amazonaws.com/0/38888/dd9bd7ca-e0de-7ed0-e858-f2be4bddb557.png)


## Blenderをビルドする

CMakeでビルドの設定を行った際に指定した、ビルド時のデータが置かれるディレクトリ、 ```D:\workspace\blender_dev\build``` に移動してみましょう。
プロジェクトファイルの作成に成功していれば、 ```Blender.sln``` というファイルがあると思います。
```Blender.sln``` は、BlenderをビルドするためのVisual C++のプロジェクトファイルです。

![20150725-5.png](https://qiita-image-store.s3.amazonaws.com/0/38888/4f250bfd-dbb1-11eb-2c3c-10e9676840d2.png)

```Blender.sln``` をダブルクリックして Visual C++ を開きます。

![20150725-6.png](https://qiita-image-store.s3.amazonaws.com/0/38888/e0398867-effa-daf1-076e-10a0ebab5ae8.png)

とりあえず今回はデバッグモードで実行したいので、プロジェクトの読み込みが終わったら **F7** キーを押して **Debug** ビルドします。
エラーが出てビルドできない場合は、以下の手順でソースやバイナリを最新化してからリビルドしてみましょう。
もしかしたらビルドエラーが解消されるかもしれません。

```sh
$ echo %cd%
D:\workspace\blender_dev
$ cd lib\win64_vc12
$ svn update
$ cd ..\..\blender
$ git pull --rebase
$ git submodule foreach git pull --rebase origin master
```

なお、ビルドの準備を行っている間にもリポジトリへのcommitは常に行われているので、ビルド前やソースコミット前には可能な限り最新化しておくことが重要です。
最新化に間を空けてしまうとその間に修正された部分も多くなり、コンフリクトが発生した時の対応が面倒になります。

RC版以外のときにビルドを試みた場合、ソースやバイナリの最新化を行ってもビルドできない場合があると思います。
この場合、CMakeでConfigureを実行した後に表示される依存関係のチェックボックスの欄の中から、コンパイルエラーに関連する箇所を見極めてチェックを外すか、問題箇所のソースを自力で変更していくか、ソースのリビジョンを過去に戻して（`git reset`等で）確かめるしかありません。
※ Debug ビルドではなく、 **RelWithDebInfo** や **Release** ビルドでビルドするとうまくいくという報告もありますので、こちらも試してみるとよいかもしれません。

続いて、ソリューションエクスプローラから **INSTALL** を見つけて右クリックして、 **スタートアップ プロジェクトに設定** を選択します。
再度、 **F7** キーを押してDebugビルドします。

![20150725-7.png](https://qiita-image-store.s3.amazonaws.com/0/38888/a9ef2069-fad5-e7f7-e66f-52fd7ea4d047.png)

無事Blenderのビルドが完了すると、 ```D:\workspace\blender_dev\build\bin``` にビルドされたBlender本体のバイナリが置かれていることがわかります。

![20150725-8.png](https://qiita-image-store.s3.amazonaws.com/0/38888/0985fd55-fe15-2a04-d549-4412b9823879.png)

## Blenderをデバッグ実行する

Blenderが無事にビルドできたので、Blenderをデバッグ実行してみましょう。
ここでは適当に、ループカットに関連しそうなソースコードにブレークポイントを設定して **F5** でBlenderをデバッグ実行してみました。

![20150725-0.png](https://qiita-image-store.s3.amazonaws.com/0/38888/36db3358-20df-60e0-ba62-df253e16828d.png)

設定したブレークポイントでプログラムが一時停止されていることが分かります。
もし、Blenderに実行に失敗する場合は、環境変数にPythonのパスなど依存するソフトのパスが正しく設定されているかを確認しましょう。

Blenderのビルドの解説はここで終了です。
しかし、Blender本体の開発やソースコードリーディングをしようとしている人にとって、まだまだこれは開発の第一歩を踏み出したに過ぎません。
本格的にBlender本体のソースを理解するには、ひたすらソース読んで改造してデバッグしていきながら理解していく必要があります。

# 参考情報

* [Blender Wiki](http://wiki.blender.org/index.php/Dev:Doc/Building_Blender/Windows/msvc/CMake)
* [Visual C++ Express](https://www.visualstudio.com/ja-jp/products/visual-studio-express-vs.aspx)
* [CMake](http://www.cmake.org/)
* [GitHub for Windows](https://windows.github.com/)
* [SlickSVN](https://sliksvn.com/download/)
* http://blenderartists.org/forum/archive/index.php/t-305344.html
* [Git、Mercurial、Subversion、Perforce、どれを使う？](http://qiita.com/tarosuke@github/items/1eab3cff3273a488a499)