123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
- <!ENTITY % general-entities SYSTEM "../general.ent">
- %general-entities;
- ]>
- <sect1 id="ch-tools-gcc-pass1" role="wrap" xreflabel="gcc-pass1">
- <?dbhtml filename="gcc-pass1.html"?>
- <sect1info condition="script">
- <productname>gcc-pass1</productname>
- <productnumber>&gcc-version;</productnumber>
- <address>&gcc-url;</address>
- </sect1info>
- <title>GCC-&gcc-version; - Pass 1</title>
- <indexterm zone="ch-tools-gcc-pass1">
- <primary sortas="a-GCC">GCC</primary>
- <secondary>tools, pass 1</secondary>
- </indexterm>
- <sect2 role="package">
- <title/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- href="../chapter06/gcc.xml"
- xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
- <segmentedlist>
- <segtitle>&buildtime;</segtitle>
- <segtitle>&diskspace;</segtitle>
- <seglistitem>
- <seg>&gcc-ch5p1-sbu;</seg>
- <seg>&gcc-ch5p1-du;</seg>
- </seglistitem>
- </segmentedlist>
- </sect2>
- <sect2 role="installation">
- <title>Installation of Cross GCC</title>
- <para>GCC requires the GMP, MPFR and MPC packages. As these packages may
- not be included in your host distribution, they will be built with
- GCC. Unpack each package into the GCC source directory and rename the
- resulting directories so the GCC build procedures will automatically
- use them:</para>
- <note><para>There are frequent misunderstandings about this chapter. The
- procedures are the same as every other chapter as explained earlier (<xref
- linkend='buildinstr'/>). First extract the gcc tarball from the sources
- directory and then change to the directory created. Only then should you
- proceed with the instructions below.</para></note>
- <screen><userinput remap="pre">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</userinput></screen>
- <para>On x86_64 hosts, set the default directory name for
- 64-bit libraries to <quote>lib</quote>:</para>
- <screen><userinput remap="pre">case $(uname -m) in
- x86_64)
- sed -e '/m64=/s/lib64/lib/' \
- -i.orig gcc/config/i386/t-linux64
- ;;
- esac</userinput></screen>
- <para>The GCC documentation recommends building GCC
- in a dedicated build directory:</para>
- <screen><userinput remap="pre">mkdir -v build
- cd build</userinput></screen>
- <para>Prepare GCC for compilation:</para>
- <screen><userinput remap="configure">../configure \
- --target=$LFS_TGT \
- --prefix=$LFS/tools \
- --with-glibc-version=2.11 \
- --with-sysroot=$LFS \
- --with-newlib \
- --without-headers \
- --enable-initfini-array \
- --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++</userinput></screen>
- <variablelist>
- <title>The meaning of the configure options:</title>
- <varlistentry>
- <term><parameter>--with-glibc-version=2.11</parameter></term>
- <listitem>
- <para>This option ensures the package will be compatible with the host's
- version of glibc. It is set to the minimum glibc requirement
- specified in the <xref linkend="ch-partitioning-hostreqs"/>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><parameter>--with-newlib</parameter></term>
- <listitem>
- <para>Since a working C library is not yet available, this ensures
- that the inhibit_libc constant is defined when building libgcc. This prevents
- the compiling of any code that requires libc support.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><parameter>--without-headers</parameter></term>
- <listitem>
- <para>When creating a complete cross-compiler, GCC requires
- standard headers compatible with the target system. For our
- purposes these headers will not be needed. This switch prevents
- GCC from looking for them.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><parameter>--disable-shared</parameter></term>
- <listitem>
- <para>This switch forces GCC to link its internal libraries
- statically. We need this because the shared libraries require glibc,
- which is not yet installed on the target system.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><parameter>--disable-decimal-float, --disable-threads,
- --disable-libatomic, --disable-libgomp, <!--- -disable-libmpx,-->
- --disable-libquadmath, --disable-libssp, --disable-libvtv,
- --disable-libstdcxx</parameter></term>
- <listitem>
- <para>These switches disable support for the decimal floating point
- extension, threading, libatomic, libgomp, <!--libmpx, --> libquadmath, libssp,
- libvtv, and the C++ standard library respectively. These features
- will fail to compile when building a cross-compiler and are not
- necessary for the task of cross-compiling the temporary libc.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><parameter>--disable-multilib</parameter></term>
- <listitem>
- <para>On x86_64, LFS does not yet support a multilib configuration.
- This switch is harmless for x86.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><parameter>--enable-languages=c,c++</parameter></term>
- <listitem>
- <para>This option ensures that only the C and C++ compilers are built.
- These are the only languages needed now.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- <para>Compile GCC by running:</para>
- <screen><userinput remap="make">make</userinput></screen>
- <para>Install the package:</para>
- <screen><userinput remap="install">make install</userinput></screen>
- <para>This build of GCC has installed a couple of internal system
- headers. Normally one of them, <filename>limits.h</filename>, would in turn
- include the corresponding system <filename>limits.h</filename> header, in
- this case, <filename>$LFS/usr/include/limits.h</filename>. However, at the
- time of this build of gcc <filename>$LFS/usr/include/limits.h</filename>
- does not exist, so the internal header that has just been installed is a
- partial, self-contained file and does not include the extended features of
- the system header. This is adequate for building glibc, but the full
- internal header will be needed later. Create a full version of the internal
- header using a command that is identical to what the GCC build system does
- in normal circumstances:</para>
- <screen><userinput remap="install">cd ..
- cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
- `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h</userinput></screen>
- </sect2>
- <sect2 role="content">
- <title/>
- <para>Details on this package are located in
- <xref linkend="contents-gcc" role="."/></para>
- </sect2>
- </sect1>
|