新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

glibc の xilinx 的作り方

1) configure に --target=microblaze-bluecat-linux を使っている。
この bluecat というところがミソらしい。しかし、我々(私)は microblaze-bluecat-linux-gcc とか用意していない。どうなってんじゃ?とうやら、microblaze であるということを glibc に教えかつ glibc の configure がとおるための単なる”キーワード”でしかない。事実 configure はそのあとかなりいい加減に進む。

checking for microblaze-bluecat-linux-gcc... no
checking for gcc... gcc

だったり、

checking for stdint.h... yes
checking for unistd.h... yes

だったりする。これはクロス環境に stdint.h がなくても進む。なぜか?最初の gcc のちぇッキングで gcc を選択しているからだ。
参考までに書くと、--microblaze-linux-elf はとおらない。

2) 事前に gcc, ar などを microblaze 用に使えるようにする。
順序が前後するが、glibc を作る前に、xilinx が提供している build_linux_gcc.sh は次のことをしている。

    cd $RELDIR/$TARGET/bin
    for i in *
    do
        rm $i
        ln -sf ../../bin/mb-linux-$i $i
    done
    ln -sf ../../bin/mb-linux-gcc cc

理由は定かでない。 $RELDIR/$TARGET/bin は具体的にはインストールしたディレクトリの下の microblaze-linux-elf/bin になる。ここにはあらかじめ gcc があるのだが、私の考えではこの gcc は複数のターゲットをもつことが出来る gcc だ。引数に microblaze であることを教えてやると(どう指定するかはやったことがないのでわからない、、、)そのターゲットの gcc を起動できる。これかな?(ヘルプより)

-b <machine>             インストールされていればターゲット <machine> として
                               gcc を実行する

恐らく gcc 自体は /usr/bin にでもおかれて常にこれが利用される。引数によって複数のことなるアーキテクチャgcc をも起動することが出来るように設計されている。ただしあまり使われていない。みんな prefix つきの gcc を使う。
xilinx のシェルの build_linux_gcc.sh は恐ろしいことにその gcc などを消して mb-linux のプレフィックスのつく gccシンボリックリンクしている。これで gcc が mb-linux-gcc としてなんの引数もつけずにコンパイルできるわけだ。
3) make all
ここまで準備がそろったら make all だ。見事に gcc を発見。これは mb-linux-gcc だ。そしてなんとなく configure がおわり(大丈夫か?)コンパイルが始まる。ついでに書くと xilinxglibc をつくるシェルプル(build_linux_glibc.sh)はコンパイラのスイッチを変えて延々とライブラリを作ってくれる。簡単に言うと gcc の MULTILIB みたいなことをする。Linux の開発環境ではそれはいらないんじゃないか?