GR-CITRUSに組み込むmrubyをビルドする方法 for Windows

<b>2016/12/20 コメントにてご指摘をいただきました。Windows用のgccも必要でありMSYS2やMingwのセットアップが必要です。[shimo_cchi](http://qiita.com/shimo_cchi)さんが[RubicでGR-CITRUSのmrubyプログラミング事始め４[mrbgems編]](http://qiita.com/shimo_cchi/items/645d814995c1902a2563)で、より詳しく丁寧にビルド環境の準備を解説してくださっています。そちらを確認していただくことをおすすめします。
</b>

---

GR-CITRUSは、mrubyが気軽に使える小型ボードです。Chrome Appの「Rubic」を使うことでプログラムの作成から実行までスムーズに行うことができます。

GR-CITRUSのファームウェアの中にはmruby(libmruby.a)が組み込まれています。しかし、標準のファームウェアに組み込まれているmrubyには最低限のライブラリ(mrbgems)しか組み込まれていないため、ちょっと複雑なものを作ろうとしたときに困ることがあります。その場合、必要となるライブラリ(mrbgems)を組み込んだmruby(libmruby.a)のビルドと、それを組み込んだGR-CITRUSのファームウェアのビルドが必要となります。

この記事ではその手順を紹介します。
macOSの場合は、[GR-CITRUSに組み込むmrubyをビルドする方法 for macOS](http://qiita.com/takjn/items/0ef3d46107ac8faaf621)をご確認ください。
なお、Ubuntu16.04系でも同様の手順とbuild_config.rbでビルドできることを確認しています。

#必要なもの
この記事では、Windows10を使用しています。GR-CITRUSのファームウェアをビルドしたことがない方は、あらかじめ[GR-CITRUSのFirmwareをビルドする方法 for Windows](http://qiita.com/takjn/items/4838dc0c3f879a0e3291)に従い、ビルド環境のセットアップとファームウェアのビルドができることの確認を行っておいてください。

追加で、rubyとbisonが必要となります。それぞれセットアップしてください。

* Ruby 2.3.1(x64) for windows
* Bison for windows 2.4.1

Rubyのインストールには[RubyInstaller](http://rubyinstaller.org/)を利用しました。セットアップ中、rubyの実行ファイルへのパスを設定するチェックボックスをONにしています。

bisonのインストールには、[Bison for windows](http://gnuwin32.sourceforge.net/packages/bison.htm)を利用しました。インストールに際は、インストール先を半角スペースを含まないパスに変更する必要があります（デフォルトのProgram Filesではmrubyビルド時にエラーとなる）。
この記事では、C:\Tool\GnuWin32を使用しています。

#mrubyのソースコードの取得
コマンドプロンプトを起動して、githubのmrubyリポジトリからmasterブランチをクローンします。

```
git clone https://github.com/mruby/mruby
```

#GR-CITRUS用のbuild_config.rbの準備
mrubyのビルドを行うためには、`build_config.rb`ファイルを適切に設定する必要があります。GR-CITRUS用のbuild_configファイルは、GR-CITRUSのFirmwareのmrubyフォルダに含まれてます。

* [build_config.rb](https://github.com/wakayamarb/wrbb-v2lib-firm/blob/master/firmware_develop/mruby/build_config.rb)

このファイルを取得するか、その内容をすべてコピー＆ペーストして、`mruby`フォルダ内にある`build_config.rb`ファイルの内容を置き換えてください。

#build_config.rbの修正
上記で取得した`build_config.rb`ファイルを自分の環境にあうように書き換えます。書き換えるのは、`BIN_PATH`の行です。

```text:build_config.rb
BIN_PATH = "D:/ide4gr-E0.8.0/hardware/tools/gcc-rx/rx-elf/rx-elf/bin"
```

ここで指定するパスは、rx-elf-gccコマンドがあるパスです。[GR-CITRUSのFirmwareをビルドする方法 for Windows](http://qiita.com/takjn/items/4838dc0c3f879a0e3291)に従いビルド環境を構築した方は、IDE for GRをインストールしたパスとなります。

また、このファイル内でmrubyに組み込みたいライブラリ(mrbgems)を指定することができます。適宜、必要に応じて追加、削除などを行ってください。

#GNU_RX_elf.batの実行
[GR-CITRUSのFirmwareをビルドする方法 for Windows](http://qiita.com/takjn/items/4838dc0c3f879a0e3291)で修正した`GNU_RX_elf.bat`をダブルクリックして実行します。

以降の作業は表示されたコマンドプロンプトで行います。

#mrubyのビルド
上記で修正した`build_config.rb`があるフォルダに移動します。

```
cd mruby
```


以下のコマンドを実行し、bisonへのパスを通します。
C:\Tool\GnuWin32は、bisonをインストールしたパスに変更してください。

```
Set PATH=C:\Tool\GnuWin32\bin;%PATH%
```

mrubyのビルドを行います。

```
ruby ./minirake
```

ビルドが成功すると、以下のようなメッセージが出力されます。`build\RX630\lib`フォルダに出力された、`libmruby.a`ファイルが、GR-CITRUSのファームウェアに取り込むmruby（ライブラリ）です。

```
================================================
      Config Name: RX630
 Output Directory: build/RX630
    Included Gems:
             mruby-math - standard Math module
             mruby-numeric-ext - Numeric class extension
================================================
```

#GR-CITRUSのファームウェアのビルド
GR-CITRUSのファームウェアの`wrbb-v2lib-firm\firmware\wrbb_mruby`フォルダにある`libmruby.a`ファイルを、mrubyのビルドで出力された`libmruby.a`ファイルで上書きします。

```
copy build\RX630\lib\libmruby.a d:\work\wrbb-v2lib-firm\firmware\wrbb_mruby\libmruby.a
```
GR-CITRUSのファームウェアをビルドします。`firmware`フォルダに移動して、`make`コマンドを実行します。

```
cd d:\work\wrbb-v2lib-firm\firmware\

make
```

正常終了すると、makefileと同じフォルダにあるcitrus_sketch.binファイルが更新されているはずです。

ビルドしたファームウェアを書き込む場合は、GR-CITRUSのリセットボタンを押してUSBメモリとして認識させた後、citrus_sketch.binファイルをコピーしてください。