Details on this package are located in Section 8.26.2, “Contents of GCC.”
The GCC package contains the GNU compiler collection, which includes the C and C++ compilers.
As in the first build of GCC, the GMP, MPFR, and MPC packages are required. Unpack the tarballs and move them into the required directory names:
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
If building on x86_64, change the default directory name for 64-bit libraries to “lib”:
case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
  ;;
esac
        Override the building rule of libgcc and libstdc++ headers, to allow building these libraries with POSIX threads support:
sed '/thread_header =/s/@.*@/gthr-posix.h/' \
    -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
        Create a separate build directory again:
mkdir -v build cd build
Before starting to build GCC, remember to unset any environment variables that override the default optimization flags.
Now prepare GCC for compilation:
../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++
        The meaning of the new configure options:
--with-build-sysroot=$LFS
            
                Normally, using --host ensures that a
                cross-compiler is used for building GCC, and that compiler
                knows that it has to look for headers and libraries in
                $LFS. But the build system of
                GCC uses other tools, which are not aware of this location.
                This switch is needed to have them find the needed files in
                $LFS, and not on the host.
              
--target=$LFS_TGT
            
                As we are cross-compiling GCC, it's impossible to build
                target libraries (libgcc and
                libstdc++) with the compiled
                GCC binaries because these binaries won't run on the host
                distro. GCC building system will attempt to use the C and C++
                compilers on the host distro as a workaround by default. It's
                not supported to build GCC target libraries with a different
                version of GCC, so using host compilers may cause building
                failure. This parameter ensures to build the libraries with
                GCC pass 1 and prevent the issue.
              
LDFLAGS_FOR_TARGET=...
            
                Allow libstdc++ to use shared
                libgcc being built in this
                pass, instead of the static version built in GCC pass 1. This
                is needed for supporting C++ exception handling.
              
--enable-initfini-array
            This option is automatically enabled when building a native compiler with a native compiler on x86. But here, we build with a cross compiler, so we need to explicitly set this option.
Compile the package:
make
Install the package:
make DESTDIR=$LFS install
As a finishing touch, create a utility symlink. Many programs and scripts run cc instead of gcc, which is used to keep programs generic and therefore usable on all kinds of UNIX systems where the GNU C compiler is not always installed. Running cc leaves the system administrator free to decide which C compiler to install:
ln -sv gcc $LFS/usr/bin/cc
Details on this package are located in Section 8.26.2, “Contents of GCC.”