本パッケージの詳細は 6.16.2.「GCC の構成」 を参照してください。
GCC パッケージは C コンパイラや C++ コンパイラなどの GNU コンパイラコレクションを提供します。
最近の GCC は GMP、MPFR、MPC の各パッケージを必要とします。 これらのパッケージはホストシステムに含まれていないかもしれないため、以下を実行してビルドの準備をします。 個々のパッケージを GCC ソースディレクトリの中に伸張 (解凍) し、ディレクトリ名を変更します。 これは GCC のビルド処理においてそれらを自動的に利用できるようにするためです。
tar -jxf ../mpfr-3.0.0.tar.bz2 mv -v mpfr-3.0.0 mpfr tar -jxf ../gmp-5.0.1.tar.bz2 mv -v gmp-5.0.1 gmp tar -zxf ../mpc-0.8.2.tar.gz mv -v mpc-0.8.2 mpc
GCC のドキュメントでは、ソースディレクトリ以外の専用のビルドディレクトリを作成することが推奨されています。
mkdir -v ../gcc-build cd ../gcc-build
GCC をコンパイルするための準備を行います。
../gcc-4.5.2/configure \ --target=$LFS_TGT --prefix=/tools \ --disable-nls --disable-shared --disable-multilib \ --disable-decimal-float --disable-threads \ --disable-libmudflap --disable-libssp \ --disable-libgomp --enable-languages=c \ --with-gmp-include=$(pwd)/gmp --with-gmp-lib=$(pwd)/gmp/.libs \ --without-ppl --without-cloog
configure オプションの意味:
--disable-shared
このオプションは内部ライブラリをスタティックライブラリとしてリンクすることを指示します。 ホストシステムに関係しそうな問題を回避するためです。
--disable-decimal-float, --disable-threads,
--disable-libmudflap, --disable-libssp,
--disable-libgomp
これらのオプションは順に、十進浮動小数点制御、スレッド処理、libmudflap、libssp、libgomp のサポートをいずれも無効にすることを指示します。 これらの機能を含めていると、クロスコンパイラをビルドする際にはコンパイルに失敗します。 またクロスコンパイルによって一時的な libc ライブラリを構築する際には不要なものです。
--disable-multilib
x86_64 に対して LFS は まだ multilib のサポートをしていません。 このオプション指定は x86 には無関係です。
--enable-languages=c
このオプションは C コンパイラのみビルドすることを指示します。 この時点で必要なのはこの言語だけだからです。
--with-gmp-include=...
このオプションは GCC に対して GMP のヘッダファイルの場所を指定するものです。
--with-gmp-lib=...
このオプションは GCC に対して GMP のライブラリファイルの場所を指定するものです。
--without-ppl,
--without-cloog
このオプションは、PPL および CLooG ライブラリがホストシステムに存在していたとしても、chroot 環境ではそれらを利用することが出来ないため、リンクしないようにします。
GCC をコンパイルします。
make
コンパイルが終了しました。 この時点でもテストスイートを実行することはできます。 ただ前にも述べているように、テストスイートのフレームワークがまだ準備できていません。 さらにこの時点で生成されるプログラムは、すぐに次の生成作業によって置き換えられますから、 この時点でテストを実行することはあまり意味がありません。
パッケージをインストールします。
make install
--disable-shared
オプションを指定すると libgcc_eh.a
を生成せずインストールしません。 Glibc パッケージはこのライブラリに依存しており、ビルドの際に -lgcc_eh
を指定することで利用されます。依存している点は
libgcc.a
へのシンボリックリンクを生成しておけば問題はありません。
libgcc_eh.a
に含まれるオブジェクトが、 最終的には
libgcc.a
の中にも含まれることになるからです。
ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \ sed 's/libgcc/&_eh/'`
本パッケージの詳細は 6.16.2.「GCC の構成」 を参照してください。