mirror of
https://review.haiku-os.org/buildtools
synced 2025-01-19 04:48:37 +01:00
e6c8d025f2
git-svn-id: file:///srv/svn/repos/haiku/buildtools/trunk@15082 a95241bf-73f2-0310-859d-f6bbb57e9c96
283 lines
15 KiB
HTML
283 lines
15 KiB
HTML
<html lang="en">
|
|
<head>
|
|
<title>Installing GCC: Building</title>
|
|
<meta http-equiv="Content-Type" content="text/html">
|
|
<meta name="description" content="Installing GCC: Building">
|
|
<meta name="generator" content="makeinfo 4.8">
|
|
<link title="Top" rel="top" href="#Top">
|
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
|
<!--
|
|
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
|
1999, 2000, 2001, 2002, 2003, 2004, 2005 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.2 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.-->
|
|
<meta http-equiv="Content-Style-Type" content="text/css">
|
|
<style type="text/css"><!--
|
|
pre.display { font-family:inherit }
|
|
pre.format { font-family:inherit }
|
|
pre.smalldisplay { font-family:inherit; font-size:smaller }
|
|
pre.smallformat { font-family:inherit; font-size:smaller }
|
|
pre.smallexample { font-size:smaller }
|
|
pre.smalllisp { font-size:smaller }
|
|
span.sc { font-variant:small-caps }
|
|
span.roman { font-family:serif; font-weight:normal; }
|
|
span.sansserif { font-family:sans-serif; font-weight:normal; }
|
|
--></style>
|
|
</head>
|
|
<body>
|
|
<h1 class="settitle">Installing GCC: Building</h1>
|
|
<a name="index-Installing-GCC_003a-Building-1"></a>
|
|
Now that GCC is configured, you are ready to build the compiler and
|
|
runtime libraries.
|
|
|
|
<p>Some commands executed when making the compiler may fail (return a
|
|
nonzero status) and be ignored by <samp><span class="command">make</span></samp>. These failures, which
|
|
are often due to files that were not found, are expected, and can safely
|
|
be ignored.
|
|
|
|
<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><span class="option">--disable-werror</span></samp>.
|
|
|
|
<p>On certain old systems, defining certain environment variables such as
|
|
<samp><span class="env">CC</span></samp> can interfere with the functioning of <samp><span class="command">make</span></samp>.
|
|
|
|
<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>If you build GCC on a BSD system using a directory stored in an old System
|
|
V file system, problems may occur in running <samp><span class="command">fixincludes</span></samp> if the
|
|
System V file system doesn't support symbolic links. These problems
|
|
result in a failure to fix the declaration of <code>size_t</code> in
|
|
<samp><span class="file">sys/types.h</span></samp>. If you find that <code>size_t</code> is a signed type and
|
|
that type mismatches occur, this could be the cause.
|
|
|
|
<p>The solution is not to use such a directory for building GCC.
|
|
|
|
<p>When building from CVS or snapshots, or if you modify parser sources,
|
|
you need the Bison parser generator installed. Any version 1.25 or
|
|
later should work; older versions may also work. If you do not modify
|
|
parser sources, releases contain the Bison-generated files and you do
|
|
not need Bison installed to build them.
|
|
|
|
<p>When building from CVS or snapshots, or if you modify Texinfo
|
|
documentation, you need version 4.2 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.
|
|
|
|
<h3 class="section"><a name="TOC0"></a>0.1 Building a native compiler</h3>
|
|
|
|
<p>For a native build issue the command `<samp><span class="samp">make bootstrap</span></samp>'. This
|
|
will build the entire GCC system, which includes the following steps:
|
|
|
|
<ul>
|
|
<li>Build host tools necessary to build the compiler such as texinfo, bison,
|
|
gperf.
|
|
|
|
<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>Perform a 3-stage bootstrap of the compiler.
|
|
|
|
<li>Perform a comparison test of the stage2 and stage3 compilers.
|
|
|
|
<li>Build runtime libraries using the stage3 compiler from the previous step.
|
|
|
|
</ul>
|
|
|
|
<p>If you are short on disk space you might consider `<samp><span class="samp">make
|
|
bootstrap-lean</span></samp>' instead. This is identical to `<samp><span class="samp">make
|
|
bootstrap</span></samp>' except that 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>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.)
|
|
|
|
<pre class="smallexample"> make CFLAGS='-O' LIBCFLAGS='-g -O2' \
|
|
LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap
|
|
</pre>
|
|
<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
|
|
`<samp><span class="samp">make bootstrap</span></samp>'. Non-default optimization flags are less well
|
|
tested here than the default of `<samp><span class="samp">-g -O2</span></samp>', but should still work.
|
|
In a few cases, you may find that you need to specify special flags such
|
|
as <samp><span class="option">-msoft-float</span></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 `<samp><span class="samp">make
|
|
bootstrap4</span></samp>' to increase the number of stages of bootstrap.
|
|
|
|
<p>Note that using non-standard <code>CFLAGS</code> can cause bootstrap to fail in
|
|
<samp><span class="file">libiberty</span></samp>, if these trigger a warning with the new compiler. For
|
|
example using `<samp><span class="samp">-O2 -g -mcpu=i686</span></samp>' on <code>i686-pc-linux-gnu</code> will
|
|
cause bootstrap failure as <samp><span class="option">-mcpu=</span></samp> is deprecated in 3.4.0 and above.
|
|
|
|
<p>If you used the flag <samp><span class="option">--enable-languages=...</span></samp> to restrict
|
|
the compilers to be built, only those you'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 <samp><span class="env">LANGUAGES</span></samp> when calling `<samp><span class="samp">make bootstrap</span></samp>'
|
|
<strong>does not</strong> work anymore!
|
|
|
|
<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 “different”. If you encounter this problem, you will
|
|
need to disable comparison in the <samp><span class="file">Makefile</span></samp>.)
|
|
|
|
<h3 class="section"><a name="TOC1"></a>0.2 Building a cross compiler</h3>
|
|
|
|
<p>We recommend reading the
|
|
<a href="http://www.objsw.com/CrossGCC/">crossgcc FAQ</a>
|
|
for information about building cross compilers.
|
|
|
|
<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>To build a cross compiler, we first recommend 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>Assuming you have already installed a native copy of GCC and configured
|
|
your cross compiler, issue the command <samp><span class="command">make</span></samp>, which performs the
|
|
following steps:
|
|
|
|
<ul>
|
|
<li>Build host tools necessary to build the compiler such as texinfo, bison,
|
|
gperf.
|
|
|
|
<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>Build the compiler (single stage only).
|
|
|
|
<li>Build runtime libraries using the compiler from the previous step.
|
|
</ul>
|
|
|
|
<p>Note that if an error occurs in any step the make process will exit.
|
|
|
|
<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><span class="file">/</span><var>target</var><span class="file">/bin</span></samp>. Here is a table of the tools
|
|
you should put in this directory:
|
|
|
|
<dl>
|
|
<dt><samp><span class="file">as</span></samp><dd>This should be the cross-assembler.
|
|
|
|
<br><dt><samp><span class="file">ld</span></samp><dd>This should be the cross-linker.
|
|
|
|
<br><dt><samp><span class="file">ar</span></samp><dd>This should be the cross-archiver: a program which can manipulate
|
|
archive files (linker libraries) in the target machine's format.
|
|
|
|
<br><dt><samp><span class="file">ranlib</span></samp><dd>This should be a program to construct a symbol table in an archive file.
|
|
</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>The easiest way to provide these files is to build the Binutils package.
|
|
Configure it with the same <samp><span class="option">--host</span></samp> and <samp><span class="option">--target</span></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>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><span class="option">--with-sysroot</span></samp> or <samp><span class="option">--with-headers</span></samp> and
|
|
<samp><span class="option">--with-libs</span></samp>. Many targets also require “start files” such
|
|
as <samp><span class="file">crt0.o</span></samp> and
|
|
<samp><span class="file">crtn.o</span></samp> which are linked into each executable. There may be several
|
|
alternatives for <samp><span class="file">crt0.o</span></samp>, for use with profiling or other
|
|
compilation options. Check your target's definition of
|
|
<code>STARTFILE_SPEC</code> to find out what start files it uses.
|
|
|
|
<h3 class="section"><a name="TOC2"></a>0.3 Building in parallel</h3>
|
|
|
|
<p>You can use `<samp><span class="samp">make bootstrap MAKE="make -j 2" -j 2</span></samp>', or just
|
|
`<samp><span class="samp">make -j 2 bootstrap</span></samp>' for GNU Make 3.79 and above, instead of
|
|
`<samp><span class="samp">make bootstrap</span></samp>' to build GCC in parallel.
|
|
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.
|
|
|
|
<h3 class="section"><a name="TOC3"></a>0.4 Building the Ada compiler</h3>
|
|
|
|
<p>In order to build GNAT, the Ada compiler, you need a working GNAT
|
|
compiler (GNAT version 3.14 or later, or GCC version 3.1 or later),
|
|
including GNAT tools such as <samp><span class="command">gnatmake</span></samp> and <samp><span class="command">gnatlink</span></samp>,
|
|
since the Ada front end is written in Ada (with some
|
|
GNAT-specific extensions), and GNU make.
|
|
|
|
<p><samp><span class="command">configure</span></samp> 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><span class="option">--enable-languages</span></samp> is
|
|
used to disable building the Ada front end.
|
|
|
|
<h3 class="section"><a name="TOC4"></a>0.5 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 compiler with profile feedback, use <code>make profiledbootstrap</code>.
|
|
|
|
<p>When `<samp><span class="samp">make profiledbootstrap</span></samp>' 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>Unlike `<samp><span class="samp">make bootstrap</span></samp>' 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. Also parallel make is currently
|
|
not supported since collisions in profile collecting may occur.
|
|
|
|
<p><hr />
|
|
<p><a href="./index.html">Return to the GCC Installation page</a>
|
|
|
|
<!-- ***Testing***************************************************************** -->
|
|
<!-- ***Final install*********************************************************** -->
|
|
<!-- ***Binaries**************************************************************** -->
|
|
<!-- ***Specific**************************************************************** -->
|
|
<!-- ***Old documentation****************************************************** -->
|
|
<!-- ***GFDL******************************************************************** -->
|
|
<!-- *************************************************************************** -->
|
|
<!-- Part 6 The End of the Document -->
|
|
</body></html>
|
|
|