6.18. GCC-13.2.0 - Passagem 2

O pacote GCC contém a GNU Compiler Collection, a qual inclui os compiladores C e C++.

Tempo aproximado de construção: 4,4 UPC
Espaço em disco exigido: 4,8 GB

6.18.1. Instalação do GCC

Como na primeira construção do GCC, os pacotes GMP, MPFR e MPC são exigidos. Desempacote os tarballs e mova-os para os diretórios exigidos:

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

Se construir em x86_64, [então] mude o nome padrão de diretório para bibliotecas de 64 bits para lib:

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

Substitua a regra de construção dos cabeçalhos da libgcc e da libstdc++ para permitir construir essas bibliotecas com suporte a camadas POSIX:

sed '/thread_header =/s/@.*@/gthr-posix.h/' \
    -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in

Crie um diretório de construção separado novamente:

mkdir -v build
cd      build

Antes de iniciar a construção do GCC, lembre-se de desconfigurar quaisquer variáveis de ambiente que substituam os sinalizadores de otimização padrão.

Agora prepare o GCC para compilação:

../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++

O significado das novas opções de configuração:

--with-build-sysroot=$LFS

Normalmente, usar --host garante que um compilador cruzado seja usado para construir o GCC e que o compilador sabe que tem que procurar por cabeçalhos e por bibliotecas em $LFS. Porém, o sistema de construção para o GCC usa outras ferramentas, que não estão cientes desse local. Essa chave é necessária, de forma que tais ferramentas procurarão pelos arquivos necessários em $LFS, e não no anfitrião.

--target=$LFS_TGT

Nós estamos compilando cruzadamente o GCC, de forma que é impossível construir bibliotecas alvo (libgcc e libstdc++) com os binários do GCC compilados previamente—esses binários não executariam no anfitrião. O sistema de construção do GCC tentará usar os compiladores C e C++ do anfitrião como um contorno por padrão. Construir as bibliotecas alvo do GCC com uma versão diferente do GCC não é suportado, de forma que usar compiladores do anfitrião possivelmente cause falha de construção. Esse parâmetro assegura que as bibliotecas sejam construídas pelo GCC passagem 1.

LDFLAGS_FOR_TARGET=...

Permite libstdc++ usar a libgcc compartilhada sendo construída nesta passagem, em vez da versão estática que foi construída na passagem 1 do GCC. Isso é necessário para suportar o tratamento de exceção C++.

--disable-libsanitizer

Desabilita as bibliotecas sanitizadoras de tempo de execução do GCC. Elas não são necessárias para a instalação temporária. Essa chave é necessária para construir o GCC sem libcrypt instalada para o destino. Em gcc-pass1 estava implícita em --disable-libstdcxx, mas agora temos que passá-la explicitamente.

Compile o pacote:

make

Instale o pacote:

make DESTDIR=$LFS install

Como um toque final, crie um link simbólico utilitário. Muitos aplicativos e scripts executam cc em vez de gcc, o que é usado para manter genéricos os aplicativos e, assim, utilizáveis em todos os tipos de sistemas UNIX onde o compilador GNU C nem sempre está instalado. Executar cc deixa o(a) administrador(a) do sistema livre para decidir qual compilador C instalar:

ln -sv gcc $LFS/usr/bin/cc

Detalhes acerca deste pacote estão localizados na Seção 8.28.2, “Conteúdo do GCC.”