クロスコンパイラの構築

クロスコンパイラとは

通常のプログラムは、PC 上でコンパイルし、その PC で実行できるバイナリファイルを出力します。SuperH などの組み込み系プログラムでは、PC 上でコンパイルし、SuperH 用のバイナリを出力しなければなりません。そして、そのようなコンパイラ(このようなコンパイラはクロスコンパイラと呼ばれる)は、Linux といえども最初からインストールされてはいません。
従って、まずは SuperH 用のコンパイラを構築することにします。クロスコンパイラ構築には、GNU プロジェクトに含まれる binutils, gcc、及び RedHat が配布している newlib を使用します。

binutils, gcc, newlib の各パッケージは概ね、アセンブリ操作、Cプログラムの処理、ライブラリの提供、という役割を果たします。

では、これらパッケージを用いて 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 を用いました。

binutils のコンパイル

ftp://ftp.gnu.org/gnu/binutils/ などから入手

% 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 

gcc のコンパイル

ftp://ftp.gnu.org/gnu/gcc/ などから入手
configure の段階でインストール先に newlib のヘッダファイルを書き込むため、ルートユーザにて作業を行います。

% 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 

newlib のコンパイル

http://sources.redhat.com/newlib/ などから入手

% 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 の追加

一通りのコンパイラが終了したら、環境変数 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 用のクロスコンパイラの構築は終了です。

Generated on Mon Apr 13 22:52:06 2009 by  doxygen 1.5.7.1