Detaljer om denne pakken finner du i Section 8.27.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.0.tar.xz mv -v mpfr-4.2.0 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
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 å tillate byggingen av 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-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++
Betydningen av de nye konfigureringsalternativene:
--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
. 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
Vi krysskompilerer GCC, så det er umulig å bygge
målbibliotekene (libgcc
og
libstdc++
) med tidligere
kompilerte GCC binærfiler—disse binærfilene vil ikke
kjøre på verten. GCC byggesystemet vil forsøke å bruke
vertens C og C++ kompilatorer som en standard løsning. Å
bygge GCC målbibliotekene med en annen versjonen av GCC
støttes ikke, så bruk av vertens kompilatorer kan føre til at
byggingen mislykkes. Denne parameteren sikrer at bibliotekene
bygges av GCC pass 1.
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++
unntakshåndtering.
--disable-libsanitizer
Deaktiver GCC rensende kjøretidsbiblioteker. De er ikke
nødvendig for den midlertidige installasjonen. Denne bryteren
er nødvendig for å bygge GCC uten libcrypt
installert for målet. I
gcc-pass1 det var
underforstått ved --disable-libstdcxx
, men nå vi
må eksplisitt angi det.
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.27.2, “Innhold i GCC”