|
このページは「24環境」の情報です Cygwin上でSH3クロスコンパイル環境を整える †完成形は次のようになります。 †
参考URL †
その他の関連link クロス用ライブラリのインストール †Cygwin上にSH3Linux用のCライブラリーとヘッダーファイルを展開します。 cygwin上の /usr/sh3-linux/lib /usr/sh3-linux/include にそれぞれライブラリーとヘッダーファイルをインストールします。方法はいくつかあって、CAT709の/lib/* , /usr/lib/* をコピーしてくるでもかまいません。ただ、CAT709にはincludeファイルは置いていないので、えびはらは以下の手順を使いました。
をCygwinの/home/自分 ディレクトリにダウンロードします。 ebihara@giga ~ $ dpkg-deb.exe -x libc6_2.2.5-14_sh3.deb /tmp/ ebihara@giga ~ $ dpkg-deb.exe -x libc6-dev_2.2.5-14_sh3.deb /tmp/ $ ls /tmp etc lib sbin usr となっていますから、最初に書いたとおり、lib/* と usr/lib/* を /usr/sh3-linux/lib に、include/* を /usr/sh3-linux/include にそれぞれコピーします。 ebihara@giga ~ $ cp -a /tmp/usr/lib/* /usr/sh3-linux/lib/ ebihara@giga ~ $ cp -a /tmp/lib/* /usr/sh3-linux/lib/ ebihara@giga ~ $ cp -a /tmp/usr/include/* /usr/sh3-linux/include/ 以上で準備は完了です。もしも他に必要なライブラリが出てきましたら、同じ手順で、SH3用のライブラリとヘッダーを /usr/sh3-linux/lib , include にコピーしてください。 ライブラリパスの修正 †さらにテキストエディターで /usr/sh3-linux/lib/libc.so ファイルを編集します。libc.so は単なるテキストファイルです。 /* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ GROUP ( /usr/sh3-linux/lib/libc.so.6 /usr/sh3-linux/lib/libc_nonshared.a ) 最後の GROUP() 行を上記のように修正します。 binutilsのコンパイル †実績があるという意味で binutils-2.11.92 を使います。
$ tar xzfv binutils-sh-linux_0.dodes.20011207.orig.tar.gz $ cd binutils-sh-linux.orig/ $ tar xjfv src.tar.bz2 次にビルド用のサブディレクトリを作り、コンフィグレーションし、make します $ mkdir sh3-linux-build $ cd sh3-linux-build $ ../src/configure --disable-nls --target=sh3-linux --prefix=/usr $ make $ make install エラー無く終了したら sh3-linux-as というアセンブラのコマンドが使えるようになっているはずです。単に as を起動したらホスト(i686-pc-cygwin) の アセンブラが起動することを確かめてください。 ebihara@giga ~/binutils-sh-linux.orig/sh3-linux-build $ sh3-linux-as -v GNU assembler version 2.11.92 (sh3-linux) using BFD version 2.11.92 20011202 ebihara@giga ~/binutils-sh-linux.orig/sh3-linux-build $ as -v GNU assembler version 2.15.91 (i686-pc-cygwin) using BFD version 2.15.91 20040725 gccのコンパイル †gccのほうも、実績があるという意味で gcc-3.0.4 を使用します。基本的にはこちら
に書いておいたとおりのことを行います。
.src.rpm 形式なので rpmコマンド*1で展開すると、/usr/src/rpm/SOURCES に展開されます。 $ mkdir -p /usr/src/rpm/SOURCES $ rpm -i gcc-3.0.4-3.src.rpm gcc-3.0.4-libspec.patch gcc-3.0.4-static-libgcc.patch gcc-3.0.4.tar.bz2 gcc-sh-linux-3.0.4-20020215-1.patch gcc-3.0.4.tar.bz2を展開し、順にパッチをあてていきます。 $ tar xjvf /usr/src/rpm/SOURCES/gcc-3.0.4.tar.bz2 $ cd gcc-3.0.4 $ patch -p1 < /usr/src/rpm/SOURCES/gcc-sh-linux-3.0.4-20020215-1.patch $ patch -p1 < /usr/src/rpm/SOURCES/gcc-3.0.4-libspec.patch $ patch -p1 < /usr/src/rpm/SOURCES/gcc-3.0.4-static-libgcc.patch コンパイル $ mkdir sh3-linux-build $ cd sh3-linux-build $ ../configure --prefix=/usr --target=sh3-linux --host=i686-pc-cygwin \ --build=i686-pc-cygwin --enable-languages=c,c++ --mandir=/usr/share/man \ --with-system-zlib --with-gxx-include-dir=/usr/sh3-linux/include/g++-v3 \ --includedir=/usr/sh3-linux/include --disable-checking --with-x=no \ --enable-threads=posix --enable-long-long \ --with-as=/usr/bin/sh3-linux-as \ --with-ld=/usr/bin/sh3-linux-ld $ make all-gcc $ make install 実験 †ここまで出来たら hello.c のクロスコンパイルが可能なはずです。 #include <stdio.h> int main() { printf("hello\n"); } $ sh3-linux-gcc hello.c $ file a.out a.out: ELF 32-bit LSB executable, Hitachi SH, version 1 (SYSV), for GNU/Linux 2.3.99, dynamically linked (uses shared libs), not stripped このようにSH用の実行バイナリが出来上がっていればokです。 続いて C++ の実験も行います。 #include <iostream> using namespace std; int main() { cout << "hello world, new g++\n"; } を用意して $ sh3-linux-g++ hello.cc $ file a.out a.out: ELF 32-bit LSB executable, Hitachi SH, version 1 (SYSV), for GNU/Linux 2.3.99, dynamically linked (uses shared libs), not stripped 同じようにSH用の実行バイナリが出来上がっていればokです。 勘の言い方ならお気づきと思いますが、libcライブラリはdebianパッケージを利用して手で /usr/sh3-linux/lib にインストールしましたが、C++のライブラリ libstdc++-v3 はインストールして無いですよね。あれ?と思いませんか。libstdc++-v3 は gccツールチェインに含まれていて、先ほど gcc を install した際に /usr/sh3-linux/lib にインストールされました。 関連リンク †コメント † |