6.18. GCC-16.1.0 - Pass 2

GCC pakken inneholder GNU kompilatorsamlingen, som inkluderer C og C++ kompilatorene.

Omtrentlig byggetid: 4.5 SBU
Nødvendig diskplass: 6.0 GB

6.18.1. Installasjon av GCC

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

Endre standard mappenavn for bibliotekene:

sed -e '/m64=/s/lib64/lib/' \
    -e '/m32=/s/m32=.*/m32=..\/lib32$(call if_multiarch,:i386-linux-gnu)/' \
    -i.orig gcc/config/i386/t-linux64

Gjør -mstackrealign standard for 32-bit objekter:

sed '/STACK_REALIGN_DEFAULT/s/0/(!TARGET_64BIT \&\& TARGET_SSE)/' \
      -i gcc/config/i386/i386.h

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-nls                \
    --enable-multilib            \
    --with-multilib-list=m64,m32 \
    --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-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.31.2, «Innhold i GCC»