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 件のコメント:
コメントを投稿