| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [  <!ENTITY % general-entities SYSTEM "../general.ent">  %general-entities;]><sect1 id="ch-tools-gcc-pass2" role="wrap"><title>GCC-&gcc-version; - Pass 2</title><?dbhtml filename="gcc-pass2.html"?><indexterm zone="ch-tools-gcc-pass2"><primary sortas="a-GCC">GCC</primary><secondary>tools, pass 2</secondary></indexterm><sect2 role="package"><title/><segmentedlist><segtitle>&buildtime;</segtitle><segtitle>&diskspace;</segtitle><seglistitem><seg>11.0 SBU</seg><seg>274 MB</seg></seglistitem></segmentedlist></sect2><sect2 role="installation"><title>Re-installation of GCC</title><para>The tools required to test GCC and Binutils are installed now: Tcl,Expect and DejaGnu. Therefore we can now rebuild GCC and Binutils, linkingthem against the new Glibc, and test them properly (if running the test suitesin this chapter). One thing to note, however, is that these test suites arehighly dependent on properly functioning pseudo terminals (PTYs) which areprovided by your host. These days, PTYs are most commonly implemented via the<emphasis>devpts</emphasis> file system. You can quickly check if your hostsystem is set up correctly in this regard by performing a simple test:</para><screen><userinput>expect -c "spawn ls"</userinput></screen><para>The response might be:</para><blockquote><screen>The system has no more ptys.  Ask your system administrator to create more.</screen></blockquote><para>If you receive the above message, your host doesn't have its PTYs set upproperly. In this case there is no point in running the test suites for GCCand Binutils until you are able to resolve the issue. You can consult the LFSWiki at <ulink url="&wiki-root;"/> for more information on how to get PTYsworking.</para><para>This time we will build both the C and the C++ compilers, so you'll haveto unpack both the core and the g++ tarballs (and testsuite too, if you want torun the tests). Unpacking them in your working directory, they will all unfoldinto a single <filename>gcc-&gcc-version;/</filename> subdirectory.</para><para>First correct a problem and make an essential adjustment:</para><screen><userinput>patch -Np1 -i ../gcc-&gcc-short-version;-no-fixincludes-1.patchpatch -Np1 -i ../gcc-&gcc-short-version;-specs-1.patch</userinput></screen><para>The first patch disables the GCC <quote>fixincludes</quote> script. Wementioned this briefly earlier, but a slightly more in-depth explanation ofthe fixincludes process is warranted here. Under normal circumstances, the GCCfixincludes script scans your system for header files that need to be fixed. Itmight find that some Glibc header files on your host system need to be fixed,fix them and put them in the GCC private include directory. Then, later on in<xref linkend="chapter-building-system"/>, after we've installed the newerGlibc, this private include directory would be searched before the systeminclude directory, resulting in GCC finding the fixed headers from the hostsystem, which would most likely not match the Glibc version actually used forthe LFS system.</para><para>The second patch changes GCC's default location of the dynamic linker(typically <filename>ld-linux.so.2</filename>). It also removes<filename class="directory">/usr/include</filename> from GCC's include searchpath. Patching now rather than adjusting the specs file after installationensures that our new dynamic linker gets used during the actual build of GCC.That is, all the final (and temporary) binaries created during the build willlink against the new Glibc.</para><important><para>The above patches are <emphasis>critical</emphasis> in ensuringa successful overall build. Do not forget to apply them.</para></important><para>Create a separate build directory again:</para><screen><userinput>mkdir ../gcc-buildcd ../gcc-build</userinput></screen><para>Before starting to build GCC, remember to unset any environmentvariables that override the default optimization flags.</para><para>Now prepare GCC for compilation:</para><screen><userinput>../gcc-&gcc-version;/configure --prefix=/tools \    --libexecdir=/tools/lib --with-local-prefix=/tools \    --enable-clocale=gnu --enable-shared --enable-threads=posix \    --enable-__cxa_atexit --enable-languages=c,c++ \    --disable-libstdcxx-pch</userinput></screen><para>The meaning of the new configure options:</para><variablelist><varlistentry><term><userinput>--enable-clocale=gnu</userinput></term><listitem><para>This optionensures the correct locale model is selected for the C++ libraries under allcircumstances. If the configure script finds the <emphasis>de_DE</emphasis>locale installed, it will select the correct <emphasis>gnu</emphasis> localemodel. However, people who don't install the <emphasis>de_DE</emphasis> localewould run the risk of building ABI incompatible C++ libraries due to the wrong<emphasis>generic</emphasis> locale model being selected.</para></listitem></varlistentry><varlistentry><term><userinput>--enable-threads=posix</userinput></term><listitem><para>This enablesC++ exception handling for multi-threaded code.</para></listitem></varlistentry><varlistentry><term><userinput>--enable-__cxa_atexit</userinput></term><listitem><para>This optionallows use of __cxa_atexit, rather than atexit, to register C++ destructors forlocal statics and global objects and is essential for fully standards-complianthandling of destructors. It also affects the C++ ABI and therefore results inC++ shared libraries and C++ programs that are interoperable with other Linuxdistributions.</para></listitem></varlistentry><varlistentry><term><userinput>--enable-languages=c,c++</userinput></term><listitem><para>This optionensures that both the C and C++ compilers are built.</para></listitem></varlistentry><varlistentry><term><userinput>--disable-libstdcxx-pch</userinput></term><listitem><para>Don't build thePCH (pre-compiled header) for libstdc++. It takes up a ton of space, and wehave no use for it.</para></listitem></varlistentry></variablelist><para>Compile the package:</para><screen><userinput>make</userinput></screen><para>There is no need to use the <emphasis>bootstrap</emphasis> target now,as the compiler we're using to compile this GCC was built from the exact sameversion of the GCC sources we used earlier.</para><para>Compilation is now complete. As mentioned earlier, we don't recommendrunning the test suites for the temporary tools here in this chapter. If youstill want to run the GCC test suite anyway, the following command will doso:</para><screen><userinput>make -k check</userinput></screen><para>The <emphasis>-k</emphasis> flag is used to make the test suite runthrough to completion and not stop at the first failure. The GCC test suite isvery comprehensive and is almost guaranteed to generate a few failures. To geta summary of the test suite results, run this:</para> <screen><userinput>../gcc-&gcc-version;/contrib/test_summary</userinput></screen><para>(For just the summaries, pipe the output through<userinput>grep -A7 Summ</userinput>.)</para><para>You can compare your results to those posted to the gcc-testresultsmailing list for similar configurations to your own. For an example of howcurrent GCC-&gcc-version; should look on i686-pc-linux-gnu, see<ulink url="http://gcc.gnu.org/ml/gcc-testresults/2004-04/msg00414.html"/>.</para><para>Having a few unexpected failures often cannot be avoided. The GCCdevelopers are usually aware of these, but haven't yet gotten around to fixingthem. In short, unless your results are vastly different from those at the aboveURL, it is safe to continue.</para><para>And finally install the package:</para><screen><userinput>make install</userinput></screen><note><para>At this point it is strongly recommended to repeat the sanity checkwe performed earlier in this chapter. Refer back to<xref linkend="ch-tools-adjusting"/> and repeat the little test compilation. Ifthe result is wrong, then most likely you forgot to apply the above mentionedGCC Specs patch.</para></note></sect2><sect2 role="content"><title/><para>The details on this package are found in <xref linkend="contents-gcc"/>.</para></sect2></sect1>
 |