binutils のインストール

マイコンの勉強を始めたので、「H8とMSP430マイコンで学ぶ 組込みシステム開発体験ガイドブック」などという簡単そうな本を買って勉強中。
といってもまだ部品すら買ってないという進捗具合なのだけど。。
(秋月でまとめ買いするものリストを作っているところ。嘘ですこれから作ります。)
ということで先に開発環境のセットアップから。
Cygwinでクロスコンパイル環境を作ろうというHEWから始めないあたり好印象なのですが、いかんせんCygwinを入れていない。
Cygwinは昔の記憶を頼りにさくっと完了。

H8用のクロスコンパイラも作成。必要なのはBINUTILS/GCC/NEWLIBとのこと。
なにも考えずに最新版をwgetでDLしてtar zxvfで展開。

しかし

                                                                                                                                                  • -

../configure --target=h8300-hms --disable-nls --prefix=/opt/h8300
make

                                                                                                                                                  • -

したところ下記のように怒られた。

                                                                                                                                                  • -

>../../libiberty/pex-unix.c:549:18: error: ‘_P_NOWAITO’ undeclared (first use in this function)

                                                                                                                                                  • -

pre-unix.cのこの行がいけないらしい。

                                                                                                                                                  • -

>pid = spawnvpe (_P_NOWAITO, executable, (cc_cp)argv, (cc_cp)env);

                                                                                                                                                  • -

色々ググってみたところ、直接定義してやるのが速そうだったので、libibertyの下のconfig.hに下記を直接追加

                                                                                                                                                  • -

#ifndef _P_NOWAITO
#define _P_NOWAITO 3
#endif

                                                                                                                                                  • -

値はここを参照した。あってるかどうかは知らない。
https://cfengine.org/pipermail/bug-cfengine/2008-July/000563.html

しかし今度は下記のように怒られる…

                                                                                                                                                  • -

>Makefile:4573: recipe for target `configure-gas' failed

                                                                                                                                                  • -

調べてみたところ、ちょうど合ってそうな記事を発見。

CygwinでH8のクロスコンパイル環境を作る
 http://blog.nezweb.net/archives/289

configureの引数を次のように変更。
※これする前に、libibertyとかbfdとかのディレクトリの下にあるconfig.cacheをすべて削除し、make distcleanをしないといけないらしい。

                                                                                                                                                  • -

../configure --target=h8300-elf --disable-nls --prefix=/opt/h8300

                                                                                                                                                  • -

h8300-elfからh8300-hmsにすると、オブジェクトファイルの形式がCOFFからELFになるらしい。現時点で意味を理解できず…
上記に変更してmakeすると、うまくmakeが通りました。
h8300-elf-ld -vがうまく動くことを確認(もちろんパスは通す必要あり)。
h8300-hmsの方は、この本のサポートサイトからコンパイル済みのものをDLして持ってきた。実は上記のコンパイル作業は必要なかったり。

小一時間かかってbinutilsのビルド成功。
gccのほうも若干面倒そうなので明日にしよう…