| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 | <?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/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><xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="../chapter06/gcc.xml" xpointer="xpointer(/sect1/sect2[1]/segmentedlist[2])"/></sect2><sect2 role="installation"><title>Re-installation of GCC</title><para>This package is known to have issues when its defaultoptimization flags (including the <parameter>-march</parameter> and<parameter>-mcpu</parameter> options) are changed. If any environmentvariables that override default optimizations have been defined, suchas <envar>CFLAGS</envar> and <envar>CXXFLAGS</envar>,unset them when building GCC.</para><para>The tools required to test GCC and Binutils—Tcl, Expectand DejaGNU—are installed now. GCC and Binutils can now berebuilt, linking them against the new Glibc and testing them properly(if running the test suites in this chapter). Please note that thesetest suites are highly dependent on properly functioning PTYs whichare provided by the host. PTYs are most commonly implemented via the<systemitem class="filesystem">devpts</systemitem> file system. Checkto see if the host system is set up correctly in this regard byperforming a quick test:</para><screen><userinput>expect -c "spawn ls"</userinput></screen><para>The response might be:</para><screen><computeroutput>The system has no more ptys.  Ask your system administrator to create more.</computeroutput></screen><para>If the above message is received, the host does not have itsPTYs set up properly. In this case, there is no point in running thetest suites for GCC and Binutils until this issue is resolved. Pleaseconsult the LFS Wiki at <ulink url="&wiki-root;"/> for moreinformation on how to get PTYs working.</para><para>Because the C and the C++ compilers will be built, unpack boththe core and the g++ tarballs (as well as test suite, if you want torun the tests). By unpacking them in the working directory, they willall unfold into a single <filenameclass="directory">gcc-&gcc-version;/</filename> subdirectory.</para><para>First correct a known problem and make an essential adjustment:</para><screen><userinput>patch -Np1 -i ../gcc-&gcc-version;-no_fixincludes-1.patchpatch -Np1 -i ../gcc-&gcc-version;-specs-2.patch</userinput></screen><para>The first patch disables the GCC <command>fixincludes</command>script. This was briefly mentioned earlier, but a more in-depthexplanation of the fixincludes process is warranted here. Under normalcircumstances, the GCC <command>fixincludes</command> script scans thesystem for header files that need to be fixed. It might find that someGlibc header files on the host system need to be fixed, and will fixthem and put them in the GCC private include directory. In <xreflinkend="chapter-building-system"/>, after the newer Glibc has beeninstalled, this private include directory will be searched before thesystem include directory.  This may result in GCC finding the fixedheaders from the host system, which most likely will not match theGlibc version used for the LFS system.</para><para>The second patch changes GCC's default location of the dynamiclinker (typically <filename class="libraryfile">ld-linux.so.2</filename>). It also removes<filename class="directory">/usr/include</filename> from GCC's includesearch path. Patching now rather than adjusting the specs file afterinstallation ensures that the new dynamic linker is used during theactual build of GCC. That is, all of the final (and temporary)binaries created during the build will link against the newGlibc.</para><important><para>The above patches are critical in ensuring asuccessful overall build. Do not forget to applythem.</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><parameter>--enable-clocale=gnu</parameter></term><listitem><para>This option ensures the correct locale model isselected for the C++ libraries under all circumstances. If theconfigure script finds the <emphasis>de_DE</emphasis> locale installed, it will select thecorrect gnu locale model. However, if the <emphasis>de_DE</emphasis> locale is notinstalled, there is the risk of building Application Binary Interface(ABI)-incompatible C++ libraries because the incorrect generic localemodel may be selected.</para></listitem></varlistentry><varlistentry><term><parameter>--enable-threads=posix</parameter></term><listitem><para>This enables C++ exception handling for multi-threadedcode.</para></listitem></varlistentry><varlistentry><term><parameter>--enable-__cxa_atexit</parameter></term><listitem><para>This option allows use of<emphasis>__cxa_atexit</emphasis>, rather than<emphasis>atexit</emphasis>, to register C++ destructors for localstatics and global objects.  This option is essential for fullystandards-compliant handling of destructors. It also effects the C++ABI, and therefore results in C++ shared libraries and C++ programsthat are interoperable with other Linuxdistributions.</para></listitem></varlistentry><varlistentry><term><parameter>--enable-languages=c,c++</parameter></term><listitem><para>This optionensures that both the C and C++ compilers are built.</para></listitem></varlistentry><varlistentry><term><parameter>--disable-libstdcxx-pch</parameter></term><listitem><para>Do not build the pre-compiled header (PCH) for<filename class="libraryfile">libstdc++</filename>. It takes up a lot of space,and we have 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 <parameter>bootstrap</parameter>target now because the compiler being used to compile this GCC wasbuilt from the exact same version of the GCC sources usedearlier.</para><para>Compilation is now complete. As previously mentioned, runningthe test suites for the temporary tools compiled in this chapter isnot mandatory. To run the GCC test suite anyway, use the followingcommand:</para><screen><userinput>make -k check</userinput></screen><para>The <parameter>-k</parameter> flag is used to make the test suite runthrough to completion and not stop at the first failure. The GCC testsuite is very comprehensive and is almost guaranteed to generate a fewfailures. To receive a summary of the test suite results, run:</para> <screen><userinput>../gcc-&gcc-version;/contrib/test_summary</userinput></screen><para>For only the summaries, pipe the output through<userinput>grep -A7 Summ</userinput>.</para><para>Results can be compared to those posted to the gcc-testresultsmailing list to see similar configurations to the one being built. Foran example of how current GCC-&gcc-version; should look oni686-pc-linux-gnu, see <ulinkurl="http://gcc.gnu.org/ml/gcc-testresults/2004-07/msg00179.html"/>.</para><para>A few unexpected failures cannot always be avoided. TheGCC developers are usually aware of these issues, but have notresolved them yet. Unless the test results are vastly different fromthose at the above URL, it is safe to continue.</para><para>Install the package:</para><screen><userinput>make install</userinput></screen><note><para>At this point it is strongly recommended to repeat thesanity check we performed earlier in this chapter. Refer back to <xreflinkend="ch-tools-adjusting" role=","/> and repeat the test compilation.  Ifthe result is wrong, the most likely reason is that the GCC Specspatch was not properly applied.</para></note></sect2><sect2 role="content"><title/><para>Details on this package are located in <xreflinkend="contents-gcc" role="."/></para></sect2></sect1>
 |