From 5a6834585c43296c2207f5f251d3d5c237c7c8d2 Mon Sep 17 00:00:00 2001 From: Sn4il Date: Wed, 6 Mar 2024 10:25:41 +0300 Subject: Update LFS mirror --- lfs-12.1-sysv/chapter05/gcc-pass1.html | 332 +++++++++++++++++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 lfs-12.1-sysv/chapter05/gcc-pass1.html (limited to 'lfs-12.1-sysv/chapter05/gcc-pass1.html') diff --git a/lfs-12.1-sysv/chapter05/gcc-pass1.html b/lfs-12.1-sysv/chapter05/gcc-pass1.html new file mode 100644 index 0000000..ffe0d93 --- /dev/null +++ b/lfs-12.1-sysv/chapter05/gcc-pass1.html @@ -0,0 +1,332 @@ + + + + + + 5.3. GCC-13.2.0 - Проход 1 + + + + + + + + +

+ 5.3. + GCC-13.2.0 - Проход 1 +

+
+
+

+ Пакет GCC содержит коллекцию компиляторов GNU, которая включает + компиляторы C и C++. +

+
+
+
+ Приблизительное время сборки: + 3.8 SBU +
+
+ Требуемое дисковое + пространство: 4.1 GB +
+
+
+
+
+

+ 5.3.1. Установка кросс-пакета GCC +

+

+ Для GCC требуются пакеты GMP, MPFR и MPC. Поскольку эти пакеты + могут отсутствовать в дистрибутиве вашего хоста, они будут собраны + с помощью GCC. Распакуйте каждый пакет в исходный каталог GCC и + переименуйте получившиеся каталоги, чтобы процедуры сборки GCC + использовали их автоматически: +

+
+ [Примечание] +

+ Примечание +

+

+ В этой главе часто возникают недоразумения, хотя применяются те + же процедуры, что и в любой другой главе, следуйте инструкции + которую получили ранее (Инструкции по + сборке пакетов). Сначала распакуйте пакет gcc-13.2.0 из + архива, а затем перейдите в созданный каталог. Только после этого + следует приступить к приведенным ниже инструкциям. +

+
+
tar -xf ../mpfr-4.2.1.tar.xz
+mv -v mpfr-4.2.1 mpfr
+tar -xf ../gmp-6.3.0.tar.xz
+mv -v gmp-6.3.0 gmp
+tar -xf ../mpc-1.3.1.tar.gz
+mv -v mpc-1.3.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.39 \
+    --with-sysroot=$LFS       \
+    --with-newlib             \
+    --without-headers         \
+    --enable-default-pie      \
+    --enable-default-ssp      \
+    --disable-nls             \
+    --disable-shared          \
+    --disable-multilib        \
+    --disable-threads         \
+    --disable-libatomic       \
+    --disable-libgomp         \
+    --disable-libquadmath     \
+    --disable-libssp          \
+    --disable-libvtv          \
+    --disable-libstdcxx       \
+    --enable-languages=c,c++
+
+

+ Значение параметров настройки: +

+
+
+ --with-glibc-version=2.39 +
+
+

+ Этот параметр указывает версию Glibc, которая будет + использоваться на целевой системе. Он не имеет отношения к + libc хост-дистрибутива, потому что все, скомпилированное в + этом разделе, будет выполняться в среде chroot, которая + изолирована от libc хост-дистрибутива. +

+
+
+ --with-newlib +
+
+

+ Поскольку работающая библиотека C еще недоступна, это + гарантирует, что константа inhibit_libc будет определена при + сборке libgcc. Это предотвращает компиляцию любого кода, + требующего поддержки libc. +

+
+
+ --without-headers +
+
+

+ При создании полного кросс-компилятора GCC требует наличия + стандартных заголовков, совместимых с целевой системой. Для + наших целей эти заголовки не понадобятся. Этот параметр + предотвращает их поиск GCC. +

+
+
+ --enable-default-pie и + --enable-default-ssp +
+
+

+ Эти параметры позволяют GCC по умолчанию компилировать + программы с некоторые функциями усиливающими безопасность + (более подробная информация о них приведена в примечание о PIE и + SSP в Главе 8). На данном этапе это не является строго + обязательным, поскольку компилятор будет создавать только + временные исполняемые файлы. Но лучше, чтобы временные пакеты + были максимально приближены к тем, что будут в готовой + системе LFS. +

+
+
+ --disable-shared +
+
+

+ Этот параметр заставляет GCC статически связывать свои + внутренние библиотеки. Он необходим потому что общие + библиотеки требуют Glibc, который еще не установлен в целевой + системе. +

+
+
+ --disable-multilib +
+
+

+ На x86_64, LFS не поддерживает конфигурацию multilib. Этот + аргумент никак не влияет на работу с архитектурой x86. +

+
+
+ --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)`/include/limits.h
+
+
+

+ Подробная информация об этом пакете находится в Раздел 8.28.2, «Содержимое + пакета GCC.» +

+
+
+ + + -- cgit v1.2.3