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にリネームする。

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を動かすために。

brew update
brew install wine --without-x11

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

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

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

brew uninstall libtool

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

NXT Driverのインストール

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

NeXTToolのインストール

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

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

ビルド

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

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

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

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

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を修正する。

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へのパスを変更

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をリビルドする。

cd nxtOSEK/ecrobot/c++
make all
make release

これを、{c,c++,bios,nxtway_gs_balancer} の全てに対して行う。

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

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

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

サンプルを転送してみる

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

で、実行する。

動いてる!!