ETロボコン開発環境構築 for Mac


元ネタはこれ。
http://sat0yu.hatenablog.jp/entry/20130320/1363767850

Wineのインストールに時間がかかるので先にやっといたほうがいいかも。

# 開発ツールのインストール
ここからMac用のクロスコンパイラをダウンロードして、適当なところに展開する。
http://sourceforge.net/projects/yagarto/files/YAGARTO%20for%20Mac%20OS%20X/20111119/

今回はちょっと古めの
`yagarto-bu-2.21_gcc-4.6.2-c-c++_nl-1.19.0_gdb-7.3.1_eabi_intelmac_20111119.dmg`
をダウンロードした。どうも 4.6.2 でないとロボットに転送してから動かないらしい。

参考:
http://tobese.hatenablog.jp/entry/2014/04/19/183633

展開してできたディレクトリを`yagarto`にリネームする。

```Bash
ls yagarto
Binutils.webloc   COPYING3.LIB      arm-none-eabi/    source.txt
COPYING           GCC.webloc        bin/              tools/
COPYING.LIB       GDB.webloc        include/          version.txt
COPYING.LIBGLOSS  GNU.webloc        lib/
COPYING.NEWLIB    Newlib.webloc     libexec/
COPYING3          YAGARTO.webloc    share/
```

`ls`してこんなかんじになってればOK

# nxtOSEKのダウンロード

## nxtOSEK
ここから。今回は`nxtOSEK_v218.zip`をダウンロードした。
http://sourceforge.net/projects/lejos-osek/files/nxtOSEK/

## sg.exe
oilファイルのコンバータ。`osek_os-1.1.lzh`の中に入ってる。
http://www.toppers.jp/osek-download.html

## Wineのインストール
sg.exeを動かすために。

```Bash
brew update
brew install wine --without-x11
```

こんなかんじで怒られる場合

```Bash
Error: wine dependency libtool not installed with:
  --universal
```

それぞれ一旦削除して、wineと一緒に再インストールすればOK

```Bash
brew uninstall libtool
```

参考: 
http://blog.geta6.net/post/64863576065/osx-wine
http://qiita.com/sleon326/items/671aa0b2a7877edaff66


# NXT Driverのインストール
http://www.lego.com/en-us/mindstorms/downloads/software/ddsoftwaredownload/

ここの、`NXT Fantom Driver` からダウンロードする。
展開して出てくる `MAC legodriver.pkg` を実行してインストールする。

# NeXTToolのインストール
NeXTToolはプログラムをロボットへ転送するためのツール。

http://bricxcc.sourceforge.net/utilities.html
ここの `Download for Mac OSX (universal binary)` からダウンロードする。

# ビルド
必要なものがひと通り揃ったのでビルドしてみる。

## ビルドツールのパスを変更

そのままだとCygwinでビルドするようになっているので、Makefileを修正して、さっき展開したビルドツールに置き換える。


以下の3箇所を環境に合わせて編集する。

```diff:nxtOSEK/ecrobot/tool_gcc.mak
- TARGET_PREFIX := arm-elf
+ TARGET_PREFIX := arm-none-eabi
...
- GNUARM_ROOT = /cygdrive/C/cygwin/GNUARM
+ GNUARM_ROOT = /Users/tac/Desktop/mac_env/yagarto
...
- NEXTTOOL_ROOT = /cygdrive/C/cygwin/nexttool
+ NEXTTOOL_ROOT = /Users/tac/Desktop/mac_env #nexttoolのあるパス
...
- NEXTTOOL  = NeXTTool.exe
+ NEXTTOOL  = nexttool
```
展開先に合わせて修正してね。

途中、``cygpath`` が処理できなくて死ぬので、makefileを修正する。

```diff:nxtOSEK/ecrobot/ecrobot++.mak
-	$(WINECONSOLE) $(TOPPERS_OSEK_ROOT_SG)/sg/sg $(shell cygpath -m -w ${TOPPERS_OSEK_OIL_SOURCE}) \
-        -os=ECC2 -I$(shell cygpath -m -w ${TOPPERS_OSEK_ROOT_SG})/sg/impl_oil -template=$(shell cygpath -m -w ${TOPPERS_OSEK_ROOT_SG})/sg/lego_nxt.sgt
+	$(WINECONSOLE) $(TOPPERS_OSEK_ROOT_SG)/sg/sg.exe $(TOPPERS_OSEK_OIL_SOURCE) -os=ECC2 -I${TOPPERS_OSEK_ROOT_SG}/sg/impl_oil -template=${TOPPERS_OSEK_ROOT_SG}/sg/lego_nxt.sgt
```

## Wineへのパスを変更
```diff:nxtOSEK/ecrobot/ecrobot++.mak
	# in order to proper set up environment variables and avoid warnings.
-	WINECONSOLE := /Applications/Wine.app/Contents/MacOS/startwine wineconsole
+	WINECONSOLE := /usr/local/bin/wineconsole
	# Native tools for Mac OS X doesn't need any launcher

```

## nxtOSEKのリビルド
EABIのバージョンが合わないので、nxtOESKをリビルドする。

```Bash
cd nxtOSEK/ecrobot/c++
make all
make release
```
これを、```{c,c++,bios,nxtway_gs_balancer}``` の全てに対して行う。

参考:
http://tobese.hatenablog.jp/entry/2014/04/19/183633

## サンプルをビルドしてみる

```Bash
cd nxtOSEK/samples_c++/cpp/LCD
make clean
make all
```

最終的に、こんなかんじでrxeファイルが出力されてばOK。

```
...
Generating binary image file: lcd_rom.bin
Generating binary image file: lcd_ram.bin
Generating binary image file: lcd.rxe
```

## サンプルを転送してみる

```Bash
$ ./rxeflash.sh
Executing NeXTTool to upload lcd.rxe...
lcd.rxe=18784
NeXTTool is terminated.
```

で、実行する。

![IMG_20140810_060049.jpg](https://qiita-image-store.s3.amazonaws.com/0/3733/9062b03f-2a41-7488-ab7f-cc935ae68381.jpeg "IMG_20140810_060049.jpg")

動いてる！！