2011年3月8日火曜日

avr-gccをgcc-4.5.2でビルドする

このブログをアップデートする時は、なぜかgccのビルドの話題が多いですが、特別最新のgccを追っかけているわけではありません。たしかに新しい方がサポートされているデバイスが多いのでついつい最新のものになっているだけなんですが、、

今回は binutils-2.21 gcc-4.5.2 avr-libc-1.7.1 でビルドしてみました。最新のものにつきもののハマりどころがやっぱり有ったのでその記録です。

gcc-4.5.x 以降は gmp / mpfr に加えて mpc をあらかじめインストールしておく必要があります。

Fedora14のLive版ではデフォルトでmpcのヘッダファイル(mpc.h)がインストールされていないので、yum でインストールしておきます。

1) yum search mpc-devel
libmpc-devel.i686 : Header and shared development libraries for MPC

2) yum install libmpc-devel.i686


* binutils-2.21 *

1) mkdir AVR_binutils-2.21
2) cd AVR_binutils-2.21
3) ../binutils-2.21/configure --target=avr --prefix=/usr/local/avr4
4) make
5) sudo make install


* gcc-4.5.2 *

gcc-4.5.2のビルド自体には問題無いのですが、これを使った次の avr-libc に問題が出るので、パッチを当てておきます。

問題はgcc-4.5.2ではサポートされていないattiy2313aを、avr-libcがライブラリをコンパイルしようとするため、make時にエラーで止まります。 すでにgccにはバグリポートが出ているのでこの辺↓を参考にしてみてください。
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45261

パッチを当てるファイルは、

gcc-4.5.2/gcc/config/avr/avr.c

で、当てたパッチは、

*** avr.c_ORG 2011-03-08 19:51:12.986668845 +0900
--- avr.c 2011-03-08 19:53:32.175401145 +0900
***************
*** 206,217 ****
--- 206,222 ----
break;

if (!t->name)
+ /*
{
fprintf (stderr, "unknown MCU '%s' specified\nKnown MCU names:\n",
avr_mcu_name);
for (t = avr_mcu_types; t->name; t++)
fprintf (stderr," %s\n", t->name);
}
+ */
+ error ("Unknown MCU %qs specified. See --target-help for "
+ "known MCU names.", avr_mcu_name);
+

avr_current_device = t;
avr_current_arch = &avr_arch_types[avr_current_device->arch];

です。

(バグリポートにはgcc-4.5.2では解決済って書いてあるんですが、、なぜ?)

パッチが当たったら、

1) mkdir AVR_gcc-4.5.2
2) cd AVR_gcc-4.5.2
3) ../gcc-4.5.2/configure --target=avr --prefix=/usr/local/avr4 --enable-languages=c --with-dwarf2 --disable-nls
4) make
5) sudo make install

で、gccのインストール。


* avr-libc-1.7.1 *

gccにちゃんとパッチが当たっていればavr-libcは普通にコンパイルできるはずです。

1) mkdir AVR_avr-libc-1.7.1
2) cd AVR_avr-libc-1.7.1
3) ../avr-libc-1.7.1/configure --prefix=/usr/local/avr4 --host=avr --build=i686-pc-linux-gnu
4) make
5) sudo make install

出来上がったビルドをチェック、、ちゃんとコンパイルできるようです。

++ Myself ++

普通(?)のサラリーマン -- 生活のすきま時間にキーボードとはんだごてを持ち替えてプログラミングと電子工作してます