Archive for 2月 9th, 2012

mbedオフラインビルド

Posted by ゆのじ on 2月 9th, 2012

先の投稿で書いたが、mbedは大変すばらしいものの、それが無くなったことを考えると些か不安でもある。そのため、エクスポートしたプロジェクトをローカルでビルドする方法をきちんと確立しておきたかった。

で、ひとまずさんざん試行錯誤した結果、さくっとビルドする方法がわかったのでメモしておく。ちなみに、OSX Lion(10.7.3)にmacports環境なので、WindowsやLinuxユーザの方には適用できないかもしれない。

用意

  • codesourcery gcc用としてエクスポートしたソース
  • YAGARTO(http://www.yagarto.de/)から拾ってきたYAGARTO GNU ARM toolchainの最新版

展開

  • 適当なところ(うちは/opt/local/)にyagarto(最新版).appをおいて実行
    • 中身が実行したディレクトリ/yagarto(バージョン)/に展開される
    • 趣味で/opt/local/yagarto -> /opt/local/yagarto(バージョン) にsymlinkしておく
  • ~/.zshrcなり~/.bashrcなり~/.tcshrcなりにpathを追加
  • エクスポートしたソースを展開してmake
  • できあがり!

・・・あれー。これで終わるはずじゃなかったのだが。macportsのarm-none-eabi-gccでビルドすべくやってみたら、newlibの改変でエラーぼこぼこ出て、調べたら–disable-newlib-supplied-syscallsを付けろとかいうからPortfileに付けてみたらビルド出来ず、–enable-languages=c,c++付けたらarm-none-eabi-gccはビルド出来たけどcrt0.oが無くて結局ダウンロードした奴がビルド出来なくて、ついにはcodeRedのred suite 4 fullの試用版まで落としてきて試したにも関わらず駄目だったのに。

ひとまず大変シンプルなコードでしかテストしてないのでどこまでちゃんと使えるかは不明だがざくっとしたコードは問題なく動いていて、ライブラリ等も一式使えてる模様。ただ、mbed interfaceの支援がないからか、最適化オプションの都合か、バイナリは相当デカくなってしまった。mbedのサイトでビルドすると4,356bytes、エクスポートしてローカルでビルドすると56,736bytes。何かに騙されてる気がするくらいのサイズ差がある。恐らく不要なモノが大量にリンクされてるだけだろうし、この辺放置するとエラいことになりそうなので、追って調査。それと、このままだとmbedからエクスポートしてきたソースのビルドは出来る(ライブラリ類一式がアーカイブに入っている)が、一からソースを書き始めるには諸々準備がいる。その辺もそのうち時間が取れたら調べて書く。

2012/2/20追記:

上のnewlib云々の問題、がた老氏がSTM32で遭遇された問題にそっくりのような気がする。Stub書けば良いだけなら話は早い。追って調査としたい。