Подробная информация об этом пакете находится в Раздел 8.26.2, «Содержимое пакета GCC.»
Пакет GCC содержит коллекцию компиляторов GNU, которая включает компиляторы C и C++.
Для GCC требуются пакеты GMP, MPFR и MPC. Поскольку эти пакеты могут отсутствовать в дистрибутиве вашего хоста, они будут собраны с помощью GCC. Распакуйте каждый пакет в исходный каталог GCC и переименуйте получившиеся каталоги, чтобы процедуры сборки GCC использовали их автоматически:
.В этой главе часто возникают недоразумения. Процедуры такие же, как и в любой другой главе, как было описано ранее (Package build instructions). Сначала распакуйте пакет gcc из архива, а затем перейдите в созданный каталог. Только после этого следует приступить к приведенным ниже инструкциям.
tar -xf ../mpfr-4.1.0.tar.xz mv -v mpfr-4.1.0 mpfr tar -xf ../gmp-6.2.1.tar.xz mv -v gmp-6.2.1 gmp tar -xf ../mpc-1.2.1.tar.gz mv -v mpc-1.2.1 mpc
На хостах x86_64 установите имя каталога по умолчанию для 64-битных библиотек на «lib»:
case $(uname -m) in x86_64) sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 ;; esac
В документации к GCC рекомендуется собирать GCC в отдельном каталоге:
mkdir -v build cd build
Подготовьте GCC к компиляции:
../configure \ --target=$LFS_TGT \ --prefix=$LFS/tools \ --with-glibc-version=2.36 \ --with-sysroot=$LFS \ --with-newlib \ --without-headers \ --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++
Значение параметров настройки:
--with-glibc-version=2.36
Этот параметр указывает версию glibc, которая будет использоваться на целевой системе. Он не имеет отношения к libc хост-дистрибутива, потому что все, скомпилированное в этом разделе, будет выполняться в среде chroot, которая изолирована от libc хост-дистрибутива.
--with-newlib
Поскольку работающая библиотека C еще недоступна, это гарантирует, что константа inhibit_libc будет определена при сборке libgcc. Это предотвращает компиляцию любого кода, требующего поддержки libc.
--without-headers
При создании полного кросс-компилятора GCC требует наличия стандартных заголовков, совместимых с целевой системой. Для наших целей эти заголовки не понадобятся. Этот параметр предотвращает их поиск GCC.
--disable-shared
Этот параметр заставляет использовать некоторые внутренние структуры данных, которые необходимы, но не могут быть обнаружены при сборке кросс-компилятора.
--disable-multilib
Для платформы x86_64, LFS пока не поддерживает конфигурацию multilib. Этот аргумент ни как не повлияет, если установка выполняется на платформе x86.
--disable-decimal-float, --disable-threads,
--disable-libatomic, --disable-libgomp, --disable-libquadmath,
--disable-libssp, --disable-libvtv,
--disable-libstdcxx
Эти аргументы отключают поддержку расширений для работы с десятичным числами с плавающей запятой, многопоточностью, libatomic, libgomp, libquadmath, libssp, libvtv и стандартной библиотеки C++ соответственно. Эти функции не будут компилироваться при сборке кросс-компилятора и не нужны для задач кросс-компиляции временной libc
--enable-languages=c,c++
Этот параметр обеспечивает сборку только компиляторов C и C++. Это единственные языки, которые нужны сейчас.
Скомпилируйте GCC, выполнив:
make
Установите пакет:
make install
Во время сборки GCC установил пару внутренних системных заголовков.
Обычно один из файлов limits.h
,
включает соответствующие системные ограничения limits.h
, в данном случае $LFS/usr/include/limits.h
. Однако во время сборки
GCC $LFS/usr/include/limits.h
не
существует, поэтому только что установленный внутренний заголовок
является частичным, автономным файлом и не включает расширенные
функции системного заголовка. Этого достаточно для сборки glibc, но
полный внутренний заголовок понадобится позже. Создайте полную
версию внутреннего заголовка с помощью команды, идентичной тому,
что система сборки GCC делает в обычных обстоятельствах:
cd .. cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h
Подробная информация об этом пакете находится в Раздел 8.26.2, «Содержимое пакета GCC.»