| <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.13"> |
| <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, 2006, 2007, |
| 2008 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>Similarly, when building from SVN or snapshots, or if you modify |
| <samp><span class="file">*.l</span></samp> files, you need the Flex lexical analyzer generator |
| installed. If you do not modify <samp><span class="file">*.l</span></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>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. |
| |
| <h3 class="section"><a name="TOC0"></a>Building a native compiler</h3> |
| |
| <p>For a native build, the default configuration is to perform |
| a 3-stage bootstrap of the compiler when ‘<samp><span class="samp">make</span></samp>’ is invoked. |
| This will build the entire GCC system and ensure that it compiles |
| itself correctly. It can be disabled with the <samp><span class="option">--disable-bootstrap</span></samp> |
| parameter to ‘<samp><span class="samp">configure</span></samp>’, but bootstrapping is suggested because |
| the compiler will be tested more completely and could also have |
| better performance. |
| |
| <p>The bootstrapping process will complete the following steps: |
| |
| <ul> |
| <li>Build tools necessary to build the compiler. |
| |
| <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>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. 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>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</span></samp>’. 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.) |
| |
| <pre class="smallexample"> make BOOT_CFLAGS='-O' bootstrap |
| </pre> |
| <p>You can place non-default optimization flags into <code>BOOT_CFLAGS</code>; they |
| 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><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_LIBCFLAGS</code> to this end. |
| |
| <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</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>.) |
| |
| <p>If you do not want to bootstrap your compiler, you can configure with |
| <samp><span class="option">--disable-bootstrap</span></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><span class="option">--enable-bootstrap</span></samp> to the configure script. |
| |
| <h3 class="section"><a name="TOC1"></a>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>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>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><span class="option">--with-ecj-jar=...</span></samp>. |
| |
| <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. |
| |
| <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>Building in parallel</h3> |
| |
| <p>GNU Make 3.79 and above, which is necessary to build GCC, support |
| building in parallel. To activate this, you can use ‘<samp><span class="samp">make -j 2</span></samp>’ |
| instead of ‘<samp><span class="samp">make</span></samp>’. 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>Building the Ada compiler</h3> |
| |
| <p>In order to build GNAT, the Ada compiler, you need a working GNAT |
| compiler (GCC version 3.4 or later). |
| This includes 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 and |
| uses some GNAT-specific extensions. |
| |
| <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><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. |
| |
| <p><samp><span class="env">ADA_INCLUDE_PATH</span></samp> and <samp><span class="env">ADA_OBJECT_PATH</span></samp> 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 ‘<samp><span class="samp">gnatls -v</span></samp>’ lists only one explicit path in each |
| section. |
| |
| <h3 class="section"><a name="TOC4"></a>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>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 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. 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> |
| |