GNUツールチェイン

出典: Wiki@browncat.org

目次

[編集] 書きかけ

[編集] GNUツールチェイン

コンパイラ、アセンブラ、リンカーなど一連の関連ツールのセットをツールチェインと呼びます。 GNUツールチェインはGCCを中心とし、binutils(as,ld,etc), gdbなどのセットを指し、 Free Softwareを使って高品質な開発ツールが一通りそろいます。 ターゲットは主に32bit以上のCPUとなります。 これ以下の小さなCPU向けには他のプロジェクトSDCCなどがあります。

ちなみにかつてはGnu C Compilerの略であったGCCは、 現在はGnu Compiler Collectionの略とされ、単にC言語だけではなく 各種言語(java,ada,fortranなど)も含むコンパイラスイートという位置づけです。

全てのツールは基本的にソースコードで配布されており、 これをコンパイルすることで特にLinuxなどのUnix系OSでは 容易にクロスコンパイラを作成できます。 メジャーなターゲット向けにはすでにビルド済みのバイナリを 企業や有志の方などが配布されているものもあります。

サポートされているCPUやシステムの組み合わせは多く、 binutils, gcc, newlibなどの関連したもの全てがサポートできるアーキテクチャやコンフィグレーションを 見つけることに時間がかかるかもしれません。 まずはbinutilsを展開しbfdディレクトリの中のconfig.bfdを参照してください。
後はトライアンドエラーになります。

また、目的とするターゲットのコンフィグレーションには問題を含む場合もあります。
具体的には

  • 目的とするターゲット向けにconfigureがうまく出来ない、
  • コンパイルエラーが発生する、
  • またはツールそのものにバグなどの問題がある場合もあります

付属のドキュメントやインターネットなどで少しチェックしてみてください。

[編集] ビルド方法

組み込みターゲット向けにクロスコンパイラを作る手順です。

1. binutils, gcc, newlibをダウンロードしてくる。
2. binutilsを作成/インストールする
3. gcc,newlibを作成/インストールする

以上で終わりです。いまどきのPCなら小一時間で終了すると思います。
以下、ホストはFedora Core5を使用し、 binutils-2.17, gcc-4.1.1, newlib-1.14.0で確認しました。
また例として'sh-elf'をターゲットとして作成してみます。
また、同じ手順でpowerpc, arm用が出来ることは確認済みです。

[編集] binutilsを作成/インストール

ここでは展開したファイルは変更せずに別ディレクトリでコンパイルします。
複数のターゲットCPUを作成したい場合やオプションを変えてのやり直しなどがしやすいためです。
流れとしてはアーカイブを展開し、空のビルド用ディレクトリから展開したディレクトリ内のconfigureスクリプトを使って設定しコンパイルします。

1. bintuilsを展開
2. mkdir build-binutils
3. cd build-binutils
4. ../binutils-xxx/configure --target=sh-elf --prefix=/usr/local/cross/sh-elf
5. make
6. (rootで) make install

[編集] gcc,newlibを作成/インストール

gccもbinutilsと同様の手順で作成できます。newlibはgccを展開したディレクトリ内に'newlib'という名前で 存在すると一緒にコンパイルされます。

1. binutilsにパスを通す  export PATH=/usr/local/cross/sh-elf/bin:$PATH
2. gccとnewlibを展開
3. cd gcc-yyy
4. ln -s ../newlib-zzz/newlib ./newlib
5. ln -s ../newlib-zzz/libgloss ./libgloss
6. cd ..
7. mkdir build-gcc
8. cd build-gcc
9. ../gcc-yyy/configure --target=sh-elf --prefix=/usr/local/cross/sh-elf \
     --disable-shared --enable-languages=c,c++ --enable-multilib
10. make
11. (rootで) make install

[編集] コンパイルの流れ

ソースコードから各ツールがオブジェクトなどを生成する流れです。
というかgraphvizの習作です(^^;

画像:gcc-abst.jpg

[編集] 関連リンク

http://sca.uwaterloo.ca/coldfire/gcc-doc/docs/porting_toc.html

ナビゲーション
Ads