Detalhes acerca deste pacote estão localizados na Seção 8.32.2, “Conteúdo do GCC.”
O pacote GCC contém a GNU Compiler Collection, a qual inclui os compiladores C e C++.
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.2.tar.xz mv -v mpfr-4.2.2 mpfr tar -xf ../gmp-6.3.0.tar.xz mv -v gmp-6.3.0 gmp tar -xf ../mpc-1.4.1.tar.xz mv -v mpc-1.4.1 mpc
Se você estiver construindo em x86_64, 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
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 \
--prefix=/usr \
--with-build-sysroot=$LFS \
--enable-default-pie \
--enable-default-ssp \
--disable-fixincludes \
--disable-nls \
--disable-multilib \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libsanitizer \
--disable-libssp \
--disable-libvtv \
--enable-languages=c,c++ \
CXX_FOR_TARGET="$LFS_TGT-gcc -nostdinc++" \
LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
target_configargs=gcc_cv_target_thread_file=posix
O significado das novas opções de configurar:
--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 nesta passagem—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 uma solução
alternativa por padrão. Construir as bibliotecas alvo do GCC
com uma versão diferente do GCC não é suportado, de forma que
usar os compiladores do anfitrião possivelmente cause falha
de construção. Esse parâmetro assegura que as bibliotecas
sejam construídas pelo GCC passagem 1.
--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 ferramentas adicionais,
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.
--disable-fixincludes
Por padrão, durante a instalação do GCC, alguns cabeçalhos do sistema seriam “corrigidos” para serem usados com o GCC. Isso não é necessário para um sistema Linux moderno e potencialmente danoso se um pacote for reinstalado depois da instalação do GCC. Essa chave impede o GCC de “corrigir” os cabeçalhos.
--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. Em gcc-pass1 estava implícito
por --disable-libstdcxx e agora
temos que passá-lo explicitamente.
CXX="$LFS_TGT-gcc
-nostdinc++"
Especifica o uso de $LFS_TGT-gcc para compilar
o código C++ como em Seção 5.6,
“Libstdc++ oriundo de GCC-16.2.0” e impede que o
compilador use os cabeçalhos originários da instalação
anterior da libstdc++. Misturar-se esses cabeçalhos com os
cabeçalhos C++ provenientes da construção atual da libstdc++
pode fazer com que as diretivas #include_next falhem ao localizar os
cabeçalhos C. Em uma construção normal, essa definição é
passada automaticamente para o conjunto de comandos
sequenciados configure a partir do
diretório de nível superior. Aqui, nós a passamos
explicitamente.
LDFLAGS_FOR_TARGET=...
Permite que libstdc++ use o
libgcc sendo construído nessa
passagem, em vez da versão anterior construída em gcc-pass1. A versão
anterior não pode suportar adequadamente o tratamento de
exceções C++ porque foi construída sem suporte a libc.
target_configargs=gcc_cv_target_thread_file=posix
Construa as bibliotecas alvo libgcc e libstdc++ com suporte de camada POSIX habilitado. O padrão é o de seguir a configuração do compilador usado para construir a biblioteca alvo (nesse caso, gcc-pass1 que foi configurado com nenhum suporte a camada).
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.32.2, “Conteúdo do GCC.”