2011年8月27日土曜日

newlibの構築(自分用メモ)

Code Sourcery G++ Lite(ARM)を使って、newlibをビルドする方法について残しておく。
なお、build環境はcygwin。

Code Sourcery G++ Lite 2011.03-41
newlib-1.19.0
を使用。

まず、configure-inスクリプトにパッチを当てる。パッチを当てないと、makeのときに「コンパイラはそのopコードを解釈できない」といったエラー(うろ覚え)が出てしまう。確か、arm固有のcrt0.oあたりをビルドするときに、アセンブラでかかれたコードの一部をアセンブルできないというものだったはず。これはarmv6-mディレクトリ内のビルドのときだったので、今回はターゲットがcortex-m3限定(thumb/thumb2限定)なのでarm命令用のライブラリは最初からビルドしないようにしよう、というのがパッチの目的。
(ところで、Code sourceryのLite版はthumb/thumb2命令しか吐けない仕様だったかなぁ?)

解凍したnewlibのルートディレクトリにあるconfigure-ml.inスクリプトの210~220行目あたりを以下のように編集。

209| multidirs=
210| for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
211|   dir=`echo $i  | sed -e 's/;.*$//'`
212|   if  [ "${dir}" = "." ]; then
213|     true
+++|   else if [ "${dir}" = "armv6-m" ]; then
+++|     true
214|   else
215|     if [ -z "${multidirs]" ]; then
216|       multidirs="${dir}"
217|     else
218|       multidirs="${multidirs} ${dir}"
219|     fi
220|  fi
+++|  fi
221| done

これでarmv6-mなディレクトリとライブラリは無視されるようになる。

いつものように適当なディレクトリを作って、
configure --target=arm-none-eabi --prefix=/usr/local/arm-tools --enable-multilib --enable-interworks
としてコンフィグし、make & make installでOK。

0 件のコメント:

コメントを投稿