本パッケージの詳細は 「GCC の構成」を参照してください。
GCC パッケージは C コンパイラーや C++ コンパイラーなどの GNU コンパイラーコレクションを提供します。
GCC の 1 回めのビルドと同様に、ここでも GMP、MPFR、MPC の各パッケージを必要とします。 tarball を解凍して、所定のディレクトリに移動させます。
tar -xf ../mpfr-4.2.1.tar.xz mv -v mpfr-4.2.1 mpfr tar -xf ../gmp-6.3.0.tar.xz mv -v gmp-6.3.0 gmp tar -xf ../mpc-1.3.1.tar.gz mv -v mpc-1.3.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-default-pie                           \
    --enable-default-ssp                           \
    --disable-nls                                  \
    --disable-multilib                             \
    --disable-libatomic                            \
    --disable-libgomp                              \
    --disable-libquadmath                          \
    --disable-libsanitizer                         \
    --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=...
            
                libstdc++ が今回ビルドされたライブラリ
                libgcc を用いるようにします。 それは
                gcc 1 回め
                においてビルドされた前回のバージョンではありません。 前回のバージョンは C++ 例外処理を適切に処理できません。 これは
                libc サポートを抜きにしてビルドされているためです。
              
--disable-libsanitizer
            
                GCC のサニタイザーランタイムライブラリを無効にします。 これはここでの一時的インストールにおいては不要です。
                gcc 1 回め においては、--disable-libstdcxx
                によって暗にそれを行っていましたが、ここではそれを明示的に行う必要があります。
              
パッケージをコンパイルします。
make
パッケージをインストールします。
make DESTDIR=$LFS install
最後に、便利なシンボリックリンクを作成します。 プログラムやスクリプトの中には gcc ではなく cc を用いるものが結構あります。 シンボリックリンクを作ることで各種のプログラムを汎用的にすることができ、通常 GNU C コンパイラーがインストールされていない多くの UNIX システムでも利用できるものになります。 cc を利用することにすれば、システム管理者がどの C コンパイラーをインストールすべきかを判断する必要がなくなります。
ln -sv gcc $LFS/usr/bin/cc
本パッケージの詳細は 「GCC の構成」を参照してください。