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-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 |