|
このページは「24環境」の情報です 第9回 クロス開発ツールをソースからビルドする †海老原祐太郎
2002/9/25
ここではクロス開発ツール (sh3-linux-asやsh3-linux-gcc)をソースからビルドして、 いずれも 2002-09-25 現在の バージョンでの確認です。 binutils 2.11.92 ディレクトリ構成 †本来、自分でソースから make, make install したソフトウェア郡は /usr/local にインストール これがキモチワルイと考える方は /usr としているところを全て /usr/local に置き換えてください。 /usr/sh3-linux がクロス開発ツールのベースディレクトリになります。 /usr/sh3-linux/bin になります。 binutils †binutils (アセンブラ、リンカー)のコンパイルは比較的簡単です。 必要なもの どこか作業ディレクトリで $ tar xzfv binutils-sh-linux_0.dodes.20011207.orig.tar.gz $ cd binutils-sh-linux.orig $ bzip2 -d src.tar.bz2 $ tar xfv src.tar $ cd src $ mkdir build $ cd build $ ../configure --disable-nls --target=sh3-linux --prefix=/usr $ make # make install 確認 $ ls -l /usr/bin/sh3-linux-* -rwxr-xr-x 1 root root 322412 12月 6 2001 /usr/bin/sh3-linux-addr2line -rwxr-xr-x 2 root root 298188 12月 6 2001 /usr/bin/sh3-linux-ar -rwxr-xr-x 2 root root 440108 12月 6 2001 /usr/bin/sh3-linux-as -rwxr-xr-x 2 root root 67224 1月 11 2002 /usr/bin/sh3-linux-c++ -rwxr-xr-x 1 root root 52204 12月 6 2001 /usr/bin/sh3-linux-c++filt -rwxr-xr-x 2 root root 67224 1月 11 2002 /usr/bin/sh3-linux-g++ -rwxr-xr-x 1 root root 41388 12月 6 2001 /usr/bin/sh3-linux-gasp -rwxr-xr-x 1 root root 66104 1月 11 2002 /usr/bin/sh3-linux-gcc -rwxr-xr-x 2 root root 499436 12月 6 2001 /usr/bin/sh3-linux-ld -rwxr-xr-x 2 root root 331212 12月 6 2001 /usr/bin/sh3-linux-nm -rwxr-xr-x 1 root root 450700 12月 6 2001 /usr/bin/sh3-linux-objcopy -rwxr-xr-x 1 root root 470604 12月 6 2001 /usr/bin/sh3-linux-objdump -rwxr-xr-x 2 root root 298188 12月 6 2001 /usr/bin/sh3-linux-ranlib -rwxr-xr-x 1 root root 154476 12月 6 2001 /usr/bin/sh3-linux-readelf -rwxr-xr-x 1 root root 278956 12月 6 2001 /usr/bin/sh3-linux-size -rwxr-xr-x 1 root root 279116 12月 6 2001 /usr/bin/sh3-linux-strings -rwxr-xr-x 2 root root 450700 12月 6 2001 /usr/bin/sh3-linux-strip $ ls -l /usr/sh3-linux/bin/ -rwxr-xr-x 2 root root 298188 12月 6 2001 ar -rwxr-xr-x 2 root root 440108 12月 6 2001 as -rwxr-xr-x 2 root root 499436 12月 6 2001 ld -rwxr-xr-x 2 root root 331212 12月 6 2001 nm -rwxr-xr-x 2 root root 298188 12月 6 2001 ranlib -rwxr-xr-x 2 root root 450700 12月 6 2001 strip 例えば as は sh3-linux-as と /usr/sh3-linux/bin/as が同じファイルと思われますが、 sh3-linux-gcc †sh3-linux-gcc のコンパイルは結構大変です。 m4, autoconf (>= 2.13), libtool, gawk, dejagnu (>= 1.4), bzip2 gperf (>= 2.7-3), bison, flex, gettext, texinfo, zlib1g-dev, debhelper (>= 2.0.50) (debhelper は debianホストの時のみ) 【手順1】 sh3用のCライブラリのインストール 本来 「sh3マシンにインストールする」 必要なもの Debianホストの場合 debianホストの場合は dpkg-cross ツールを使ってパッケージとしてインストールします。 # apt-get install dpkg-cross /etc/dpkg/cross-compile を編集 #default_arch = m68k default_arch = sh3 #crossbase = /usr/local crossbase = /usr $ cd /tmp $ dpkg-cross -ash3 -b libc6_2.2.4-7.dodes.0_sh3.deb ←パッケージの形をコンバートする $ dpkg-cross -ash3 -b libc6-dev_2.2.4-7.dodes.0_sh3.deb # dpkg -i libc6-sh3-cross_2.2.4-7.dodes.0_all.deb ←インストール # dpkg -i libc6-dev-sh3-cross_2.2.4-7.dodes.0_all.deb $ rm libc6*.deb 非debianホストの場合 非debian機の場合は dpkg-cross が使えないので インストール先のディレクトリの準備 # mkdir /usr/sh3-linux # mkdir /usr/sh3-linux/lib # mkdir /usr/sh3-linux/include どこか作業ディレクトリで $ cd /tmp まずは libc6-sh3 の展開&インストール $ mkdir libc6-sh3 $ cd libc6-sh3 $ ar x libc6_2.2.4-7.dodes.0_sh3.deb $ tar xfzv data.tar.gz # cp -a lib /usr/sh3-linux/ $ cd .. $ rm libc6-sh3 続いて libc6-dev-sh3 の展開&インストール $ mkdir libc6-dev-sh3 $ cd libc6-dev-sh3 $ ar x libc6-dev_2.2.4-7.dodes.0_sh3.deb $ tar xzfv data.tar.gz $ cd usr # cp -a lib /usr/sh3-linux/ # cp -a include /usr/sh3-linux/ $ cd .. $ rm libc6-dev-sh3 /usr/sh3-linux/bin となればOKです。 【手順2】gcc-3.0.3 ソースを /usr/src/toolchain にダウンロードし、bzip2形式にする。 sh3-linux-gcc のソースは GNUオリジナルのソース+パッチです。 必要なもの ftp://ftp.gnu.org/pub/gnu/gcc/gcc-3.0.3/ インストール先のディレクトリを作る # mkdir /usr/src/toolchain # cd /usr/src/toolchain .gz 形式を .bz2 形式に直す # gzip -d gcc-3.0.3.tar.gz # bzip2 -9 gcc-3.0.3.tar シンボリックリンクを張る # ln -s gcc-3.0.3.tar.bz2 gcc.tar.bz2 # ls -l gcc-3.0.3.tar.bz2 gcc.tar.bz2 -> gcc-3.0.3.tar.bz2 【手順3】 gcc-3.0.3 のコンパイル 必要なもの ftp://ftp.m17n.org/pub/dodes/debian/crosstools/ Debianホストの場合 Debianホストの場合は dpkg-source や dpkg-buildpackage コマンドを使って自動的にビルドすることができます。 適当な作業ディレクトリで $ cd /tmp $ dpkg-source -x gcc-sh-linux_3.0.3-dodes.2.dsc <-- ソースの展開 $ cd gcc-sh-linux-3.0.3 debian/rules ファイルを編集 # Specify which packages we should build. See debian/NOTES. ifndef allarch # allarch = sh3 sh4 sh3eb sh4eb allarch = sh3 endif export allarch debian/control ファイルを編集 Source: gcc-sh-linux Section: devel Priority: extra Maintainer: YAEGASHI Takeshi <t@keshi.org> Standards-Version: 3.0.2 Build-Depends: m4, autoconf (>= 2.13), libtool, gawk, dejagnu (>= 1.4), bzip2, binutils-sh-linux, gperf (>= 2.7-3), bison, flex, gettext, texinfo, zlib1g-dev, debhelper (>= 2.0.50), toolchain-source (=3.0.3-1) 下線部分 binutils-sh-linux と toolchain-source を削除する コンパイルの実行 $ dpkg-buildpackage -B -ash3 -uc -us -rfakeroot だいたいこの程度の時間が必要です。(Celeron 466x2機) real 12m10.492s user 16m53.510s sys 2m31.220s 確認&インストールします。 $ cd .. $ ls *.deb gcc-sh3-linux_3.0.3-dodes.2_i386.deb gcclibs-sh3-cross_3.0.3-dodes.2_all.deb # dpkg -i gcc-sh3-linux_3.0.3-dodes.2_i386.deb # dpkg -i gcclibs-sh3-cross_3.0.3-dodes.2_all.deb 非Debianホストの場合 パッチファイル(gcc-dodes.diff)を取り出します。 $ tar xzfv gcc-sh-linux_3.0.3-dodes.2.tar.gz $ cp gcc-sh-linux-3.0/debian/patches/gcc-dodes.diff . ソースを展開した後、上で取り出したパッチ(gcc-dodes.diff)を当てます。 $ cd /tmp $ mkdir gcc-3.0.3 $ cd gcc-3.0.3 $ tar --bzip2 -xf /usr/src/toolchain/gcc.tar.bz2 $ cd gcc-3.0.3 $ patch -p1 < gcc-dodes.diff コンフィギュア $ mkdir build $ cd build $ ../configure --target=sh3-linux --prefix=/usr \ --enable-languages=c++ \ --with-gnu-as --with-gnu-ld --with-system-zlib \ --disable-nls --without-included-gettext \ --disable-checking --disable-cpp --enable-c99 \ --enable-long-long --enable-shared --enable-threads=posix \ --with-gxx-include-dir=\${prefix}/sh3-linux/include/g++-v3 またパッチ作業 $ sed -e 's%^CROSS_SYSTEM_HEADER_DIR.*$%CROSS_SYSTEM_HEADER_DIR = $(tooldir)/include%' < gcc/Makefile > gcc/Makefile.tmp $ mv gcc/Makefile.tmp gcc/Makefile make & インストール $ make all-gcc # make install-gcc $ make all-target-libstdc++-v3 # install-target-libstdc++-v3 以上で sh3-linux-gcc も sh3-linux-as も SH3用のCライブラリもインストールできたので $ cat hello.c int main(){ printf("hello world\n"); } $ sh3-linux-gcc hello.c $ file a.out a.out: ELF 32-bit LSB executable, Hitachi SH, version 1 (SYSV), dynamically linked (uses shared libs), not stripped |