Detaljer om denne pakken finner du i Section 8.26.2, “Innhold i GCC.”
GCC pakken inneholder GNU kompilatorsamlingen, som inkluderer C og C++ kompilatorene.
Som i den første versjonen av GCC, er GMP-, MPFR- og MPC-pakkene nødvendig. Pakk ut tarballene og flytt dem til den nødvendige mappen :
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
Hvis du bygger på x86_64, endre standard mappenavn for 64-bit bibliotekene til “lib”:
case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 ;; esac
Overstyr byggeregelen for libgcc og libstdc++ deklarasjoner, til tillat å bygge disse bibliotekene med støtte for POSIX-tråder:
sed '/thread_header =/s/@.*@/gthr-posix.h/' \ -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
Opprett en egen byggemappe igjen:
mkdir -v build cd build
Før du begynner å bygge GCC, husk å deaktivere alle miljø variabler som overstyrer standard optimaliseringsflagg.
Forbered nå GCC for kompilering:
../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++
Betydningen av de nye konfigureringsalternativene:
--with-build-sysroot=$LFS
Normalt bruker --host
å sørge for at en krysskompilator brukes til å bygge GCC, og
da vet dennne kompilatoren at den må lete etter overskrifter
og biblioteker i $LFS
. Men
byggesystemet til GCC bruker andre verktøy som ikke er klar
over denne plasseringen. Denne bryteren sørger for at de
finner de nødvendige filene på $LFS
, og ikke på verten.
--target=$LFS_TGT
Mens vi krysskompilerer GCC, er det umulig å bygge
målbiblioteker (libgcc
og
libstdc++
) med kompilerte
GCC-binærfiler fordi disse binærfilene ikke vil kjøre på
vertsdistroen. GCC-byggesystemet vil forsøke å bruke C- og
C++-kompilatorer på vertsdistroen som en løsning som
standard. Det støttes ikke å bygge GCC-målbiblioteker med en
annen versjon av GCC, så bruk av vertskompilatorer kan føre
til feil bygging . Denne parameteren sikrer å bygge
bibliotekene med GCC pass 1 og forhindre problemet.
LDFLAGS_FOR_TARGET=...
Tillat libstdc++
å bruke den
delte libgcc
som ble bygget i
dette passet, i stedet for den statiske versjonen bygget i
GCC pass 1. Dette er nødvendig for å støtte C++ unntaks
håndtering.
--enable-initfini-array
Dette alternativet aktiveres automatisk når du bygger en innebygd kompilator med en innebygd kompilator på x86. Men her bygger vi med en krysskompilator, så vi må eksplisitt angi dette alternativet.
Kompiler pakken:
make
Installer pakken:
make DESTDIR=$LFS install
Som en siste finpuss kan du lage en symbolkobling. Mange programmer og skript bruker cc i stedet for gcc, som brukes til å holde programmer generiske og derfor brukbare på alle typer UNIX systemer der GNU C-kompilatoren ikke alltid er installert. Å kjøre cc lar systemadministratoren bestemme hvilken C-kompilator som skal installeres:
ln -sv gcc $LFS/usr/bin/cc
Detaljer om denne pakken finner du i Section 8.26.2, “Innhold i GCC.”