[Written in Japanese. There is no page written in English, sorry.]

PS2Linux クロス環境 on NetBSD-current

Written by Takuya SHIOZAKI < tshiozak at bsdclub dot org >

これは、塩崎がポストした記事 [ps2dev-ja:00009] を 修正して掲載したものです。

NetBSD/i386 current (2001-06 中旬)の上で、
mipsEEel-linux のクロス環境(C と C++)を構築する方法です。

ごくごく基本的な cross toolchain 環境の構築方法であっさりとできます。
おそらく、標準的な UNIX 環境なら(もしかしたら cygwin でも)、
全く同じ方法でクロス環境が作れるはずです。

* 必要なもの:
  ホスト環境バイナリ(NetBSD の標準環境に追加で必要なもの)
    gmake
    rpm2cpio  (私は rpm-3.0.6 を NetBSD で使えるように修正したものを利用)
    bison

  ターゲット環境バイナリ(※これらはすべて GPL/LGPL で再配布可能)
    gcc-2.95.2-3.mipsel.rpm
    glibc-2.2.2-3.mipsel.rpm
    glibc-devel-2.2.2-3.mipsel.rpm
    gcc-c++-2.95.2-3.mipsel.rpm

  toolchain ソース(※これらはすべて GPL/LGPL で再配布可能)
    binutils-2.9EE-3.src.rpm
    gcc-2.95.2-3.src.rpm

* ディレクトリ
    - インストールディレクトリ
        私の好みで、prefix を /usr/local/apps/cross-ps2 にしてます。
        適宜読み替えてください。
    - ワークディレクトリ
        ~/work としています。
    - RPM/SRPM ファイル
        ~/rpms としています。

* binutils のインストール
  - 展開とパッチあて
	% cd ~/work
	% mkdir binutils
	% cd binutils
	% rpm2cpio ~/rpms/binutils-2.9EE-3.src.rpm | cpio -i
	% tar zxf binutils-2.9EE.tar.gz
	% cd binutils-2.9EE
	% patch -p1 -N -E -s < ../binutils-2.9EE.linux.patch
	% patch -p1 -N -E -s < ../binutils-ps2linux-0.9.patch
  - build
        % mkdir _build_
        % cd _build_
        % ../configure --prefix=/usr/local/apps/cross-ps2 \
			--target=mipsEEel-linux
	% gmake tooldir=/usr
	% gmake tooldir=/usr info
  - install
	# gmake install install-info

* gcc のインストール
  - 展開とパッチあて
	% cd ~/work
	% mkdir gcc
	% cd gcc
	% rpm2cpio ~/rpms/gcc-2.95.2-3.src.rpm | cpio -i
	% tar zxf gcc-2.95.2.tar.gz
	% cd gcc-2.95.2
	% patch -p1 -N -E -s < ../gcc-2.95.2.EE-linux.patch
	% patch -p1 -N -E -s < ../gcc-ps2linux-0.9.1.patch
  - build (コンパイラのみ)
        % mkdir _build_
        % cd _build_
	% ../configure --prefix=/usr/local/apps/cross-ps2 \
			--target=mipsEEel-linux --disable-nls \
			--enable-languages=c,c++ --with-gnu-as --with-gnu-ld
	% cd libiberty
	% gmake
	% cd ../texinfo
	% gmake
	% cd ../gcc
	% ln -s /usr/local/apps/cross-ps2/bin/mipsEEel-linux-as as
	% ln -s /usr/local/apps/cross-ps2/bin/mipsEEel-linux-ld ld
	% gmake tooldir=/usr/local/apps/cross-ps2/mipsEEel-linux \
		build_tooldir=/usr/local/apps/cross-ps2/mipsEEel-linux \
		LIBGCC= INSTALL_LIBGCC= LIBGCC1_TEST=
  - install
	# gmake tooldir=/usr/local/apps/cross-ps2/mipsEEel-linux \
		build_tooldir=/usr/local/apps/cross-ps2/mipsEEel-linux \
		LIBGCC= INSTALL_LIBGCC= LIBGCC1_TEST= install

* ライブラリのインストール
  - libgcc
	% cd ~/work
	% mkdir libgcc
	% cd libgcc
	% rpm2cpio ~/rpms/gcc-2.95.2-3.mipsel.rpm | \
		cpio -i --make-directories \*libgcc.a
	% mv usr/lib/gcc-lib/mipsEEel-linux/2.95.2/* \
		/usr/local/apps/cross-ps2/lib/gcc-lib/mipsEEel-linux/2.95.2/
  - glibc および libstdc++ 環境
	% cd ~/work
	% mkdir root
	% cd root
	% rpm2cpio ~/rpms/glibc-2.2.2-3.mipsel.rpm | \
		cpio -i --make-directories 'lib/*'
	% rpm2cpio ~/rpms/glibc-devel-2.2.2-3.mipsel.rpm | \
		cpio -i --make-directories \
			'usr/lib/*.o' 'usr/lib/lib*' 'usr/include/*'
	% rpm2cpio ~/rpms/gcc-c++-2.95.2-3.mipsel.rpm | \
		cpio -i --make-directories 'usr/lib/*' 'usr/include/*'
	(lib の平たん化)
	% mv lib/* usr/lib/
	% rmdir lib
	% mv usr/* .
	% rmdir usr
	% cd lib
	% ln -sf libBrokenLocale.so.1 libBrokenLocale.so
	% ln -sf libbsd-compat.a libbsd.a
	% ln -sf libcrypt.so.1 libcrypt.so
	% ln -sf libdl.so.2 libdl.so
	% ln -sf libm.so.6 libm.so
	% ln -sf libnsl.so.1 libnsl.so
	% ln -sf libnss_compat.so.2 libnss_compat.so
	% ln -sf libnss_dns.so.2 libnss_dns.so
	% ln -sf libnss_files.so.2 libnss_files.so
	% ln -sf libnss_hesiod.so.2 libnss_hesiod.so
	% ln -sf libnss_nis.so.2 libnss_nis.so
	% ln -sf libnss_nisplus.so.2 libnss_nisplus.so
	% ln -sf libpthread.so.0 libpthread.so
	% ln -sf libresolv.so.2 libresolv.so
	% ln -sf librt.so.1 librt.so
	% ln -sf libthread_db.so.1 libthread_db.so
	% ln -sf libutil.so.1 libutil.so
	(libc.so を次のように編集)
	% vi libc.so
--- libc.so.orig	Mon Jun 25 17:44:46 2001
+++ libc.so	Mon Jun 25 17:45:10 2001
@@ -1,4 +1,4 @@
 /* GNU ld script
    Use the shared library, but some functions are only in
    the static library, so try that secondarily.  */
-GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a )
+GROUP ( libc.so.6 libc_nonshared.a )
	% mv gcc-lib ..
	% cd ..
	(インストール)
	# tar cf - include lib | \
		(cd /usr/local/apps/cross-ps2/mipsEEel-linux && tar xf - )
	# mv /usr/local/apps/cross-ps2/{mipsEEel-linux/,}include/g++-3
	# tar cf - gcc-lib/mipsEEel-linux/2.95.2/include | \
		(cd /usr/local/apps/cross-ps2/lib && tar xf -)
	# ln -s ../../../../mipsEEel-linux/lib/libstdc++-3-libc6.2-2-2.10.0.a \
		/usr/local/apps/cross-ps2/lib/gcc-lib/mipsEEel-linux/2.95.2/libstdc++.a
	# ln -s ../../../../mipsEEel-linux/lib/libstdc++-3-libc6.2-2-2.10.0.so \
		/usr/local/apps/cross-ps2/lib/gcc-lib/mipsEEel-linux/2.95.2/libstdc++.so
	# ln -s ../../../../../mipsEEel-linux/lib/soft-float/libstdc++-3-libc6.2-2-2.10.0.a \
		/usr/local/apps/cross-ps2/lib/gcc-lib/mipsEEel-linux/2.95.2/soft-float/libstdc++.a
	# ln -s ../../../../../mipsEEel-linux/lib/soft-float/libstdc++-3-libc6.2-2-2.10.0.so \
		/usr/local/apps/cross-ps2/lib/gcc-lib/mipsEEel-linux/2.95.2/soft-float/libstdc++.so


PS2Linux のデモとして付いてくる blow をコンパイルするには、
glibc と同じように、適宜 libps2dev を展開して放り込めば良いでしょう。
libps2dev は LGPL なので、気兼ねする必要はありません :D
change log:
リンクはご自由にどうぞ。