5.5. GCC-9.2.0 - Pass 1

GCC-pakken inneholder GNU-kompilator-samlingen, som inkluderer C- og C ++ -kompilatorene.

 

Omtrentlig byggetid: 10 SBU

Nødvendig diskplass: 3,1 GB


GCC krever nå GMP-, MPFR- og MPC pakkene. Siden disse pakkene kanskje ikke er inkludert i vertsdistribusjonen din, blir de bygget med GCC. Pakk ut hver pakke i GCC-kildekatalogen, og gi nytt navn til de resulterende katalogene slik at GCC byggprosedyrene automatisk bruker dem:

tar -xf ../mpfr-4.0.2.tar.xz

mv -v mpfr-4.0.2 mpfr

tar -xf ../gmp-6.2.0.tar.xz

mv -v gmp-6.2.0 gmp

tar -xf ../mpc-1.1.0.tar.gz

mv -v mpc-1.1.0 mpc

Følgende kommando vil endre plasseringen til GCCs standard dynamiske linker for å bruke den som er installert i /tools. Den fjerner også /usr /include fra GCCs inkluderte søkebane. Utfør:

for file in gcc/config/{linux,i386/linux{,64}}.h
do
    cp -uv $file{,.orig}
    sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
           -e 's@/usr@/tools@g' $file.orig > $file
    echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
   touch $file.orig
done

I tilfelle ovennevnte virker vanskelig å følge, la oss dele det litt ned. Først kopierer vi filene gcc/config/linux.h, gcc/config/i386/linux.h og gcc/config/i368/linux64.h til en fil med samme navn, men med et tilføyd suffiks av ".orig" . Da forbereder det første sed-uttrykket “/tools” til alle forekomster av “/lib/ld”, “/lib64/ld” eller “/lib32/ld”, mens den andre erstatter hardkodede forekomster av “/usr”. Deretter legger vi til våre definere utsagn som endrer standard startfil-prefikset til slutten av filen. Legg merke til at etterfølgende “/” i “/tools/lib/” er påkrevd. Til slutt bruker vi berøring for å oppdatere tidsstemplet på de kopierte filene. Når det brukes sammen med cp -u, forhindrer dette uventede endringer i de originale filene i tilfelle kommandoene utilsiktet kjøres to ganger.

Til slutt, på x86_64-verter, angir du standard katalognavn for 64-bit biblioteker til "lib":

case $(uname -m) in
    x86_64)
       sed -e '/m64=/s/lib64/lib/' \
              -i.orig gcc/config/i386/t-linux64
;;
esac

GCC dokumentasjonen anbefaler å bygge GCC i en dedikert byggekatalog:

mkdir -v build

cd build

Forbered GCC for kompilering:

../configure \
     --target=$LFS_TGT \
     --prefix=/tools \
     --with-glibc-version=2.11 \
     --with-sysroot=$LFS \
     --with-newlib \
     --without-headers \
     --with-local-prefix=/tools \
     --with-native-system-header-dir=/tools/include \
     --disable-nls \
     --disable-shared \
     --disable-multilib \
     --disable-decimal-float \
     --disable-threads \
     --disable-libatomic \
     --disable-libgomp \
     --disable-libquadmath \
     --disable-libssp \
     --disable-libvtv \
     --disable-libstdcxx \
     --enable-languages=c,c++

Betydningen av konfigurasjonsalternativene:

--with-glibc-version=2.11
   Dette alternativet sikrer at pakken vil være kompatibel med vertens versjon av glibc. Det er satt til minimumskrav til glibc som er spesifisert i Krav til vertssystemet.

--with-newlib
   Siden et fungerende C-bibliotek ikke er tilgjengelig ennå, sikrer dette at inhibit_libc-konstanten blir definert når du bygger libgcc. Dette forhindrer kompilering av kode som krever libc-støtte.

--without-headers
   Når du oppretter en komplett tverrkompilator, krever GCC standarddeklarasjoner som er kompatible med målsystemet. For våre formål vil disse deklarasjonene ikke være nødvendige. Denne bryteren hindrer GCC i å lete etter dem.

--with-local-prefix=/tools
   Det lokale prefikset er stedet i systemet som GCC vil søke etter lokalt installerte inkludere filer. Standard er /usr/local. Å sette dette til /tools hjelper til med å holde vertsplasseringen til /usr/local utenfor denne GCCs søkevei.

--with-native-system-header-dir=/tools/include
   Som standard søker GCC /usr/include etter systemdeklarasjoner. I forbindelse med sysroot-bryteren vil dette normalt oversettes til $LFS/usr/include. Deklarasjone som vil bli installert i de neste to seksjonene vil imidlertid gå til $ LFS/tools/include. Denne bryteren sikrer at gcc vil finne dem riktig. I den andre passering av GCC vil denne samme bryteren sikre at ingen deklarasjoner fra vertssystemet blir funnet.

--disable-shared
   Denne bryteren tvinger GCC til å koble sine interne biblioteker statisk. Vi gjør dette for å unngå mulige problemer med vertssystemet.

--disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp,
--disable-libvtv, --disable-libstdcxx

   Disse bryterne deaktiverer støtte for henholdsvis flytende desimal punkter, tråd, libatomic, libgomp, libquadmath, libssp, libvtv og C ++ standardbibliotek. Disse funksjonene klarer ikke å kompilere når du bygger en tverrkompilator, og er ikke nødvendig for oppgaven med å krysse kompilere den midlertidige libc.

--disable-multilib
   På x86_64 støtter LFS ennå ikke en multilib-konfigurasjon. Denne bryteren er ufarlig for x86.

--enable-languages=c,c++
   Dette alternativet sikrer at bare C- og C ++ -kompilatorene er bygget. Dette er de eneste språkene som trengs nå.

Kompiler GCC ved å kjøre:

make

Kompileringen er nå fullført. På dette tidspunktet vil testserien normalt bli kjørt, men som nevnt før er rammene for testsuiten ikke på plass ennå. Fordelene med å kjøre testene på dette tidspunktet er minimale siden programmene fra dette første passet snart vil bli erstattet.

Installer pakken:

make install

Detaljer om denne pakken finnes i kapittel 6.25.2, "Innhold i GCC."

Forrige Hjem Neste