| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 | <?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">  <!ENTITY % patches-entities SYSTEM "../patches.ent">  %general-entities;  %patches-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>292 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 its PTYs set upproperly. In this case, there is no point in running the test suites for GCC andBinutils until this issue is resolved. Please consult the LFS FAQ at <ulinkurl="&lfs-root;/lfs/faq.html#no-ptys"/> for more information on how to get PTYsworking.</para><para>As previously explained in <xref linkend="ch-tools-adjusting"/>,  undernormal circumstances the GCC <command>fixincludes</command> script is run inorder to fix potentially broken header files.  As GCC-&gcc-version; andGlibc-&glibc-version; have already been installed at this point, and theirrespective header files are known not to require fixing, the<command>fixincludes</command> script is not required.  As mentioned previously,the script may in fact pollute the build environment by installing fixed headersfrom the host system into GCC's private include directory.  The running of the<command>fixincludes</command> script can be suppressed by issuing the followingcommands:</para><screen><userinput>cp -v gcc/Makefile.in{,.orig} &&sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in</userinput></screen><para>The bootstrap build performed in <xref linkend="ch-tools-gcc-pass1"/>built GCC with the <option>-fomit-frame-pointer</option> compiler flag.Non-bootstrap builds omit this flag by default, so apply the following<command>sed</command> to use it in order to ensure consistent compiler builds.</para><screen><userinput>cp -v gcc/Makefile.in{,.tmp} &&sed 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \	> gcc/Makefile.in</userinput></screen><para>Apply the following patch to change the location of GCC's default dynamiclinker (typically <filename class="libraryfile">ld-linux.so.2</filename>):</para><screen><userinput>patch -Np1 -i ../&gcc-specs-patch;</userinput></screen><para>The above patch also removes<filename class="directory">/usr/include</filename> from GCC's include searchpath. Patching now rather than adjusting the specs file after installationensures that the new dynamic linker is used during the actual build of GCC. Thatis, all of the binaries created during the build will link against the newGlibc.</para><important><para>The above patch is critical in ensuring asuccessful overall build. Do not forget to applyit.</para></important><para>Create a separate build directory again:</para><screen><userinput>mkdir -v ../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 affects 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 with those located at <ulinkurl="&test-results;"/>.</para><para>A few unexpected failures cannot always be avoided. The GCC developers areusually aware of these issues, but have not resolved them yet. In particular,the <filename class="libraryfile">libmudflap</filename> tests are known beparticularly problematic as a result of a bug in GCC (<ulinkurl="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20003"/>).  Unless the testresults are vastly different from those at the above URL, it is safe tocontinue.</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>
 |