mirror of
https://git.linuxfromscratch.org/lfs.git
synced 2025-01-19 21:49:13 +00:00
1cdaff9801
git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@8839 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
423 lines
15 KiB
XML
423 lines
15 KiB
XML
<?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-system-gcc" role="wrap">
|
|
<?dbhtml filename="gcc.html"?>
|
|
|
|
<sect1info condition="script">
|
|
<productname>gcc</productname>
|
|
<productnumber>&gcc-version;</productnumber>
|
|
<address>&gcc-url;</address>
|
|
</sect1info>
|
|
|
|
<title>GCC-&gcc-version;</title>
|
|
|
|
<indexterm zone="ch-system-gcc">
|
|
<primary sortas="a-GCC">GCC</primary>
|
|
</indexterm>
|
|
|
|
<sect2 role="package">
|
|
<title/>
|
|
|
|
<para>The GCC package contains the GNU compiler collection, which includes
|
|
the C and C++ compilers.</para>
|
|
|
|
<segmentedlist>
|
|
<segtitle>&buildtime;</segtitle>
|
|
<segtitle>&diskspace;</segtitle>
|
|
|
|
<seglistitem>
|
|
<seg>&gcc-ch6-sbu;</seg>
|
|
<seg>&gcc-ch6-du;</seg>
|
|
</seglistitem>
|
|
</segmentedlist>
|
|
|
|
</sect2>
|
|
|
|
<sect2 role="installation">
|
|
<title>Installation of GCC</title>
|
|
|
|
<para>Apply a <command>sed</command> substitution that will suppress the
|
|
installation of <filename class="libraryfile">libiberty.a</filename>. The
|
|
version of <filename class="libraryfile">libiberty.a</filename> provided by
|
|
Binutils will be used instead:</para>
|
|
|
|
<screen><userinput remap="pre">sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in</userinput></screen>
|
|
|
|
<para>For x86 machines, the bootstrap build performed in
|
|
<xref linkend="ch-tools-gcc-pass2"/>
|
|
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 remap="pre">case `uname -m` in
|
|
i?86) sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' \
|
|
gcc/Makefile.in ;;
|
|
esac</userinput></screen>
|
|
|
|
<para>The <command>fixincludes</command> script is known to occasionally
|
|
erroneously attempt to "fix" the system headers installed so far.
|
|
As the headers up to this point are known to not require fixing,
|
|
issue the following command to prevent the <command>fixincludes</command>
|
|
script from running:</para>
|
|
|
|
<screen><userinput remap="pre">sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in</userinput></screen>
|
|
|
|
<para>The GCC documentation recommends building GCC outside of the source
|
|
directory in a dedicated build directory:</para>
|
|
|
|
<screen><userinput remap="pre">mkdir -v ../gcc-build
|
|
cd ../gcc-build</userinput></screen>
|
|
|
|
<para>Prepare GCC for compilation:</para>
|
|
|
|
<screen><userinput remap="configure">../gcc-&gcc-version;/configure --prefix=/usr \
|
|
--libexecdir=/usr/lib --enable-shared \
|
|
--enable-threads=posix --enable-__cxa_atexit \
|
|
--enable-clocale=gnu --enable-languages=c,c++ \
|
|
--disable-multilib --disable-bootstrap</userinput></screen>
|
|
|
|
<para>Note that for other languages, there are some prerequisites that
|
|
are not available. See the BLFS Book for instructions on how to
|
|
build all the GCC supported languages.</para>
|
|
|
|
<para>Compile the package:</para>
|
|
|
|
<screen><userinput remap="make">make</userinput></screen>
|
|
|
|
<important>
|
|
<para>In this section, the test suite for GCC is considered
|
|
critical. Do not skip it under any circumstance.</para>
|
|
</important>
|
|
|
|
<para>Test the results, but do not stop at errors:</para>
|
|
|
|
<screen><userinput remap="test">make -k check</userinput></screen>
|
|
|
|
<para>To receive a summary of the test suite results, run:</para>
|
|
|
|
<screen><userinput remap="test">../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 <ulink
|
|
url="&test-results;"/>.</para>
|
|
|
|
<para>A few unexpected failures cannot always be avoided. The GCC developers
|
|
are usually aware of these issues, but have not resolved them yet. In
|
|
particular, the <filename class="libraryfile">libmudflap</filename> tests
|
|
are known be particularly problematic as a result of a bug in GCC
|
|
(<ulink url="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20003"/>).
|
|
Unless the test results are vastly different from those at the above URL,
|
|
it is safe to continue.</para>
|
|
|
|
<para>Install the package:</para>
|
|
|
|
<screen><userinput remap="install">make install</userinput></screen>
|
|
|
|
<para>Some packages expect the C preprocessor to be installed in the
|
|
<filename class="directory">/lib</filename> directory.
|
|
To support those packages, create this symlink:</para>
|
|
|
|
<screen><userinput remap="install">ln -sv ../usr/bin/cpp /lib</userinput></screen>
|
|
|
|
<para>Many packages use the name <command>cc</command> to call the C
|
|
compiler. To satisfy those packages, create a symlink:</para>
|
|
|
|
<screen><userinput remap="install">ln -sv gcc /usr/bin/cc</userinput></screen>
|
|
|
|
<para>Now that our final toolchain is in place, it is important to again ensure
|
|
that compiling and linking will work as expected. We do this by performing
|
|
the same sanity checks as we did earlier in the chapter:</para>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='a'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='b'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='c'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='d'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='e'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='f'])"/>
|
|
|
|
<screen><computeroutput>/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crt1.o succeeded
|
|
/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crti.o succeeded
|
|
/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crtn.o succeeded</computeroutput></screen>
|
|
|
|
<para>Depending on your machine architecture, the above may differ slightly,
|
|
the difference usually being the name of the directory
|
|
after <filename class="directory">/usr/lib/gcc</filename>. If your machine is
|
|
a 64-bit system, you may also see a directory named <filename class="directory">lib64</filename>
|
|
towards the end of the string. The important thing to
|
|
look for here is that gcc has found all three <filename>crt*.o</filename> files under
|
|
the <filename class="directory">/usr/lib</filename> directory.</para>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='g'])"/>
|
|
|
|
<screen><userinput>grep -B4 '^ /usr/include' dummy.log</userinput></screen>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='h'])"/>
|
|
|
|
<screen><computeroutput>#include <...> search starts here:
|
|
/usr/local/include
|
|
/usr/lib/gcc/x86_64-unknown-linux-gnu/&gcc-version;/include
|
|
/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/include-fixed
|
|
/usr/include</computeroutput></screen>
|
|
|
|
<para>Again, note that the directory named after your target triplet may be
|
|
different than the above, depending on your architecture.</para>
|
|
|
|
<note><para>As of version 4.3.0, GCC now unconditionally installs the
|
|
<filename>limits.h</filename> file into the private
|
|
<filename class="directory">include-fixed</filename> directory, and that
|
|
directory is required to be in place.</para></note>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='i'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='j'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='k'])"/>
|
|
|
|
<screen><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
|
|
SEARCH_DIR("/usr/local/lib")
|
|
SEARCH_DIR("/lib")
|
|
SEARCH_DIR("/usr/lib");</computeroutput></screen>
|
|
|
|
<para>A 64-bit system may see a few more directories. For example, here
|
|
is the output from a x86_64 machine:</para>
|
|
|
|
<screen><computeroutput>SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib64")
|
|
SEARCH_DIR("/usr/local/lib64")
|
|
SEARCH_DIR("/lib64")
|
|
SEARCH_DIR("/usr/lib64")
|
|
SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib")
|
|
SEARCH_DIR("/usr/local/lib")
|
|
SEARCH_DIR("/lib")
|
|
SEARCH_DIR("/usr/lib");</computeroutput></screen>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='l'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='m'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='n'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='o'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='p'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='q'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='r'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='s'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='t'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='u'])"/>
|
|
|
|
<xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
|
|
href="readjusting.xml"
|
|
xpointer="xpointer(//*[@os='v'])"/>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="contents-gcc" role="content">
|
|
<title>Contents of GCC</title>
|
|
|
|
<segmentedlist>
|
|
<segtitle>Installed programs</segtitle>
|
|
<segtitle>Installed libraries</segtitle>
|
|
|
|
<seglistitem>
|
|
<seg>c++, cc (link to gcc), cpp, g++, gcc, gccbug, and gcov</seg>
|
|
<seg>libgcc.a, libgcc_eh.a, libgcc_s.so, libmudflap.{a,so},
|
|
libssp.{a,so}, libstdc++.{a,so}, and libsupc++.a</seg>
|
|
</seglistitem>
|
|
</segmentedlist>
|
|
|
|
<variablelist>
|
|
<bridgehead renderas="sect3">Short Descriptions</bridgehead>
|
|
<?dbfo list-presentation="list"?>
|
|
<?dbhtml list-presentation="table"?>
|
|
|
|
<varlistentry id="c">
|
|
<term><command>c++</command></term>
|
|
<listitem>
|
|
<para>The C++ compiler</para>
|
|
<indexterm zone="ch-system-gcc c">
|
|
<primary sortas="b-c++">c++</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="cc">
|
|
<term><command>cc</command></term>
|
|
<listitem>
|
|
<para>The C compiler</para>
|
|
<indexterm zone="ch-system-gcc cc">
|
|
<primary sortas="b-cc">cc</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="cpp">
|
|
<term><command>cpp</command></term>
|
|
<listitem>
|
|
<para>The C preprocessor; it is used by the compiler to expand the
|
|
#include, #define, and similar statements in the source files</para>
|
|
<indexterm zone="ch-system-gcc cpp">
|
|
<primary sortas="b-cpp">cpp</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="g">
|
|
<term><command>g++</command></term>
|
|
<listitem>
|
|
<para>The C++ compiler</para>
|
|
<indexterm zone="ch-system-gcc g">
|
|
<primary sortas="b-g++">g++</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="gcc">
|
|
<term><command>gcc</command></term>
|
|
<listitem>
|
|
<para>The C compiler</para>
|
|
<indexterm zone="ch-system-gcc gcc">
|
|
<primary sortas="b-gcc">gcc</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="gccbug">
|
|
<term><command>gccbug</command></term>
|
|
<listitem>
|
|
<para>A shell script used to help create useful bug reports</para>
|
|
<indexterm zone="ch-system-gcc gccbug">
|
|
<primary sortas="b-gccbug">gccbug</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="gcov">
|
|
<term><command>gcov</command></term>
|
|
<listitem>
|
|
<para>A coverage testing tool; it is used to analyze programs to
|
|
determine where optimizations will have the most effect</para>
|
|
<indexterm zone="ch-system-gcc gcov">
|
|
<primary sortas="b-gcov">gcov</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="libgcc">
|
|
<term><filename class="libraryfile">libgcc</filename></term>
|
|
<listitem>
|
|
<para>Contains run-time support for <command>gcc</command></para>
|
|
<indexterm zone="ch-system-gcc libgcc">
|
|
<primary sortas="c-libgcc*">libgcc*</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="libmudflap">
|
|
<term><filename class="libraryfile">libmudflap</filename></term>
|
|
<listitem>
|
|
<para>Contains routines that support GCC's bounds checking
|
|
functionality</para>
|
|
<indexterm zone="ch-system-gcc libmudflap">
|
|
<primary sortas="c-libmudflap*">libmudflap*</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="libssp">
|
|
<term><filename class="libraryfile">libssp</filename></term>
|
|
<listitem>
|
|
<para>Contains routines supporting GCC's stack-smashing protection
|
|
functionality</para>
|
|
<indexterm zone="ch-system-gcc libssp">
|
|
<primary sortas="c-libssp*">libssp*</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="libstdc">
|
|
<term><filename class="libraryfile">libstdc++</filename></term>
|
|
<listitem>
|
|
<para>The standard C++ library</para>
|
|
<indexterm zone="ch-system-gcc libstdc">
|
|
<primary sortas="c-libstdc++">libstdc++</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry id="libsupc">
|
|
<term><filename class="libraryfile">libsupc++</filename></term>
|
|
<listitem>
|
|
<para>Provides supporting routines for the C++ programming
|
|
language</para>
|
|
<indexterm zone="ch-system-gcc libsupc">
|
|
<primary sortas="c-libsupc++">libsupc++</primary>
|
|
</indexterm>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
|
|
</sect2>
|
|
|
|
</sect1>
|