200打鍵でビルドするTOPPERS/SSPカーネル


> Interface6月号「ARMコア搭載FM3マイコンではじめる組み込み開発」特集で付録にFM3がついてきたので、そちら方面のみなさんは入手されている方も多そうですが、いかんせん組込み方面ではMacは肩身が狭い気がする今日この頃です。

という [ご意見](http://d.hatena.ne.jp/takahashim/20120526/p1)が示すように，組み込み屋といえば FMV か Let's Note しか使わないように思われがちです．

しかし，機器組み込み分野でも，実のところ Mac率は低くはありません．
有名なところだと TOPPERS プロジェクト/名古屋大学の高田教授のMacBook好きとか．

とはいえ，日本の組み込み屋さんたちは，自前で解決するのが好きなようで，また，それが大事な知識と思っているフシがあって，バイナリディストリビューションは多くありません．
(海外だと，ARMやMIPSのビルド済みGCCのOSX向けパッケージは巷に溢れているようなのですが．)

GCCのビルドをする時間があるなら，魅力的な製品開発に時間を使ったら? など思うのですが．

そんなこんなで，環境構築の手間を極限まで下げてみよう，ということで環境を作りました．解説します．

手間が下がった指標として，シェルへの打鍵数を用います．マウスは一切使いません．

## Homebrew のインストール

OSX に Homebrew をインストールしてください．

手順の詳細は省きます．
世の中にあふれるブログエントリや，Qiita 辺りを参照してください．

ここは打鍵数に含めません．

## Tap の追加

Homebrew 本家が TOPPERS/SSP に興味を示すはずはありません．
よって未来永劫，本家のリポジトリに TOPPERS/SSP は含まれません．
一手間にはなりますが，Tap (いわゆるオレオレリポジトリ) を追加します．

```
brew tap PizzaFactory/commandline
brew tap PizzaFactory/toppers_open
```

```PizzaFactory/commandline``` は，GCC など汎用のオープンソース群が含まれています．
```PizzaFactory/toppers_open``` は，その名の通り，TOPPERSプロジェクトがリリースしているものをベースとしています．しかし，PizzaFactory プロジェクトを始めとする有志によるパッチが，いろいろと当たっています．

## SSPカーネルのソースツリーをインストール

本稿では，CQ-FRK-FM3 のターゲットに必要なソースツリーを取得します．
今のところ，このターゲット以外の Formula (いわゆるパッケージ)はありません．

[PizzaFactory プロジェクト](https://www.bountysource.com/teams/pizzafactory)に寄付したり，合同会社もなみ屋のようなオープンソース志向の会社に発注したりすると，整備の速度があがるかもしれません．(冗談です)

```
brew install ssp-kernel-cq_frk_fm3
```

SSPカーネルのビルドに必要な Formulae (いわゆるパッケージ群)をどんどんと読み込んでいきます．

## じっと待つ

大抵の Formula は bottle (いわゆるバイナリパッケージ) 化されています．
ネットワークの太さにも依りますが，1Mbps 程度の回線で，全て bottle 化されている場合は，5分程度で終わります．

### bottle になっていないと時間はかかる

しかし，もしかすると，PizzaFactory のクロス GCC は bottle 化されていないかもしれません．

bottle になっていない場合には，お手元の Mac の性能次第です．
概ね 20分以上は覚悟してください．
ツールが bottle になっていない場合でも，newlib や stdc++ はビルド済みのものが使われます．
なので，これでもかなりの時短にはなっています．

[PizzaFactory プロジェクトに寄付](https://www.bountysource.com/teams/pizzafactory)したり，合同会社もなみ屋のようなオープンソース志向の会社に発注したりすると，bottle化の速度があがるかもしれません．(再掲：冗談です)

それと，pythonbrew など，Homebrew と相性の良くない python が入っていると，boost のビルドが始まることがあります．
python 周りについては ```brew doctor``` を実行すると問題点が提示されます．(これは，本稿に限らない， Homebrew 汎用のノウハウです)

プロンプトに戻ってきたら，インストールは終了しているはずです．

### インストールに失敗する場合

ネットワークやディスクなど物理的な問題でない場合には，おそらく既存の(Homebrewが管理していない)ファイルと競合しています．

ありがちなのは，GPG 関連です．上記インストールでは repo を使っており，間接的に GPG を使っています．
Mac用として配布されている GPG パッケージの中には，/usr/local/bin に関連ツールをインストールするものがあり，衝突します．

その場合には，一旦，該当する GPG パッケージをアンインストールしてください．
( ```brew link --force ...``` での解決は，思わぬ副作用が出たりするのでお薦めできません．)


## configure スクリプトの実行

さてはて，下記のような出力が見られたら，インストールは完了です．
(エラーの場合は，それと分かる表示で終了します．)

```
==> Summary
?  /usr/local/Cellar/ssp-kernel-cq_frk_fm3/1.2.1: 141 files, 1.0M, built in 105 seconds
```

ソースツリーのインストールに成功したあとは，ビルドするカーネルのコンフィギュレーションを行います．
下記のようにして configure スクリプトを起動してください．

```
/usr/local/Cellar/ssp-kernel-cq_frk_fm3/1.2.1/share/unofficial/configure -T cq_frk_fm3_gcc
```

パス中の ```1.2.1/``` 以降は，今後変更になるかもしれません．
何にせよ，```/usr/local/Cellar/ssp-kernel-cq_frk_fm3``` の配下にある configure スクリプトを探しだして，オプションを ```-T cq_frk_fm3_gcc``` として呼び出してください．

すると，カレントディレクトリに Makefile や sample1.c などファイルが生成されます．

この configure スクリプトは TOPPERS/SSP カーネルに含まれるものとほぼ同一です．
詳細を知りたい方は，SSPカーネルのドキュメント類を参照してください．

## make でビルド

configure スクリプトの実行が終わったら，おもむろにビルドします．

```
make
```

TOPPERS/SSP カーネルは極めて小さなカーネルのですので，ビルドはものの数秒で終わります．

そして，カレントディレクトリに，ssp.out なるファイルができているはず．
あとはターゲットに流し込むのですが，この辺は好みのツールがございますでしょうから，詳細は割愛します．

## 以上，200打鍵

以上纏めます．

```
brew tap PizzaFactory/commandline
brew tap PizzaFactory/toppers_open
brew install ssp-kernel-cq_frk_fm3
/usr/local/Cellar/ssp-kernel-cq_frk_fm3/1.2.1/share/unofficial/configure -T cq_frk_fm3_gcc
make
```

ちょうど200打鍵のはずです．
いまどきのシェルなら completion が効くでしょうし，本稿を読みながらのコピペなら，もっと短いでしょう．

## 「もしかして? バグ?」

一連の Tap は，本稿執筆時点では正式リリース前のものです．
バグがある可能性は低くはありません．
その際は，症状に応じて

* https://github.com/PizzaFactory/homebrew-commandline
* https://github.com/PizzaFactory/homebrew-toppers_open

辺りにご一報頂けると，適宜修正なり，適切なバグレポート先のご紹介なりができるかと思います．

## まとめ

それでは，環境整備で悩まない，快適な機器組み込みシステム開発を．