Detaljer om denne pakken finner du i Seksjon 8.30.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.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
Hvis du bygger på x86_64, endre standard mappenavn for 64-biters biblioteker til «lib»:
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac
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 \
--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++ \
LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
target_configargs=gcc_cv_target_thread_file=posix
Betydningen av de nye konfigureringsalternativene:
--target=$LFS_TGT
Vi krysskompilerer GCC, så det er umulig å bygge
målbiblioteker (libgcc og
libstdc++) med GCC binærfilene
kompilert i denne gjennomgangen—disse binærfilene vil ikke
kjøre på verten. GCC byggesystemet vil forsøke å bruke
vertens C og C++ kompilatorer som en midlertidig løsning som
standard. Bygging av GCC målbibliotekene med en annen versjon
av GCC støttes ikke, så bruk av vertens kompilatorer kan føre
til at byggingen mislykkes. Denne parameteren sikrer at
bibliotekene er bygget av GCC pass 1.
--with-build-sysroot=$LFS
Normalt, å bruke --host sørger for at en
krysskompilator brukes til å bygge GCC, og da vet dennne
kompilatoren at den må lete etter overskrifter og biblioteker
i $LFS. Byggesystemet for GCC
bruker imidlertid tilleggsverktøy som ikke er klar over denne
plasseringen. Denne bryteren er nødvendig slik at disse
verktøyene finner de nødvendige filene i $LFS, og ikke på verten.
--disable-fixincludes
Som standard vil noen systemdeklarasoner under installasjonen av GCC «låses» til å brukes med GCC. Dette er ikke nødvendig for et moderne Linux system, og potensielt skadelig hvis en pakke installeres på nytt etter installasjon av GCC. Denne bryteren hindrer GCC i å «låse» deklarasjonene.
--disable-libsanitizer
Deaktiver GCC rensebibliotekenes kjøretidsbiblioteker. De er
ikke nødvendige for den midlertidige installasjonen. I
gcc-pass1 ble det antydet av
--disable-libstdcxx,
og nå kan vi gi den eksplisitt.
LDFLAGS_FOR_TARGET=...
Tillat libstdc++ å bruke
libgcc som ble bygget i dette
passet, i stedet for den forrige versjonen innebygd i
gcc-pass1. Den forrige
versjonen kan ikke støtte C++ unntakshåndtering på riktig
måte fordi den ble bygget uten libc støtte.
target_configargs=gcc_cv_target_thread_file=posix
Bygg målbibliotekene libgcc og libstdc++ med POSIX trådstøtte aktivert. Standardinnstillingen er å følge konfigurasjonen til kompilatoren som brukes til å bygge målbiblioteket (i dette tilfellet, gcc-pass1 som var konfigurert uten trådstøtte).
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 Seksjon 8.30.2, «Innhold i GCC»