Detalhes acerca deste pacote estão localizados em Seção 8.26.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.0.tar.xz mv -v mpfr-4.2.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 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-libssp \ --disable-libvtv \ --enable-languages=c,c++
O significado das novas opções do configure:
--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++.
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 em Seção 8.26.2, “Conteúdo do GCC.”