2011年8月27日土曜日

glibc vs newlib on armv7-m

一般的な話として、「glibcはサイズが大きい」「newlibは組み込み用にコンパクトに設計してる」と理解していました。これで間違っていないですよね?

今やってるプロジェクトで、どうもROMサイズが足りなくなる予感がしているので、実行オブジェクトのサイズを小さくする方法を模索中。ターゲットはいつもの(Stellaris/CORTEX-M3)です。
現在使っているコンパイラ&ライブラリはCoresourcery G++ Lite(ARM)なので、これに添付されてくるライブラリはglibcらしいということで、これをnewlibに変更してみてはどうかと。

とりあえずnewlibの最新版newlib-1.19.0をダウンロード。configure+makeだけではビルドできなかったので、ゴニョゴニョして(詳細は別途)とりあえずthumb2対応のnewlib版libc.aを得た。そして、今のプロジェクトでライブラリだけ差し替えてビルド後、arm-none-eabi-sizeでできあがった実行ファイルのサイズを調べてみると・・・

(glibc版ライブラリ)
    text     data       bss       dec      hex filename
247192    5516   79544  332252   511dc ***.elf

(newlib版ライブラリ)

    text     data       bss       dec      hex filename
249496    5516   79544  334556   51adc ***.elf

「なんや!glibcに負けとるやないか!」

というわけでnewlib案はボツに。
結局、実行コードのサイズを下げるという目的は果たせなかった・・・。

0 件のコメント:

コメントを投稿