本パッケージの詳細は 「GCC の構成」を参照してください。
GCC パッケージは C コンパイラーや C++ コンパイラーなどの GNU コンパイラーコレクションを提供します。
GCC の 1 回めのビルドと同様に、ここでも GMP、MPFR、MPC の各パッケージを必要とします。 tarball を解凍して、所定のディレクトリ名に移動させます。
tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 mpc
x86_64 上でビルドしている場合は、64ビットライブラリのデフォルトディレクトリ名を「lib」にします。
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
;;
esac
libgcc と libstdc++ のヘッダーのビルドルールを変更して、これらのライブラリに対して POSIX スレッドサポートを含めてビルドするようにします。
sed '/thread_header =/s/@.*@/gthr-posix.h/' \
-i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
専用のディレクトリを再度生成します。
mkdir -v build cd build
GCC のビルドに入る前に、デフォルトの最適化フラグを上書きするような環境変数の設定がないことを確認してください。
GCC をコンパイルするための準備をします。
../configure \
--build=$(../config.guess) \
--host=$LFS_TGT \
--target=$LFS_TGT \
LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
--prefix=/usr \
--with-build-sysroot=$LFS \
--enable-initfini-array \
--disable-nls \
--disable-multilib \
--disable-decimal-float \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--enable-languages=c,c++
configure オプションの意味
--with-build-sysroot=$LFS
通常は --host を用いれば、GCC
ビルドにクロスコンパイラーが用いられ、参照すべきヘッダーやライブラリも $LFS にあるものが用いられるように指示されます。
しかし今ビルドを行っているシステム上の GCC は別のツールを使っているので、上のような場所を認識できていません。
本スイッチは、必要なファイルをホスト内からではなく、$LFS
から探し出すようにします。
--target=$LFS_TGT
これまでの GCC はクロスコンパイルによって作り出してきているので、コンパイル済み GCC
実行ファイルからターゲットライブラリ(libgcc と
libstdc++) をビルドして作り出すことができません。
なぜならその実行ファイルはホストディストリビューション上で動作させられないからです。 GCC
ビルドシステムはその回避策として、デフォルトではホスト上にある C および C++ コンパイラーを利用しようとします。
ただし GCC のバージョンが異なる場合に、GCC ターゲットライブラリをビルドすることはサポートされていません。
したがってホスト上のコンパイラーがビルドに失敗する可能性があります。 本パラメーターは、確実に GCC
1回めの実行ファイルを使ってライブラリビルドを行うようにして、問題が発生しないようにします。
LDFLAGS_FOR_TARGET=...
GCC 1回めではスタティックバージョンの libgcc
をビルドしていましたが、ここでは共有の libgcc
をビルドするようにします。 これは C++ 例外処理のために必要となります。
--enable-initfini-array
本オプションを指定すれば、自動的に x86 上のネイティブコンパイラーを使って、ネイティブコンパイラーをビルドするようにします。 しかしここではクロスコンパイラーを作り出すつもりでいます。 したがって明示的に本オプションへ指定が必要になります。
パッケージをコンパイルします。
make
パッケージをインストールします。
make DESTDIR=$LFS install
最後に、便利なシンボリックリンクを作成します。 プログラムやスクリプトの中には gcc ではなく cc を用いるものが結構あります。 シンボリックリンクを作ることで各種のプログラムを汎用的にすることができ、通常 GNU C コンパイラーがインストールされていない多くの UNIX システムでも利用できるものになります。 cc を利用することにすれば、システム管理者がどの C コンパイラーをインストールすべきかを判断する必要がなくなります。
ln -sv gcc $LFS/usr/bin/cc
本パッケージの詳細は 「GCC の構成」を参照してください。