クロスコンパイラ=他のプラットホームでのコンパイラを作るコンパイラ.
このためには, ライブラリおよび周辺ツール(リンカ, アセンブラなど)も必要.
そこで以下の物を用いて環境を作成しました。
コンパイラはgcc3.2系を使用します。LinuxSH MLで「3.2が一番枯れているという情報を聞いたからです(多分SH3/4用の話...SH2はどうかは分からない)。
| ホストPC(PC/AT) | |||
|---|---|---|---|
| distribution | Plamo Linux | 4.0 | |
| kernel | linux | 2.6.7 | |
| compiler | gcc | 3.2.3 | |
| library | glib | 2.3.2 | |
| tools | binutils | 2.14 | |
| ターゲット(SH2) | |||
| compiler | gcc | 3.2.3 | http://www.gnu.org/software/gcc/mirrors.html |
| library | newlib | 1.12.0 | http://sources.redhat.com/newlib/ |
| tools | binutils | 2.15 | http://sources.redhat.com/binutils |
| debugger | gdb | 6.1.1 | http://www.gnu.org/software/gdb/gdb.html |
作業の流れは、依存関係によって決まります。順番は以下の鳥です。
binutilsの構築。
# cd $WORK
$ tar xfvz binutils-2.15.tar.gz
$ cd binutils-2.15
$ ./configure\
--target=sh-hms\
--with-newlib --host=i686-pc-linux;
$ make;
# make installgccをコンパイルするには、newlibが必要になります。シンボリックリンクを作成し、同時にコンパイルします。
# cd $WORK $ tar xfvz newlib-1.12.0.tar.gz $ tar xfvz gcc-core-3.2.3.tar.gz $ tar xfvz gcc-g++-3.2.3.tar.gz $ cd gcc-3.2.3$ ln -s ../newlib-1.12.0/newlib/ .←だめ。gcc3.4,newlib1.11,binutils2.14だとこれでうまく行ったのに… $ ln -s ../newlib-1.12.0/ . ←これだとうまくいく。なぜ? $ mkdir ../work $ cd ../work # ../gcc-3.2.3/configure \ --enable-languages="c,c++" \ --target=sh-hms --with-newlib \ --host=i686-pc-linux \ --with-gnu-as --with-gnu-ld \ --with-headers=../newlib-1.12.0/newlib/libc/include/ # make # make install
gdbは(gccさえあれば)なやむことなくすんなりいきます。
$ cd $WORK $ tar xfvj gdb-6.1.1.tar.bz2 $ cd ../gdb-6.1.1 $ mkdir work $ ../gdb-6.1.1/configure --target=sh-hms --host=i686-pc-linux $ make $ make install