<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, the Front-Cover texts being (a) (see below), and
with the Back-Cover Texts being (b) (see below).  A copy of the
license is included in the section entitled "GNU
Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Installing GCC</title>

<meta name="description" content="Installing GCC">
<meta name="keywords" content="Installing GCC">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<h1 class="settitle" align="center">Installing GCC</h1>




















<a name="index-Installing-GCC_003a-Building"></a>

<p>Now that GCC is configured, you are ready to build the compiler and
runtime libraries.
</p>
<p>Some commands executed when making the compiler may fail (return a
nonzero status) and be ignored by <code>make</code>.  These failures, which
are often due to files that were not found, are expected, and can safely
be ignored.
</p>
<p>It is normal to have compiler warnings when compiling certain files.
Unless you are a GCC developer, you can generally ignore these warnings
unless they cause compilation to fail.  Developers should attempt to fix
any warnings encountered, however they can temporarily continue past
warnings-as-errors by specifying the configure flag
<samp>--disable-werror</samp>.
</p>
<p>On certain old systems, defining certain environment variables such as
<code>CC</code> can interfere with the functioning of <code>make</code>.
</p>
<p>If you encounter seemingly strange errors when trying to build the
compiler in a directory other than the source directory, it could be
because you have previously configured the compiler in the source
directory.  Make sure you have done all the necessary preparations.
</p>
<p>If you build GCC on a BSD system using a directory stored in an old System
V file system, problems may occur in running <code>fixincludes</code> if the
System V file system doesn&rsquo;t support symbolic links.  These problems
result in a failure to fix the declaration of <code>size_t</code> in
<samp>sys/types.h</samp>.  If you find that <code>size_t</code> is a signed type and
that type mismatches occur, this could be the cause.
</p>
<p>The solution is not to use such a directory for building GCC.
</p>
<p>Similarly, when building from SVN or snapshots, or if you modify
<samp>*.l</samp> files, you need the Flex lexical analyzer generator
installed.  If you do not modify <samp>*.l</samp> files, releases contain
the Flex-generated files and you do not need Flex installed to build
them.  There is still one Flex-based lexical analyzer (part of the
build machinery, not of GCC itself) that is used even if you only
build the C front end.
</p>
<p>When building from SVN or snapshots, or if you modify Texinfo
documentation, you need version 4.7 or later of Texinfo installed if you
want Info documentation to be regenerated.  Releases contain Info
documentation pre-built for the unmodified documentation in the release.
</p>
<a name="Building-a-native-compiler"></a>
<h3 class="section">Building a native compiler</h3>

<p>For a native build, the default configuration is to perform
a 3-stage bootstrap of the compiler when &lsquo;<samp>make</samp>&rsquo; is invoked.
This will build the entire GCC system and ensure that it compiles
itself correctly.  It can be disabled with the <samp>--disable-bootstrap</samp>
parameter to &lsquo;<samp>configure</samp>&rsquo;, but bootstrapping is suggested because
the compiler will be tested more completely and could also have
better performance.
</p>
<p>The bootstrapping process will complete the following steps:
</p>
<ul>
<li> Build tools necessary to build the compiler.

</li><li> Perform a 3-stage bootstrap of the compiler.  This includes building
three times the target tools for use by the compiler such as binutils
(bfd, binutils, gas, gprof, ld, and opcodes) if they have been
individually linked or moved into the top level GCC source tree before
configuring.

</li><li> Perform a comparison test of the stage2 and stage3 compilers.

</li><li> Build runtime libraries using the stage3 compiler from the previous step.

</li></ul>

<p>If you are short on disk space you might consider &lsquo;<samp>make
bootstrap-lean</samp>&rsquo; instead.  The sequence of compilation is the
same described above, but object files from the stage1 and
stage2 of the 3-stage bootstrap of the compiler are deleted as
soon as they are no longer needed.
</p>
<p>If you wish to use non-default GCC flags when compiling the stage2
and stage3 compilers, set <code>BOOT_CFLAGS</code> on the command line when
doing &lsquo;<samp>make</samp>&rsquo;.  For example, if you want to save additional space
during the bootstrap and in the final installation as well, you can
build the compiler binaries without debugging information as in the
following example.  This will save roughly 40% of disk space both for
the bootstrap and the final installation.  (Libraries will still contain
debugging information.)
</p>
<div class="smallexample">
<pre class="smallexample">make BOOT_CFLAGS='-O' bootstrap
</pre></div>

<p>You can place non-default optimization flags into <code>BOOT_CFLAGS</code>; they
are less well tested here than the default of &lsquo;<samp>-g -O2</samp>&rsquo;, but should
still work.  In a few cases, you may find that you need to specify special
flags such as <samp>-msoft-float</samp> here to complete the bootstrap; or,
if the native compiler miscompiles the stage1 compiler, you may need
to work around this, by choosing <code>BOOT_CFLAGS</code> to avoid the parts
of the stage1 compiler that were miscompiled, or by using &lsquo;<samp>make
bootstrap4</samp>&rsquo; to increase the number of stages of bootstrap.
</p>
<p><code>BOOT_CFLAGS</code> does not apply to bootstrapped target libraries.
Since these are always compiled with the compiler currently being
bootstrapped, you can use <code>CFLAGS_FOR_TARGET</code> to modify their
compilation flags, as for non-bootstrapped target libraries.
Again, if the native compiler miscompiles the stage1 compiler, you may
need to work around this by avoiding non-working parts of the stage1
compiler.  Use <code>STAGE1_TFLAGS</code> to this end.
</p>
<p>If you used the flag <samp>--enable-languages=&hellip;</samp> to restrict
the compilers to be built, only those you&rsquo;ve actually enabled will be
built.  This will of course only build those runtime libraries, for
which the particular compiler has been built.  Please note,
that re-defining <code>LANGUAGES</code> when calling &lsquo;<samp>make</samp>&rsquo;
<strong>does not</strong> work anymore!
</p>
<p>If the comparison of stage2 and stage3 fails, this normally indicates
that the stage2 compiler has compiled GCC incorrectly, and is therefore
a potentially serious bug which you should investigate and report.  (On
a few systems, meaningful comparison of object files is impossible; they
always appear &ldquo;different&rdquo;.  If you encounter this problem, you will
need to disable comparison in the <samp>Makefile</samp>.)
</p>
<p>If you do not want to bootstrap your compiler, you can configure with
<samp>--disable-bootstrap</samp>.  In particular cases, you may want to
bootstrap your compiler even if the target system is not the same as
the one you are building on: for example, you could build a
<code>powerpc-unknown-linux-gnu</code> toolchain on a
<code>powerpc64-unknown-linux-gnu</code> host.  In this case, pass
<samp>--enable-bootstrap</samp> to the configure script.
</p>
<p><code>BUILD_CONFIG</code> can be used to bring in additional customization
to the build.  It can be set to a whitespace-separated list of names.
For each such <code>NAME</code>, top-level <samp>config/<code>NAME</code>.mk</samp> will
be included by the top-level <samp>Makefile</samp>, bringing in any settings
it contains.  The default <code>BUILD_CONFIG</code> can be set using the
configure option <samp>--with-build-config=<code>NAME</code>...</samp>.  Some
examples of supported build configurations are:
</p>
<dl compact="compact">
<dt>&lsquo;<samp>bootstrap-O1</samp>&rsquo;</dt>
<dd><p>Removes any <samp>-O</samp>-started option from <code>BOOT_CFLAGS</code>, and adds
<samp>-O1</samp> to it.  &lsquo;<samp>BUILD_CONFIG=bootstrap-O1</samp>&rsquo; is equivalent to
&lsquo;<samp>BOOT_CFLAGS='-g -O1'</samp>&rsquo;.
</p>
</dd>
<dt>&lsquo;<samp>bootstrap-O3</samp>&rsquo;</dt>
<dd><p>Analogous to <code>bootstrap-O1</code>.
</p>
</dd>
<dt>&lsquo;<samp>bootstrap-lto</samp>&rsquo;</dt>
<dd><p>Enables Link-Time Optimization for host tools during bootstrapping.
&lsquo;<samp>BUILD_CONFIG=bootstrap-lto</samp>&rsquo; is equivalent to adding
<samp>-flto</samp> to &lsquo;<samp>BOOT_CFLAGS</samp>&rsquo;.
</p>
</dd>
<dt>&lsquo;<samp>bootstrap-debug</samp>&rsquo;</dt>
<dd><p>Verifies that the compiler generates the same executable code, whether
or not it is asked to emit debug information.  To this end, this
option builds stage2 host programs without debug information, and uses
<samp>contrib/compare-debug</samp> to compare them with the stripped stage3
object files.  If <code>BOOT_CFLAGS</code> is overridden so as to not enable
debug information, stage2 will have it, and stage3 won&rsquo;t.  This option
is enabled by default when GCC bootstrapping is enabled, if
<code>strip</code> can turn object files compiled with and without debug
info into identical object files.  In addition to better test
coverage, this option makes default bootstraps faster and leaner.
</p>
</dd>
<dt>&lsquo;<samp>bootstrap-debug-big</samp>&rsquo;</dt>
<dd><p>Rather than comparing stripped object files, as in
<code>bootstrap-debug</code>, this option saves internal compiler dumps
during stage2 and stage3 and compares them as well, which helps catch
additional potential problems, but at a great cost in terms of disk
space.  It can be specified in addition to &lsquo;<samp>bootstrap-debug</samp>&rsquo;.
</p>
</dd>
<dt>&lsquo;<samp>bootstrap-debug-lean</samp>&rsquo;</dt>
<dd><p>This option saves disk space compared with <code>bootstrap-debug-big</code>,
but at the expense of some recompilation.  Instead of saving the dumps
of stage2 and stage3 until the final compare, it uses
<samp>-fcompare-debug</samp> to generate, compare and remove the dumps
during stage3, repeating the compilation that already took place in
stage2, whose dumps were not saved.
</p>
</dd>
<dt>&lsquo;<samp>bootstrap-debug-lib</samp>&rsquo;</dt>
<dd><p>This option tests executable code invariance over debug information
generation on target libraries, just like <code>bootstrap-debug-lean</code>
tests it on host programs.  It builds stage3 libraries with
<samp>-fcompare-debug</samp>, and it can be used along with any of the
<code>bootstrap-debug</code> options above.
</p>
<p>There aren&rsquo;t <code>-lean</code> or <code>-big</code> counterparts to this option
because most libraries are only build in stage3, so bootstrap compares
would not get significant coverage.  Moreover, the few libraries built
in stage2 are used in stage3 host programs, so we wouldn&rsquo;t want to
compile stage2 libraries with different options for comparison purposes.
</p>
</dd>
<dt>&lsquo;<samp>bootstrap-debug-ckovw</samp>&rsquo;</dt>
<dd><p>Arranges for error messages to be issued if the compiler built on any
stage is run without the option <samp>-fcompare-debug</samp>.  This is
useful to verify the full <samp>-fcompare-debug</samp> testing coverage.  It
must be used along with <code>bootstrap-debug-lean</code> and
<code>bootstrap-debug-lib</code>.
</p>
</dd>
<dt>&lsquo;<samp>bootstrap-time</samp>&rsquo;</dt>
<dd><p>Arranges for the run time of each program started by the GCC driver,
built in any stage, to be logged to <samp>time.log</samp>, in the top level of
the build tree.
</p>
</dd>
</dl>

<a name="Building-a-cross-compiler"></a>
<h3 class="section">Building a cross compiler</h3>

<p>When building a cross compiler, it is not generally possible to do a
3-stage bootstrap of the compiler.  This makes for an interesting problem
as parts of GCC can only be built with GCC.
</p>
<p>To build a cross compiler, we recommend first building and installing a
native compiler.  You can then use the native GCC compiler to build the
cross compiler.  The installed native compiler needs to be GCC version
2.95 or later.
</p>
<p>If the cross compiler is to be built with support for the Java
programming language and the ability to compile .java source files is
desired, the installed native compiler used to build the cross
compiler needs to be the same GCC version as the cross compiler.  In
addition the cross compiler needs to be configured with
<samp>--with-ecj-jar=&hellip;</samp>.
</p>
<p>Assuming you have already installed a native copy of GCC and configured
your cross compiler, issue the command <code>make</code>, which performs the
following steps:
</p>
<ul>
<li> Build host tools necessary to build the compiler.

</li><li> Build target tools for use by the compiler such as binutils (bfd,
binutils, gas, gprof, ld, and opcodes)
if they have been individually linked or moved into the top level GCC source
tree before configuring.

</li><li> Build the compiler (single stage only).

</li><li> Build runtime libraries using the compiler from the previous step.
</li></ul>

<p>Note that if an error occurs in any step the make process will exit.
</p>
<p>If you are not building GNU binutils in the same source tree as GCC,
you will need a cross-assembler and cross-linker installed before
configuring GCC.  Put them in the directory
<samp><var>prefix</var>/<var>target</var>/bin</samp>.  Here is a table of the tools
you should put in this directory:
</p>
<dl compact="compact">
<dt><samp>as</samp></dt>
<dd><p>This should be the cross-assembler.
</p>
</dd>
<dt><samp>ld</samp></dt>
<dd><p>This should be the cross-linker.
</p>
</dd>
<dt><samp>ar</samp></dt>
<dd><p>This should be the cross-archiver: a program which can manipulate
archive files (linker libraries) in the target machine&rsquo;s format.
</p>
</dd>
<dt><samp>ranlib</samp></dt>
<dd><p>This should be a program to construct a symbol table in an archive file.
</p></dd>
</dl>

<p>The installation of GCC will find these programs in that directory,
and copy or link them to the proper place to for the cross-compiler to
find them when run later.
</p>
<p>The easiest way to provide these files is to build the Binutils package.
Configure it with the same <samp>--host</samp> and <samp>--target</samp>
options that you use for configuring GCC, then build and install
them.  They install their executables automatically into the proper
directory.  Alas, they do not support all the targets that GCC
supports.
</p>
<p>If you are not building a C library in the same source tree as GCC,
you should also provide the target libraries and headers before
configuring GCC, specifying the directories with
<samp>--with-sysroot</samp> or <samp>--with-headers</samp> and
<samp>--with-libs</samp>.  Many targets also require &ldquo;start files&rdquo; such
as <samp>crt0.o</samp> and
<samp>crtn.o</samp> which are linked into each executable.  There may be several
alternatives for <samp>crt0.o</samp>, for use with profiling or other
compilation options.  Check your target&rsquo;s definition of
<code>STARTFILE_SPEC</code> to find out what start files it uses.
</p>
<a name="Building-in-parallel"></a>
<h3 class="section">Building in parallel</h3>

<p>GNU Make 3.80 and above, which is necessary to build GCC, support
building in parallel.  To activate this, you can use &lsquo;<samp>make -j 2</samp>&rsquo;
instead of &lsquo;<samp>make</samp>&rsquo;.  You can also specify a bigger number, and
in most cases using a value greater than the number of processors in
your machine will result in fewer and shorter I/O latency hits, thus
improving overall throughput; this is especially true for slow drives
and network filesystems.
</p>
<a name="Building-the-Ada-compiler"></a>
<h3 class="section">Building the Ada compiler</h3>

<p>In order to build GNAT, the Ada compiler, you need a working GNAT
compiler (GCC version 4.0 or later).
This includes GNAT tools such as <code>gnatmake</code> and
<code>gnatlink</code>, since the Ada front end is written in Ada and
uses some GNAT-specific extensions.
</p>
<p>In order to build a cross compiler, it is suggested to install
the new compiler as native first, and then use it to build the cross
compiler.
</p>
<p><code>configure</code> does not test whether the GNAT installation works
and has a sufficiently recent version; if too old a GNAT version is
installed, the build will fail unless <samp>--enable-languages</samp> is
used to disable building the Ada front end.
</p>
<p><code>ADA_INCLUDE_PATH</code> and <code>ADA_OBJECT_PATH</code> environment variables
must not be set when building the Ada compiler, the Ada tools, or the
Ada runtime libraries. You can check that your build environment is clean
by verifying that &lsquo;<samp>gnatls -v</samp>&rsquo; lists only one explicit path in each
section.
</p>
<a name="Building-with-profile-feedback"></a>
<h3 class="section">Building with profile feedback</h3>

<p>It is possible to use profile feedback to optimize the compiler itself.  This
should result in a faster compiler binary.  Experiments done on x86 using gcc
3.3 showed approximately 7 percent speedup on compiling C programs.  To
bootstrap the compiler with profile feedback, use <code>make profiledbootstrap</code>.
</p>
<p>When &lsquo;<samp>make profiledbootstrap</samp>&rsquo; is run, it will first build a <code>stage1</code>
compiler.  This compiler is used to build a <code>stageprofile</code> compiler
instrumented to collect execution counts of instruction and branch
probabilities.  Then runtime libraries are compiled with profile collected.
Finally a <code>stagefeedback</code> compiler is built using the information collected.
</p>
<p>Unlike standard bootstrap, several additional restrictions apply.  The
compiler used to build <code>stage1</code> needs to support a 64-bit integral type.
It is recommended to only use GCC for this.
</p>
<hr />
<p><p><a href="./index.html">Return to the GCC Installation page</a>
</p>







<hr>



</body>
</html>
