通常のプログラムは、PC 上でコンパイルし、その PC で実行できるバイナリファイルを出力します。SuperH などの組み込み系プログラムでは、PC 上でコンパイルし、SuperH 用のバイナリを出力しなければなりません。そして、そのようなコンパイラ(このようなコンパイラはクロスコンパイラと呼ばれる)は、Linux といえども最初からインストールされてはいません。
従って、まずは SuperH 用のコンパイラを構築することにします。クロスコンパイラ構築には、GNU プロジェクトに含まれる binutils, gcc、及び RedHat が配布している newlib を使用します。
binutils, gcc, newlib の各パッケージは概ね、アセンブリ操作、Cプログラムの処理、ライブラリの提供、という役割を果たします。
- binutils ... アセンブリ操作、出力ファイルの変換
- gcc ... 高級言語をコンパイルするあたり
- newlib ... libc、および諸演算を提供
では、これらパッケージを用いて SuperH 用のクロスコンパイラを実際に構築していきましょう。
Linux におけるツール、ライブラリの構築は、通常 configure, make, make install という手順で行います。SuperH 用のクロスコンパイラを構築する場合も、「これは SuperH 用にコンパイルして下さい」という宣言をしてコンパイルすることになります。
その宣言は configure 時に行うことになり、以下で各パッケージに与える引数について実際に示しながら説明していきます。
以下の手順では、インストール先のディレクトリは /usr/local/sh_cross_2.95.3 としています。また、gcc-4.0.2 だと、binutils-2.14 のコンパイラ時にエラーになったので、各パッケージのコンパイルには、gcc-2.95.3 を用いました。
% tar jxvf binutils-2.14.tar.bz2
% mkdir binutils_tmp
% cd binutils_tmp
% ../binutils-2.14/configure --prefix=/usr/local/sh_cross_2.95.3 --target=sh-coff
% make CFLAGS=-O2
% su
# make install
binutils をインストールしたら、インストール先の /usr/local/sh_cross_2.95.3 に sh_cross という別名を付けてしまいましょう。
% cd /usr/local
# su
# ln -s sh_cross_2.95.3 sh_cross
% tar zxvf gcc-core-2.95.3.tar.gz
% tar zxvf newlib-1.10.0.tar.gz
% mkdir gcc-2.95.3_tmp
% cd gcc-2.95.3_tmp
# su
# export PATH=$PATH:/usr/local/sh_cross/bin
# ../gcc-2.95.3/configure --prefix=/usr/local/sh_cross_2.95.3 \
--target=sh-coff --with-newlib --with-headers=../newlib-1.10.0/newlib/libc/include --enable-languages=c
# make CFLAGS=-O2
# make install
% cd (gcc 構築のときに newlib を展開したディレクトリ)
% mkdir newlib_tmp
% cd newlib_tmp
% ../newlib-1.10.0/configure --prefix=/usr/local/sh_cross_2.95.3 --target=sh-coff --norecursion
% export PATH=$PATH:/usr/local/sh_cross/bin
% make CFLAGS=-O2
# make install
一通りのコンパイラが終了したら、環境変数 PATH に /usr/local/sh_cross/bin を追加します。この設定を行うことで、インストールしたプログラムをコマンドとして利用できるようになります。
tcsh 系の場合、~/.tcshrc に以下の設定を追加(zsh 系の場合は、~/.zshrc に追加)
setenv PATH ${PATH}:/usr/local/sh_cross/bin
bash 系の場合、~/.bashrc に以下の設定を追加
# export PATH=$PATH:/usr/local/sh_cross/bin
ルネサス から入手 (「定義」で検索、ユーザ登録の後にダウンロード)
最後に、ルネサステクノロジが配布している「レジスタ定義ファイル」をクロスコンパイラのインクルードパスに追加します。例えば、7040S.H というレジスタ定義ファイルでは、SH704X シリーズの制御レジスタにアクセスするための定義がなされています。
% unzip include_sh.zip
% cp include_SH/SH2/7040S.H /usr/local/sh_cross/lib/gcc-lib/sh-coff/2.95.3/include/
以上で、SuperH 用のクロスコンパイラの構築は終了です。