NetBSD 3.1のクロスコンパイル環境構築
NetBSDの大きな特徴の一つにクロスコンパイル環境構築の容易さがあります。
ここではi386用のNetBSD 3.1上にPowerPC用のNetBSD 3.1で実行させるアプリケーションをビルドするクロスコンパイル環境構築手順を紹介します。
- ソースの準備
クロスコンパイル環境は通常のパッケージインストールとは異なりpkgsrcからビルドするという形態では行えません。
手動でNetBSDのソースを取得してそこに含まれるbuild.shを実行してクロスコンパイル環境を構築します。
まず、ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-3.1/source/sets/あたりから以下のソースの塊を取得します。
・gnusrc.tgz
・sharesrc.tgz
・src.tgz ※この中に/usr/src/build.shが含まれています。
・syssrc.tgz
・xsrc.tgz ※これは任意です。
尚、NetBSD 3.1より前のバージョン(例えばNetBSD 2.0.2)用のクロスコンパイル環境を構築する場合には上記サイトにソースがないためftp://ftp.netbsd.org/pub/NetBSD/NetBSD-2.0.2/source/sets/あたりから取得します。
- ソースの解凍
上記でダウンロードしたファイルは/tmpにあるものと仮定し次のように解凍します。
# cd /
# tar zxvf /tmp/gnusrc.tgz
# tar zxvf /tmp/sharesrc.tgz
# tar zxvf /tmp/src.tgz
# tar zxvf /tmp/syssrc.tgz
# tar zxvf /tmp/xsrc.tgz
上記により/usr/srcや/usr/xsrcが生成されます。
- ツールチェインの作成
ここではクロスコンパイラを構成するプログラム(ツール)群を作成します。
# mkdir /usr/obj
# cd /usr/src
# chmod 775 build.sh
# ./build.sh -T tools -m macppc tools
※「-T tools」はTOOLDIRが/usr/src/toolsであることを示しています。
※「-m macppc」はMACHINE_ARCHをpowerpcにするための指定です。ここでは「-m powerpc」という指定はできません。
※最後の「tools」という操作指示はツールのビルドとインストールを行うための指示です。
/usr/src/tools/binには以下のプログラムが作成されます。
nbasn1_compile nbmakefs nbzic
nbcap_mkdb nbmakeinfo powerpc--netbsd-addr2line
nbcat nbmakewhatis powerpc--netbsd-ar
nbcksum nbmenuc powerpc--netbsd-as
nbcompile_et nbmkcsmapper powerpc--netbsd-c++
nbconfig nbmkdep powerpc--netbsd-c++filt
nbcrunchgen nbmkesdb powerpc--netbsd-cpp
nbctags nbmklocale powerpc--netbsd-dbsym
nbdb nbmknod powerpc--netbsd-g++
nbeqn nbmktemp powerpc--netbsd-g77
nbfile nbmsgc powerpc--netbsd-gcc
nbgencat nbmtree powerpc--netbsd-gcc-3.3.3
nbgroff nbnroff powerpc--netbsd-gccbug
nbhexdump nbpax powerpc--netbsd-gcov
nbhost-mkdep nbpic powerpc--netbsd-ld
nbindxbib nbpwd_mkdb powerpc--netbsd-lint
nbinfo nbrefer powerpc--netbsd-mdsetimage
nbinfokey nbrpcgen powerpc--netbsd-nm
nbinstall nbsoelim powerpc--netbsd-objcopy
nbinstall-info nbstat powerpc--netbsd-objdump
nbinstallboot nbsunlabel powerpc--netbsd-ranlib
nblex nbtbl powerpc--netbsd-readelf
nblorder nbtexi2dvi powerpc--netbsd-size
nbm4 nbtexindex powerpc--netbsd-strings
nbmacppc-fixcoff nbtsort powerpc--netbsd-strip
nbmake nbuudecode
nbmake-macppc nbyacc
- ユーザランドの作成
次にクロスコンパイルで必要となるPowerPC用のinclude, libを以下のようにして作成します。
# cd /usr/src
# ./build.sh -T tools -m macppc distribution ※1〜2時間掛かります。
※「-T tools」を省略すると/usr/src/tools/binとは別の/usr/src/tooldir.NetBSD-3.1-i386/binにツールが再作成されてしまいます。
※ここでは「-D デスティネーションパス」を省略しているためデフォルトで/usr/src/destdir.macppcにincludeとlibが作成されます。
- /usr/src/destdir.macppc/usr/includeの構成
- /usr/src/destdir.macppc/usr/libの構成
- /usr/src/tools/powerpc--netbsdの確認
この時点では/usr/src/tools/powerpc--netbsdにはbinとlibだけが生成されています。
/usr/src/tools/powerpc--netbsd/binは以下の構成になっています。
ar as c++ g++ gcc ld nm ranlib strip
また/usr/src/tools/powerpc--netbsd/libにはldscriptsディレクトリしか存在しません。
- /usr/src/tools/powerpc--netbsd/libにおけるシンボリックリンクの作成
/usr/src/tools/powerpc--netbsd/libの中に下記ファイル群へのシンボリックリンクを作成します。
対象:/usr/src/destdir.macppc/usr/lib/*(crt0.o, crtbegin.o等)と/usr/src/destdir.macppc/lib/*(libc.so等)。
# cd /usr/src/tools/powerpc--netbsd/lib
# ln -s /usr/src/destdir.macppc/usr/lib/* .
# ln -s -f /usr/src/destdir.macppc/lib/* . ※これはコンパイル時の共有ライブラリの扱いに関する非互換エラーを回避します。
- テストコンパイル
- その他
(1)/usr/src/objは/usr/objへのシンボリックリンクとなります。