This is gccinstall.info, produced by makeinfo version 6.1 from
install.texi.

Copyright (C) 1988-2016 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.
INFO-DIR-SECTION Software development
START-INFO-DIR-ENTRY
* gccinstall: (gccinstall).    Installing the GNU Compiler Collection.
END-INFO-DIR-ENTRY

   Copyright (C) 1988-2016 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.


File: gccinstall.info,  Node: Top,  Up: (dir)

* Menu:

* Installing GCC::  This document describes the generic installation
                    procedure for GCC as well as detailing some target
                    specific installation instructions.

* Specific::        Host/target specific installation notes for GCC.
* Binaries::        Where to get pre-compiled binaries.

* Old::             Old installation documentation.

* GNU Free Documentation License:: How you can copy and share this manual.
* Concept Index::   This index has two entries.


File: gccinstall.info,  Node: Installing GCC,  Next: Binaries,  Up: Top

1 Installing GCC
****************

The latest version of this document is always available at
http://gcc.gnu.org/install/.  It refers to the current development
sources, instructions for specific released versions are included with
the sources.

   This document describes the generic installation procedure for GCC as
well as detailing some target specific installation instructions.

   GCC includes several components that previously were separate
distributions with their own installation instructions.  This document
supersedes all package-specific installation instructions.

   _Before_ starting the build/install procedure please check the *note
host/target specific installation notes: Specific.  We recommend you
browse the entire generic installation instructions before you proceed.

   Lists of successful builds for released versions of GCC are available
at <http://gcc.gnu.org/buildstat.html>.  These lists are updated as new
information becomes available.

   The installation procedure itself is broken into five steps.

* Menu:

* Prerequisites::
* Downloading the source::
* Configuration::
* Building::
* Testing:: (optional)
* Final install::

   Please note that GCC does not support 'make uninstall' and probably
won't do so in the near future as this would open a can of worms.
Instead, we suggest that you install GCC into a directory of its own and
simply remove that directory when you do not need that specific version
of GCC any longer, and, if shared libraries are installed there as well,
no more binaries exist that use them.


File: gccinstall.info,  Node: Prerequisites,  Next: Downloading the source,  Up: Installing GCC

2 Prerequisites
***************

GCC requires that various tools and packages be available for use in the
build procedure.  Modifying GCC sources requires additional tools
described below.

Tools/packages necessary for building GCC
=========================================

ISO C++98 compiler
     Necessary to bootstrap GCC, although versions of GCC prior to 4.8
     also allow bootstrapping with a ISO C89 compiler and versions of
     GCC prior to 3.4 also allow bootstrapping with a traditional (K&R)
     C compiler.

     To build all languages in a cross-compiler or other configuration
     where 3-stage bootstrap is not performed, you need to start with an
     existing GCC binary (version 3.4 or later) because source code for
     language frontends other than C might use GCC extensions.

     Note that to bootstrap GCC with versions of GCC earlier than 3.4,
     you may need to use '--disable-stage1-checking', though
     bootstrapping the compiler with such earlier compilers is strongly
     discouraged.

C standard library and headers

     In order to build GCC, the C standard library and headers must be
     present for all target variants for which target libraries will be
     built (and not only the variant of the host C++ compiler).

     This affects the popular 'x86_64-unknown-linux-gnu' platform (among
     other multilib targets), for which 64-bit ('x86_64') and 32-bit
     ('i386') libc headers are usually packaged separately.  If you do a
     build of a native compiler on 'x86_64-unknown-linux-gnu', make sure
     you either have the 32-bit libc developer package properly
     installed (the exact name of the package depends on your distro) or
     you must build GCC as a 64-bit only compiler by configuring with
     the option '--disable-multilib'.  Otherwise, you may encounter an
     error such as 'fatal error: gnu/stubs-32.h: No such file'

GNAT

     In order to build the Ada compiler (GNAT) you must already have
     GNAT installed because portions of the Ada frontend are written in
     Ada (with GNAT extensions.)  Refer to the Ada installation
     instructions for more specific information.

A "working" POSIX compatible shell, or GNU bash

     Necessary when running 'configure' because some '/bin/sh' shells
     have bugs and may crash when configuring the target libraries.  In
     other cases, '/bin/sh' or 'ksh' have disastrous corner-case
     performance problems.  This can cause target 'configure' runs to
     literally take days to complete in some cases.

     So on some platforms '/bin/ksh' is sufficient, on others it isn't.
     See the host/target specific instructions for your platform, or use
     'bash' to be sure.  Then set 'CONFIG_SHELL' in your environment to
     your "good" shell prior to running 'configure'/'make'.

     'zsh' is not a fully compliant POSIX shell and will not work when
     configuring GCC.

A POSIX or SVR4 awk

     Necessary for creating some of the generated source files for GCC.
     If in doubt, use a recent GNU awk version, as some of the older
     ones are broken.  GNU awk version 3.1.5 is known to work.

GNU binutils

     Necessary in some circumstances, optional in others.  See the
     host/target specific instructions for your platform for the exact
     requirements.

gzip version 1.2.4 (or later) or
bzip2 version 1.0.2 (or later)

     Necessary to uncompress GCC 'tar' files when source code is
     obtained via FTP mirror sites.

GNU make version 3.80 (or later)

     You must have GNU make installed to build GCC.

GNU tar version 1.14 (or later)

     Necessary (only on some platforms) to untar the source code.  Many
     systems' 'tar' programs will also work, only try GNU 'tar' if you
     have problems.

Perl version 5.6.1 (or later)

     Necessary when targeting Darwin, building 'libstdc++', and not
     using '--disable-symvers'.  Necessary when targeting Solaris 2 with
     Sun 'ld' and not using '--disable-symvers'.  The bundled 'perl' in
     Solaris 8 and up works.

     Necessary when regenerating 'Makefile' dependencies in libiberty.
     Necessary when regenerating 'libiberty/functions.texi'.  Necessary
     when generating manpages from Texinfo manuals.  Used by various
     scripts to generate some files included in SVN (mainly
     Unicode-related and rarely changing) from source tables.

'jar', or InfoZIP ('zip' and 'unzip')

     Necessary to build libgcj, the GCJ runtime.

   Several support libraries are necessary to build GCC, some are
required, others optional.  While any sufficiently new version of
required tools usually work, library requirements are generally
stricter.  Newer versions may work in some cases, but it's safer to use
the exact versions documented.  We appreciate bug reports about problems
with newer versions, though.  If your OS vendor provides packages for
the support libraries then using those packages may be the simplest way
to install the libraries.

GNU Multiple Precision Library (GMP) version 4.3.2 (or later)

     Necessary to build GCC.  If a GMP source distribution is found in a
     subdirectory of your GCC sources named 'gmp', it will be built
     together with GCC. Alternatively, if GMP is already installed but
     it is not in your library search path, you will have to configure
     with the '--with-gmp' configure option.  See also '--with-gmp-lib'
     and '--with-gmp-include'.

MPFR Library version 2.4.2 (or later)

     Necessary to build GCC.  It can be downloaded from
     <http://www.mpfr.org/>.  If an MPFR source distribution is found in
     a subdirectory of your GCC sources named 'mpfr', it will be built
     together with GCC. Alternatively, if MPFR is already installed but
     it is not in your default library search path, the '--with-mpfr'
     configure option should be used.  See also '--with-mpfr-lib' and
     '--with-mpfr-include'.

MPC Library version 0.8.1 (or later)

     Necessary to build GCC.  It can be downloaded from
     <http://www.multiprecision.org/>.  If an MPC source distribution is
     found in a subdirectory of your GCC sources named 'mpc', it will be
     built together with GCC. Alternatively, if MPC is already installed
     but it is not in your default library search path, the '--with-mpc'
     configure option should be used.  See also '--with-mpc-lib' and
     '--with-mpc-include'.

isl Library version 0.16, 0.15, or 0.14.

     Necessary to build GCC with the Graphite loop optimizations.  It
     can be downloaded from <ftp://gcc.gnu.org/pub/gcc/infrastructure/>.
     If an isl source distribution is found in a subdirectory of your
     GCC sources named 'isl', it will be built together with GCC.
     Alternatively, the '--with-isl' configure option should be used if
     isl is not installed in your default library search path.

Tools/packages necessary for modifying GCC
==========================================

autoconf version 2.64
GNU m4 version 1.4.6 (or later)

     Necessary when modifying 'configure.ac', 'aclocal.m4', etc. to
     regenerate 'configure' and 'config.in' files.

automake version 1.11.6

     Necessary when modifying a 'Makefile.am' file to regenerate its
     associated 'Makefile.in'.

     Much of GCC does not use automake, so directly edit the
     'Makefile.in' file.  Specifically this applies to the 'gcc',
     'intl', 'libcpp', 'libiberty', 'libobjc' directories as well as any
     of their subdirectories.

     For directories that use automake, GCC requires the latest release
     in the 1.11 series, which is currently 1.11.6.  When regenerating a
     directory to a newer version, please update all the directories
     using an older 1.11 to the latest released version.

gettext version 0.14.5 (or later)

     Needed to regenerate 'gcc.pot'.

gperf version 2.7.2 (or later)

     Necessary when modifying 'gperf' input files, e.g.
     'gcc/cp/cfns.gperf' to regenerate its associated header file, e.g.
     'gcc/cp/cfns.h'.

DejaGnu 1.4.4
Expect
Tcl

     Necessary to run the GCC testsuite; see the section on testing for
     details.  Tcl 8.6 has a known regression in RE pattern handling
     that make parts of the testsuite fail.  See
     <http://core.tcl.tk/tcl/tktview/267b7e2334ee2e9de34c4b00d6e72e2f1997085f>
     for more information.  This bug has been fixed in 8.6.1.

autogen version 5.5.4 (or later) and
guile version 1.4.1 (or later)

     Necessary to regenerate 'fixinc/fixincl.x' from
     'fixinc/inclhack.def' and 'fixinc/*.tpl'.

     Necessary to run 'make check' for 'fixinc'.

     Necessary to regenerate the top level 'Makefile.in' file from
     'Makefile.tpl' and 'Makefile.def'.

Flex version 2.5.4 (or later)

     Necessary when modifying '*.l' files.

     Necessary to build GCC during development because the generated
     output files are not included in the SVN repository.  They are
     included in releases.

Texinfo version 4.7 (or later)

     Necessary for running 'makeinfo' when modifying '*.texi' files to
     test your changes.

     Necessary for running 'make dvi' or 'make pdf' to create printable
     documentation in DVI or PDF format.  Texinfo version 4.8 or later
     is required for 'make pdf'.

     Necessary to build GCC documentation during development because the
     generated output files are not included in the SVN repository.
     They are included in releases.

TeX (any working version)

     Necessary for running 'texi2dvi' and 'texi2pdf', which are used
     when running 'make dvi' or 'make pdf' to create DVI or PDF files,
     respectively.

Sphinx version 1.0 (or later)

     Necessary to regenerate 'jit/docs/_build/texinfo' from the '.rst'
     files in the directories below 'jit/docs'.

SVN (any version)
SSH (any version)

     Necessary to access the SVN repository.  Public releases and weekly
     snapshots of the development sources are also available via FTP.

GNU diffutils version 2.7 (or later)

     Useful when submitting patches for the GCC source code.

patch version 2.5.4 (or later)

     Necessary when applying patches, created with 'diff', to one's own
     sources.

ecj1
gjavah

     If you wish to modify '.java' files in libjava, you will need to
     configure with '--enable-java-maintainer-mode', and you will need
     to have executables named 'ecj1' and 'gjavah' in your path.  The
     'ecj1' executable should run the Eclipse Java compiler via the
     GCC-specific entry point.  You can download a suitable jar from
     <ftp://sourceware.org/pub/java/>, or by running the script
     'contrib/download_ecj'.

antlr.jar version 2.7.1 (or later)
antlr binary

     If you wish to build the 'gjdoc' binary in libjava, you will need
     to have an 'antlr.jar' library available.  The library is searched
     for in system locations but can be specified with
     '--with-antlr-jar=' instead.  When configuring with
     '--enable-java-maintainer-mode', you will need to have one of the
     executables named 'cantlr', 'runantlr' or 'antlr' in your path.


File: gccinstall.info,  Node: Downloading the source,  Next: Configuration,  Prev: Prerequisites,  Up: Installing GCC

3 Downloading GCC
*****************

GCC is distributed via SVN and FTP tarballs compressed with 'gzip' or
'bzip2'.

   Please refer to the releases web page for information on how to
obtain GCC.

   The source distribution includes the C, C++, Objective-C, Fortran,
Java, and Ada (in the case of GCC 3.1 and later) compilers, as well as
runtime libraries for C++, Objective-C, Fortran, and Java.  For previous
versions these were downloadable as separate components such as the core
GCC distribution, which included the C language front end and shared
components, and language-specific distributions including the language
front end and the language runtime (where appropriate).

   If you also intend to build binutils (either to upgrade an existing
installation or for use in place of the corresponding tools of your OS),
unpack the binutils distribution either in the same directory or a
separate one.  In the latter case, add symbolic links to any components
of the binutils you intend to build alongside the compiler ('bfd',
'binutils', 'gas', 'gprof', 'ld', 'opcodes', ...) to the directory
containing the GCC sources.

   Likewise the GMP, MPFR and MPC libraries can be automatically built
together with GCC. You may simply run the
'contrib/download_prerequisites' script in the GCC source directory to
set up everything.  Otherwise unpack the GMP, MPFR and/or MPC source
distributions in the directory containing the GCC sources and rename
their directories to 'gmp', 'mpfr' and 'mpc', respectively (or use
symbolic links with the same name).


File: gccinstall.info,  Node: Configuration,  Next: Building,  Prev: Downloading the source,  Up: Installing GCC

4 Installing GCC: Configuration
*******************************

Like most GNU software, GCC must be configured before it can be built.
This document describes the recommended configuration procedure for both
native and cross targets.

   We use SRCDIR to refer to the toplevel source directory for GCC; we
use OBJDIR to refer to the toplevel build/object directory.

   If you obtained the sources via SVN, SRCDIR must refer to the top
'gcc' directory, the one where the 'MAINTAINERS' file can be found, and
not its 'gcc' subdirectory, otherwise the build will fail.

   If either SRCDIR or OBJDIR is located on an automounted NFS file
system, the shell's built-in 'pwd' command will return temporary
pathnames.  Using these can lead to various sorts of build problems.  To
avoid this issue, set the 'PWDCMD' environment variable to an
automounter-aware 'pwd' command, e.g., 'pawd' or 'amq -w', during the
configuration and build phases.

   First, we *highly* recommend that GCC be built into a separate
directory from the sources which does *not* reside within the source
tree.  This is how we generally build GCC; building where SRCDIR ==
OBJDIR should still work, but doesn't get extensive testing; building
where OBJDIR is a subdirectory of SRCDIR is unsupported.

   If you have previously built GCC in the same directory for a
different target machine, do 'make distclean' to delete all files that
might be invalid.  One of the files this deletes is 'Makefile'; if 'make
distclean' complains that 'Makefile' does not exist or issues a message
like "don't know how to make distclean" it probably means that the
directory is already suitably clean.  However, with the recommended
method of building in a separate OBJDIR, you should simply use a
different OBJDIR for each target.

   Second, when configuring a native system, either 'cc' or 'gcc' must
be in your path or you must set 'CC' in your environment before running
configure.  Otherwise the configuration scripts may fail.

   To configure GCC:

     % mkdir OBJDIR
     % cd OBJDIR
     % SRCDIR/configure [OPTIONS] [TARGET]

Distributor options
===================

If you will be distributing binary versions of GCC, with modifications
to the source code, you should use the options described in this section
to make clear that your version contains modifications.

'--with-pkgversion=VERSION'
     Specify a string that identifies your package.  You may wish to
     include a build number or build date.  This version string will be
     included in the output of 'gcc --version'.  This suffix does not
     replace the default version string, only the 'GCC' part.

     The default value is 'GCC'.

'--with-bugurl=URL'
     Specify the URL that users should visit if they wish to report a
     bug.  You are of course welcome to forward bugs reported to you to
     the FSF, if you determine that they are not bugs in your
     modifications.

     The default value refers to the FSF's GCC bug tracker.

Target specification
====================

   * GCC has code to correctly determine the correct value for TARGET
     for nearly all native systems.  Therefore, we highly recommend you
     do not provide a configure target when configuring a native
     compiler.

   * TARGET must be specified as '--target=TARGET' when configuring a
     cross compiler; examples of valid targets would be m68k-elf,
     sh-elf, etc.

   * Specifying just TARGET instead of '--target=TARGET' implies that
     the host defaults to TARGET.

Options specification
=====================

Use OPTIONS to override several configure time options for GCC.  A list
of supported OPTIONS follows; 'configure --help' may list other options,
but those not listed below may not work and should not normally be used.

   Note that each '--enable' option has a corresponding '--disable'
option and that each '--with' option has a corresponding '--without'
option.

'--prefix=DIRNAME'
     Specify the toplevel installation directory.  This is the
     recommended way to install the tools into a directory other than
     the default.  The toplevel installation directory defaults to
     '/usr/local'.

     We *highly* recommend against DIRNAME being the same or a
     subdirectory of OBJDIR or vice versa.  If specifying a directory
     beneath a user's home directory tree, some shells will not expand
     DIRNAME correctly if it contains the '~' metacharacter; use '$HOME'
     instead.

     The following standard 'autoconf' options are supported.  Normally
     you should not need to use these options.
     '--exec-prefix=DIRNAME'
          Specify the toplevel installation directory for
          architecture-dependent files.  The default is 'PREFIX'.

     '--bindir=DIRNAME'
          Specify the installation directory for the executables called
          by users (such as 'gcc' and 'g++').  The default is
          'EXEC-PREFIX/bin'.

     '--libdir=DIRNAME'
          Specify the installation directory for object code libraries
          and internal data files of GCC.  The default is
          'EXEC-PREFIX/lib'.

     '--libexecdir=DIRNAME'
          Specify the installation directory for internal executables of
          GCC.  The default is 'EXEC-PREFIX/libexec'.

     '--with-slibdir=DIRNAME'
          Specify the installation directory for the shared libgcc
          library.  The default is 'LIBDIR'.

     '--datarootdir=DIRNAME'
          Specify the root of the directory tree for read-only
          architecture-independent data files referenced by GCC.  The
          default is 'PREFIX/share'.

     '--infodir=DIRNAME'
          Specify the installation directory for documentation in info
          format.  The default is 'DATAROOTDIR/info'.

     '--datadir=DIRNAME'
          Specify the installation directory for some
          architecture-independent data files referenced by GCC.  The
          default is 'DATAROOTDIR'.

     '--docdir=DIRNAME'
          Specify the installation directory for documentation files
          (other than Info) for GCC.  The default is 'DATAROOTDIR/doc'.

     '--htmldir=DIRNAME'
          Specify the installation directory for HTML documentation
          files.  The default is 'DOCDIR'.

     '--pdfdir=DIRNAME'
          Specify the installation directory for PDF documentation
          files.  The default is 'DOCDIR'.

     '--mandir=DIRNAME'
          Specify the installation directory for manual pages.  The
          default is 'DATAROOTDIR/man'.  (Note that the manual pages are
          only extracts from the full GCC manuals, which are provided in
          Texinfo format.  The manpages are derived by an automatic
          conversion process from parts of the full manual.)

     '--with-gxx-include-dir=DIRNAME'
          Specify the installation directory for G++ header files.  The
          default depends on other configuration options, and differs
          between cross and native configurations.

     '--with-specs=SPECS'
          Specify additional command line driver SPECS. This can be
          useful if you need to turn on a non-standard feature by
          default without modifying the compiler's source code, for
          instance
          '--with-specs=%{!fcommon:%{!fno-common:-fno-common}}'.  *Note
          Specifying subprocesses and the switches to pass to them:
          (gcc)Spec Files,

'--program-prefix=PREFIX'
     GCC supports some transformations of the names of its programs when
     installing them.  This option prepends PREFIX to the names of
     programs to install in BINDIR (see above).  For example, specifying
     '--program-prefix=foo-' would result in 'gcc' being installed as
     '/usr/local/bin/foo-gcc'.

'--program-suffix=SUFFIX'
     Appends SUFFIX to the names of programs to install in BINDIR (see
     above).  For example, specifying '--program-suffix=-3.1' would
     result in 'gcc' being installed as '/usr/local/bin/gcc-3.1'.

'--program-transform-name=PATTERN'
     Applies the 'sed' script PATTERN to be applied to the names of
     programs to install in BINDIR (see above).  PATTERN has to consist
     of one or more basic 'sed' editing commands, separated by
     semicolons.  For example, if you want the 'gcc' program name to be
     transformed to the installed program '/usr/local/bin/myowngcc' and
     the 'g++' program name to be transformed to
     '/usr/local/bin/gspecial++' without changing other program names,
     you could use the pattern
     '--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/''
     to achieve this effect.

     All three options can be combined and used together, resulting in
     more complex conversion patterns.  As a basic rule, PREFIX (and
     SUFFIX) are prepended (appended) before further transformations can
     happen with a special transformation script PATTERN.

     As currently implemented, this option only takes effect for native
     builds; cross compiler binaries' names are not transformed even
     when a transformation is explicitly asked for by one of these
     options.

     For native builds, some of the installed programs are also
     installed with the target alias in front of their name, as in
     'i686-pc-linux-gnu-gcc'.  All of the above transformations happen
     before the target alias is prepended to the name--so, specifying
     '--program-prefix=foo-' and 'program-suffix=-3.1', the resulting
     binary would be installed as
     '/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1'.

     As a last shortcoming, none of the installed Ada programs are
     transformed yet, which will be fixed in some time.

'--with-local-prefix=DIRNAME'
     Specify the installation directory for local include files.  The
     default is '/usr/local'.  Specify this option if you want the
     compiler to search directory 'DIRNAME/include' for locally
     installed header files _instead_ of '/usr/local/include'.

     You should specify '--with-local-prefix' *only* if your site has a
     different convention (not '/usr/local') for where to put
     site-specific files.

     The default value for '--with-local-prefix' is '/usr/local'
     regardless of the value of '--prefix'.  Specifying '--prefix' has
     no effect on which directory GCC searches for local header files.
     This may seem counterintuitive, but actually it is logical.

     The purpose of '--prefix' is to specify where to _install GCC_. The
     local header files in '/usr/local/include'--if you put any in that
     directory--are not part of GCC.  They are part of other
     programs--perhaps many others.  (GCC installs its own header files
     in another directory which is based on the '--prefix' value.)

     Both the local-prefix include directory and the GCC-prefix include
     directory are part of GCC's "system include" directories.  Although
     these two directories are not fixed, they need to be searched in
     the proper order for the correct processing of the include_next
     directive.  The local-prefix include directory is searched before
     the GCC-prefix include directory.  Another characteristic of system
     include directories is that pedantic warnings are turned off for
     headers in these directories.

     Some autoconf macros add '-I DIRECTORY' options to the compiler
     command line, to ensure that directories containing installed
     packages' headers are searched.  When DIRECTORY is one of GCC's
     system include directories, GCC will ignore the option so that
     system directories continue to be processed in the correct order.
     This may result in a search order different from what was specified
     but the directory will still be searched.

     GCC automatically searches for ordinary libraries using
     'GCC_EXEC_PREFIX'.  Thus, when the same installation prefix is used
     for both GCC and packages, GCC will automatically search for both
     headers and libraries.  This provides a configuration that is easy
     to use.  GCC behaves in a manner similar to that when it is
     installed as a system compiler in '/usr'.

     Sites that need to install multiple versions of GCC may not want to
     use the above simple configuration.  It is possible to use the
     '--program-prefix', '--program-suffix' and
     '--program-transform-name' options to install multiple versions
     into a single directory, but it may be simpler to use different
     prefixes and the '--with-local-prefix' option to specify the
     location of the site-specific files for each version.  It will then
     be necessary for users to specify explicitly the location of local
     site libraries (e.g., with 'LIBRARY_PATH').

     The same value can be used for both '--with-local-prefix' and
     '--prefix' provided it is not '/usr'.  This can be used to avoid
     the default search of '/usr/local/include'.

     *Do not* specify '/usr' as the '--with-local-prefix'!  The
     directory you use for '--with-local-prefix' *must not* contain any
     of the system's standard header files.  If it did contain them,
     certain programs would be miscompiled (including GNU Emacs, on
     certain targets), because this would override and nullify the
     header file corrections made by the 'fixincludes' script.

     Indications are that people who use this option use it based on
     mistaken ideas of what it is for.  People use it as if it specified
     where to install part of GCC.  Perhaps they make this assumption
     because installing GCC creates the directory.

'--with-native-system-header-dir=DIRNAME'
     Specifies that DIRNAME is the directory that contains native system
     header files, rather than '/usr/include'.  This option is most
     useful if you are creating a compiler that should be isolated from
     the system as much as possible.  It is most commonly used with the
     '--with-sysroot' option and will cause GCC to search DIRNAME inside
     the system root specified by that option.

'--enable-shared[=PACKAGE[,...]]'
     Build shared versions of libraries, if shared libraries are
     supported on the target platform.  Unlike GCC 2.95.x and earlier,
     shared libraries are enabled by default on all platforms that
     support shared libraries.

     If a list of packages is given as an argument, build shared
     libraries only for the listed packages.  For other packages, only
     static libraries will be built.  Package names currently recognized
     in the GCC tree are 'libgcc' (also known as 'gcc'), 'libstdc++'
     (not 'libstdc++-v3'), 'libffi', 'zlib', 'boehm-gc', 'ada',
     'libada', 'libjava', 'libgo', and 'libobjc'.  Note 'libiberty' does
     not support shared libraries at all.

     Use '--disable-shared' to build only static libraries.  Note that
     '--disable-shared' does not accept a list of package names as
     argument, only '--enable-shared' does.

     Contrast with '--enable-host-shared', which affects _host_ code.

'--enable-host-shared'
     Specify that the _host_ code should be built into
     position-independent machine code (with -fPIC), allowing it to be
     used within shared libraries, but yielding a slightly slower
     compiler.

     This option is required when building the libgccjit.so library.

     Contrast with '--enable-shared', which affects _target_ libraries.

'--with-gnu-as'
     Specify that the compiler should assume that the assembler it finds
     is the GNU assembler.  However, this does not modify the rules to
     find an assembler and will result in confusion if the assembler
     found is not actually the GNU assembler.  (Confusion may also
     result if the compiler finds the GNU assembler but has not been
     configured with '--with-gnu-as'.)  If you have more than one
     assembler installed on your system, you may want to use this option
     in connection with '--with-as=PATHNAME' or
     '--with-build-time-tools=PATHNAME'.

     The following systems are the only ones where it makes a difference
     whether you use the GNU assembler.  On any other system,
     '--with-gnu-as' has no effect.

        * 'hppa1.0-ANY-ANY'
        * 'hppa1.1-ANY-ANY'
        * 'sparc-sun-solaris2.ANY'
        * 'sparc64-ANY-solaris2.ANY'

'--with-as=PATHNAME'
     Specify that the compiler should use the assembler pointed to by
     PATHNAME, rather than the one found by the standard rules to find
     an assembler, which are:
        * Unless GCC is being built with a cross compiler, check the
          'LIBEXEC/gcc/TARGET/VERSION' directory.  LIBEXEC defaults to
          'EXEC-PREFIX/libexec'; EXEC-PREFIX defaults to PREFIX, which
          defaults to '/usr/local' unless overridden by the
          '--prefix=PATHNAME' switch described above.  TARGET is the
          target system triple, such as 'sparc-sun-solaris2.7', and
          VERSION denotes the GCC version, such as 3.0.

        * If the target system is the same that you are building on,
          check operating system specific directories (e.g.
          '/usr/ccs/bin' on Sun Solaris 2).

        * Check in the 'PATH' for a tool whose name is prefixed by the
          target system triple.

        * Check in the 'PATH' for a tool whose name is not prefixed by
          the target system triple, if the host and target system triple
          are the same (in other words, we use a host tool if it can be
          used for the target as well).

     You may want to use '--with-as' if no assembler is installed in the
     directories listed above, or if you have multiple assemblers
     installed and want to choose one that is not found by the above
     rules.

'--with-gnu-ld'
     Same as '--with-gnu-as' but for the linker.

'--with-ld=PATHNAME'
     Same as '--with-as' but for the linker.

'--with-stabs'
     Specify that stabs debugging information should be used instead of
     whatever format the host normally uses.  Normally GCC uses the same
     debug format as the host system.

     On MIPS based systems and on Alphas, you must specify whether you
     want GCC to create the normal ECOFF debugging format, or to use
     BSD-style stabs passed through the ECOFF symbol table.  The normal
     ECOFF debug format cannot fully handle languages other than C.  BSD
     stabs format can handle other languages, but it only works with the
     GNU debugger GDB.

     Normally, GCC uses the ECOFF debugging format by default; if you
     prefer BSD stabs, specify '--with-stabs' when you configure GCC.

     No matter which default you choose when you configure GCC, the user
     can use the '-gcoff' and '-gstabs+' options to specify explicitly
     the debug format for a particular compilation.

     '--with-stabs' is meaningful on the ISC system on the 386, also, if
     '--with-gas' is used.  It selects use of stabs debugging
     information embedded in COFF output.  This kind of debugging
     information supports C++ well; ordinary COFF debugging information
     does not.

     '--with-stabs' is also meaningful on 386 systems running SVR4.  It
     selects use of stabs debugging information embedded in ELF output.
     The C++ compiler currently (2.6.0) does not support the DWARF
     debugging information normally used on 386 SVR4 platforms; stabs
     provide a workable alternative.  This requires gas and gdb, as the
     normal SVR4 tools can not generate or interpret stabs.

'--with-tls=DIALECT'
     Specify the default TLS dialect, for systems were there is a
     choice.  For ARM targets, possible values for DIALECT are 'gnu' or
     'gnu2', which select between the original GNU dialect and the GNU
     TLS descriptor-based dialect.

'--enable-multiarch'
     Specify whether to enable or disable multiarch support.  The
     default is to check for glibc start files in a multiarch location,
     and enable it if the files are found.  The auto detection is
     enabled for native builds, and for cross builds configured with
     '--with-sysroot', and without '--with-native-system-header-dir'.
     More documentation about multiarch can be found at
     <https://wiki.debian.org/Multiarch>.

'--enable-vtable-verify'
     Specify whether to enable or disable the vtable verification
     feature.  Enabling this feature causes libstdc++ to be built with
     its virtual calls in verifiable mode.  This means that, when linked
     with libvtv, every virtual call in libstdc++ will verify the vtable
     pointer through which the call will be made before actually making
     the call.  If not linked with libvtv, the verifier will call stub
     functions (in libstdc++ itself) and do nothing.  If vtable
     verification is disabled, then libstdc++ is not built with its
     virtual calls in verifiable mode at all.  However the libvtv
     library will still be built (see '--disable-libvtv' to turn off
     building libvtv).  '--disable-vtable-verify' is the default.

'--disable-multilib'
     Specify that multiple target libraries to support different target
     variants, calling conventions, etc. should not be built.  The
     default is to build a predefined set of them.

     Some targets provide finer-grained control over which multilibs are
     built (e.g., '--disable-softfloat'):
     'arm-*-*'
          fpu, 26bit, underscore, interwork, biendian, nofmult.

     'm68*-*-*'
          softfloat, m68881, m68000, m68020.

     'mips*-*-*'
          single-float, biendian, softfloat.

     'powerpc*-*-*, rs6000*-*-*'
          aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos,
          biendian, sysv, aix.

'--with-multilib-list=LIST'
'--without-multilib-list'
     Specify what multilibs to build.  Currently only implemented for
     arm*-*-*, sh*-*-* and x86-64-*-linux*.

     'arm*-*-*'
          LIST is either 'default' or 'aprofile'.  Specifying 'default'
          is equivalent to omitting this option while specifying
          'aprofile' builds multilibs for each combination of ISA
          ('-marm' or '-mthumb'), architecture ('-march=armv7-a',
          '-march=armv7ve', or '-march=armv8-a'), FPU available (none,
          '-mfpu=vfpv3-d16', '-mfpu=neon', '-mfpu=vfpv4-d16',
          '-mfpu=neon-vfpv4' or '-mfpu=neon-fp-armv8' depending on
          architecture) and floating-point ABI ('-mfloat-abi=softfp' or
          '-mfloat-abi=hard').

     'sh*-*-*'
          LIST is a comma separated list of CPU names.  These must be of
          the form 'sh*' or 'm*' (in which case they match the compiler
          option for that processor).  The list should not contain any
          endian options - these are handled by '--with-endian'.

          If LIST is empty, then there will be no multilibs for extra
          processors.  The multilib for the secondary endian remains
          enabled.

          As a special case, if an entry in the list starts with a '!'
          (exclamation point), then it is added to the list of excluded
          multilibs.  Entries of this sort should be compatible with
          'MULTILIB_EXCLUDES' (once the leading '!' has been stripped).

          If '--with-multilib-list' is not given, then a default set of
          multilibs is selected based on the value of '--target'.  This
          is usually the complete set of libraries, but some targets
          imply a more specialized subset.

          Example 1: to configure a compiler for SH4A only, but
          supporting both endians, with little endian being the default:
               --with-cpu=sh4a --with-endian=little,big --with-multilib-list=

          Example 2: to configure a compiler for both SH4A and
          SH4AL-DSP, but with only little endian SH4AL:
               --with-cpu=sh4a --with-endian=little,big \
               --with-multilib-list=sh4al,!mb/m4al

     'x86-64-*-linux*'
          LIST is a comma separated list of 'm32', 'm64' and 'mx32' to
          enable 32-bit, 64-bit and x32 run-time libraries,
          respectively.  If LIST is empty, then there will be no
          multilibs and only the default run-time library will be
          enabled.

          If '--with-multilib-list' is not given, then only 32-bit and
          64-bit run-time libraries will be enabled.

'--with-endian=ENDIANS'
     Specify what endians to use.  Currently only implemented for
     sh*-*-*.

     ENDIANS may be one of the following:
     'big'
          Use big endian exclusively.
     'little'
          Use little endian exclusively.
     'big,little'
          Use big endian by default.  Provide a multilib for little
          endian.
     'little,big'
          Use little endian by default.  Provide a multilib for big
          endian.

'--enable-threads'
     Specify that the target supports threads.  This affects the
     Objective-C compiler and runtime library, and exception handling
     for other languages like C++ and Java.  On some systems, this is
     the default.

     In general, the best (and, in many cases, the only known) threading
     model available will be configured for use.  Beware that on some
     systems, GCC has not been taught what threading models are
     generally available for the system.  In this case,
     '--enable-threads' is an alias for '--enable-threads=single'.

'--disable-threads'
     Specify that threading support should be disabled for the system.
     This is an alias for '--enable-threads=single'.

'--enable-threads=LIB'
     Specify that LIB is the thread support library.  This affects the
     Objective-C compiler and runtime library, and exception handling
     for other languages like C++ and Java.  The possibilities for LIB
     are:

     'aix'
          AIX thread support.
     'dce'
          DCE thread support.
     'lynx'
          LynxOS thread support.
     'mipssde'
          MIPS SDE thread support.
     'no'
          This is an alias for 'single'.
     'posix'
          Generic POSIX/Unix98 thread support.
     'rtems'
          RTEMS thread support.
     'single'
          Disable thread support, should work for all platforms.
     'tpf'
          TPF thread support.
     'vxworks'
          VxWorks thread support.
     'win32'
          Microsoft Win32 API thread support.

'--enable-tls'
     Specify that the target supports TLS (Thread Local Storage).
     Usually configure can correctly determine if TLS is supported.  In
     cases where it guesses incorrectly, TLS can be explicitly enabled
     or disabled with '--enable-tls' or '--disable-tls'.  This can
     happen if the assembler supports TLS but the C library does not, or
     if the assumptions made by the configure test are incorrect.

'--disable-tls'
     Specify that the target does not support TLS. This is an alias for
     '--enable-tls=no'.

'--with-cpu=CPU'
'--with-cpu-32=CPU'
'--with-cpu-64=CPU'
     Specify which cpu variant the compiler should generate code for by
     default.  CPU will be used as the default value of the '-mcpu='
     switch.  This option is only supported on some targets, including
     ARC, ARM, i386, M68k, PowerPC, and SPARC.  It is mandatory for ARC.
     The '--with-cpu-32' and '--with-cpu-64' options specify separate
     default CPUs for 32-bit and 64-bit modes; these options are only
     supported for i386, x86-64 and PowerPC.

'--with-schedule=CPU'
'--with-arch=CPU'
'--with-arch-32=CPU'
'--with-arch-64=CPU'
'--with-tune=CPU'
'--with-tune-32=CPU'
'--with-tune-64=CPU'
'--with-abi=ABI'
'--with-fpu=TYPE'
'--with-float=TYPE'
     These configure options provide default values for the
     '-mschedule=', '-march=', '-mtune=', '-mabi=', and '-mfpu=' options
     and for '-mhard-float' or '-msoft-float'.  As with '--with-cpu',
     which switches will be accepted and acceptable values of the
     arguments depend on the target.

'--with-mode=MODE'
     Specify if the compiler should default to '-marm' or '-mthumb'.
     This option is only supported on ARM targets.

'--with-stack-offset=NUM'
     This option sets the default for the -mstack-offset=NUM option, and
     will thus generally also control the setting of this option for
     libraries.  This option is only supported on Epiphany targets.

'--with-fpmath=ISA'
     This options sets '-mfpmath=sse' by default and specifies the
     default ISA for floating-point arithmetics.  You can select either
     'sse' which enables '-msse2' or 'avx' which enables '-mavx' by
     default.  This option is only supported on i386 and x86-64 targets.

'--with-fp-32=MODE'
     On MIPS targets, set the default value for the '-mfp' option when
     using the o32 ABI. The possibilities for MODE are:
     '32'
          Use the o32 FP32 ABI extension, as with the '-mfp32'
          command-line option.
     'xx'
          Use the o32 FPXX ABI extension, as with the '-mfpxx'
          command-line option.
     '64'
          Use the o32 FP64 ABI extension, as with the '-mfp64'
          command-line option.
     In the absence of this configuration option the default is to use
     the o32 FP32 ABI extension.

'--with-odd-spreg-32'
     On MIPS targets, set the '-modd-spreg' option by default when using
     the o32 ABI.

'--without-odd-spreg-32'
     On MIPS targets, set the '-mno-odd-spreg' option by default when
     using the o32 ABI. This is normally used in conjunction with
     '--with-fp-32=64' in order to target the o32 FP64A ABI extension.

'--with-nan=ENCODING'
     On MIPS targets, set the default encoding convention to use for the
     special not-a-number (NaN) IEEE 754 floating-point data.  The
     possibilities for ENCODING are:
     'legacy'
          Use the legacy encoding, as with the '-mnan=legacy'
          command-line option.
     '2008'
          Use the 754-2008 encoding, as with the '-mnan=2008'
          command-line option.
     To use this configuration option you must have an assembler version
     installed that supports the '-mnan=' command-line option too.  In
     the absence of this configuration option the default convention is
     the legacy encoding, as when neither of the '-mnan=2008' and
     '-mnan=legacy' command-line options has been used.

'--with-divide=TYPE'
     Specify how the compiler should generate code for checking for
     division by zero.  This option is only supported on the MIPS
     target.  The possibilities for TYPE are:
     'traps'
          Division by zero checks use conditional traps (this is the
          default on systems that support conditional traps).
     'breaks'
          Division by zero checks use the break instruction.

'--with-llsc'
     On MIPS targets, make '-mllsc' the default when no '-mno-llsc'
     option is passed.  This is the default for Linux-based targets, as
     the kernel will emulate them if the ISA does not provide them.

'--without-llsc'
     On MIPS targets, make '-mno-llsc' the default when no '-mllsc'
     option is passed.

'--with-synci'
     On MIPS targets, make '-msynci' the default when no '-mno-synci'
     option is passed.

'--without-synci'
     On MIPS targets, make '-mno-synci' the default when no '-msynci'
     option is passed.  This is the default.

'--with-mips-plt'
     On MIPS targets, make use of copy relocations and PLTs.  These
     features are extensions to the traditional SVR4-based MIPS ABIs and
     require support from GNU binutils and the runtime C library.

'--enable-__cxa_atexit'
     Define if you want to use __cxa_atexit, rather than atexit, to
     register C++ destructors for local statics and global objects.
     This is essential for fully standards-compliant handling of
     destructors, but requires __cxa_atexit in libc.  This option is
     currently only available on systems with GNU libc.  When enabled,
     this will cause '-fuse-cxa-atexit' to be passed by default.

'--enable-gnu-indirect-function'
     Define if you want to enable the 'ifunc' attribute.  This option is
     currently only available on systems with GNU libc on certain
     targets.

'--enable-target-optspace'
     Specify that target libraries should be optimized for code space
     instead of code speed.  This is the default for the m32r platform.

'--with-cpp-install-dir=DIRNAME'
     Specify that the user visible 'cpp' program should be installed in
     'PREFIX/DIRNAME/cpp', in addition to BINDIR.

'--enable-comdat'
     Enable COMDAT group support.  This is primarily used to override
     the automatically detected value.

'--enable-initfini-array'
     Force the use of sections '.init_array' and '.fini_array' (instead
     of '.init' and '.fini') for constructors and destructors.  Option
     '--disable-initfini-array' has the opposite effect.  If neither
     option is specified, the configure script will try to guess whether
     the '.init_array' and '.fini_array' sections are supported and, if
     they are, use them.

'--enable-link-mutex'
     When building GCC, use a mutex to avoid linking the compilers for
     multiple languages at the same time, to avoid thrashing on build
     systems with limited free memory.  The default is not to use such a
     mutex.

'--enable-maintainer-mode'
     The build rules that regenerate the Autoconf and Automake output
     files as well as the GCC master message catalog 'gcc.pot' are
     normally disabled.  This is because it can only be rebuilt if the
     complete source tree is present.  If you have changed the sources
     and want to rebuild the catalog, configuring with
     '--enable-maintainer-mode' will enable this.  Note that you need a
     recent version of the 'gettext' tools to do so.

'--disable-bootstrap'
     For a native build, the default configuration is to perform a
     3-stage bootstrap of the compiler when 'make' is invoked, testing
     that GCC can compile itself correctly.  If you want to disable this
     process, you can configure with '--disable-bootstrap'.

'--enable-bootstrap'
     In special cases, you may want to perform a 3-stage build even if
     the target and host triplets are different.  This is possible when
     the host can run code compiled for the target (e.g. host is
     i686-linux, target is i486-linux).  Starting from GCC 4.2, to do
     this you have to configure explicitly with '--enable-bootstrap'.

'--enable-generated-files-in-srcdir'
     Neither the .c and .h files that are generated from Bison and flex
     nor the info manuals and man pages that are built from the .texi
     files are present in the SVN development tree.  When building GCC
     from that development tree, or from one of our snapshots, those
     generated files are placed in your build directory, which allows
     for the source to be in a readonly directory.

     If you configure with '--enable-generated-files-in-srcdir' then
     those generated files will go into the source directory.  This is
     mainly intended for generating release or prerelease tarballs of
     the GCC sources, since it is not a requirement that the users of
     source releases to have flex, Bison, or makeinfo.

'--enable-version-specific-runtime-libs'
     Specify that runtime libraries should be installed in the compiler
     specific subdirectory ('LIBDIR/gcc') rather than the usual places.
     In addition, 'libstdc++''s include files will be installed into
     'LIBDIR' unless you overruled it by using
     '--with-gxx-include-dir=DIRNAME'.  Using this option is
     particularly useful if you intend to use several versions of GCC in
     parallel.  This is currently supported by 'libgfortran', 'libjava',
     'libstdc++', and 'libobjc'.

'--with-aix-soname='aix', 'svr4' or 'both''
     Traditional AIX shared library versioning (versioned 'Shared
     Object' files as members of unversioned 'Archive Library' files
     named 'lib.a') causes numerous headaches for package managers.
     However, 'Import Files' as members of 'Archive Library' files allow
     for *filename-based versioning* of shared libraries as seen on
     Linux/SVR4, where this is called the "SONAME". But as they prevent
     static linking, 'Import Files' may be used with 'Runtime Linking'
     only, where the linker does search for 'libNAME.so' before
     'libNAME.a' library filenames with the '-lNAME' linker flag.

     For detailed information please refer to the AIX ld Command
     reference.

     As long as shared library creation is enabled, upon:
     '--with-aix-soname=aix'
     '--with-aix-soname=both'
          A (traditional AIX) 'Shared Archive Library' file is created:
             * using the 'libNAME.a' filename scheme
             * with the 'Shared Object' file as archive member named
               'libNAME.so.V' (except for 'libgcc_s', where the 'Shared
               Object' file is named 'shr.o' for backwards
               compatibility), which
                  - is used for runtime loading from inside the
                    'libNAME.a' file
                  - is used for dynamic loading via
                    'dlopen("libNAME.a(libNAME.so.V)", RTLD_MEMBER)'
                  - is used for shared linking
                  - is used for static linking, so no separate 'Static
                    Archive Library' file is needed
     '--with-aix-soname=both'
     '--with-aix-soname=svr4'
          A (second) 'Shared Archive Library' file is created:
             * using the 'libNAME.so.V' filename scheme
             * with the 'Shared Object' file as archive member named
               'shr.o', which
                  - is created with the '-G linker flag'
                  - has the 'F_LOADONLY' flag set
                  - is used for runtime loading from inside the
                    'libNAME.so.V' file
                  - is used for dynamic loading via
                    'dlopen("libNAME.so.V(shr.o)", RTLD_MEMBER)'
             * with the 'Import File' as archive member named 'shr.imp',
               which
                  - refers to 'libNAME.so.V(shr.o)' as the "SONAME", to
                    be recorded in the 'Loader Section' of subsequent
                    binaries
                  - indicates whether 'libNAME.so.V(shr.o)' is 32 or 64
                    bit
                  - lists all the public symbols exported by
                    'lib.so.V(shr.o)', eventually decorated with the
                    ''weak' Keyword'
                  - is necessary for shared linking against
                    'lib.so.V(shr.o)'
          A symbolic link using the 'libNAME.so' filename scheme is
          created:
             * pointing to the 'libNAME.so.V' 'Shared Archive Library'
               file
             * to permit the 'ld Command' to find 'lib.so.V(shr.imp)'
               via the '-lNAME' argument (requires 'Runtime Linking' to
               be enabled)
             * to permit dynamic loading of 'lib.so.V(shr.o)' without
               the need to specify the version number via
               'dlopen("libNAME.so(shr.o)", RTLD_MEMBER)'

     As long as static library creation is enabled, upon:
     '--with-aix-soname=svr4'
          A 'Static Archive Library' is created:
             * using the 'libNAME.a' filename scheme
             * with all the 'Static Object' files as archive members,
               which
                  - are used for static linking

     While the aix-soname='svr4' option does not create 'Shared Object'
     files as members of unversioned 'Archive Library' files any more,
     package managers still are responsible to transfer 'Shared Object'
     files found as member of a previously installed unversioned
     'Archive Library' file into the newly installed 'Archive Library'
     file with the same filename.

     _WARNING:_ Creating 'Shared Object' files with 'Runtime Linking'
     enabled may bloat the TOC, eventually leading to 'TOC overflow'
     errors, requiring the use of either the '-Wl,-bbigtoc' linker flag
     (seen to break with the 'GDB' debugger) or some of the TOC-related
     compiler flags, *Note RS/6000 and PowerPC Options: (gcc)RS/6000 and
     PowerPC Options.

     '--with-aix-soname' is currently supported by 'libgcc_s' only, so
     this option is still experimental and not for normal use yet.

     Default is the traditional behavior '--with-aix-soname='aix''.

'--enable-languages=LANG1,LANG2,...'
     Specify that only a particular subset of compilers and their
     runtime libraries should be built.  For a list of valid values for
     LANGN you can issue the following command in the 'gcc' directory of
     your GCC source tree:
          grep ^language= */config-lang.in
     Currently, you can use any of the following: 'all', 'ada', 'c',
     'c++', 'fortran', 'go', 'java', 'jit', 'lto', 'objc', 'obj-c++'.
     Building the Ada compiler has special requirements, see below.  If
     you do not pass this flag, or specify the option 'all', then all
     default languages available in the 'gcc' sub-tree will be
     configured.  Ada, Go, Jit, and Objective-C++ are not default
     languages.  LTO is not a default language, but is built by default
     because '--enable-lto' is enabled by default.  The other languages
     are default languages.

'--enable-stage1-languages=LANG1,LANG2,...'
     Specify that a particular subset of compilers and their runtime
     libraries should be built with the system C compiler during stage 1
     of the bootstrap process, rather than only in later stages with the
     bootstrapped C compiler.  The list of valid values is the same as
     for '--enable-languages', and the option 'all' will select all of
     the languages enabled by '--enable-languages'.  This option is
     primarily useful for GCC development; for instance, when a
     development version of the compiler cannot bootstrap due to
     compiler bugs, or when one is debugging front ends other than the C
     front end.  When this option is used, one can then build the target
     libraries for the specified languages with the stage-1 compiler by
     using 'make stage1-bubble all-target', or run the testsuite on the
     stage-1 compiler for the specified languages using 'make
     stage1-start check-gcc'.

'--disable-libada'
     Specify that the run-time libraries and tools used by GNAT should
     not be built.  This can be useful for debugging, or for
     compatibility with previous Ada build procedures, when it was
     required to explicitly do a 'make -C gcc gnatlib_and_tools'.

'--disable-libsanitizer'
     Specify that the run-time libraries for the various sanitizers
     should not be built.

'--disable-libssp'
     Specify that the run-time libraries for stack smashing protection
     should not be built.

'--disable-libquadmath'
     Specify that the GCC quad-precision math library should not be
     built.  On some systems, the library is required to be linkable
     when building the Fortran front end, unless
     '--disable-libquadmath-support' is used.

'--disable-libquadmath-support'
     Specify that the Fortran front end and 'libgfortran' do not add
     support for 'libquadmath' on systems supporting it.

'--disable-libgomp'
     Specify that the GNU Offloading and Multi Processing Runtime
     Library should not be built.

'--disable-libvtv'
     Specify that the run-time libraries used by vtable verification
     should not be built.

'--with-dwarf2'
     Specify that the compiler should use DWARF 2 debugging information
     as the default.

'--with-advance-toolchain=AT'
     On 64-bit PowerPC Linux systems, configure the compiler to use the
     header files, library files, and the dynamic linker from the
     Advance Toolchain release AT instead of the default versions that
     are provided by the Linux distribution.  In general, this option is
     intended for the developers of GCC, and it is not intended for
     general use.

'--enable-targets=all'
'--enable-targets=TARGET_LIST'
     Some GCC targets, e.g. powerpc64-linux, build bi-arch compilers.
     These are compilers that are able to generate either 64-bit or
     32-bit code.  Typically, the corresponding 32-bit target, e.g.
     powerpc-linux for powerpc64-linux, only generates 32-bit code.
     This option enables the 32-bit target to be a bi-arch compiler,
     which is useful when you want a bi-arch compiler that defaults to
     32-bit, and you are building a bi-arch or multi-arch binutils in a
     combined tree.  On mips-linux, this will build a tri-arch compiler
     (ABI o32/n32/64), defaulted to o32.  Currently, this option only
     affects sparc-linux, powerpc-linux, x86-linux, mips-linux and
     s390-linux.

'--enable-default-pie'
     Turn on '-fPIE' and '-pie' by default.

'--enable-secureplt'
     This option enables '-msecure-plt' by default for powerpc-linux.
     *Note RS/6000 and PowerPC Options: (gcc)RS/6000 and PowerPC
     Options,

'--enable-default-ssp'
     Turn on '-fstack-protector-strong' by default.

'--enable-cld'
     This option enables '-mcld' by default for 32-bit x86 targets.
     *Note i386 and x86-64 Options: (gcc)i386 and x86-64 Options,

'--enable-win32-registry'
'--enable-win32-registry=KEY'
'--disable-win32-registry'
     The '--enable-win32-registry' option enables Microsoft
     Windows-hosted GCC to look up installations paths in the registry
     using the following key:

          HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\KEY

     KEY defaults to GCC version number, and can be overridden by the
     '--enable-win32-registry=KEY' option.  Vendors and distributors who
     use custom installers are encouraged to provide a different key,
     perhaps one comprised of vendor name and GCC version number, to
     avoid conflict with existing installations.  This feature is
     enabled by default, and can be disabled by
     '--disable-win32-registry' option.  This option has no effect on
     the other hosts.

'--nfp'
     Specify that the machine does not have a floating point unit.  This
     option only applies to 'm68k-sun-sunosN'.  On any other system,
     '--nfp' has no effect.

'--enable-werror'
'--disable-werror'
'--enable-werror=yes'
'--enable-werror=no'
     When you specify this option, it controls whether certain files in
     the compiler are built with '-Werror' in bootstrap stage2 and
     later.  If you don't specify it, '-Werror' is turned on for the
     main development trunk.  However it defaults to off for release
     branches and final releases.  The specific files which get
     '-Werror' are controlled by the Makefiles.

'--enable-checking'
'--enable-checking=LIST'
     When you specify this option, the compiler is built to perform
     internal consistency checks of the requested complexity.  This does
     not change the generated code, but adds error checking within the
     compiler.  This will slow down the compiler and may only work
     properly if you are building the compiler with GCC.  This is 'yes'
     by default when building from SVN or snapshots, but 'release' for
     releases.  The default for building the stage1 compiler is 'yes'.
     More control over the checks may be had by specifying LIST.  The
     categories of checks available are 'yes' (most common checks
     'assert,misc,tree,gc,rtlflag,runtime'), 'no' (no checks at all),
     'all' (all but 'valgrind'), 'release' (cheapest checks
     'assert,runtime') or 'none' (same as 'no').  Individual checks can
     be enabled with these flags 'assert', 'df', 'fold', 'gc', 'gcac'
     'misc', 'rtl', 'rtlflag', 'runtime', 'tree', and 'valgrind'.

     The 'valgrind' check requires the external 'valgrind' simulator,
     available from <http://valgrind.org/>.  The 'df', 'rtl', 'gcac' and
     'valgrind' checks are very expensive.  To disable all checking,
     '--disable-checking' or '--enable-checking=none' must be explicitly
     requested.  Disabling assertions will make the compiler and runtime
     slightly faster but increase the risk of undetected internal errors
     causing wrong code to be generated.

'--disable-stage1-checking'
'--enable-stage1-checking'
'--enable-stage1-checking=LIST'
     If no '--enable-checking' option is specified the stage1 compiler
     will be built with 'yes' checking enabled, otherwise the stage1
     checking flags are the same as specified by '--enable-checking'.
     To build the stage1 compiler with different checking options use
     '--enable-stage1-checking'.  The list of checking options is the
     same as for '--enable-checking'.  If your system is too slow or too
     small to bootstrap a released compiler with checking for stage1
     enabled, you can use '--disable-stage1-checking' to disable
     checking for the stage1 compiler.

'--enable-coverage'
'--enable-coverage=LEVEL'
     With this option, the compiler is built to collect self coverage
     information, every time it is run.  This is for internal
     development purposes, and only works when the compiler is being
     built with gcc.  The LEVEL argument controls whether the compiler
     is built optimized or not, values are 'opt' and 'noopt'.  For
     coverage analysis you want to disable optimization, for performance
     analysis you want to enable optimization.  When coverage is
     enabled, the default level is without optimization.

'--enable-gather-detailed-mem-stats'
     When this option is specified more detailed information on memory
     allocation is gathered.  This information is printed when using
     '-fmem-report'.

'--enable-valgrind-annotations'
     Mark selected memory related operations in the compiler when run
     under valgrind to suppress false positives.

'--enable-nls'
'--disable-nls'
     The '--enable-nls' option enables Native Language Support (NLS),
     which lets GCC output diagnostics in languages other than American
     English.  Native Language Support is enabled by default if not
     doing a canadian cross build.  The '--disable-nls' option disables
     NLS.

'--with-included-gettext'
     If NLS is enabled, the '--with-included-gettext' option causes the
     build procedure to prefer its copy of GNU 'gettext'.

'--with-catgets'
     If NLS is enabled, and if the host lacks 'gettext' but has the
     inferior 'catgets' interface, the GCC build procedure normally
     ignores 'catgets' and instead uses GCC's copy of the GNU 'gettext'
     library.  The '--with-catgets' option causes the build procedure to
     use the host's 'catgets' in this situation.

'--with-libiconv-prefix=DIR'
     Search for libiconv header files in 'DIR/include' and libiconv
     library files in 'DIR/lib'.

'--enable-obsolete'
     Enable configuration for an obsoleted system.  If you attempt to
     configure GCC for a system (build, host, or target) which has been
     obsoleted, and you do not specify this flag, configure will halt
     with an error message.

     All support for systems which have been obsoleted in one release of
     GCC is removed entirely in the next major release, unless someone
     steps forward to maintain the port.

'--enable-decimal-float'
'--enable-decimal-float=yes'
'--enable-decimal-float=no'
'--enable-decimal-float=bid'
'--enable-decimal-float=dpd'
'--disable-decimal-float'
     Enable (or disable) support for the C decimal floating point
     extension that is in the IEEE 754-2008 standard.  This is enabled
     by default only on PowerPC, i386, and x86_64 GNU/Linux systems.
     Other systems may also support it, but require the user to
     specifically enable it.  You can optionally control which decimal
     floating point format is used (either 'bid' or 'dpd').  The 'bid'
     (binary integer decimal) format is default on i386 and x86_64
     systems, and the 'dpd' (densely packed decimal) format is default
     on PowerPC systems.

'--enable-fixed-point'
'--disable-fixed-point'
     Enable (or disable) support for C fixed-point arithmetic.  This
     option is enabled by default for some targets (such as MIPS) which
     have hardware-support for fixed-point operations.  On other
     targets, you may enable this option manually.

'--with-long-double-128'
     Specify if 'long double' type should be 128-bit by default on
     selected GNU/Linux architectures.  If using
     '--without-long-double-128', 'long double' will be by default
     64-bit, the same as 'double' type.  When neither of these configure
     options are used, the default will be 128-bit 'long double' when
     built against GNU C Library 2.4 and later, 64-bit 'long double'
     otherwise.

'--enable-fdpic'
     On SH Linux systems, generate ELF FDPIC code.

'--with-gmp=PATHNAME'
'--with-gmp-include=PATHNAME'
'--with-gmp-lib=PATHNAME'
'--with-mpfr=PATHNAME'
'--with-mpfr-include=PATHNAME'
'--with-mpfr-lib=PATHNAME'
'--with-mpc=PATHNAME'
'--with-mpc-include=PATHNAME'
'--with-mpc-lib=PATHNAME'
     If you want to build GCC but do not have the GMP library, the MPFR
     library and/or the MPC library installed in a standard location and
     do not have their sources present in the GCC source tree then you
     can explicitly specify the directory where they are installed
     ('--with-gmp=GMPINSTALLDIR', '--with-mpfr=MPFRINSTALLDIR',
     '--with-mpc=MPCINSTALLDIR').  The '--with-gmp=GMPINSTALLDIR' option
     is shorthand for '--with-gmp-lib=GMPINSTALLDIR/lib' and
     '--with-gmp-include=GMPINSTALLDIR/include'.  Likewise the
     '--with-mpfr=MPFRINSTALLDIR' option is shorthand for
     '--with-mpfr-lib=MPFRINSTALLDIR/lib' and
     '--with-mpfr-include=MPFRINSTALLDIR/include', also the
     '--with-mpc=MPCINSTALLDIR' option is shorthand for
     '--with-mpc-lib=MPCINSTALLDIR/lib' and
     '--with-mpc-include=MPCINSTALLDIR/include'.  If these shorthand
     assumptions are not correct, you can use the explicit include and
     lib options directly.  You might also need to ensure the shared
     libraries can be found by the dynamic linker when building and
     using GCC, for example by setting the runtime shared library path
     variable ('LD_LIBRARY_PATH' on GNU/Linux and Solaris systems).

     These flags are applicable to the host platform only.  When
     building a cross compiler, they will not be used to configure
     target libraries.

'--with-isl=PATHNAME'
'--with-isl-include=PATHNAME'
'--with-isl-lib=PATHNAME'
     If you do not have the isl library installed in a standard location
     and you want to build GCC, you can explicitly specify the directory
     where it is installed ('--with-isl=ISLINSTALLDIR').  The
     '--with-isl=ISLINSTALLDIR' option is shorthand for
     '--with-isl-lib=ISLINSTALLDIR/lib' and
     '--with-isl-include=ISLINSTALLDIR/include'.  If this shorthand
     assumption is not correct, you can use the explicit include and lib
     options directly.

     These flags are applicable to the host platform only.  When
     building a cross compiler, they will not be used to configure
     target libraries.

'--with-stage1-ldflags=FLAGS'
     This option may be used to set linker flags to be used when linking
     stage 1 of GCC. These are also used when linking GCC if configured
     with '--disable-bootstrap'.  If '--with-stage1-libs' is not set to
     a value, then the default is '-static-libstdc++ -static-libgcc', if
     supported.

'--with-stage1-libs=LIBS'
     This option may be used to set libraries to be used when linking
     stage 1 of GCC. These are also used when linking GCC if configured
     with '--disable-bootstrap'.

'--with-boot-ldflags=FLAGS'
     This option may be used to set linker flags to be used when linking
     stage 2 and later when bootstrapping GCC. If -with-boot-libs is not
     is set to a value, then the default is '-static-libstdc++
     -static-libgcc'.

'--with-boot-libs=LIBS'
     This option may be used to set libraries to be used when linking
     stage 2 and later when bootstrapping GCC.

'--with-debug-prefix-map=MAP'
     Convert source directory names using '-fdebug-prefix-map' when
     building runtime libraries.  'MAP' is a space-separated list of
     maps of the form 'OLD=NEW'.

'--enable-linker-build-id'
     Tells GCC to pass '--build-id' option to the linker for all final
     links (links performed without the '-r' or '--relocatable' option),
     if the linker supports it.  If you specify
     '--enable-linker-build-id', but your linker does not support
     '--build-id' option, a warning is issued and the
     '--enable-linker-build-id' option is ignored.  The default is off.

'--with-linker-hash-style=CHOICE'
     Tells GCC to pass '--hash-style=CHOICE' option to the linker for
     all final links.  CHOICE can be one of 'sysv', 'gnu', and 'both'
     where 'sysv' is the default.

'--enable-gnu-unique-object'
'--disable-gnu-unique-object'
     Tells GCC to use the gnu_unique_object relocation for C++ template
     static data members and inline function local statics.  Enabled by
     default for a toolchain with an assembler that accepts it and GLIBC
     2.11 or above, otherwise disabled.

'--with-diagnostics-color=CHOICE'
     Tells GCC to use CHOICE as the default for '-fdiagnostics-color='
     option (if not used explicitly on the command line).  CHOICE can be
     one of 'never', 'auto', 'always', and 'auto-if-env' where 'auto' is
     the default.  'auto-if-env' means that '-fdiagnostics-color=auto'
     will be the default if 'GCC_COLORS' is present and non-empty in the
     environment, and '-fdiagnostics-color=never' otherwise.

'--enable-lto'
'--disable-lto'
     Enable support for link-time optimization (LTO). This is enabled by
     default, and may be disabled using '--disable-lto'.

'--enable-linker-plugin-configure-flags=FLAGS'
'--enable-linker-plugin-flags=FLAGS'
     By default, linker plugins (such as the LTO plugin) are built for
     the host system architecture.  For the case that the linker has a
     different (but run-time compatible) architecture, these flags can
     be specified to build plugins that are compatible to the linker.
     For example, if you are building GCC for a 64-bit x86_64
     ('x86_64-unknown-linux-gnu') host system, but have a 32-bit x86
     GNU/Linux ('i686-pc-linux-gnu') linker executable (which is
     executable on the former system), you can configure GCC as follows
     for getting compatible linker plugins:

          % SRCDIR/configure \
              --host=x86_64-unknown-linux-gnu \
              --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
              --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'

'--with-plugin-ld=PATHNAME'
     Enable an alternate linker to be used at link-time optimization
     (LTO) link time when '-fuse-linker-plugin' is enabled.  This linker
     should have plugin support such as gold starting with version 2.20
     or GNU ld starting with version 2.21.  See '-fuse-linker-plugin'
     for details.

'--enable-canonical-system-headers'
'--disable-canonical-system-headers'
     Enable system header path canonicalization for 'libcpp'.  This can
     produce shorter header file paths in diagnostics and dependency
     output files, but these changed header paths may conflict with some
     compilation environments.  Enabled by default, and may be disabled
     using '--disable-canonical-system-headers'.

'--with-glibc-version=MAJOR.MINOR'
     Tell GCC that when the GNU C Library (glibc) is used on the target
     it will be version MAJOR.MINOR or later.  Normally this can be
     detected from the C library's header files, but this option may be
     needed when bootstrapping a cross toolchain without the header
     files available for building the initial bootstrap compiler.

     If GCC is configured with some multilibs that use glibc and some
     that do not, this option applies only to the multilibs that use
     glibc.  However, such configurations may not work well as not all
     the relevant configuration in GCC is on a per-multilib basis.

'--enable-as-accelerator-for=TARGET'
     Build as offload target compiler.  Specify offload host triple by
     TARGET.

'--enable-offload-targets=TARGET1[=PATH1],...,TARGETN[=PATHN]'
     Enable offloading to targets TARGET1, ..., TARGETN.  Offload
     compilers are expected to be already installed.  Default search
     path for them is 'EXEC-PREFIX', but it can be changed by specifying
     paths PATH1, ..., PATHN.

          % SRCDIR/configure \
              --enable-offload-target=i686-unknown-linux-gnu=/path/to/i686/compiler,x86_64-pc-linux-gnu

     If 'hsa' is specified as one of the targets, the compiler will be
     built with support for HSA GPU accelerators.  Because the same
     compiler will emit the accelerator code, no path should be
     specified.

'--with-hsa-runtime=PATHNAME'
'--with-hsa-runtime-include=PATHNAME'
'--with-hsa-runtime-lib=PATHNAME'

     If you configure GCC with HSA offloading but do not have the HSA
     run-time library installed in a standard location then you can
     explicitly specify the directory where they are installed.  The
     '--with-hsa-runtime=HSAINSTALLDIR' option is a shorthand for
     '--with-hsa-runtime-lib=HSAINSTALLDIR/lib' and
     '--with-hsa-runtime-include=HSAINSTALLDIR/include'.

'--with-hsa-kmt-lib=PATHNAME'

     If you configure GCC with HSA offloading but do not have the HSA
     KMT library installed in a standard location then you can
     explicitly specify the directory where it resides.

Cross-Compiler-Specific Options
-------------------------------

The following options only apply to building cross compilers.

'--with-sysroot'
'--with-sysroot=DIR'
     Tells GCC to consider DIR as the root of a tree that contains (a
     subset of) the root filesystem of the target operating system.
     Target system headers, libraries and run-time object files will be
     searched for in there.  More specifically, this acts as if
     '--sysroot=DIR' was added to the default options of the built
     compiler.  The specified directory is not copied into the install
     tree, unlike the options '--with-headers' and '--with-libs' that
     this option obsoletes.  The default value, in case '--with-sysroot'
     is not given an argument, is '${gcc_tooldir}/sys-root'.  If the
     specified directory is a subdirectory of '${exec_prefix}', then it
     will be found relative to the GCC binaries if the installation tree
     is moved.

     This option affects the system root for the compiler used to build
     target libraries (which runs on the build system) and the compiler
     newly installed with 'make install'; it does not affect the
     compiler which is used to build GCC itself.

     If you specify the '--with-native-system-header-dir=DIRNAME' option
     then the compiler will search that directory within DIRNAME for
     native system headers rather than the default '/usr/include'.

'--with-build-sysroot'
'--with-build-sysroot=DIR'
     Tells GCC to consider DIR as the system root (see '--with-sysroot')
     while building target libraries, instead of the directory specified
     with '--with-sysroot'.  This option is only useful when you are
     already using '--with-sysroot'.  You can use '--with-build-sysroot'
     when you are configuring with '--prefix' set to a directory that is
     different from the one in which you are installing GCC and your
     target libraries.

     This option affects the system root for the compiler used to build
     target libraries (which runs on the build system); it does not
     affect the compiler which is used to build GCC itself.

     If you specify the '--with-native-system-header-dir=DIRNAME' option
     then the compiler will search that directory within DIRNAME for
     native system headers rather than the default '/usr/include'.

'--with-headers'
'--with-headers=DIR'
     Deprecated in favor of '--with-sysroot'.  Specifies that target
     headers are available when building a cross compiler.  The DIR
     argument specifies a directory which has the target include files.
     These include files will be copied into the 'gcc' install
     directory.  _This option with the DIR argument is required_ when
     building a cross compiler, if 'PREFIX/TARGET/sys-include' doesn't
     pre-exist.  If 'PREFIX/TARGET/sys-include' does pre-exist, the DIR
     argument may be omitted.  'fixincludes' will be run on these files
     to make them compatible with GCC.

'--without-headers'
     Tells GCC not use any target headers from a libc when building a
     cross compiler.  When crossing to GNU/Linux, you need the headers
     so GCC can build the exception handling for libgcc.

'--with-libs'
'--with-libs="DIR1 DIR2 ... DIRN"'
     Deprecated in favor of '--with-sysroot'.  Specifies a list of
     directories which contain the target runtime libraries.  These
     libraries will be copied into the 'gcc' install directory.  If the
     directory list is omitted, this option has no effect.

'--with-newlib'
     Specifies that 'newlib' is being used as the target C library.
     This causes '__eprintf' to be omitted from 'libgcc.a' on the
     assumption that it will be provided by 'newlib'.

'--with-avrlibc'
     Specifies that 'AVR-Libc' is being used as the target C library.
     This causes float support functions like '__addsf3' to be omitted
     from 'libgcc.a' on the assumption that it will be provided by
     'libm.a'.  For more technical details, cf.  PR54461.  This option
     is only supported for the AVR target.  It is not supported for
     RTEMS configurations, which currently use newlib.  The option is
     supported since version 4.7.2 and is the default in 4.8.0 and
     newer.

'--with-nds32-lib=LIBRARY'
     Specifies that LIBRARY setting is used for building 'libgcc.a'.
     Currently, the valid LIBRARY is 'newlib' or 'mculib'.  This option
     is only supported for the NDS32 target.

'--with-build-time-tools=DIR'
     Specifies where to find the set of target tools (assembler, linker,
     etc.)  that will be used while building GCC itself.  This option
     can be useful if the directory layouts are different between the
     system you are building GCC on, and the system where you will
     deploy it.

     For example, on an 'ia64-hp-hpux' system, you may have the GNU
     assembler and linker in '/usr/bin', and the native tools in a
     different path, and build a toolchain that expects to find the
     native tools in '/usr/bin'.

     When you use this option, you should ensure that DIR includes 'ar',
     'as', 'ld', 'nm', 'ranlib' and 'strip' if necessary, and possibly
     'objdump'.  Otherwise, GCC may use an inconsistent set of tools.

Java-Specific Options
---------------------

The following option applies to the build of the Java front end.

'--disable-libgcj'
     Specify that the run-time libraries used by GCJ should not be
     built.  This is useful in case you intend to use GCJ with some
     other run-time, or you're going to install it separately, or it
     just happens not to build on your particular machine.  In general,
     if the Java front end is enabled, the GCJ libraries will be enabled
     too, unless they're known to not work on the target platform.  If
     GCJ is enabled but 'libgcj' isn't built, you may need to port it;
     in this case, before modifying the top-level 'configure.ac' so that
     'libgcj' is enabled by default on this platform, you may use
     '--enable-libgcj' to override the default.

   The following options apply to building 'libgcj'.

General Options
...............

'--enable-java-maintainer-mode'
     By default the 'libjava' build will not attempt to compile the
     '.java' source files to '.class'.  Instead, it will use the
     '.class' files from the source tree.  If you use this option you
     must have executables named 'ecj1' and 'gjavah' in your path for
     use by the build.  You must use this option if you intend to modify
     any '.java' files in 'libjava'.

'--with-java-home=DIRNAME'
     This 'libjava' option overrides the default value of the
     'java.home' system property.  It is also used to set
     'sun.boot.class.path' to 'DIRNAME/lib/rt.jar'.  By default
     'java.home' is set to 'PREFIX' and 'sun.boot.class.path' to
     'DATADIR/java/libgcj-VERSION.jar'.

'--with-ecj-jar=FILENAME'
     This option can be used to specify the location of an external jar
     file containing the Eclipse Java compiler.  A specially modified
     version of this compiler is used by 'gcj' to parse '.java' source
     files.  If this option is given, the 'libjava' build will create
     and install an 'ecj1' executable which uses this jar file at
     runtime.

     If this option is not given, but an 'ecj.jar' file is found in the
     topmost source tree at configure time, then the 'libgcj' build will
     create and install 'ecj1', and will also install the discovered
     'ecj.jar' into a suitable place in the install tree.

     If 'ecj1' is not installed, then the user will have to supply one
     on his path in order for 'gcj' to properly parse '.java' source
     files.  A suitable jar is available from
     <ftp://sourceware.org/pub/java/>.

'--disable-getenv-properties'
     Don't set system properties from 'GCJ_PROPERTIES'.

'--enable-hash-synchronization'
     Use a global hash table for monitor locks.  Ordinarily, 'libgcj''s
     'configure' script automatically makes the correct choice for this
     option for your platform.  Only use this if you know you need the
     library to be configured differently.

'--enable-interpreter'
     Enable the Java interpreter.  The interpreter is automatically
     enabled by default on all platforms that support it.  This option
     is really only useful if you want to disable the interpreter (using
     '--disable-interpreter').

'--disable-java-net'
     Disable java.net.  This disables the native part of java.net only,
     using non-functional stubs for native method implementations.

'--disable-jvmpi'
     Disable JVMPI support.

'--disable-libgcj-bc'
     Disable BC ABI compilation of certain parts of libgcj.  By default,
     some portions of libgcj are compiled with '-findirect-dispatch' and
     '-fno-indirect-classes', allowing them to be overridden at
     run-time.

     If '--disable-libgcj-bc' is specified, libgcj is built without
     these options.  This allows the compile-time linker to resolve
     dependencies when statically linking to libgcj.  However it makes
     it impossible to override the affected portions of libgcj at
     run-time.

'--enable-reduced-reflection'
     Build most of libgcj with '-freduced-reflection'.  This reduces the
     size of libgcj at the expense of not being able to do accurate
     reflection on the classes it contains.  This option is safe if you
     know that code using libgcj will never use reflection on the
     standard runtime classes in libgcj (including using serialization,
     RMI or CORBA).

'--with-ecos'
     Enable runtime eCos target support.

'--without-libffi'
     Don't use 'libffi'.  This will disable the interpreter and JNI
     support as well, as these require 'libffi' to work.

'--enable-libgcj-debug'
     Enable runtime debugging code.

'--enable-libgcj-multifile'
     If specified, causes all '.java' source files to be compiled into
     '.class' files in one invocation of 'gcj'.  This can speed up build
     time, but is more resource-intensive.  If this option is
     unspecified or disabled, 'gcj' is invoked once for each '.java'
     file to compile into a '.class' file.

'--with-libiconv-prefix=DIR'
     Search for libiconv in 'DIR/include' and 'DIR/lib'.

'--enable-sjlj-exceptions'
     Force use of the 'setjmp'/'longjmp'-based scheme for exceptions.
     'configure' ordinarily picks the correct value based on the
     platform.  Only use this option if you are sure you need a
     different setting.

'--with-system-zlib'
     Use installed 'zlib' rather than that included with GCC.

'--with-win32-nlsapi=ansi, unicows or unicode'
     Indicates how MinGW 'libgcj' translates between UNICODE characters
     and the Win32 API.

'--enable-java-home'
     If enabled, this creates a JPackage compatible SDK environment
     during install.  Note that if -enable-java-home is used,
     -with-arch-directory=ARCH must also be specified.

'--with-arch-directory=ARCH'
     Specifies the name to use for the 'jre/lib/ARCH' directory in the
     SDK environment created when -enable-java-home is passed.  Typical
     names for this directory include i386, amd64, ia64, etc.

'--with-os-directory=DIR'
     Specifies the OS directory for the SDK include directory.  This is
     set to auto detect, and is typically 'linux'.

'--with-origin-name=NAME'
     Specifies the JPackage origin name.  This defaults to the 'gcj' in
     java-1.5.0-gcj.

'--with-arch-suffix=SUFFIX'
     Specifies the suffix for the sdk directory.  Defaults to the empty
     string.  Examples include '.x86_64' in
     'java-1.5.0-gcj-1.5.0.0.x86_64'.

'--with-jvm-root-dir=DIR'
     Specifies where to install the SDK. Default is $(prefix)/lib/jvm.

'--with-jvm-jar-dir=DIR'
     Specifies where to install jars.  Default is
     $(prefix)/lib/jvm-exports.

'--with-python-dir=DIR'
     Specifies where to install the Python modules used for aot-compile.
     DIR should not include the prefix used in installation.  For
     example, if the Python modules are to be installed in
     /usr/lib/python2.5/site-packages, then
     -with-python-dir=/lib/python2.5/site-packages should be passed.  If
     this is not specified, then the Python modules are installed in
     $(prefix)/share/python.

'--enable-aot-compile-rpm'
     Adds aot-compile-rpm to the list of installed scripts.

'--enable-browser-plugin'
     Build the gcjwebplugin web browser plugin.

'--enable-static-libjava'
     Build static libraries in libjava.  The default is to only build
     shared libraries.

     'ansi'
          Use the single-byte 'char' and the Win32 A functions natively,
          translating to and from UNICODE when using these functions.
          If unspecified, this is the default.

     'unicows'
          Use the 'WCHAR' and Win32 W functions natively.  Adds
          '-lunicows' to 'libgcj.spec' to link with 'libunicows'.
          'unicows.dll' needs to be deployed on Microsoft Windows 9X
          machines running built executables.  'libunicows.a', an
          open-source import library around Microsoft's 'unicows.dll',
          is obtained from <http://libunicows.sourceforge.net/>, which
          also gives details on getting 'unicows.dll' from Microsoft.

     'unicode'
          Use the 'WCHAR' and Win32 W functions natively.  Does _not_
          add '-lunicows' to 'libgcj.spec'.  The built executables will
          only run on Microsoft Windows NT and above.

AWT-Specific Options
....................

'--with-x'
     Use the X Window System.

'--enable-java-awt=PEER(S)'
     Specifies the AWT peer library or libraries to build alongside
     'libgcj'.  If this option is unspecified or disabled, AWT will be
     non-functional.  Current valid values are 'gtk' and 'xlib'.
     Multiple libraries should be separated by a comma (i.e.
     '--enable-java-awt=gtk,xlib').

'--enable-gtk-cairo'
     Build the cairo Graphics2D implementation on GTK.

'--enable-java-gc=TYPE'
     Choose garbage collector.  Defaults to 'boehm' if unspecified.

'--disable-gtktest'
     Do not try to compile and run a test GTK+ program.

'--disable-glibtest'
     Do not try to compile and run a test GLIB program.

'--with-libart-prefix=PFX'
     Prefix where libart is installed (optional).

'--with-libart-exec-prefix=PFX'
     Exec prefix where libart is installed (optional).

'--disable-libarttest'
     Do not try to compile and run a test libart program.

Overriding 'configure' test results
...................................

Sometimes, it might be necessary to override the result of some
'configure' test, for example in order to ease porting to a new system
or work around a bug in a test.  The toplevel 'configure' script
provides three variables for this:

'build_configargs'
     The contents of this variable is passed to all build 'configure'
     scripts.

'host_configargs'
     The contents of this variable is passed to all host 'configure'
     scripts.

'target_configargs'
     The contents of this variable is passed to all target 'configure'
     scripts.

   In order to avoid shell and 'make' quoting issues for complex
overrides, you can pass a setting for 'CONFIG_SITE' and set variables in
the site file.


File: gccinstall.info,  Node: Building,  Next: Testing,  Prev: Configuration,  Up: Installing GCC

5 Building
**********

Now that GCC is configured, you are ready to build the compiler and
runtime libraries.

   Some commands executed when making the compiler may fail (return a
nonzero status) and be ignored by 'make'.  These failures, which are
often due to files that were not found, are expected, and can safely be
ignored.

   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 '--disable-werror'.

   On certain old systems, defining certain environment variables such
as 'CC' can interfere with the functioning of 'make'.

   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.

   If you build GCC on a BSD system using a directory stored in an old
System V file system, problems may occur in running 'fixincludes' if the
System V file system doesn't support symbolic links.  These problems
result in a failure to fix the declaration of 'size_t' in 'sys/types.h'.
If you find that 'size_t' is a signed type and that type mismatches
occur, this could be the cause.

   The solution is not to use such a directory for building GCC.

   Similarly, when building from SVN or snapshots, or if you modify
'*.l' files, you need the Flex lexical analyzer generator installed.  If
you do not modify '*.l' 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.

   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.

5.1 Building a native compiler
==============================

For a native build, the default configuration is to perform a 3-stage
bootstrap of the compiler when 'make' is invoked.  This will build the
entire GCC system and ensure that it compiles itself correctly.  It can
be disabled with the '--disable-bootstrap' parameter to 'configure', but
bootstrapping is suggested because the compiler will be tested more
completely and could also have better performance.

   The bootstrapping process will complete the following steps:

   * Build tools necessary to build the compiler.

   * 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.

   * Perform a comparison test of the stage2 and stage3 compilers.

   * Build runtime libraries using the stage3 compiler from the previous
     step.

   If you are short on disk space you might consider 'make
bootstrap-lean' 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.

   If you wish to use non-default GCC flags when compiling the stage2
and stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing
'make'.  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.)

     make BOOT_CFLAGS='-O' bootstrap

   You can place non-default optimization flags into 'BOOT_CFLAGS'; they
are less well tested here than the default of '-g -O2', but should still
work.  In a few cases, you may find that you need to specify special
flags such as '-msoft-float' here to complete the bootstrap; or, if the
native compiler miscompiles the stage1 compiler, you may need to work
around this, by choosing 'BOOT_CFLAGS' to avoid the parts of the stage1
compiler that were miscompiled, or by using 'make bootstrap4' to
increase the number of stages of bootstrap.

   'BOOT_CFLAGS' does not apply to bootstrapped target libraries.  Since
these are always compiled with the compiler currently being
bootstrapped, you can use 'CFLAGS_FOR_TARGET' 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 'STAGE1_TFLAGS' to this end.

   If you used the flag '--enable-languages=...' 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
'LANGUAGES' when calling 'make' *does not* work anymore!

   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 'Makefile'.)

   If you do not want to bootstrap your compiler, you can configure with
'--disable-bootstrap'.  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
'powerpc-unknown-linux-gnu' toolchain on a 'powerpc64-unknown-linux-gnu'
host.  In this case, pass '--enable-bootstrap' to the configure script.

   'BUILD_CONFIG' 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 'NAME', top-level 'config/NAME.mk' will be included by the
top-level 'Makefile', bringing in any settings it contains.  The default
'BUILD_CONFIG' can be set using the configure option
'--with-build-config=NAME...'.  Some examples of supported build
configurations are:

'bootstrap-O1'
     Removes any '-O'-started option from 'BOOT_CFLAGS', and adds '-O1'
     to it.  'BUILD_CONFIG=bootstrap-O1' is equivalent to
     'BOOT_CFLAGS='-g -O1''.

'bootstrap-O3'
     Analogous to 'bootstrap-O1'.

'bootstrap-lto'
     Enables Link-Time Optimization for host tools during bootstrapping.
     'BUILD_CONFIG=bootstrap-lto' is equivalent to adding '-flto' to
     'BOOT_CFLAGS'.  This option assumes that the host supports the
     linker plugin (e.g.  GNU ld version 2.21 or later or GNU gold
     version 2.21 or later).

'bootstrap-lto-noplugin'
     This option is similar to 'bootstrap-lto', but is intended for
     hosts that do not support the linker plugin.  Without the linker
     plugin static libraries are not compiled with link-time
     optimizations.  Since the GCC middle end and back end are in
     'libbackend.a' this means that only the front end is actually LTO
     optimized.

'bootstrap-debug'
     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 'contrib/compare-debug' to compare them with the stripped
     stage3 object files.  If 'BOOT_CFLAGS' is overridden so as to not
     enable debug information, stage2 will have it, and stage3 won't.
     This option is enabled by default when GCC bootstrapping is
     enabled, if 'strip' 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.

'bootstrap-debug-big'
     Rather than comparing stripped object files, as in
     'bootstrap-debug', 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 'bootstrap-debug'.

'bootstrap-debug-lean'
     This option saves disk space compared with 'bootstrap-debug-big',
     but at the expense of some recompilation.  Instead of saving the
     dumps of stage2 and stage3 until the final compare, it uses
     '-fcompare-debug' to generate, compare and remove the dumps during
     stage3, repeating the compilation that already took place in
     stage2, whose dumps were not saved.

'bootstrap-debug-lib'
     This option tests executable code invariance over debug information
     generation on target libraries, just like 'bootstrap-debug-lean'
     tests it on host programs.  It builds stage3 libraries with
     '-fcompare-debug', and it can be used along with any of the
     'bootstrap-debug' options above.

     There aren't '-lean' or '-big' 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't
     want to compile stage2 libraries with different options for
     comparison purposes.

'bootstrap-debug-ckovw'
     Arranges for error messages to be issued if the compiler built on
     any stage is run without the option '-fcompare-debug'.  This is
     useful to verify the full '-fcompare-debug' testing coverage.  It
     must be used along with 'bootstrap-debug-lean' and
     'bootstrap-debug-lib'.

'bootstrap-time'
     Arranges for the run time of each program started by the GCC
     driver, built in any stage, to be logged to 'time.log', in the top
     level of the build tree.

5.2 Building a cross compiler
=============================

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.

   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.

   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 '--with-ecj-jar=...'.

   Assuming you have already installed a native copy of GCC and
configured your cross compiler, issue the command 'make', which performs
the following steps:

   * Build host tools necessary to build the compiler.

   * 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.

   * Build the compiler (single stage only).

   * Build runtime libraries using the compiler from the previous step.

   Note that if an error occurs in any step the make process will exit.

   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 'PREFIX/TARGET/bin'.  Here
is a table of the tools you should put in this directory:

'as'
     This should be the cross-assembler.

'ld'
     This should be the cross-linker.

'ar'
     This should be the cross-archiver: a program which can manipulate
     archive files (linker libraries) in the target machine's format.

'ranlib'
     This should be a program to construct a symbol table in an archive
     file.

   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.

   The easiest way to provide these files is to build the Binutils
package.  Configure it with the same '--host' and '--target' 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.

   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 '--with-sysroot' or
'--with-headers' and '--with-libs'.  Many targets also require "start
files" such as 'crt0.o' and 'crtn.o' which are linked into each
executable.  There may be several alternatives for 'crt0.o', for use
with profiling or other compilation options.  Check your target's
definition of 'STARTFILE_SPEC' to find out what start files it uses.

5.3 Building in parallel
========================

GNU Make 3.80 and above, which is necessary to build GCC, support
building in parallel.  To activate this, you can use 'make -j 2' instead
of 'make'.  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.

5.4 Building the Ada compiler
=============================

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
'gnatmake' and 'gnatlink', since the Ada front end is written in Ada and
uses some GNAT-specific extensions.

   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.

   'configure' 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 '--enable-languages' is used to disable
building the Ada front end.

   'ADA_INCLUDE_PATH' and 'ADA_OBJECT_PATH' 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 'gnatls -v' lists only one explicit path in each
section.

5.5 Building with profile feedback
==================================

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 'make
profiledbootstrap'.

   When 'make profiledbootstrap' is run, it will first build a 'stage1'
compiler.  This compiler is used to build a 'stageprofile' compiler
instrumented to collect execution counts of instruction and branch
probabilities.  Then runtime libraries are compiled with profile
collected.  Finally a 'stagefeedback' compiler is built using the
information collected.

   Unlike standard bootstrap, several additional restrictions apply.
The compiler used to build 'stage1' needs to support a 64-bit integral
type.  It is recommended to only use GCC for this.


File: gccinstall.info,  Node: Testing,  Next: Final install,  Prev: Building,  Up: Installing GCC

6 Installing GCC: Testing
*************************

Before you install GCC, we encourage you to run the testsuites and to
compare your results with results from a similar configuration that have
been submitted to the gcc-testresults mailing list.  Some of these
archived results are linked from the build status lists at
<http://gcc.gnu.org/buildstat.html>, although not everyone who reports a
successful build runs the testsuites and submits the results.  This step
is optional and may require you to download additional software, but it
can give you confidence in your new GCC installation or point out
problems before you install and start using your new GCC.

   First, you must have downloaded the testsuites.  These are part of
the full distribution, but if you downloaded the "core" compiler plus
any front ends, you must download the testsuites separately.

   Second, you must have the testing tools installed.  This includes
DejaGnu, Tcl, and Expect; the DejaGnu site has links to these.

   If the directories where 'runtest' and 'expect' were installed are
not in the 'PATH', you may need to set the following environment
variables appropriately, as in the following example (which assumes that
DejaGnu has been installed under '/usr/local'):

     TCL_LIBRARY = /usr/local/share/tcl8.0
     DEJAGNULIBS = /usr/local/share/dejagnu

   (On systems such as Cygwin, these paths are required to be actual
paths, not mounts or links; presumably this is due to some lack of
portability in the DejaGnu code.)

   Finally, you can run the testsuite (which may take a long time):
     cd OBJDIR; make -k check

   This will test various components of GCC, such as compiler front ends
and runtime libraries.  While running the testsuite, DejaGnu might emit
some harmless messages resembling 'WARNING: Couldn't find the global
config file.' or 'WARNING: Couldn't find tool init file' that can be
ignored.

   If you are testing a cross-compiler, you may want to run the
testsuite on a simulator as described at
<http://gcc.gnu.org/simtest-howto.html>.

6.1 How can you run the testsuite on selected tests?
====================================================

In order to run sets of tests selectively, there are targets 'make
check-gcc' and language specific 'make check-c', 'make check-c++', 'make
check-fortran', 'make check-java', 'make check-ada', 'make check-objc',
'make check-obj-c++', 'make check-lto' in the 'gcc' subdirectory of the
object directory.  You can also just run 'make check' in a subdirectory
of the object directory.

   A more selective way to just run all 'gcc' execute tests in the
testsuite is to use

     make check-gcc RUNTESTFLAGS="execute.exp OTHER-OPTIONS"

   Likewise, in order to run only the 'g++' "old-deja" tests in the
testsuite with filenames matching '9805*', you would use

     make check-g++ RUNTESTFLAGS="old-deja.exp=9805* OTHER-OPTIONS"

   The '*.exp' files are located in the testsuite directories of the GCC
source, the most important ones being 'compile.exp', 'execute.exp',
'dg.exp' and 'old-deja.exp'.  To get a list of the possible '*.exp'
files, pipe the output of 'make check' into a file and look at the
'Running ... .exp' lines.

6.2 Passing options and running multiple testsuites
===================================================

You can pass multiple options to the testsuite using the
'--target_board' option of DejaGNU, either passed as part of
'RUNTESTFLAGS', or directly to 'runtest' if you prefer to work outside
the makefiles.  For example,

     make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"

   will run the standard 'g++' testsuites ("unix" is the target name for
a standard native testsuite situation), passing '-O3 -fmerge-constants'
to the compiler on every test, i.e., slashes separate options.

   You can run the testsuites multiple times using combinations of
options with a syntax similar to the brace expansion of popular shells:

     ..."--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}"

   (Note the empty option caused by the trailing comma in the final
group.)  The following will run each testsuite eight times using the
'arm-sim' target, as if you had specified all possible combinations
yourself:

     --target_board='arm-sim/-mhard-float/-O1 \
                     arm-sim/-mhard-float/-O2 \
                     arm-sim/-mhard-float/-O3 \
                     arm-sim/-mhard-float \
                     arm-sim/-msoft-float/-O1 \
                     arm-sim/-msoft-float/-O2 \
                     arm-sim/-msoft-float/-O3 \
                     arm-sim/-msoft-float'

   They can be combined as many times as you wish, in arbitrary ways.
This list:

     ..."--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}"

   will generate four combinations, all involving '-Wextra'.

   The disadvantage to this method is that the testsuites are run in
serial, which is a waste on multiprocessor systems.  For users with GNU
Make and a shell which performs brace expansion, you can run the
testsuites in parallel by having the shell perform the combinations and
'make' do the parallel runs.  Instead of using '--target_board', use a
special makefile target:

     make -jN check-TESTSUITE//TEST-TARGET/OPTION1/OPTION2/...

   For example,

     make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}

   will run three concurrent "make-gcc" testsuites, eventually testing
all ten combinations as described above.  Note that this is currently
only supported in the 'gcc' subdirectory.  (To see how this works, try
typing 'echo' before the example given here.)

6.3 Additional testing for Java Class Libraries
===============================================

The Java runtime tests can be executed via 'make check' in the
'TARGET/libjava/testsuite' directory in the build tree.

   The Mauve Project provides a suite of tests for the Java Class
Libraries.  This suite can be run as part of libgcj testing by placing
the Mauve tree within the libjava testsuite at
'libjava/testsuite/libjava.mauve/mauve', or by specifying the location
of that tree when invoking 'make', as in 'make MAUVEDIR=~/mauve check'.

6.4 How to interpret test results
=================================

The result of running the testsuite are various '*.sum' and '*.log'
files in the testsuite subdirectories.  The '*.log' files contain a
detailed log of the compiler invocations and the corresponding results,
the '*.sum' files summarize the results.  These summaries contain status
codes for all tests:

   * PASS: the test passed as expected
   * XPASS: the test unexpectedly passed
   * FAIL: the test unexpectedly failed
   * XFAIL: the test failed as expected
   * UNSUPPORTED: the test is not supported on this platform
   * ERROR: the testsuite detected an error
   * WARNING: the testsuite detected a possible problem

   It is normal for some tests to report unexpected failures.  At the
current time the testing harness does not allow fine grained control
over whether or not a test is expected to fail.  This problem should be
fixed in future releases.

6.5 Submitting test results
===========================

If you want to report the results to the GCC project, use the
'contrib/test_summary' shell script.  Start it in the OBJDIR with

     SRCDIR/contrib/test_summary -p your_commentary.txt \
         -m gcc-testresults@gcc.gnu.org |sh

   This script uses the 'Mail' program to send the results, so make sure
it is in your 'PATH'.  The file 'your_commentary.txt' is prepended to
the testsuite summary and should contain any special remarks you have on
your results or your build environment.  Please do not edit the
testsuite result block or the subject line, as these messages may be
automatically processed.


File: gccinstall.info,  Node: Final install,  Prev: Testing,  Up: Installing GCC

7 Installing GCC: Final installation
************************************

Now that GCC has been built (and optionally tested), you can install it
with
     cd OBJDIR && make install

   We strongly recommend to install into a target directory where there
is no previous version of GCC present.  Also, the GNAT runtime should
not be stripped, as this would break certain features of the debugger
that depend on this debugging information (catching Ada exceptions for
instance).

   That step completes the installation of GCC; user level binaries can
be found in 'PREFIX/bin' where PREFIX is the value you specified with
the '--prefix' to configure (or '/usr/local' by default).  (If you
specified '--bindir', that directory will be used instead; otherwise, if
you specified '--exec-prefix', 'EXEC-PREFIX/bin' will be used.)  Headers
for the C++ and Java libraries are installed in 'PREFIX/include';
libraries in 'LIBDIR' (normally 'PREFIX/lib'); internal parts of the
compiler in 'LIBDIR/gcc' and 'LIBEXECDIR/gcc'; documentation in info
format in 'INFODIR' (normally 'PREFIX/info').

   When installing cross-compilers, GCC's executables are not only
installed into 'BINDIR', that is, 'EXEC-PREFIX/bin', but additionally
into 'EXEC-PREFIX/TARGET-ALIAS/bin', if that directory exists.
Typically, such "tooldirs" hold target-specific binutils, including
assembler and linker.

   Installation into a temporary staging area or into a 'chroot' jail
can be achieved with the command

     make DESTDIR=PATH-TO-ROOTDIR install

where PATH-TO-ROOTDIR is the absolute path of a directory relative to
which all installation paths will be interpreted.  Note that the
directory specified by 'DESTDIR' need not exist yet; it will be created
if necessary.

   There is a subtle point with tooldirs and 'DESTDIR': If you relocate
a cross-compiler installation with e.g. 'DESTDIR=ROOTDIR', then the
directory 'ROOTDIR/EXEC-PREFIX/TARGET-ALIAS/bin' will be filled with
duplicated GCC executables only if it already exists, it will not be
created otherwise.  This is regarded as a feature, not as a bug, because
it gives slightly more control to the packagers using the 'DESTDIR'
feature.

   You can install stripped programs and libraries with

     make install-strip

   If you are bootstrapping a released version of GCC then please
quickly review the build status page for your release, available from
<http://gcc.gnu.org/buildstat.html>.  If your system is not listed for
the version of GCC that you built, send a note to <gcc@gcc.gnu.org>
indicating that you successfully built and installed GCC.  Include the
following information:

   * Output from running 'SRCDIR/config.guess'.  Do not send that file
     itself, just the one-line output from running it.

   * The output of 'gcc -v' for your newly installed 'gcc'.  This tells
     us which version of GCC you built and the options you passed to
     configure.

   * Whether you enabled all languages or a subset of them.  If you used
     a full distribution then this information is part of the configure
     options in the output of 'gcc -v', but if you downloaded the "core"
     compiler plus additional front ends then it isn't apparent which
     ones you built unless you tell us about it.

   * If the build was for GNU/Linux, also include:
        * The distribution name and version (e.g., Red Hat 7.1 or Debian
          2.2.3); this information should be available from
          '/etc/issue'.

        * The version of the Linux kernel, available from 'uname
          --version' or 'uname -a'.

        * The version of glibc you used; for RPM-based systems like Red
          Hat, Mandrake, and SuSE type 'rpm -q glibc' to get the glibc
          version, and on systems like Debian and Progeny use 'dpkg -l
          libc6'.
     For other systems, you can include similar information if you think
     it is relevant.

   * Any other information that you think would be useful to people
     building GCC on the same configuration.  The new entry in the build
     status list will include a link to the archived copy of your
     message.

   We'd also like to know if the *note host/target specific installation
notes: Specific. didn't include your host/target information or if that
information is incomplete or out of date.  Send a note to
<gcc@gcc.gnu.org> detailing how the information should be changed.

   If you find a bug, please report it following the bug reporting
guidelines.

   If you want to print the GCC manuals, do 'cd OBJDIR; make dvi'.  You
will need to have 'texi2dvi' (version at least 4.7) and TeX installed.
This creates a number of '.dvi' files in subdirectories of 'OBJDIR';
these may be converted for printing with programs such as 'dvips'.
Alternately, by using 'make pdf' in place of 'make dvi', you can create
documentation in the form of '.pdf' files; this requires 'texi2pdf',
which is included with Texinfo version 4.8 and later.  You can also buy
printed manuals from the Free Software Foundation, though such manuals
may not be for the most recent version of GCC.

   If you would like to generate online HTML documentation, do 'cd
OBJDIR; make html' and HTML will be generated for the gcc manuals in
'OBJDIR/gcc/HTML'.


File: gccinstall.info,  Node: Binaries,  Next: Specific,  Prev: Installing GCC,  Up: Top

8 Installing GCC: Binaries
**************************

We are often asked about pre-compiled versions of GCC.  While we cannot
provide these for all platforms, below you'll find links to binaries for
various platforms where creating them by yourself is not easy due to
various reasons.

   Please note that we did not create these binaries, nor do we support
them.  If you have any problems installing them, please contact their
makers.

   * AIX:
        * Bull's Open Source Software Archive for for AIX 5L and AIX 6;

        * AIX Open Source Packages (AIX5L AIX 6.1 AIX 7.1).

   * DOS--DJGPP.

   * HP-UX:
        * HP-UX Porting Center;

   * Solaris 2 (SPARC, Intel):
        * OpenCSW

        * TGCware

   * Microsoft Windows:
        * The Cygwin project;
        * The MinGW and mingw-w64 projects.

   * OpenPKG offers binaries for quite a number of platforms.

   * The GFortran Wiki has links to GNU Fortran binaries for several
     platforms.


File: gccinstall.info,  Node: Specific,  Next: Old,  Prev: Binaries,  Up: Top

9 Host/target specific installation notes for GCC
*************************************************

Please read this document carefully _before_ installing the GNU Compiler
Collection on your machine.

   Note that this list of install notes is _not_ a list of supported
hosts or targets.  Not all supported hosts and targets are listed here,
only the ones that require host-specific or target-specific information
have to.

aarch64*-*-*
============

Binutils pre 2.24 does not have support for selecting '-mabi' and does
not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
not support option '-mabi=ilp32'.

   To enable a workaround for the Cortex-A53 erratum number 835769 by
default (for all CPUs regardless of -mcpu option given) at configure
time use the '--enable-fix-cortex-a53-835769' option.  This will enable
the fix by default and can be explicitly disabled during compilation by
passing the '-mno-fix-cortex-a53-835769' option.  Conversely,
'--disable-fix-cortex-a53-835769' will disable the workaround by
default.  The workaround is disabled by default if neither of
'--enable-fix-cortex-a53-835769' or '--disable-fix-cortex-a53-835769' is
given at configure time.

   To enable a workaround for the Cortex-A53 erratum number 843419 by
default (for all CPUs regardless of -mcpu option given) at configure
time use the '--enable-fix-cortex-a53-843419' option.  This workaround
is applied at link time.  Enabling the workaround will cause GCC to pass
the relevant option to the linker.  It can be explicitly disabled during
compilation by passing the '-mno-fix-cortex-a53-843419' option.
Conversely, '--disable-fix-cortex-a53-843419' will disable the
workaround by default.  The workaround is disabled by default if neither
of '--enable-fix-cortex-a53-843419' or '--disable-fix-cortex-a53-843419'
is given at configure time.

alpha*-*-*
==========

This section contains general configuration information for all
alpha-based platforms using ELF (in particular, ignore this section for
DEC OSF/1, Digital UNIX and Tru64 UNIX).  In addition to reading this
section, please read all other sections that match your target.

   We require binutils 2.11.2 or newer.  Previous binutils releases had
a number of problems with DWARF 2 debugging information, not the least
of which is incorrect linking of shared libraries.

alpha*-dec-osf5.1
=================

Systems using processors that implement the DEC Alpha architecture and
are running the DEC/Compaq/HP Unix (DEC OSF/1, Digital UNIX, or
Compaq/HP Tru64 UNIX) operating system, for example the DEC Alpha AXP
systems.

   Support for Tru64 UNIX V5.1 has been removed in GCC 4.8.  As of GCC
4.6, support for Tru64 UNIX V4.0 and V5.0 has been removed.  As of GCC
3.2, versions before 'alpha*-dec-osf4' are no longer supported.  (These
are the versions which identify themselves as DEC OSF/1.)

amd64-*-solaris2.1[0-9]*
========================

This is a synonym for 'x86_64-*-solaris2.1[0-9]*'.

arc-*-elf32
===========

Use 'configure --target=arc-elf32 --with-cpu=CPU
--enable-languages="c,c++"' to configure GCC, with CPU being one of
'arc600', 'arc601', or 'arc700'.

arc-linux-uclibc
================

Use 'configure --target=arc-linux-uclibc --with-cpu=arc700
--enable-languages="c,c++"' to configure GCC.

arm-*-eabi
==========

ARM-family processors.  Subtargets that use the ELF object format
require GNU binutils 2.13 or newer.  Such subtargets include:
'arm-*-netbsdelf', 'arm-*-*linux-*' and 'arm-*-rtemseabi'.

   Building the Ada frontend commonly fails (an infinite loop executing
'xsinfo') if the host compiler is GNAT 4.8.  Host compilers built from
the GNAT 4.6, 4.9 or 5 release branches are known to succeed.

avr
===

ATMEL AVR-family micro controllers.  These are used in embedded
applications.  There are no standard Unix configurations.  *Note AVR
Options: (gcc)AVR Options, for the list of supported MCU types.

   Use 'configure --target=avr --enable-languages="c"' to configure GCC.

   Further installation notes and other useful information about AVR
tools can also be obtained from:

   * http://www.nongnu.org/avr/
   * http://www.amelek.gda.pl/avr/

   We _strongly_ recommend using binutils 2.13 or newer.

   The following error:
     Error: register required

   indicates that you should upgrade to a newer version of the binutils.

Blackfin
========

The Blackfin processor, an Analog Devices DSP. *Note Blackfin Options:
(gcc)Blackfin Options,

   More information, and a version of binutils with support for this
processor, is available at <http://blackfin.uclinux.org>

CR16
====

The CR16 CompactRISC architecture is a 16-bit architecture.  This
architecture is used in embedded applications.

   *Note CR16 Options: (gcc)CR16 Options,

   Use 'configure --target=cr16-elf --enable-languages=c,c++' to
configure GCC for building a CR16 elf cross-compiler.

   Use 'configure --target=cr16-uclinux --enable-languages=c,c++' to
configure GCC for building a CR16 uclinux cross-compiler.

CRIS
====

CRIS is the CPU architecture in Axis Communications ETRAX
system-on-a-chip series.  These are used in embedded applications.

   *Note CRIS Options: (gcc)CRIS Options, for a list of CRIS-specific
options.

   There are a few different CRIS targets:
'cris-axis-elf'
     Mainly for monolithic embedded systems.  Includes a multilib for
     the 'v10' core used in 'ETRAX 100 LX'.
'cris-axis-linux-gnu'
     A GNU/Linux port for the CRIS architecture, currently targeting
     'ETRAX 100 LX' by default.

   For 'cris-axis-elf' you need binutils 2.11 or newer.  For
'cris-axis-linux-gnu' you need binutils 2.12 or newer.

   Pre-packaged tools can be obtained from
<ftp://ftp.axis.com/pub/axis/tools/cris/compiler-kit/>.  More
information about this platform is available at
<http://developer.axis.com/>.

DOS
===

Please have a look at the binaries page.

   You cannot install GCC by itself on MSDOS; it will not compile under
any MSDOS compiler except itself.  You need to get the complete
compilation package DJGPP, which includes binaries as well as sources,
and includes all the necessary compilation tools and libraries.

epiphany-*-elf
==============

Adapteva Epiphany.  This configuration is intended for embedded systems.

*-*-freebsd*
============

Support for FreeBSD 1 was discontinued in GCC 3.2.  Support for FreeBSD
2 (and any mutant a.out variants of FreeBSD 3) was discontinued in GCC
4.0.

   In order to better utilize FreeBSD base system functionality and
match the configuration of the system compiler, GCC 4.5 and above as
well as GCC 4.4 past 2010-06-20 leverage SSP support in libc (which is
present on FreeBSD 7 or later) and the use of '__cxa_atexit' by default
(on FreeBSD 6 or later).  The use of 'dl_iterate_phdr' inside
'libgcc_s.so.1' and boehm-gc (on FreeBSD 7 or later) is enabled by GCC
4.5 and above.

   We support FreeBSD using the ELF file format with DWARF 2 debugging
for all CPU architectures.  You may use '-gstabs' instead of '-g', if
you really want the old debugging format.  There are no known issues
with mixing object files and libraries with different debugging formats.
Otherwise, this release of GCC should now match more of the
configuration used in the stock FreeBSD configuration of GCC.  In
particular, '--enable-threads' is now configured by default.  However,
as a general user, do not attempt to replace the system compiler with
this release.  Known to bootstrap and check with good results on FreeBSD
7.2-STABLE.  In the past, known to bootstrap and check with good results
on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3, 4.4, 4.5, 4.8, 4.9 and 5-CURRENT.

   The version of binutils installed in '/usr/bin' probably works with
this release of GCC.  Bootstrapping against the latest GNU binutils
and/or the version found in '/usr/ports/devel/binutils' has been known
to enable additional features and improve overall testsuite results.
However, it is currently known that boehm-gc (which itself is required
for java) may not configure properly on FreeBSD prior to the FreeBSD 7.0
release with GNU binutils after 2.16.1.

ft32-*-elf
==========

The FT32 processor.  This configuration is intended for embedded
systems.

h8300-hms
=========

Renesas H8/300 series of processors.

   Please have a look at the binaries page.

   The calling convention and structure layout has changed in release
2.6.  All code must be recompiled.  The calling convention now passes
the first three arguments in function calls in registers.  Structures
are no longer a multiple of 2 bytes.

hppa*-hp-hpux*
==============

Support for HP-UX version 9 and older was discontinued in GCC 3.4.

   We require using gas/binutils on all hppa platforms.  Version 2.19 or
later is recommended.

   It may be helpful to configure GCC with the '--with-gnu-as' and
'--with-as=...' options to ensure that GCC can find GAS.

   The HP assembler should not be used with GCC. It is rarely tested and
may not work.  It shouldn't be used with any languages other than C due
to its many limitations.

   Specifically, '-g' does not work (HP-UX uses a peculiar debugging
format which GCC does not know about).  It also inserts timestamps into
each object file it creates, causing the 3-stage comparison test to fail
during a bootstrap.  You should be able to continue by saying 'make
all-host all-target' after getting the failure from 'make'.

   Various GCC features are not supported.  For example, it does not
support weak symbols or alias definitions.  As a result, explicit
template instantiations are required when using C++.  This makes it
difficult if not impossible to build many C++ applications.

   There are two default scheduling models for instructions.  These are
PROCESSOR_7100LC and PROCESSOR_8000.  They are selected from the pa-risc
architecture specified for the target machine when configuring.
PROCESSOR_8000 is the default.  PROCESSOR_7100LC is selected when the
target is a 'hppa1*' machine.

   The PROCESSOR_8000 model is not well suited to older processors.
Thus, it is important to completely specify the machine architecture
when configuring if you want a model other than PROCESSOR_8000.  The
macro TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different
default scheduling model is desired.

   As of GCC 4.0, GCC uses the UNIX 95 namespace for HP-UX 10.10 through
11.00, and the UNIX 98 namespace for HP-UX 11.11 and later.  This
namespace change might cause problems when bootstrapping with an earlier
version of GCC or the HP compiler as essentially the same namespace is
required for an entire build.  This problem can be avoided in a number
of ways.  With HP cc, 'UNIX_STD' can be set to '95' or '98'.  Another
way is to add an appropriate set of predefines to 'CC'.  The description
for the 'munix=' option contains a list of the predefines used with each
standard.

   More specific information to 'hppa*-hp-hpux*' targets follows.

hppa*-hp-hpux10
===============

For hpux10.20, we _highly_ recommend you pick up the latest sed patch
'PHCO_19798' from HP.

   The C++ ABI has changed incompatibly in GCC 4.0.  COMDAT subspaces
are used for one-only code and data.  This resolves many of the previous
problems in using C++ on this target.  However, the ABI is not
compatible with the one implemented under HP-UX 11 using secondary
definitions.

hppa*-hp-hpux11
===============

GCC 3.0 and up support HP-UX 11.  GCC 2.95.x is not supported and cannot
be used to compile GCC 3.0 and up.

   The libffi and libjava libraries haven't been ported to 64-bit
HP-UX and don't build.

   Refer to binaries for information about obtaining precompiled GCC
binaries for HP-UX.  Precompiled binaries must be obtained to build the
Ada language as it can't be bootstrapped using C.  Ada is only available
for the 32-bit PA-RISC runtime.

   Starting with GCC 3.4 an ISO C compiler is required to bootstrap.
The bundled compiler supports only traditional C; you will need either
HP's unbundled compiler, or a binary distribution of GCC.

   It is possible to build GCC 3.3 starting with the bundled HP
compiler, but the process requires several steps.  GCC 3.3 can then be
used to build later versions.  The fastjar program contains ISO C code
and can't be built with the HP bundled compiler.  This problem can be
avoided by not building the Java language.  For example, use the
'--enable-languages="c,c++,f77,objc"' option in your configure command.

   There are several possible approaches to building the distribution.
Binutils can be built first using the HP tools.  Then, the GCC
distribution can be built.  The second approach is to build GCC first
using the HP tools, then build binutils, then rebuild GCC.  There have
been problems with various binary distributions, so it is best not to
start from a binary distribution.

   On 64-bit capable systems, there are two distinct targets.  Different
installation prefixes must be used if both are to be installed on the
same system.  The 'hppa[1-2]*-hp-hpux11*' target generates code for the
32-bit PA-RISC runtime architecture and uses the HP linker.  The
'hppa64-hp-hpux11*' target generates 64-bit code for the PA-RISC 2.0
architecture.

   The script config.guess now selects the target type based on the
compiler detected during configuration.  You must define 'PATH' or 'CC'
so that configure finds an appropriate compiler for the initial
bootstrap.  When 'CC' is used, the definition should contain the options
that are needed whenever 'CC' is used.

   Specifically, options that determine the runtime architecture must be
in 'CC' to correctly select the target for the build.  It is also
convenient to place many other compiler options in 'CC'.  For example,
'CC="cc -Ac +DA2.0W -Wp,-H16376 -D_CLASSIC_TYPES -D_HPUX_SOURCE"' can be
used to bootstrap the GCC 3.3 branch with the HP compiler in 64-bit
K&R/bundled mode.  The '+DA2.0W' option will result in the automatic
selection of the 'hppa64-hp-hpux11*' target.  The macro definition table
of cpp needs to be increased for a successful build with the HP
compiler.  _CLASSIC_TYPES and _HPUX_SOURCE need to be defined when
building with the bundled compiler, or when using the '-Ac' option.
These defines aren't necessary with '-Ae'.

   It is best to explicitly configure the 'hppa64-hp-hpux11*' target
with the '--with-ld=...' option.  This overrides the standard search for
ld.  The two linkers supported on this target require different
commands.  The default linker is determined during configuration.  As a
result, it's not possible to switch linkers in the middle of a GCC
build.  This has been reported to sometimes occur in unified builds of
binutils and GCC.

   A recent linker patch must be installed for the correct operation of
GCC 3.3 and later.  'PHSS_26559' and 'PHSS_24304' are the oldest linker
patches that are known to work.  They are for HP-UX 11.00 and 11.11,
respectively.  'PHSS_24303', the companion to 'PHSS_24304', might be
usable but it hasn't been tested.  These patches have been superseded.
Consult the HP patch database to obtain the currently recommended linker
patch for your system.

   The patches are necessary for the support of weak symbols on the
32-bit port, and for the running of initializers and finalizers.  Weak
symbols are implemented using SOM secondary definition symbols.  Prior
to HP-UX 11, there are bugs in the linker support for secondary symbols.
The patches correct a problem of linker core dumps creating shared
libraries containing secondary symbols, as well as various other linking
issues involving secondary symbols.

   GCC 3.3 uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capabilities to
run initializers and finalizers on the 64-bit port.  The 32-bit port
uses the linker '+init' and '+fini' options for the same purpose.  The
patches correct various problems with the +init/+fini options, including
program core dumps.  Binutils 2.14 corrects a problem on the 64-bit port
resulting from HP's non-standard use of the .init and .fini sections for
array initializers and finalizers.

   Although the HP and GNU linkers are both supported for the
'hppa64-hp-hpux11*' target, it is strongly recommended that the HP
linker be used for link editing on this target.

   At this time, the GNU linker does not support the creation of long
branch stubs.  As a result, it can't successfully link binaries
containing branch offsets larger than 8 megabytes.  In addition, there
are problems linking shared libraries, linking executables with
'-static', and with dwarf2 unwind and exception support.  It also
doesn't provide stubs for internal calls to global functions in shared
libraries, so these calls can't be overloaded.

   The HP dynamic loader does not support GNU symbol versioning, so
symbol versioning is not supported.  It may be necessary to disable
symbol versioning with '--disable-symvers' when using GNU ld.

   POSIX threads are the default.  The optional DCE thread library is
not supported, so '--enable-threads=dce' does not work.

*-*-linux-gnu
=============

Versions of libstdc++-v3 starting with 3.2.1 require bug fixes present
in glibc 2.2.5 and later.  More information is available in the
libstdc++-v3 documentation.

i?86-*-linux*
=============

As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
See bug 10877 for more information.

   If you receive Signal 11 errors when building on GNU/Linux, then it
is possible you have a hardware problem.  Further information on this
can be found on www.bitwizard.nl.

i?86-*-solaris2.10
==================

Use this for Solaris 10 or later on x86 and x86-64 systems.  Starting
with GCC 4.7, there is also a 64-bit 'amd64-*-solaris2.1[0-9]*' or
'x86_64-*-solaris2.1[0-9]*' configuration that corresponds to
'sparcv9-sun-solaris2*'.

   It is recommended that you configure GCC to use the GNU assembler.
The versions included in Solaris 10, from GNU binutils 2.15 (in
'/usr/sfw/bin/gas'), and Solaris 11, from GNU binutils 2.19 or newer
(also available as '/usr/bin/gas' and '/usr/gnu/bin/as'), work fine.
Please note that the current version, from GNU binutils 2.26, only works
on Solaris 12 when using the Solaris linker.  On Solaris 10 and 11, you
either have to wait for GNU binutils 2.26.1 or newer, or stay with GNU
binutils 2.25.1.  Recent versions of the Solaris assembler in
'/usr/ccs/bin/as' work almost as well, though.

   For linking, the Solaris linker, is preferred.  If you want to use
the GNU linker instead, note that due to a packaging bug the version in
Solaris 10, from GNU binutils 2.15 (in '/usr/sfw/bin/gld'), cannot be
used, while the version in Solaris 11, from GNU binutils 2.19 or newer
(also in '/usr/gnu/bin/ld' and '/usr/bin/gld'), works, as does the
latest version, from GNU binutils 2.26.

   To use GNU 'as', configure with the options '--with-gnu-as
--with-as=/usr/sfw/bin/gas'.  It may be necessary to configure with
'--without-gnu-ld --with-ld=/usr/ccs/bin/ld' to guarantee use of Sun
'ld'.

ia64-*-linux
============

IA-64 processor (also known as IPF, or Itanium Processor Family) running
GNU/Linux.

   If you are using the installed system libunwind library with
'--with-system-libunwind', then you must use libunwind 0.98 or later.

   None of the following versions of GCC has an ABI that is compatible
with any of the other versions in this list, with the exception that Red
Hat 2.96 and Trillian 000171 are compatible with each other: 3.1, 3.0.2,
3.0.1, 3.0, Red Hat 2.96, and Trillian 000717.  This primarily affects
C++ programs and programs that create shared libraries.  GCC 3.1 or
later is recommended for compiling linux, the kernel.  As of version 3.1
GCC is believed to be fully ABI compliant, and hence no more major ABI
changes are expected.

ia64-*-hpux*
============

Building GCC on this target requires the GNU Assembler.  The bundled HP
assembler will not work.  To prevent GCC from using the wrong assembler,
the option '--with-gnu-as' may be necessary.

   The GCC libunwind library has not been ported to HPUX.  This means
that for GCC versions 3.2.3 and earlier, '--enable-libunwind-exceptions'
is required to build GCC.  For GCC 3.3 and later, this is the default.
For gcc 3.4.3 and later, '--enable-libunwind-exceptions' is removed and
the system libunwind library will always be used.

*-ibm-aix*
==========

Support for AIX version 3 and older was discontinued in GCC 3.4.
Support for AIX version 4.2 and older was discontinued in GCC 4.5.

   "out of memory" bootstrap failures may indicate a problem with
process resource limits (ulimit).  Hard limits are configured in the
'/etc/security/limits' system configuration file.

   GCC 4.9 and above require a C++ compiler for bootstrap.  IBM VAC++ /
xlC cannot bootstrap GCC. xlc can bootstrap an older version of GCC and
G++ can bootstrap recent releases of GCC.

   GCC can bootstrap with recent versions of IBM XLC, but bootstrapping
with an earlier release of GCC is recommended.  Bootstrapping with XLC
requires a larger data segment, which can be enabled through the
LDR_CNTRL environment variable, e.g.,

     % LDR_CNTRL=MAXDATA=0x50000000
     % export LDR_CNTRL

   One can start with a pre-compiled version of GCC to build from
sources.  One may delete GCC's "fixed" header files when starting with a
version of GCC built for an earlier release of AIX.

   To speed up the configuration phases of bootstrapping and installing
GCC, one may use GNU Bash instead of AIX '/bin/sh', e.g.,

     % CONFIG_SHELL=/opt/freeware/bin/bash
     % export CONFIG_SHELL

   and then proceed as described in the build instructions, where we
strongly recommend specifying an absolute path to invoke
SRCDIR/configure.

   Because GCC on AIX is built as a 32-bit executable by default,
(although it can generate 64-bit programs) the GMP and MPFR libraries
required by gfortran must be 32-bit libraries.  Building GMP and MPFR as
static archive libraries works better than shared libraries.

   Errors involving 'alloca' when building GCC generally are due to an
incorrect definition of 'CC' in the Makefile or mixing files compiled
with the native C compiler and GCC.  During the stage1 phase of the
build, the native AIX compiler *must* be invoked as 'cc' (not 'xlc').
Once 'configure' has been informed of 'xlc', one needs to use 'make
distclean' to remove the configure cache files and ensure that 'CC'
environment variable does not provide a definition that will confuse
'configure'.  If this error occurs during stage2 or later, then the
problem most likely is the version of Make (see above).

   The native 'as' and 'ld' are recommended for bootstrapping on AIX.
The GNU Assembler, GNU Linker, and GNU Binutils version 2.20 is the
minimum level that supports bootstrap on AIX 5.  The GNU Assembler has
not been updated to support AIX 6 or AIX 7.  The native AIX tools do
interoperate with GCC.

   AIX 7.1 added partial support for DWARF debugging, but full support
requires AIX 7.1 TL03 SP7 that supports additional DWARF sections and
fixes a bug in the assembler.  AIX 7.1 TL03 SP5 distributed a version of
libm.a missing important symbols; a fix for IV77796 will be included in
SP6.

   AIX 5.3 TL10, AIX 6.1 TL05 and AIX 7.1 TL00 introduced an AIX
assembler change that sometimes produces corrupt assembly files causing
AIX linker errors.  The bug breaks GCC bootstrap on AIX and can cause
compilation failures with existing GCC installations.  An AIX iFix for
AIX 5.3 is available (APAR IZ98385 for AIX 5.3 TL10, APAR IZ98477 for
AIX 5.3 TL11 and IZ98134 for AIX 5.3 TL12).  AIX 5.3 TL11 SP8, AIX 5.3
TL12 SP5, AIX 6.1 TL04 SP11, AIX 6.1 TL05 SP7, AIX 6.1 TL06 SP6, AIX 6.1
TL07 and AIX 7.1 TL01 should include the fix.

   Building 'libstdc++.a' requires a fix for an AIX Assembler bug APAR
IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1).  It also requires a fix for
another AIX Assembler bug and a co-dependent AIX Archiver fix referenced
as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)

   'libstdc++' in GCC 3.4 increments the major version number of the
shared object and GCC installation places the 'libstdc++.a' shared
library in a common location which will overwrite the and GCC 3.3
version of the shared library.  Applications either need to be re-linked
against the new shared library or the GCC 3.1 and GCC 3.3 versions of
the 'libstdc++' shared object needs to be available to the AIX runtime
loader.  The GCC 3.1 'libstdc++.so.4', if present, and GCC 3.3
'libstdc++.so.5' shared objects can be installed for runtime dynamic
loading using the following steps to set the 'F_LOADONLY' flag in the
shared object for _each_ multilib 'libstdc++.a' installed:

   Extract the shared objects from the currently installed 'libstdc++.a'
archive:
     % ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5

   Enable the 'F_LOADONLY' flag so that the shared object will be
available for runtime dynamic loading, but not linking:
     % strip -e libstdc++.so.4 libstdc++.so.5

   Archive the runtime-only shared object in the GCC 3.4 'libstdc++.a'
archive:
     % ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5

   Eventually, the '--with-aix-soname=svr4' configure option may drop
the need for this procedure for libraries that support it.

   Linking executables and shared libraries may produce warnings of
duplicate symbols.  The assembly files generated by GCC for AIX always
have included multiple symbol definitions for certain global variable
and function declarations in the original program.  The warnings should
not prevent the linker from producing a correct library or runnable
executable.

   AIX 4.3 utilizes a "large format" archive to support both 32-bit and
64-bit object modules.  The routines provided in AIX 4.3.0 and AIX 4.3.1
to parse archive libraries did not handle the new format correctly.
These routines are used by GCC and result in error messages during
linking such as "not a COFF file".  The version of the routines shipped
with AIX 4.3.1 should work for a 32-bit environment.  The '-g' option of
the archive command may be used to create archives of 32-bit objects
using the original "small format".  A correct version of the routines is
shipped with AIX 4.3.2 and above.

   Some versions of the AIX binder (linker) can fail with a relocation
overflow severe error when the '-bbigtoc' option is used to link
GCC-produced object files into an executable that overflows the TOC.  A
fix for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC)
is available from IBM Customer Support and from its
techsupport.services.ibm.com website as PTF U455193.

   The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump
core with a segmentation fault when invoked by any version of GCC.  A
fix for APAR IX87327 is available from IBM Customer Support and from its
techsupport.services.ibm.com website as PTF U461879.  This fix is
incorporated in AIX 4.3.3 and above.

   The initial assembler shipped with AIX 4.3.0 generates incorrect
object files.  A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM
COMPILER FAILS TO ASSEMBLE/BIND) is available from IBM Customer Support
and from its techsupport.services.ibm.com website as PTF U453956.  This
fix is incorporated in AIX 4.3.1 and above.

   AIX provides National Language Support (NLS).  Compilers and
assemblers use NLS to support locale-specific representations of various
data formats including floating-point numbers (e.g., '.' vs ',' for
separating decimal fractions).  There have been problems reported where
GCC does not produce the same floating-point formats that the assembler
expects.  If one encounters this problem, set the 'LANG' environment
variable to 'C' or 'En_US'.

   A default can be specified with the '-mcpu=CPU_TYPE' switch and using
the configure option '--with-cpu-CPU_TYPE'.

iq2000-*-elf
============

Vitesse IQ2000 processors.  These are used in embedded applications.
There are no standard Unix configurations.

lm32-*-elf
==========

Lattice Mico32 processor.  This configuration is intended for embedded
systems.

lm32-*-uclinux
==============

Lattice Mico32 processor.  This configuration is intended for embedded
systems running uClinux.

m32c-*-elf
==========

Renesas M32C processor.  This configuration is intended for embedded
systems.

m32r-*-elf
==========

Renesas M32R processor.  This configuration is intended for embedded
systems.

m68k-*-*
========

By default, 'm68k-*-elf*', 'm68k-*-rtems', 'm68k-*-uclinux' and
'm68k-*-linux' build libraries for both M680x0 and ColdFire processors.
If you only need the M680x0 libraries, you can omit the ColdFire ones by
passing '--with-arch=m68k' to 'configure'.  Alternatively, you can omit
the M680x0 libraries by passing '--with-arch=cf' to 'configure'.  These
targets default to 5206 or 5475 code as appropriate for the target
system when configured with '--with-arch=cf' and 68020 code otherwise.

   The 'm68k-*-netbsd' and 'm68k-*-openbsd' targets also support the
'--with-arch' option.  They will generate ColdFire CFV4e code when
configured with '--with-arch=cf' and 68020 code otherwise.

   You can override the default processors listed above by configuring
with '--with-cpu=TARGET'.  This TARGET can either be a '-mcpu' argument
or one of the following values: 'm68000', 'm68010', 'm68020', 'm68030',
'm68040', 'm68060', 'm68020-40' and 'm68020-60'.

   GCC requires at least binutils version 2.17 on these targets.

m68k-*-uclinux
==============

GCC 4.3 changed the uClinux configuration so that it uses the
'm68k-linux-gnu' ABI rather than the 'm68k-elf' ABI. It also added
improved support for C++ and flat shared libraries, both of which were
ABI changes.

mep-*-elf
=========

Toshiba Media embedded Processor.  This configuration is intended for
embedded systems.

microblaze-*-elf
================

Xilinx MicroBlaze processor.  This configuration is intended for
embedded systems.

mips-*-*
========

If on a MIPS system you get an error message saying "does not have gp
sections for all it's [sic] sectons [sic]", don't worry about it.  This
happens whenever you use GAS with the MIPS linker, but there is not
really anything wrong, and it is okay to use the output file.  You can
stop such warnings by installing the GNU linker.

   It would be nice to extend GAS to produce the gp tables, but they are
optional, and there should not be a warning about their absence.

   The libstdc++ atomic locking routines for MIPS targets requires MIPS
II and later.  A patch went in just after the GCC 3.3 release to make
'mips*-*-*' use the generic implementation instead.  You can also
configure for 'mipsel-elf' as a workaround.  The 'mips*-*-linux*' target
continues to use the MIPS II routines.  More work on this is expected in
future releases.

   The built-in '__sync_*' functions are available on MIPS II and later
systems and others that support the 'll', 'sc' and 'sync' instructions.
This can be overridden by passing '--with-llsc' or '--without-llsc' when
configuring GCC. Since the Linux kernel emulates these instructions if
they are missing, the default for 'mips*-*-linux*' targets is
'--with-llsc'.  The '--with-llsc' and '--without-llsc' configure options
may be overridden at compile time by passing the '-mllsc' or '-mno-llsc'
options to the compiler.

   MIPS systems check for division by zero (unless
'-mno-check-zero-division' is passed to the compiler) by generating
either a conditional trap or a break instruction.  Using trap results in
smaller code, but is only supported on MIPS II and later.  Also, some
versions of the Linux kernel have a bug that prevents trap from
generating the proper signal ('SIGFPE').  To enable the use of break,
use the '--with-divide=breaks' 'configure' option when configuring GCC.
The default is to use traps on systems that support them.

   The assembler from GNU binutils 2.17 and earlier has a bug in the way
it sorts relocations for REL targets (o32, o64, EABI). This can cause
bad code to be generated for simple C++ programs.  Also the linker from
GNU binutils versions prior to 2.17 has a bug which causes the runtime
linker stubs in very large programs, like 'libgcj.so', to be incorrectly
generated.  GNU Binutils 2.18 and later (and snapshots made after Nov.
9, 2006) should be free from both of these problems.

mips-sgi-irix5
==============

Support for IRIX 5 has been removed in GCC 4.6.

mips-sgi-irix6
==============

Support for IRIX 6.5 has been removed in GCC 4.8.  Support for IRIX 6
releases before 6.5 has been removed in GCC 4.6, as well as support for
the O32 ABI.

moxie-*-elf
===========

The moxie processor.

msp430-*-elf
============

TI MSP430 processor.  This configuration is intended for embedded
systems.

nds32le-*-elf
=============

Andes NDS32 target in little endian mode.

nds32be-*-elf
=============

Andes NDS32 target in big endian mode.

nvptx-*-none
============

Nvidia PTX target.

   Instead of GNU binutils, you will need to install nvptx-tools.  Tell
GCC where to find it:
'--with-build-time-tools=[install-nvptx-tools]/nvptx-none/bin'.

   A nvptx port of newlib is available at nvptx-newlib.  It can be
automatically built together with GCC.  For this, add a symbolic link to
nvptx-newlib's 'newlib' directory to the directory containing the GCC
sources.

   Use the '--disable-sjlj-exceptions' and
'--enable-newlib-io-long-long' options when configuring.

powerpc-*-*
===========

You can specify a default version for the '-mcpu=CPU_TYPE' switch by
using the configure option '--with-cpu-CPU_TYPE'.

   You will need binutils 2.15 or newer for a working GCC.

powerpc-*-darwin*
=================

PowerPC running Darwin (Mac OS X kernel).

   Pre-installed versions of Mac OS X may not include any developer
tools, meaning that you will not be able to build GCC from source.  Tool
binaries are available at <http://opensource.apple.com/>.

   This version of GCC requires at least cctools-590.36.  The
cctools-590.36 package referenced from
<http://gcc.gnu.org/ml/gcc/2006-03/msg00507.html> will not work on
systems older than 10.3.9 (aka darwin7.9.0).

powerpc-*-elf
=============

PowerPC system in big endian mode, running System V.4.

powerpc*-*-linux-gnu*
=====================

PowerPC system in big endian mode running Linux.

powerpc-*-netbsd*
=================

PowerPC system in big endian mode running NetBSD.

powerpc-*-eabisim
=================

Embedded PowerPC system in big endian mode for use in running under the
PSIM simulator.

powerpc-*-eabi
==============

Embedded PowerPC system in big endian mode.

powerpcle-*-elf
===============

PowerPC system in little endian mode, running System V.4.

powerpcle-*-eabisim
===================

Embedded PowerPC system in little endian mode for use in running under
the PSIM simulator.

powerpcle-*-eabi
================

Embedded PowerPC system in little endian mode.

rl78-*-elf
==========

The Renesas RL78 processor.  This configuration is intended for embedded
systems.

rx-*-elf
========

The Renesas RX processor.  See
<http://eu.renesas.com/fmwk.jsp?cnt=rx600_series_landing.jsp&fp=/products/mpumcu/rx_family/rx600_series>
for more information about this processor.

s390-*-linux*
=============

S/390 system running GNU/Linux for S/390.

s390x-*-linux*
==============

zSeries system (64-bit) running GNU/Linux for zSeries.

s390x-ibm-tpf*
==============

zSeries system (64-bit) running TPF.  This platform is supported as
cross-compilation target only.

*-*-solaris2*
=============

Support for Solaris 9 has been removed in GCC 4.10.  Support for Solaris
8 has been removed in GCC 4.8.  Support for Solaris 7 has been removed
in GCC 4.6.

   Sun does not ship a C compiler with Solaris 2 before Solaris 10,
though you can download the Sun Studio compilers for free.  In Solaris
10 and 11, GCC 3.4.3 is available as '/usr/sfw/bin/gcc'.  Solaris 11
also provides GCC 4.5.2, 4.7.3, and 4.8.2 as '/usr/gcc/4.5/bin/gcc' or
similar.  Alternatively, you can install a pre-built GCC to bootstrap
and install GCC. See the binaries page for details.

   The Solaris 2 '/bin/sh' will often fail to configure 'libstdc++-v3',
'boehm-gc' or 'libjava'.  We therefore recommend using the following
initial sequence of commands

     % CONFIG_SHELL=/bin/ksh
     % export CONFIG_SHELL

and proceed as described in the configure instructions.  In addition we
strongly recommend specifying an absolute path to invoke
'SRCDIR/configure'.

   Solaris 10 comes with a number of optional OS packages.  Some of
these are needed to use GCC fully, namely 'SUNWarc', 'SUNWbtool',
'SUNWesu', 'SUNWhea', 'SUNWlibm', 'SUNWsprot', and 'SUNWtoo'.  If you
did not install all optional packages when installing Solaris 10, you
will need to verify that the packages that GCC needs are installed.  To
check whether an optional package is installed, use the 'pkginfo'
command.  To add an optional package, use the 'pkgadd' command.  For
further details, see the Solaris 10 documentation.

   Starting with Solaris 11, the package management has changed, so you
need to check for 'system/header', 'system/linker', and
'developer/assembler' packages.  Checking for and installing packages is
done with the 'pkg' command now.

   Trying to use the linker and other tools in '/usr/ucb' to install GCC
has been observed to cause trouble.  For example, the linker may hang
indefinitely.  The fix is to remove '/usr/ucb' from your 'PATH'.

   The build process works more smoothly with the legacy Sun tools so,
if you have '/usr/xpg4/bin' in your 'PATH', we recommend that you place
'/usr/bin' before '/usr/xpg4/bin' for the duration of the build.

   We recommend the use of the Solaris assembler or the GNU assembler,
in conjunction with the Solaris linker.  The GNU 'as' versions included
in Solaris 10, from GNU binutils 2.15 (in '/usr/sfw/bin/gas'), and
Solaris 11, from GNU binutils 2.19 or newer (also in '/usr/bin/gas' and
'/usr/gnu/bin/as'), are known to work.  Current versions of GNU binutils
(2.26) are known to work as well, with the caveat mentioned in
i?86-*-solaris2.10 .  Note that your mileage may vary if you use a
combination of the GNU tools and the Solaris tools: while the
combination GNU 'as' + Sun 'ld' should reasonably work, the reverse
combination Sun 'as' + GNU 'ld' may fail to build or cause memory
corruption at runtime in some cases for C++ programs.  GNU 'ld' usually
works as well, although the version included in Solaris 10 cannot be
used due to several bugs.  Again, the current version (2.26) is known to
work, but generally lacks platform specific features, so better stay
with Solaris 'ld'.  To use the LTO linker plugin ('-fuse-linker-plugin')
with GNU 'ld', GNU binutils _must_ be configured with
'--enable-largefile'.

   To enable symbol versioning in 'libstdc++' with Solaris 'ld', you
need to have any version of GNU 'c++filt', which is part of GNU
binutils.  'libstdc++' symbol versioning will be disabled if no
appropriate version is found.  Solaris 'c++filt' from the Solaris Studio
compilers does _not_ work.

   Sun bug 4927647 sometimes causes random spurious testsuite failures
related to missing diagnostic output.  This bug doesn't affect GCC
itself, rather it is a kernel bug triggered by the 'expect' program
which is used only by the GCC testsuite driver.  When the bug causes the
'expect' program to miss anticipated output, extra testsuite failures
appear.

sparc*-*-*
==========

This section contains general configuration information for all
SPARC-based platforms.  In addition to reading this section, please read
all other sections that match your target.

   Newer versions of the GNU Multiple Precision Library (GMP), the MPFR
library and the MPC library are known to be miscompiled by earlier
versions of GCC on these platforms.  We therefore recommend the use of
the exact versions of these libraries listed as minimal versions in the
prerequisites.

sparc-sun-solaris2*
===================

When GCC is configured to use GNU binutils 2.14 or later, the binaries
produced are smaller than the ones produced using Sun's native tools;
this difference is quite significant for binaries containing debugging
information.

   Starting with Solaris 7, the operating system is capable of executing
64-bit SPARC V9 binaries.  GCC 3.1 and later properly supports this; the
'-m64' option enables 64-bit code generation.  However, if all you want
is code tuned for the UltraSPARC CPU, you should try the
'-mtune=ultrasparc' option instead, which produces code that, unlike
full 64-bit code, can still run on non-UltraSPARC machines.

   When configuring the GNU Multiple Precision Library (GMP), the MPFR
library or the MPC library on a Solaris 7 or later system, the canonical
target triplet must be specified as the 'build' parameter on the
configure line.  This target triplet can be obtained by invoking
'./config.guess' in the toplevel source directory of GCC (and not that
of GMP or MPFR or MPC). For example on a Solaris 9 system:

     % ./configure --build=sparc-sun-solaris2.9 --prefix=xxx

sparc-sun-solaris2.10
=====================

There is a bug in older versions of the Sun assembler which breaks
thread-local storage (TLS). A typical error message is

     ld: fatal: relocation error: R_SPARC_TLS_LE_HIX22: file /var/tmp//ccamPA1v.o:
       symbol <unknown>: bad symbol type SECT: symbol type must be TLS

This bug is fixed in Sun patch 118683-03 or later.

sparc-*-linux*
==============

GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 or
newer on this platform.  All earlier binutils and glibc releases
mishandled unaligned relocations on 'sparc-*-*' targets.

sparc64-*-solaris2*
===================

When configuring the GNU Multiple Precision Library (GMP), the MPFR
library or the MPC library, the canonical target triplet must be
specified as the 'build' parameter on the configure line.  For example
on a Solaris 9 system:

     % ./configure --build=sparc64-sun-solaris2.9 --prefix=xxx

sparcv9-*-solaris2*
===================

This is a synonym for 'sparc64-*-solaris2*'.

c6x-*-*
=======

The C6X family of processors.  This port requires binutils-2.22 or
newer.

tilegx-*-linux*
===============

The TILE-Gx processor in little endian mode, running GNU/Linux.  This
port requires binutils-2.22 or newer.

tilegxbe-*-linux*
=================

The TILE-Gx processor in big endian mode, running GNU/Linux.  This port
requires binutils-2.23 or newer.

tilepro-*-linux*
================

The TILEPro processor running GNU/Linux.  This port requires
binutils-2.22 or newer.

visium-*-elf
============

CDS VISIUMcore processor.  This configuration is intended for embedded
systems.

*-*-vxworks*
============

Support for VxWorks is in flux.  At present GCC supports _only_ the very
recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC.  We
welcome patches for other architectures supported by VxWorks 5.5.
Support for VxWorks AE would also be welcome; we believe this is merely
a matter of writing an appropriate "configlette" (see below).  We are
not interested in supporting older, a.out or COFF-based, versions of
VxWorks in GCC 3.

   VxWorks comes with an older version of GCC installed in
'$WIND_BASE/host'; we recommend you do not overwrite it.  Choose an
installation PREFIX entirely outside $WIND_BASE.  Before running
'configure', create the directories 'PREFIX' and 'PREFIX/bin'.  Link or
copy the appropriate assembler, linker, etc. into 'PREFIX/bin', and set
your PATH to include that directory while running both 'configure' and
'make'.

   You must give 'configure' the '--with-headers=$WIND_BASE/target/h'
switch so that it can find the VxWorks system headers.  Since VxWorks is
a cross compilation target only, you must also specify
'--target=TARGET'.  'configure' will attempt to create the directory
'PREFIX/TARGET/sys-include' and copy files into it; make sure the user
running 'configure' has sufficient privilege to do so.

   GCC's exception handling runtime requires a special "configlette"
module, 'contrib/gthr_supp_vxw_5x.c'.  Follow the instructions in that
file to add the module to your kernel build.  (Future versions of
VxWorks will incorporate this module.)

x86_64-*-*, amd64-*-*
=====================

GCC supports the x86-64 architecture implemented by the AMD64 processor
(amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD.
On GNU/Linux the default is a bi-arch compiler which is able to generate
both 64-bit x86-64 and 32-bit x86 code (via the '-m32' switch).

x86_64-*-solaris2.1[0-9]*
=========================

GCC also supports the x86-64 architecture implemented by the AMD64
processor ('amd64-*-*' is an alias for 'x86_64-*-*') on Solaris 10 or
later.  Unlike other systems, without special options a bi-arch compiler
is built which generates 32-bit code by default, but can generate 64-bit
x86-64 code with the '-m64' switch.  Since GCC 4.7, there is also a
configuration that defaults to 64-bit code, but can generate 32-bit code
with '-m32'.  To configure and build this way, you have to provide all
support libraries like 'libgmp' as 64-bit code, configure with
'--target=x86_64-pc-solaris2.1x' and 'CC=gcc -m64'.

xtensa*-*-elf
=============

This target is intended for embedded Xtensa systems using the 'newlib' C
library.  It uses ELF but does not support shared objects.
Designed-defined instructions specified via the Tensilica Instruction
Extension (TIE) language are only supported through inline assembly.

   The Xtensa configuration information must be specified prior to
building GCC.  The 'include/xtensa-config.h' header file contains the
configuration information.  If you created your own Xtensa configuration
with the Xtensa Processor Generator, the downloaded files include a
customized copy of this header file, which you can use to replace the
default header file.

xtensa*-*-linux*
================

This target is for Xtensa systems running GNU/Linux.  It supports ELF
shared objects and the GNU C library (glibc).  It also generates
position-independent code (PIC) regardless of whether the '-fpic' or
'-fPIC' options are used.  In other respects, this target is the same as
the 'xtensa*-*-elf' target.

Microsoft Windows
=================

Intel 16-bit versions
---------------------

The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not
supported.

   However, the 32-bit port has limited support for Microsoft Windows
3.11 in the Win32s environment, as a target only.  See below.

Intel 32-bit versions
---------------------

The 32-bit versions of Windows, including Windows 95, Windows NT,
Windows XP, and Windows Vista, are supported by several different target
platforms.  These targets differ in which Windows subsystem they target
and which C libraries are used.

   * Cygwin *-*-cygwin: Cygwin provides a user-space Linux API emulation
     layer in the Win32 subsystem.
   * Interix *-*-interix: The Interix subsystem provides native support
     for POSIX.
   * MinGW *-*-mingw32: MinGW is a native GCC port for the Win32
     subsystem that provides a subset of POSIX.
   * MKS i386-pc-mks: NuTCracker from MKS. See
     <http://www.mkssoftware.com/> for more information.

Intel 64-bit versions
---------------------

GCC contains support for x86-64 using the mingw-w64 runtime library,
available from <http://mingw-w64.sourceforge.net/>.  This library should
be used with the target triple x86_64-pc-mingw32.

   Presently Windows for Itanium is not supported.

Windows CE
----------

Windows CE is supported as a target only on Hitachi SuperH
(sh-wince-pe), and MIPS (mips-wince-pe).

Other Windows Platforms
-----------------------

GCC no longer supports Windows NT on the Alpha or PowerPC.

   GCC no longer supports the Windows POSIX subsystem.  However, it does
support the Interix subsystem.  See above.

   Old target names including *-*-winnt and *-*-windowsnt are no longer
used.

   PW32 (i386-pc-pw32) support was never completed, and the project
seems to be inactive.  See <http://pw32.sourceforge.net/> for more
information.

   UWIN support has been removed due to a lack of maintenance.

*-*-cygwin
==========

Ports of GCC are included with the Cygwin environment.

   GCC will build under Cygwin without modification; it does not build
with Microsoft's C++ compiler and there are no plans to make it do so.

   The Cygwin native compiler can be configured to target any 32-bit x86
cpu architecture desired; the default is i686-pc-cygwin.  It should be
used with as up-to-date a version of binutils as possible; use either
the latest official GNU binutils release in the Cygwin distribution, or
version 2.20 or above if building your own.

*-*-interix
===========

The Interix target is used by OpenNT, Interix, Services For UNIX (SFU),
and Subsystem for UNIX-based Applications (SUA). Applications compiled
with this target run in the Interix subsystem, which is separate from
the Win32 subsystem.  This target was last known to work in GCC 3.3.

*-*-mingw32
===========

GCC will build with and support only MinGW runtime 3.12 and later.
Earlier versions of headers are incompatible with the new default
semantics of 'extern inline' in '-std=c99' and '-std=gnu99' modes.

Older systems
=============

GCC contains support files for many older (1980s and early 1990s) Unix
variants.  For the most part, support for these systems has not been
deliberately removed, but it has not been maintained for several years
and may suffer from bitrot.

   Starting with GCC 3.1, each release has a list of "obsoleted"
systems.  Support for these systems is still present in that release,
but 'configure' will fail unless the '--enable-obsolete' option is
given.  Unless a maintainer steps forward, support for these systems
will be removed from the next release of GCC.

   Support for old systems as hosts for GCC can cause problems if the
workarounds for compiler, library and operating system bugs affect the
cleanliness or maintainability of the rest of GCC.  In some cases, to
bring GCC up on such a system, if still possible with current GCC, may
require first installing an old version of GCC which did work on that
system, and using it to compile a more recent GCC, to avoid bugs in the
vendor compiler.  Old releases of GCC 1 and GCC 2 are available in the
'old-releases' directory on the GCC mirror sites.  Header bugs may
generally be avoided using 'fixincludes', but bugs or deficiencies in
libraries and the operating system may still cause problems.

   Support for older systems as targets for cross-compilation is less
problematic than support for them as hosts for GCC; if an enthusiast
wishes to make such a target work again (including resurrecting any of
the targets that never worked with GCC 2, starting from the last version
before they were removed), patches following the usual requirements
would be likely to be accepted, since they should not affect the support
for more modern targets.

   For some systems, old versions of GNU binutils may also be useful,
and are available from 'pub/binutils/old-releases' on sourceware.org
mirror sites.

   Some of the information on specific systems above relates to such
older systems, but much of the information about GCC on such systems
(which may no longer be applicable to current GCC) is to be found in the
GCC texinfo manual.

all ELF targets (SVR4, Solaris 2, etc.)
=======================================

C++ support is significantly better on ELF targets if you use the GNU
linker; duplicate copies of inlines, vtables and template instantiations
will be discarded automatically.


File: gccinstall.info,  Node: Old,  Next: GNU Free Documentation License,  Prev: Specific,  Up: Top

10 Old installation documentation
*********************************

Note most of this information is out of date and superseded by the
previous chapters of this manual.  It is provided for historical
reference only, because of a lack of volunteers to merge it into the
main manual.

* Menu:

* Configurations::    Configurations Supported by GCC.

   Here is the procedure for installing GCC on a GNU or Unix system.

  1. If you have chosen a configuration for GCC which requires other GNU
     tools (such as GAS or the GNU linker) instead of the standard
     system tools, install the required tools in the build directory
     under the names 'as', 'ld' or whatever is appropriate.

     Alternatively, you can do subsequent compilation using a value of
     the 'PATH' environment variable such that the necessary GNU tools
     come before the standard system tools.

  2. Specify the host, build and target machine configurations.  You do
     this when you run the 'configure' script.

     The "build" machine is the system which you are using, the "host"
     machine is the system where you want to run the resulting compiler
     (normally the build machine), and the "target" machine is the
     system for which you want the compiler to generate code.

     If you are building a compiler to produce code for the machine it
     runs on (a native compiler), you normally do not need to specify
     any operands to 'configure'; it will try to guess the type of
     machine you are on and use that as the build, host and target
     machines.  So you don't need to specify a configuration when
     building a native compiler unless 'configure' cannot figure out
     what your configuration is or guesses wrong.

     In those cases, specify the build machine's "configuration name"
     with the '--host' option; the host and target will default to be
     the same as the host machine.

     Here is an example:

          ./configure --host=sparc-sun-sunos4.1

     A configuration name may be canonical or it may be more or less
     abbreviated.

     A canonical configuration name has three parts, separated by
     dashes.  It looks like this: 'CPU-COMPANY-SYSTEM'.  (The three
     parts may themselves contain dashes; 'configure' can figure out
     which dashes serve which purpose.)  For example,
     'm68k-sun-sunos4.1' specifies a Sun 3.

     You can also replace parts of the configuration by nicknames or
     aliases.  For example, 'sun3' stands for 'm68k-sun', so
     'sun3-sunos4.1' is another way to specify a Sun 3.

     You can specify a version number after any of the system types, and
     some of the CPU types.  In most cases, the version is irrelevant,
     and will be ignored.  So you might as well specify the version if
     you know it.

     See *note Configurations::, for a list of supported configuration
     names and notes on many of the configurations.  You should check
     the notes in that section before proceeding any further with the
     installation of GCC.


File: gccinstall.info,  Node: Configurations,  Up: Old

10.1 Configurations Supported by GCC
====================================

Here are the possible CPU types:

     1750a, a29k, alpha, arm, avr, cN, clipper, dsp16xx, elxsi, fr30,
     h8300, hppa1.0, hppa1.1, i370, i386, i486, i586, i686, i786, i860,
     i960, ip2k, m32r, m68000, m68k, m88k, mcore, mips, mipsel, mips64,
     mips64el, mn10200, mn10300, ns32k, pdp11, powerpc, powerpcle, romp,
     rs6000, sh, sparc, sparclite, sparc64, v850, vax, we32k.

   Here are the recognized company names.  As you can see, customary
abbreviations are used rather than the longer official names.

     acorn, alliant, altos, apollo, apple, att, bull, cbm, convergent,
     convex, crds, dec, dg, dolphin, elxsi, encore, harris, hitachi, hp,
     ibm, intergraph, isi, mips, motorola, ncr, next, ns, omron, plexus,
     sequent, sgi, sony, sun, tti, unicom, wrs.

   The company name is meaningful only to disambiguate when the rest of
the information supplied is insufficient.  You can omit it, writing just
'CPU-SYSTEM', if it is not needed.  For example, 'vax-ultrix4.2' is
equivalent to 'vax-dec-ultrix4.2'.

   Here is a list of system types:

     386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff,
     ctix, cxux, dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms,
     genix, gnu, linux, linux-gnu, hiux, hpux, iris, irix, isc, luna,
     lynxos, mach, minix, msdos, mvs, netbsd, newsos, nindy, ns, osf,
     osfrose, ptx, riscix, riscos, rtu, sco, sim, solaris, sunos, sym,
     sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta, vxworks,
     winnt, xenix.

You can omit the system type; then 'configure' guesses the operating
system from the CPU and company.

   You can add a version number to the system type; this may or may not
make a difference.  For example, you can write 'bsd4.3' or 'bsd4.4' to
distinguish versions of BSD.  In practice, the version number is most
needed for 'sysv3' and 'sysv4', which are often treated differently.

   'linux-gnu' is the canonical name for the GNU/Linux target; however
GCC will also accept 'linux'.  The version of the kernel in use is not
relevant on these systems.  A suffix such as 'libc1' or 'aout'
distinguishes major versions of the C library; all of the suffixed
versions are obsolete.

   If you specify an impossible combination such as 'i860-dg-vms', then
you may get an error message from 'configure', or it may ignore part of
the information and do the best it can with the rest.  'configure'
always prints the canonical name for the alternative that it used.  GCC
does not support all possible alternatives.

   Often a particular model of machine has a name.  Many machine names
are recognized as aliases for CPU/company combinations.  Thus, the
machine name 'sun3', mentioned above, is an alias for 'm68k-sun'.
Sometimes we accept a company name as a machine name, when the name is
popularly used for a particular machine.  Here is a table of the known
machine names:

     3300, 3b1, 3bN, 7300, altos3068, altos, apollo68, att-7300,
     balance, convex-cN, crds, decstation-3100, decstation, delta,
     encore, fx2800, gmicro, hp7NN, hp8NN, hp9k2NN, hp9k3NN, hp9k7NN,
     hp9k8NN, iris4d, iris, isi68, m3230, magnum, merlin, miniframe,
     mmax, news-3600, news800, news, next, pbd, pc532, pmax, powerpc,
     powerpcle, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3, sun4,
     symmetry, tower-32, tower.

Remember that a machine name specifies both the cpu type and the company
name.


File: gccinstall.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: Old,  Up: Top

GNU Free Documentation License
******************************

                     Version 1.3, 3 November 2008

     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     <http://fsf.org/>

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     functional and useful document "free" in the sense of freedom: to
     assure everyone the effective freedom to copy and redistribute it,
     with or without modifying it, either commercially or
     noncommercially.  Secondarily, this License preserves for the
     author and publisher a way to get credit for their work, while not
     being considered responsible for modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.  We
     recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work, in any medium,
     that contains a notice placed by the copyright holder saying it can
     be distributed under the terms of this License.  Such a notice
     grants a world-wide, royalty-free license, unlimited in duration,
     to use that work under the conditions stated herein.  The
     "Document", below, refers to any such manual or work.  Any member
     of the public is a licensee, and is addressed as "you".  You accept
     the license if you copy, modify or distribute the work in a way
     requiring permission under copyright law.

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter section
     of the Document that deals exclusively with the relationship of the
     publishers or authors of the Document to the Document's overall
     subject (or to related matters) and contains nothing that could
     fall directly within that overall subject.  (Thus, if the Document
     is in part a textbook of mathematics, a Secondary Section may not
     explain any mathematics.)  The relationship could be a matter of
     historical connection with the subject or with related matters, or
     of legal, commercial, philosophical, ethical or political position
     regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in the
     notice that says that the Document is released under this License.
     If a section does not fit the above definition of Secondary then it
     is not allowed to be designated as Invariant.  The Document may
     contain zero Invariant Sections.  If the Document does not identify
     any Invariant Sections then there are none.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.  A
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     be at most 25 words.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, that is suitable for revising the document
     straightforwardly with generic text editors or (for images composed
     of pixels) generic paint programs or (for drawings) some widely
     available drawing editor, and that is suitable for input to text
     formatters or for automatic translation to a variety of formats
     suitable for input to text formatters.  A copy made in an otherwise
     Transparent file format whose markup, or absence of markup, has
     been arranged to thwart or discourage subsequent modification by
     readers is not Transparent.  An image format is not Transparent if
     used for any substantial amount of text.  A copy that is not
     "Transparent" is called "Opaque".

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and standard-conforming
     simple HTML, PostScript or PDF designed for human modification.
     Examples of transparent image formats include PNG, XCF and JPG.
     Opaque formats include proprietary formats that can be read and
     edited only by proprietary word processors, SGML or XML for which
     the DTD and/or processing tools are not generally available, and
     the machine-generated HTML, PostScript or PDF produced by some word
     processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.

     The "publisher" means any person or entity that distributes copies
     of the Document to the public.

     A section "Entitled XYZ" means a named subunit of the Document
     whose title either is precisely XYZ or contains XYZ in parentheses
     following text that translates XYZ in another language.  (Here XYZ
     stands for a specific section name mentioned below, such as
     "Acknowledgements", "Dedications", "Endorsements", or "History".)
     To "Preserve the Title" of such a section when you modify the
     Document means that it remains a section "Entitled XYZ" according
     to this definition.

     The Document may include Warranty Disclaimers next to the notice
     which states that this License applies to the Document.  These
     Warranty Disclaimers are considered to be included by reference in
     this License, but only as regards disclaiming warranties: any other
     implication that these Warranty Disclaimers may have is void and
     has no effect on the meaning of this License.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow the
     conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies (or copies in media that commonly
     have printed covers) of the Document, numbering more than 100, and
     the Document's license notice requires Cover Texts, you must
     enclose the copies in covers that carry, clearly and legibly, all
     these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the title
     equally prominent and visible.  You may add other material on the
     covers in addition.  Copying with changes limited to the covers, as
     long as they preserve the title of the Document and satisfy these
     conditions, can be treated as verbatim copying in other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a machine-readable
     Transparent copy along with each Opaque copy, or state in or with
     each Opaque copy a computer-network location from which the general
     network-using public has access to download using public-standard
     network protocols a complete Transparent copy of the Document, free
     of added material.  If you use the latter option, you must take
     reasonably prudent steps, when you begin distribution of Opaque
     copies in quantity, to ensure that this Transparent copy will
     remain thus accessible at the stated location until at least one
     year after the last time you distribute an Opaque copy (directly or
     through your agents or retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of copies,
     to give them a chance to provide you with an updated version of the
     Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with the
     Modified Version filling the role of the Document, thus licensing
     distribution and modification of the Modified Version to whoever
     possesses a copy of it.  In addition, you must do these things in
     the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of previous
          versions (which should, if there were any, be listed in the
          History section of the Document).  You may use the same title
          as a previous version if the original publisher of that
          version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has fewer than five), unless they release you
          from this requirement.

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document's
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section Entitled "History", Preserve its Title,
          and add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on the
          Title Page.  If there is no section Entitled "History" in the
          Document, create one stating the title, year, authors, and
          publisher of the Document as given on its Title Page, then add
          an item describing the Modified Version as stated in the
          previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in the
          "History" section.  You may omit a network location for a work
          that was published at least four years before the Document
          itself, or if the original publisher of the version it refers
          to gives permission.

       K. For any section Entitled "Acknowledgements" or "Dedications",
          Preserve the Title of the section, and preserve in the section
          all the substance and tone of each of the contributor
          acknowledgements and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document, unaltered
          in their text and in their titles.  Section numbers or the
          equivalent are not considered part of the section titles.

       M. Delete any section Entitled "Endorsements".  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section to be Entitled
          "Endorsements" or to conflict in title with any Invariant
          Section.

       O. Preserve any Warranty Disclaimers.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option designate
     some or all of these sections as invariant.  To do this, add their
     titles to the list of Invariant Sections in the Modified Version's
     license notice.  These titles must be distinct from any other
     section titles.

     You may add a section Entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties--for example, statements of peer review or that the text
     has been approved by an organization as the authoritative
     definition of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end of
     the list of Cover Texts in the Modified Version.  Only one passage
     of Front-Cover Text and one of Back-Cover Text may be added by (or
     through arrangements made by) any one entity.  If the Document
     already includes a cover text for the same cover, previously added
     by you or by arrangement made by the same entity you are acting on
     behalf of, you may not add another; but you may replace the old
     one, on explicit permission from the previous publisher that added
     the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination all
     of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice, and that you preserve all
     their Warranty Disclaimers.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections Entitled
     "History" in the various original documents, forming one section
     Entitled "History"; likewise combine any sections Entitled
     "Acknowledgements", and any sections Entitled "Dedications".  You
     must delete all sections Entitled "Endorsements."

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the documents
     in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow this
     License in all other respects regarding verbatim copying of that
     document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of a
     storage or distribution medium, is called an "aggregate" if the
     copyright resulting from the compilation is not used to limit the
     legal rights of the compilation's users beyond what the individual
     works permit.  When the Document is included in an aggregate, this
     License does not apply to the other works in the aggregate which
     are not themselves derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one half
     of the entire aggregate, the Document's Cover Texts may be placed
     on covers that bracket the Document within the aggregate, or the
     electronic equivalent of covers if the Document is in electronic
     form.  Otherwise they must appear on printed covers that bracket
     the whole aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License, and all the license notices in the
     Document, and any Warranty Disclaimers, provided that you also
     include the original English version of this License and the
     original versions of those notices and disclaimers.  In case of a
     disagreement between the translation and the original version of
     this License or a notice or disclaimer, the original version will
     prevail.

     If a section in the Document is Entitled "Acknowledgements",
     "Dedications", or "History", the requirement (section 4) to
     Preserve its Title (section 1) will typically require changing the
     actual title.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense, or distribute it is void,
     and will automatically terminate your rights under this License.

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly and
     finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from you
     under this License.  If your rights have been terminated and not
     permanently reinstated, receipt of a copy of some or all of the
     same material does not give you any rights to use it.

  10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     <http://www.gnu.org/copyleft/>.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If the
     Document does not specify a version number of this License, you may
     choose any version ever published (not as a draft) by the Free
     Software Foundation.  If the Document specifies that a proxy can
     decide which future versions of this License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Document.

  11. RELICENSING

     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
     World Wide Web server that publishes copyrightable works and also
     provides prominent facilities for anybody to edit those works.  A
     public wiki that anybody can edit is an example of such a server.
     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
     site means any set of copyrightable works thus published on the MMC
     site.

     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
     license published by Creative Commons Corporation, a not-for-profit
     corporation with a principal place of business in San Francisco,
     California, as well as future copyleft versions of that license
     published by that same organization.

     "Incorporate" means to publish or republish a Document, in whole or
     in part, as part of another Document.

     An MMC is "eligible for relicensing" if it is licensed under this
     License, and if all works that were first published under this
     License somewhere other than this MMC, and subsequently
     incorporated in whole or in part into the MMC, (1) had no cover
     texts or invariant sections, and (2) were thus incorporated prior
     to November 1, 2008.

     The operator of an MMC Site may republish an MMC contained in the
     site under CC-BY-SA on the same site at any time before August 1,
     2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents
====================================================

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

       Copyright (C)  YEAR  YOUR NAME.
       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, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

   If you have Invariant Sections, Front-Cover Texts and Back-Cover
Texts, replace the "with...Texts."  line with this:

         with the Invariant Sections being LIST THEIR TITLES, with
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
         being LIST.

   If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

   If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of free
software license, such as the GNU General Public License, to permit
their use in free software.


File: gccinstall.info,  Node: Concept Index,  Prev: GNU Free Documentation License,  Up: Top

Concept Index
*************

 [index ]
* Menu:

* Binaries:                              Binaries.           (line    6)
* build_configargs:                      Configuration.      (line 1690)
* Configuration:                         Configuration.      (line    6)
* configurations supported by GCC:       Configurations.     (line    6)
* Downloading GCC:                       Downloading the source.
                                                             (line    6)
* Downloading the Source:                Downloading the source.
                                                             (line    6)
* FDL, GNU Free Documentation License:   GNU Free Documentation License.
                                                             (line    6)
* Host specific installation:            Specific.           (line    6)
* host_configargs:                       Configuration.      (line 1694)
* Installing GCC: Binaries:              Binaries.           (line    6)
* Installing GCC: Building:              Building.           (line    6)
* Installing GCC: Configuration:         Configuration.      (line    6)
* Installing GCC: Testing:               Testing.            (line    6)
* Prerequisites:                         Prerequisites.      (line    6)
* Specific:                              Specific.           (line    6)
* Specific installation notes:           Specific.           (line    6)
* Target specific installation:          Specific.           (line    6)
* Target specific installation notes:    Specific.           (line    6)
* target_configargs:                     Configuration.      (line 1698)
* Testing:                               Testing.            (line    6)
* Testsuite:                             Testing.            (line    6)



Tag Table:
Node: Top1696
Node: Installing GCC2254
Node: Prerequisites3888
Node: Downloading the source15018
Node: Configuration16692
Ref: with-gnu-as32152
Ref: with-as33047
Ref: with-gnu-ld34460
Ref: WithAixSoname52351
Ref: AixLdCommand53012
Node: Building93388
Node: Testing109280
Node: Final install117142
Node: Binaries122453
Node: Specific123507
Ref: aarch64-x-x124014
Ref: alpha-x-x125446
Ref: alpha-dec-osf51125935
Ref: amd64-x-solaris210126460
Ref: arc-x-elf32126563
Ref: arc-linux-uclibc126739
Ref: arm-x-eabi126880
Ref: avr127297
Ref: bfin127936
Ref: cr16128177
Ref: cris128593
Ref: dos129408
Ref: epiphany-x-elf129731
Ref: x-x-freebsd129836
Ref: ft32-x-elf131672
Ref: h8300-hms131770
Ref: hppa-hp-hpux132122
Ref: hppa-hp-hpux10134494
Ref: hppa-hp-hpux11134907
Ref: x-x-linux-gnu140566
Ref: ix86-x-linux140759
Ref: ix86-x-solaris210141072
Ref: ia64-x-linux142531
Ref: ia64-x-hpux143301
Ref: x-ibm-aix143856
Ref: TransferAixShobj147518
Ref: iq2000-x-elf151328
Ref: lm32-x-elf151468
Ref: lm32-x-uclinux151572
Ref: m32c-x-elf151700
Ref: m32r-x-elf151802
Ref: m68k-x-x151904
Ref: m68k-x-uclinux152942
Ref: mep-x-elf153187
Ref: microblaze-x-elf153297
Ref: mips-x-x153416
Ref: mips-sgi-irix5155810
Ref: mips-sgi-irix6155890
Ref: moxie-x-elf156077
Ref: msp430-x-elf156124
Ref: nds32le-x-elf156227
Ref: nds32be-x-elf156299
Ref: nvptx-x-none156368
Ref: powerpc-x-x156895
Ref: powerpc-x-darwin157100
Ref: powerpc-x-elf157594
Ref: powerpc-x-linux-gnu157679
Ref: powerpc-x-netbsd157774
Ref: powerpc-x-eabisim157862
Ref: powerpc-x-eabi157988
Ref: powerpcle-x-elf158064
Ref: powerpcle-x-eabisim158156
Ref: powerpcle-x-eabi158289
Ref: rl78-x-elf158372
Ref: rx-x-elf158478
Ref: s390-x-linux158677
Ref: s390x-x-linux158749
Ref: s390x-ibm-tpf158836
Ref: x-x-solaris2158967
Ref: sparc-x-x162889
Ref: sparc-sun-solaris2163391
Ref: sparc-sun-solaris210164530
Ref: sparc-x-linux164905
Ref: sparc64-x-solaris2165130
Ref: sparcv9-x-solaris2165463
Ref: c6x-x-x165550
Ref: tilegx-*-linux165642
Ref: tilegxbe-*-linux165784
Ref: tilepro-*-linux165927
Ref: visium-x-elf166048
Ref: x-x-vxworks166156
Ref: x86-64-x-x167679
Ref: x86-64-x-solaris210168007
Ref: xtensa-x-elf168671
Ref: xtensa-x-linux169342
Ref: windows169683
Ref: x-x-cygwin171616
Ref: x-x-interix172169
Ref: x-x-mingw32172477
Ref: older172703
Ref: elf174820
Node: Old175078
Node: Configurations178211
Node: GNU Free Documentation License181749
Node: Concept Index206877

End Tag Table
