このページは「24環境」の情報です

gcc-3.4.3のビルド

gcc-3.4.3のビルドを試してみる。

試した環境

  • ホストはDebian 3.0 (Woody)
  • ターゲットはsh4 (sh3でも同じと思うので、下記sh4の部分をsh3にしてください)
  • ターゲット(SH-Linux機)のCライブラリは glibc-2.3.3 とする

Cライブラリ

ターゲットのlibc(バイナリとincludeヘッダ)を開発機にインストールする

glibc-2.3.3 (SH-Linux用バイナリーとincludeヘッダー)の入手

杉岡様のサイトから頂いてくる

インストール

/usr/sh4-linux/以下にインストールする

/usr/sh4-linux/lib        ライブラリ
/usr/sh4-linux/include    ヘッダーファイル

alienコマンドで.tgz形式に変換して(<=必ずしも必要ではない。えびはらが.rpmの扱いをよく知らないため)/usr/sh4-linux/ にコピーする

$ su
# alien -t glibc-2.3.3-27.12.sh4.rpm
# alien -t glibc-headers-2.3.3-27.12.sh4.rpm
# alien  -t  glibc-kernheaders-2.6.6-2.sh4.rpm
# cd /tmp
# tar xzvf /どこか/glibc-2.3.3.tgz
# tar xzvf /どこか/glibc-headers-2.3.3.tgz
# tar xzvf /どこか/glibc-kernheaders-2.6.6.tgz
# mkdir -p /usr/sh4-linux/lib
# mkdir -p /usr/sh4-linux/include
# cp -a lib/* /usr/sh4-linux/lib/
# cp -a usr/include/* /usr/sh4-linux/include/

ここではカーネルヘッダをlinux-2.6.6としたけれど、自分で使うカーネルバージョンのソースから取ってくればモアベター。具体的にはカーネルの include/linux と include/asm-sh を /usr/sh4-linux/include にコピー

/usr/sh4-linux/include/linux  -> /カーネル/ソース/linux-2.x.x/include/linux
/usr/sh4-linux/include/asm    -> /カーネル/ソース/linux-2.x.x/include/asm-sh

といった具合

/usr/sh4-linux/lib/libc.so (テキストファイルなのだ)を編集

/* GNU ld script
   Use the shared library, but some functions are only in
   the static library, so try that secondarily.  */
OUTPUT_FORMAT(elf32-sh-linux)
GROUP ( /usr/sh4-linux/lib/libc.so.6 /usr/sh4-linux/lib/libc_nonshared.a )

以上でライブラリのインストールは完了

gccソースコードの入手とパッチ・展開

ショートカット

にパッチ済みソースを用意したのでこれを使うなら次の「コンパイル」に進んでもよい。ちゃんとやるなら下記のように。

杉岡様のサイトからgcc-3.4.3-1.src.rpmを頂いてくる。

  • rootユーザで展開すると下記のように展開される
# rpm -i gcc-3.4.3-1.src.rpm
/usr/src/rpm/SOURCES
   gcc-3.3-sh-remove-sh3e.patch
   gcc-3.3-sh-rpath-link.patch
   gcc-3.4.0-libjava.patch
   gcc-3.4.1-PR16665.patch
   gcc-3.4.1-sh-no-reorder-blocks.patch
   gcc-3.4.3-sh-shlib.patch
   gcc-3.4.3.tar.bz2
   shCPU-linux-GCC.in

展開してパッチをあてる
一般ユーザーでホームディレクトリ下で展開し、パッチを当てる

$ cd ~
$ mkdir build
$ cd build
$ tar xjvf /usr/src/rpm/SOURCES/gcc-3.4.3.tar.bz2
$ cd gcc-3.4.3/
$ patch -p1 < /usr/src/rpm/SOURCES/gcc-3.3-sh-rpath-link.patch
$ patch -p1 < /usr/src/rpm/SOURCES/gcc-3.3-sh-remove-sh3e.patch
$ patch -p1 < /usr/src/rpm/SOURCES/gcc-3.4.0-libjava.patch
$ patch -p1 < /usr/src/rpm/SOURCES/gcc-3.4.3-sh-shlib.patch
$ patch -p0 < /usr/src/rpm/SOURCES/gcc-3.4.1-sh-no-reorder-blocks.patch
$ patch -p0 < /usr/src/rpm/SOURCES/gcc-3.4.1-PR16665.patch
$ cd ../

(なぜか -p1 と -p0 が混在しているので注意)

コンパイル

$ mkdir build
$ cd build
$ ../gcc-3.4.3/configure --prefix=/usr --mandir=/usr/share/man \
  --infodir=/usr/info --datadir=/usr/share --target=sh4-linux \
  --with-system-zlib --with-gxx-include-dir=/usr/sh4-linux/include/g++-v3 \
  --includedir=/usr/sh4-linux/include --enable-checking --enable-shared \
  --enable-__cxa_atexit --enable-c99 --enable-threads=posix \
  --enable-long-long --enable-libf2c --enable-symvers \
  --enable-languages=c,c++
$ make all-gcc

(--enable-languages=c,objc,f77,c++,java も出来るらしい。けど未確認)

(以下は参考まで)
i386-debian-sarge で gcc-3.4.3 をインストールして gcc -v とすると

boss:~# gcc-3.4 -v
Reading specs from /usr/lib/gcc/i486-linux/3.4.4/specs
Configured with: ../src/configure -v 
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang 
--prefix=/usr --libexecdir=/usr/lib --with-gxx-include-dir=/usr/include/c++/3.4 
--enable-shared --with-system-zlib --enable-nls --without-included-gettext 
--program-suffix=-3.4 --enable-__cxa_atexit 
--enable-libstdcxx-allocator=mt--enable-clocale=gnu --enable-libstdcxx-debug 
--enable-java-gc=boehm --enable-java-awt=gtk --disable-werror 
i486-linux
Thread model: posix
gcc version 3.4.4 20050314 (prerelease) (Debian 3.4.3-12)

となった。debian適にやるには --with-gxx-include-dir=/usr/include/c++/3.4 が正しいかも

インストール

# make install

実験(hello.cc)

#include <iostream>
using namespace std;
int main()
{
  cout << "hello world, new g++\n";
}

関連リンク

コメント