LFS GCC-14.2.0 - 第一遍

GCC 依赖于 GMP、MPFR 和 MPC 这三个包。由于宿主发行版未必包含它们,我们将它们和 GCC 一同构建。将它们都解压到 GCC 源码目录中,并重命名解压出的目录,这样 GCC 构建过程就能自动使用它们:

第一遍构建gcc
cd $LFS/sources

VERSION=14.2.0

tar xf gcc-${VERSION}.tar.xz
cd gcc-${VERSION}

mpfr_VERSION=4.2.1
tar -xf ../mpfr-${mpfr_VERSION}.tar.xz
mv -v mpfr-${mpfr_VERSION} mpfr

gmp_VERSION=6.3.0
tar -xf ../gmp-${gmp_VERSION}.tar.xz
mv -v gmp-${gmp_VERSION} gmp

mpc_VERSION=1.3.1
tar -xf ../mpc-${mpc_VERSION}.tar.gz
mv -v mpc-${mpc_VERSION} mpc

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
 ;;
esac

mkdir -v build
cd       build

../configure                  \
    --target=$LFS_TGT         \
    --prefix=$LFS/tools       \
    --with-glibc-version=${VERSION} \
    --with-sysroot=$LFS       \
    --with-newlib             \
    --without-headers         \
    --enable-default-pie      \
    --enable-default-ssp      \
    --disable-nls             \
    --disable-shared          \
    --disable-multilib        \
    --disable-threads         \
    --disable-libatomic       \
    --disable-libgomp         \
    --disable-libquadmath     \
    --disable-libssp          \
    --disable-libvtv          \
    --disable-libstdcxx       \
    --enable-languages=c,c++

make
make install

注意,刚刚构建的 GCC 安装了若干内部系统头文件。其中的 limits.h 一般来说应该包含对应的系统头文件 limits.h 。也就是 $LFS/usr/include/limits.h 。然而,在构建GCC的时候, $LFS/usr/include/limits.h 还不存在,因此GCC安装的内部头文件是一个不完整的、自给自足的文件,不包含系统头文件提供的扩展特性。这对于构建临时的Glibc已经足够,但是后续工作需要完整的内部头问加。所以必须执行下面的命令创建溢恶完整版本的内部头文件( 否则后续编译M4会出现 M4编译报错(limits.h) 错误):

生成完整的limits.h
cd ..
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
  `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h