あばうと Cross Compiler

クロスコンパイラ=他のプラットホームでのコンパイラを作るコンパイラ.
このためには, ライブラリおよび周辺ツール(リンカ, アセンブラなど)も必要. そこで以下の物を用いて環境を作成しました。

目次

環境

コンパイラはgcc3.2系を使用します。LinuxSH MLで「3.2が一番枯れているという情報を聞いたからです(多分SH3/4用の話...SH2はどうかは分からない)。

ホストPC(PC/AT)
distributionPlamo Linux4.0
kernellinux2.6.7
compilergcc3.2.3
libraryglib2.3.2
toolsbinutils2.14
ターゲット(SH2)
compilergcc3.2.3 http://www.gnu.org/software/gcc/mirrors.html
librarynewlib1.12.0 http://sources.redhat.com/newlib/
toolsbinutils2.15 http://sources.redhat.com/binutils
debuggergdb6.1.1 http://www.gnu.org/software/gdb/gdb.html

コンパイル

作業の流れは、依存関係によって決まります。順番は以下の鳥です。

gccはnewlibを使ってコンパイルする必要があるモジュールがあります。例えばlibstdc++をコンパイルするには標準ライブラリlibcに相当するnewlibが必要です。

binutils

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 install

gcc

gccをコンパイルするには、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

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 

ターゲットボードに合せる

リンカスクリプトの調整
リンカスクリプトを調整します。リンカスクリプトにはメモリ割付が書かれています。TBD

既知の問題

割込み関数 vs 最適化
最適化によって、割込み関数の戻りが正常に行われなくなります。 対策は検討中。どれも酷い案だ…
newlibのコンパイル方法
実害は小さいのですが、ともかく変です。にあるように、gcc-3.2.3だと$WORK/gccディレクトリから$WORK/newlib-1.12.0/newlibへのシンボリックリンクを貼るとうまくいきません。コンパイルすると、$WORK/gcc/sh-hms/にらnewlib/newlibへのリンクが貼られ、$WORK/gcc/sh-hms/newlibでnewlibのmakeが行われます。が、$WORK/newlib-1.12.0/newlibは直上のディレクトリのconfigureから設定を読もうとしてコケます。
ライブラリを全パターン作る。
SH2,3,4それぞれについてLittleEndian、BigEndianのライブラリを作ります。このため、かなり時間を食います。C3 1Gでは一晩かかる…

参考文献/サイト

GNU
ここはソースファイルのダウンロード以外にも、MLのログでいろいろ調べ させて頂きました。
Red Hat:
Linux関連企業の最大手にしてegcs(gcc)の現親玉
トラ技 :
2001年 6月号のSH2入門.
JF
Japasene FAQ. コンパイル時のオプションとかを調べました

goto TOP
このドキュメントはフリーです。
勝手に再配布/変更しても構いません
$Date: 2006/11/07 03:20:40 $
$Revision: 1.1.1.1 $