diff --git a/chapter05/gcc-pass1.xml b/chapter05/gcc-pass1.xml new file mode 100644 index 0000000..db0c3c2 --- /dev/null +++ b/chapter05/gcc-pass1.xml @@ -0,0 +1,199 @@ + + + %general-entities; +]> + + + + + + gcc-pass1 + &gcc-version; +
&gcc-url;
+
+ + GCC-&gcc-version; - Проход 1 + + + GCC + tools, pass 1 + + + + + + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + href="../chapter08/gcc.xml" + xpointer="xpointer(/sect1/sect2[1]/para[1])"/> + + <segmentedlist> + <segtitle>&buildtime;</segtitle> + <segtitle>&diskspace;</segtitle> + + <seglistitem> + <seg>&gcc-tmpp1-sbu;</seg> + <seg>&gcc-tmpp1-du;</seg> + </seglistitem> + </segmentedlist> + + </sect2> + + <sect2 role="installation"> + <title>Установка кросс-пакета GCC + + Для GCC требуются пакеты GMP, MPFR и MPC. Поскольку эти пакеты могут + отсутствовать в дистрибутиве вашего хоста, они будут собраны с помощью GCC. + Распакуйте каждый пакет в исходный каталог GCC и переименуйте получившиеся + каталоги, чтобы процедуры сборки GCC использовали их автоматически: + + .В этой главе часто возникают недоразумения. Процедуры такие же, + как и в любой другой главе, как было описано ранее (). Сначала распакуйте пакет gcc из архива, + а затем перейдите в созданный каталог. Только после этого следует + приступить к приведенным ниже инструкциям. + +tar -xf ../mpfr-&mpfr-version;.tar.xz +mv -v mpfr-&mpfr-version; mpfr +tar -xf ../gmp-&gmp-version;.tar.xz +mv -v gmp-&gmp-version; gmp +tar -xf ../mpc-&mpc-version;.tar.gz +mv -v mpc-&mpc-version; 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=&glibc-version; \ + --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=&glibc-version; + + Этот параметр указывает версию 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 + + + + + + <para>Подробная информация об этом пакете находится в + <xref linkend="contents-gcc" role="."/></para> + + </sect2> + +</sect1>