5.5.1. Instalarea Cross GCC
GCC necesită acum pachetele GMP, MPFR și MPC. Deoarece este posibil ca aceste pachete să nu fie incluse în distribuția dvs. gazdă, ele vor fi create cu GCC. Despachetați fiecare pachet în directorul sursă GCC și redenumiți directoarele rezultate, astfel încât procedurile de construire GCC să le folosească automat:
notițe
Există frecvente neînțelegeri despre acest capitol. Procedurile sunt aceleași ca în orice alt capitol, așa cum a fost explicat mai devreme (instrucțiuni de construire a pachetului). Mai întâi extrageți tarball-ul gcc din directorul surse și apoi schimbați în directorul creat. Numai atunci ar trebui să continuați cu instrucțiunile de mai jos.
notițe
Există frecvente neînțelegeri despre acest capitol. Procedurile sunt aceleași ca în orice alt capitol, așa cum a fost explicat mai devreme (instrucțiuni de construire a pachetului). Mai întâi extrageți tarball-ul gcc din directorul surse și apoi schimbați în directorul creat. Numai atunci ar trebui să continuați cu instrucțiunile de mai jos.
tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc
tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc
în gcc/config/{linux,i386/linux{,64}}.h
în gcc/config/{linux,i386/linux{,64}}.h
$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
's@/usr@/tools@g' $fișier.orig > $fișier
$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
's@/usr@/tools@g' $fișier.orig > $fișier
Următoarea comandă va schimba locația linkerului dinamic implicit al GCC pentru a-l folosi pe cel instalat /instrumente. De asemenea, elimină / usr / include din calea de căutare include GCC. Emisiune:
pentru dosar do
cp -uv sed -e
-e
pentru dosar do
cp -uv sed -e
-e
ecou'
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 „/tools/lib/”
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file atinge $file.orig
făcut
ecou'
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 „/tools/lib/”
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file atinge $file.orig
făcut
În cazul în care cele de mai sus pare greu de urmărit, haideți să le descompunem puțin. Mai întâi copiem fișierele gcc/config/linux.h, gcc/config/i386/linux.h, și gcc/config/i368/linux64.h la un fișier cu același nume, dar cu un sufix adăugat de „.orig”. Apoi, prima expresie sed adaugă „/tools” fiecărei instanțe de „/lib/ld”, „/lib64/ld” sau „/lib32/ld”, în timp ce a doua înlocuiește instanțele hard-coded ale „/usr”. Apoi, adăugăm declarațiile noastre define care modifică prefixul implicit al fișierului de pornire la sfârșitul fișierului. Rețineți că „/” final în „/tools/lib/” este necesar. În cele din urmă, folosim atingeţi pentru a actualiza marca temporală a fișierelor copiate. Când este utilizat împreună cu CPU, acest lucru previne modificări neașteptate ale fișierelor originale în cazul în care comenzile sunt executate din greșeală de două ori.
În cele din urmă, pe gazdele x86_64, setați numele de director implicit pentru bibliotecile pe 64 de biți la „lib”:
caz $(uname -m) în x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
ESAC
caz $(uname -m) în x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
ESAC
Documentația GCC recomandă construirea GCC într-un director de compilare dedicat:
mkdir -v build cd build
mkdir -v build cd build
Pregătiți GCC pentru compilare:
../configurează \
--target=$LFS_TGT \
--prefix=/instrumente \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--with-newlib \
--fără-anteturi \
--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++
../configurează \
--target=$LFS_TGT \
--prefix=/instrumente \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--with-newlib \
--fără-anteturi \
--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++
Semnificația opțiunilor de configurare:
--cu-newlib
Deoarece o bibliotecă C funcțională nu este încă disponibilă, acest lucru asigură că constanta inhibit_libc este definită la construirea libgcc. Acest lucru împiedică compilarea oricărui cod care necesită suport libc.
--fără-anteturi
Când se creează un cross-compiler complet, GCC necesită antete standard compatibile cu sistemul țintă. În scopurile noastre, aceste anteturi nu vor fi necesare. Această comutare împiedică GCC să le caute.
--with-local-prefix=/tools
Prefixul local este locația din sistem pe care GCC va căuta fișierele includ instalate local. Valoarea implicită este / usr/local. Setarea acestui lucru la /instrumente ajută la păstrarea locației gazdei a / Usr / local din calea de căutare a acestui GCC.
--with-native-system-header-dir=/tools/include
În mod implicit, căutările GCC / usr / include pentru anteturile de sistem. În combinație cu comutatorul sysroot, acest lucru s-ar traduce în mod normal în $LFS/usr/include. Cu toate acestea, anteturile care vor fi instalate în următoarele două secțiuni vor merge la $LFS/instrumente/include. Acest comutator asigură că gcc le va găsi corect. În a doua trecere a GCC, același comutator se va asigura că nu sunt găsite anteturi din sistemul gazdă.
--disable-shared
Această comutare forțează GCC să-și conecteze bibliotecile interne în mod static. Facem acest lucru pentru a evita posibile probleme cu sistemul gazdă.
--disable-decimal-float, --disable-threads, --disable-libatomic, --disable- libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx
Aceste comutatoare dezactivează suportul pentru extensia zecimală în virgulă mobilă, threading, libatomic, libgomp,
libquadmath, libssp, libvtv și, respectiv, biblioteca standard C++. Aceste caracteristici nu se vor compila la construirea unui compilator încrucișat și nu sunt necesare pentru sarcina de compilare încrucișată a libc-ului temporar.
--disable-multilib
Pe x86_64, LFS nu acceptă încă o configurație multilib. Acest comutator este inofensiv pentru x86.
--enable-languages=c,c++
Această opțiune asigură că numai compilatoarele C și C++ sunt construite. Acestea sunt singurele limbi necesare acum.
Compilați GCC rulând:
face
face
Compilarea este acum completă. În acest moment, suita de testare ar fi în mod normal rulată, dar, după cum am menționat anterior, cadrul suita de teste nu este încă în vigoare. Beneficiile rulării testelor în acest moment sunt minime, deoarece programele de la această primă trecere vor fi înlocuite în curând.
Instalează pachetul:
make install
make install