\input texinfo.tex    @c -*-texinfo-*-
@c @ifnothtml
@c %**start of header
@setfilename gccinstall.info
@setchapternewpage odd
@c %**end of header
@c @end ifnothtml

@include gcc-common.texi

@c Specify title for specific html page
@ifset indexhtml
@settitle Installing GCC
@end ifset
@ifset specifichtml
@settitle Host/Target specific installation notes for GCC
@end ifset
@ifset prerequisiteshtml
@settitle Prerequisites for GCC
@end ifset
@ifset downloadhtml
@settitle Downloading GCC
@end ifset
@ifset configurehtml
@settitle Installing GCC: Configuration
@end ifset
@ifset buildhtml
@settitle Installing GCC: Building
@end ifset
@ifset testhtml
@settitle Installing GCC: Testing
@end ifset
@ifset finalinstallhtml
@settitle Installing GCC: Final installation
@end ifset
@ifset binarieshtml
@settitle Installing GCC: Binaries
@end ifset
@ifset gfdlhtml
@settitle Installing GCC: GNU Free Documentation License
@end ifset

@c Copyright (C) 1988-2022 Free Software Foundation, Inc.
@c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com

@c IMPORTANT: whenever you modify this file, run `install.texi2html' to
@c test the generation of HTML documents for the gcc.gnu.org web pages.
@c
@c Do not use @footnote{} in this file as it breaks install.texi2html!

@c Include everything if we're not making html
@ifnothtml
@set indexhtml
@set specifichtml
@set prerequisiteshtml
@set downloadhtml
@set configurehtml
@set buildhtml
@set testhtml
@set finalinstallhtml
@set binarieshtml
@set gfdlhtml
@end ifnothtml

@c Part 2 Summary Description and Copyright
@copying
Copyright @copyright{} 1988-2022 Free Software Foundation, Inc.
@sp 1
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 ``@uref{./gfdl.html,,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.
@end copying
@ifinfo
@insertcopying
@end ifinfo
@dircategory Software development
@direntry
* gccinstall: (gccinstall).    Installing the GNU Compiler Collection.
@end direntry

@c Part 3 Titlepage and Copyright
@titlepage
@title Installing GCC
@versionsubtitle

@c The following two commands start the copyright page.
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@c Part 4 Top node, Master Menu, and/or Table of Contents
@ifinfo
@node    Top, , , (dir)
@comment node-name, next,          Previous, up

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

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

@iftex
@contents
@end iftex

@c Part 5 The Body of the Document
@c ***Installing GCC**********************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Installing GCC, Binaries, , Top
@end ifnothtml
@ifset indexhtml
@ifnothtml
@chapter Installing GCC
@end ifnothtml

The latest version of this document is always available at
@uref{https://gcc.gnu.org/install/,,https://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.

@emph{Before} starting the build/install procedure please check the
@ifnothtml
@ref{Specific, host/target specific installation notes}.
@end ifnothtml
@ifhtml
@uref{specific.html,,host/target specific installation notes}.
@end ifhtml
We recommend you browse the entire generic installation instructions before
you proceed.

Lists of successful builds for released versions of GCC are
available at @uref{https://gcc.gnu.org/buildstat.html}.
These lists are updated as new information becomes available.

The installation procedure itself is broken into five steps.

@ifinfo
@menu
* Prerequisites::
* Downloading the source::
* Configuration::
* Building::
* Testing:: (optional)
* Final install::
@end menu
@end ifinfo
@ifhtml
@enumerate
@item
@uref{prerequisites.html,,Prerequisites}
@item
@uref{download.html,,Downloading the source}
@item
@uref{configure.html,,Configuration}
@item
@uref{build.html,,Building}
@item
@uref{test.html,,Testing} (optional)
@item
@uref{finalinstall.html,,Final install}
@end enumerate
@end ifhtml

Please note that GCC does not support @samp{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.

@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}

@insertcopying
@end ifhtml
@end ifset

@c ***Prerequisites**************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Prerequisites, Downloading the source, , Installing GCC
@end ifnothtml
@ifset prerequisiteshtml
@ifnothtml
@chapter Prerequisites
@end ifnothtml
@cindex Prerequisites

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

@heading Tools/packages necessary for building GCC
@table @asis
@item ISO C++11 compiler
Necessary to bootstrap GCC.

Versions of GCC prior to 11 also allow bootstrapping with an ISO C++98
compiler, 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 4.8 or later) because source code for language
frontends other than C might use GCC extensions.

@item 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 @samp{x86_64-pc-linux-gnu} platform (among
other multilib targets), for which 64-bit (@samp{x86_64}) and 32-bit
(@samp{i386}) libc headers are usually packaged separately. If you do a
build of a native compiler on @samp{x86_64-pc-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
@option{--disable-multilib}.  Otherwise, you may encounter an error such as
@samp{fatal error: gnu/stubs-32.h: No such file}

@item @anchor{GNAT-prerequisite}GNAT

In order to build GNAT, the Ada compiler, you need a working GNAT
compiler (GCC version 5.1 or later).

This includes GNAT tools such as @command{gnatmake} and
@command{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 strongly recommended to install
the new compiler as native first, and then use it to build the cross
compiler. Other native compiler versions may work but this is not guaranteed and
will typically fail with hard to understand compilation errors during the
build.

Similarly, it is strongly recommended to use an older version of GNAT to build
GNAT. More recent versions of GNAT than the version built are not guaranteed
to work and will often fail during the build with compilation errors.

Note that @command{configure} does not test whether the GNAT installation works
and has a sufficiently recent version; if too old a GNAT version is
installed and @option{--enable-languages=ada} is used, the build will fail.

@env{ADA_INCLUDE_PATH} and @env{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 @samp{gnatls -v} lists only one explicit path in each
section.

@item @anchor{GDC-prerequisite}GDC

In order to build GDC, the D compiler, you need a working GDC
compiler (GCC version 9.1 or later) and D runtime library,
@samp{libphobos}, as the D front end is written in D.

Versions of GDC prior to 12 can be built with an ISO C++11 compiler, which can
then be installed and used to bootstrap newer versions of the D front end.

It is strongly recommended to use an older version of GDC to build GDC. More
recent versions of GDC than the version built are not guaranteed to work and
will often fail during the build with compilation errors relating to
deprecations or removed features.

Note that @command{configure} does not test whether the GDC installation works
and has a sufficiently recent version.  Though the implementation of the D
front end does not make use of any GDC-specific extensions, or novel features
of the D language, if too old a GDC version is installed and
@option{--enable-languages=d} is used, the build will fail.

On some targets, @samp{libphobos} isn't enabled by default, but compiles
and works if @option{--enable-libphobos} is used.  Specifics are
documented for affected targets.

@item A ``working'' POSIX compatible shell, or GNU bash

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

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

@command{zsh} is not a fully compliant POSIX shell and will not
work when configuring GCC@.

@item 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.

@item GNU binutils

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

Note binutils 2.35 or newer is required for LTO to work correctly
with GNU libtool that includes doing a bootstrap with LTO enabled.

@item gzip version 1.2.4 (or later) or
@itemx bzip2 version 1.0.2 (or later)

Necessary to uncompress GCC @command{tar} files when source code is
obtained via HTTPS mirror sites.

@item GNU make version 3.80 (or later)

You must have GNU make installed to build GCC@.

@item GNU tar version 1.14 (or later)

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

@item Perl version between 5.6.1 and 5.6.24

Necessary when targeting Darwin, building @samp{libstdc++},
and not using @option{--disable-symvers}.
Necessary when targeting Solaris 2 with Solaris @command{ld} and not using
@option{--disable-symvers}.

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

Used by @command{automake}.

@end table

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.

@table @asis
@item 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 @file{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
@option{--with-gmp} configure option.  See also @option{--with-gmp-lib}
and @option{--with-gmp-include}.
The in-tree build is only supported with the GMP version that
download_prerequisites installs.

@item MPFR Library version 3.1.0 (or later)

Necessary to build GCC@.  It can be downloaded from
@uref{https://www.mpfr.org}.  If an MPFR source distribution is found
in a subdirectory of your GCC sources named @file{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
@option{--with-mpfr} configure option should be used.  See also
@option{--with-mpfr-lib} and @option{--with-mpfr-include}.
The in-tree build is only supported with the MPFR version that
download_prerequisites installs.

@item MPC Library version 1.0.1 (or later)

Necessary to build GCC@.  It can be downloaded from
@uref{https://www.multiprecision.org/mpc/}.  If an MPC source distribution
is found in a subdirectory of your GCC sources named @file{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
@option{--with-mpc} configure option should be used.  See also
@option{--with-mpc-lib} and @option{--with-mpc-include}.
The in-tree build is only supported with the MPC version that
download_prerequisites installs.

@item isl Library version 0.15 or later.

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

@item zstd Library.

Necessary to build GCC with zstd compression used for LTO bytecode.
The library is searched in your default library patch search.
Alternatively, the @option{--with-zstd} configure option should be used.

@end table

@heading Tools/packages necessary for modifying GCC
@table @asis
@item autoconf version 2.69
@itemx GNU m4 version 1.4.6 (or later)

Necessary when modifying @file{configure.ac}, @file{aclocal.m4}, etc.@:
to regenerate @file{configure} and @file{config.in} files.

@item automake version 1.15.1

Necessary when modifying a @file{Makefile.am} file to regenerate its
associated @file{Makefile.in}.

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

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

@item gettext version 0.14.5 (or later)

Needed to regenerate @file{gcc.pot}.

@item gperf version 2.7.2 (or later)

Necessary when modifying @command{gperf} input files, e.g.@:
@file{gcc/cp/cfns.gperf} to regenerate its associated header file, e.g.@:
@file{gcc/cp/cfns.h}.

@item DejaGnu version 1.5.3 (or later)
@itemx Expect
@itemx Tcl
@c Once Tcl 8.5 or higher is required, remove any obsolete
@c compatibility workarounds:
@c     git grep 'compatibility with earlier Tcl releases'

Necessary to run the GCC testsuite; see the section on testing for
details.

@item autogen version 5.5.4 (or later) and
@itemx guile version 1.4.1 (or later)

Necessary to regenerate @file{fixinc/fixincl.x} from
@file{fixinc/inclhack.def} and @file{fixinc/*.tpl}.

Necessary to run @samp{make check} for @file{fixinc}.

Necessary to regenerate the top level @file{Makefile.in} file from
@file{Makefile.tpl} and @file{Makefile.def}.

@item Flex version 2.5.4 (or later)

Necessary when modifying @file{*.l} files.

Necessary to build GCC during development because the generated output
files are not included in the version-controlled source repository.
They are included in releases.

@item Texinfo version 4.7 (or later)

Necessary for running @command{makeinfo} when modifying @file{*.texi}
files to test your changes.

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

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

@item @TeX{} (any working version)

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

@item Sphinx version 1.0 (or later)

Necessary to regenerate @file{jit/docs/_build/texinfo} from the @file{.rst}
files in the directories below @file{jit/docs}.

@item git (any version)
@itemx SSH (any version)

Necessary to access the source repository.  Public releases and weekly
snapshots of the development sources are also available via HTTPS@.

@item GNU diffutils version 2.7 (or later)

Useful when submitting patches for the GCC source code.

@item patch version 2.5.4 (or later)

Necessary when applying patches, created with @command{diff}, to one's
own sources.

@end table

@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***Downloading the source**************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Downloading the source, Configuration, Prerequisites, Installing GCC
@end ifnothtml
@ifset downloadhtml
@ifnothtml
@chapter Downloading GCC
@end ifnothtml
@cindex Downloading GCC
@cindex Downloading the Source

GCC is distributed via @uref{https://gcc.gnu.org/git.html,,git} and via
HTTPS as tarballs compressed with @command{gzip} or @command{bzip2}.

Please refer to the @uref{https://gcc.gnu.org/releases.html,,releases web page}
for information on how to obtain GCC@.

The source distribution includes the C, C++, Objective-C, Fortran,
and Ada (in the case of GCC 3.1 and later) compilers, as well as
runtime libraries for C++, Objective-C, and Fortran.
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
(@file{bfd}, @file{binutils}, @file{gas}, @file{gprof}, @file{ld},
@file{opcodes}, @dots{}) 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
@command{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 @file{gmp}, @file{mpfr} and @file{mpc},
respectively (or use symbolic links with the same name).

@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***Configuration***********************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Configuration, Building, Downloading the source, Installing GCC
@end ifnothtml
@ifset configurehtml
@ifnothtml
@chapter Installing GCC: Configuration
@end ifnothtml
@cindex Configuration
@cindex 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 @var{srcdir} to refer to the toplevel source directory for
GCC; we use @var{objdir} to refer to the toplevel build/object directory.

If you obtained the sources by cloning the repository, @var{srcdir}
must refer to the top @file{gcc} directory, the one where the
@file{MAINTAINERS} file can be found, and not its @file{gcc}
subdirectory, otherwise the build will fail.

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

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

If you have previously built GCC in the same directory for a
different target machine, do @samp{make distclean} to delete all files
that might be invalid.  One of the files this deletes is @file{Makefile};
if @samp{make distclean} complains that @file{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 @var{objdir}, you should
simply use a different @var{objdir} for each target.

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

@ignore
Note that the bootstrap compiler and the resulting GCC must be link
compatible, else the bootstrap will fail with linker errors about
incompatible object file formats.  Several multilibed targets are
affected by this requirement, see
@ifnothtml
@ref{Specific, host/target specific installation notes}.
@end ifnothtml
@ifhtml
@uref{specific.html,,host/target specific installation notes}.
@end ifhtml
@end ignore

To configure GCC:

@smallexample
% mkdir @var{objdir}
% cd @var{objdir}
% @var{srcdir}/configure [@var{options}] [@var{target}]
@end smallexample

@heading 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.

@table @code
@item --with-pkgversion=@var{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 @command{gcc --version}.  This suffix does
not replace the default version string, only the @samp{GCC} part.

The default value is @samp{GCC}.

@item --with-bugurl=@var{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.

@item --with-documentation-root-url=@var{url}
Specify the URL root that contains GCC option documentation.  The @var{url}
should end with a @code{/} character.

The default value is @uref{https://gcc.gnu.org/onlinedocs/,,https://gcc.gnu.org/onlinedocs/}.

@item --with-changes-root-url=@var{url}
Specify the URL root that contains information about changes in GCC
releases like @code{gcc-@var{version}/changes.html}.
The @var{url} should end with a @code{/} character.

The default value is @uref{https://gcc.gnu.org/,,https://gcc.gnu.org/}.

@end table

@heading Host, Build and Target specification

Specify the host, build and target machine configurations.  You do this
when you run the @file{configure} script.

The @dfn{build} machine is the system which you are using, the
@dfn{host} machine is the system where you want to run the resulting
compiler (normally the build machine), and the @dfn{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 @file{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
@file{configure} cannot figure out what your configuration is or guesses
wrong.

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

Here is an example:

@smallexample
./configure --host=x86_64-pc-linux-gnu
@end smallexample

A configuration name may be canonical or it may be more or less
abbreviated (@file{config.sub} script produces canonical versions).

A canonical configuration name has three parts, separated by dashes.
It looks like this: @samp{@var{cpu}-@var{company}-@var{system}}.

Here are the possible CPU types:

@quotation
aarch64, aarch64_be, alpha, alpha64, amdgcn, arc, arceb, arm, armeb, avr, bfin,
bpf, cris, csky, epiphany, fido, fr30, frv, ft32, h8300, hppa, hppa2.0,
hppa64, i486, i686, ia64, iq2000, lm32, loongarch64, m32c, m32r, m32rle, m68k,
mcore, microblaze, microblazeel, mips, mips64, mips64el, mips64octeon,
mips64orion, mips64vr, mipsel, mipsisa32, mipsisa32r2, mipsisa64, mipsisa64r2,
mipsisa64r2el, mipsisa64sb1, mipsisa64sr71k, mipstx39, mmix, mn10300, moxie,
msp430, nds32be, nds32le, nios2, nvptx, or1k, pdp11, powerpc, powerpc64,
powerpc64le, powerpcle, pru, riscv32, riscv32be, riscv64, riscv64be, rl78, rx,
s390, s390x, sh, shle, sparc, sparc64, tic6x, v850,
v850e, v850e1, vax, visium, x86_64, xstormy16, xtensa
@end quotation

Here is a list of system types:

@quotation
aix@var{version}, amdhsa, aout, cygwin, darwin@var{version},
eabi, eabialtivec, eabisim, eabisimaltivec, elf, elf32,
elfbare, elfoabi, freebsd@var{version}, gnu, hpux, hpux@var{version},
kfreebsd-gnu, kopensolaris-gnu, linux-androideabi, linux-gnu,
linux-gnu_altivec, linux-musl, linux-uclibc, lynxos, mingw32, mingw32crt,
mmixware, msdosdjgpp, netbsd, netbsdelf@var{version}, nto-qnx, openbsd,
rtems, solaris@var{version}, symbianelf, tpf, uclinux, uclinux_eabi, vms,
vxworks, vxworksae, vxworksmils
@end quotation

@heading Options specification

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

Note that each @option{--enable} option has a corresponding
@option{--disable} option and that each @option{--with} option has a
corresponding @option{--without} option.

@table @code
@item --prefix=@var{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
@file{/usr/local}.

We @strong{highly} recommend against @var{dirname} being the same or a
subdirectory of @var{objdir} or vice versa.  If specifying a directory
beneath a user's home directory tree, some shells will not expand
@var{dirname} correctly if it contains the @samp{~} metacharacter; use
@env{$HOME} instead.

The following standard @command{autoconf} options are supported.  Normally you
should not need to use these options.
@table @code
@item --exec-prefix=@var{dirname}
Specify the toplevel installation directory for architecture-dependent
files.  The default is @file{@var{prefix}}.

@item --bindir=@var{dirname}
Specify the installation directory for the executables called by users
(such as @command{gcc} and @command{g++}).  The default is
@file{@var{exec-prefix}/bin}.

@item --libdir=@var{dirname}
Specify the installation directory for object code libraries and
internal data files of GCC@.  The default is @file{@var{exec-prefix}/lib}.

@item --libexecdir=@var{dirname}
Specify the installation directory for internal executables of GCC@.
The default is @file{@var{exec-prefix}/libexec}.

@item --with-slibdir=@var{dirname}
Specify the installation directory for the shared libgcc library.  The
default is @file{@var{libdir}}.

@item --datarootdir=@var{dirname}
Specify the root of the directory tree for read-only architecture-independent
data files referenced by GCC@.  The default is @file{@var{prefix}/share}.

@item --infodir=@var{dirname}
Specify the installation directory for documentation in info format.
The default is @file{@var{datarootdir}/info}.

@item --datadir=@var{dirname}
Specify the installation directory for some architecture-independent
data files referenced by GCC@.  The default is @file{@var{datarootdir}}.

@item --docdir=@var{dirname}
Specify the installation directory for documentation files (other
than Info) for GCC@.  The default is @file{@var{datarootdir}/doc}.

@item --htmldir=@var{dirname}
Specify the installation directory for HTML documentation files.
The default is @file{@var{docdir}}.

@item --pdfdir=@var{dirname}
Specify the installation directory for PDF documentation files.
The default is @file{@var{docdir}}.

@item --mandir=@var{dirname}
Specify the installation directory for manual pages.  The default is
@file{@var{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.)

@item --with-gxx-include-dir=@var{dirname}
Specify
the installation directory for G++ header files.  The default depends
on other configuration options, and differs between cross and native
configurations.

@item --with-specs=@var{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
@option{--with-specs=%@{!fcommon:%@{!fno-common:-fno-common@}@}}.
@ifnothtml
@xref{Spec Files,, Specifying subprocesses and the switches to pass to them,
gcc, Using the GNU Compiler Collection (GCC)},
@end ifnothtml
@ifhtml
See ``Spec Files'' in the main manual
@end ifhtml

@end table

@item --program-prefix=@var{prefix}
GCC supports some transformations of the names of its programs when
installing them.  This option prepends @var{prefix} to the names of
programs to install in @var{bindir} (see above).  For example, specifying
@option{--program-prefix=foo-} would result in @samp{gcc}
being installed as @file{/usr/local/bin/foo-gcc}.

@item --program-suffix=@var{suffix}
Appends @var{suffix} to the names of programs to install in @var{bindir}
(see above).  For example, specifying @option{--program-suffix=-3.1}
would result in @samp{gcc} being installed as
@file{/usr/local/bin/gcc-3.1}.

@item --program-transform-name=@var{pattern}
Applies the @samp{sed} script @var{pattern} to be applied to the names
of programs to install in @var{bindir} (see above).  @var{pattern} has to
consist of one or more basic @samp{sed} editing commands, separated by
semicolons.  For example, if you want the @samp{gcc} program name to be
transformed to the installed program @file{/usr/local/bin/myowngcc} and
the @samp{g++} program name to be transformed to
@file{/usr/local/bin/gspecial++} without changing other program names,
you could use the pattern
@option{--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, @var{prefix} (and
@var{suffix}) are prepended (appended) before further transformations
can happen with a special transformation script @var{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
@samp{i686-pc-linux-gnu-gcc}.  All of the above transformations happen
before the target alias is prepended to the name---so, specifying
@option{--program-prefix=foo-} and @option{program-suffix=-3.1}, the
resulting binary would be installed as
@file{/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.

@item --with-local-prefix=@var{dirname}
Specify the
installation directory for local include files.  The default is
@file{/usr/local}.  Specify this option if you want the compiler to
search directory @file{@var{dirname}/include} for locally installed
header files @emph{instead} of @file{/usr/local/include}.

You should specify @option{--with-local-prefix} @strong{only} if your
site has a different convention (not @file{/usr/local}) for where to put
site-specific files.

The default value for @option{--with-local-prefix} is @file{/usr/local}
regardless of the value of @option{--prefix}.  Specifying
@option{--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 @option{--prefix} is to specify where to @emph{install
GCC}.  The local header files in @file{/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 @option{--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 @option{-I @var{directory}} options to the
compiler command line, to ensure that directories containing installed
packages' headers are searched.  When @var{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
@env{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 @file{/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
@option{--program-prefix}, @option{--program-suffix} and
@option{--program-transform-name} options to install multiple versions
into a single directory, but it may be simpler to use different prefixes
and the @option{--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 @env{LIBRARY_PATH}).

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

@strong{Do not} specify @file{/usr} as the @option{--with-local-prefix}!
The directory you use for @option{--with-local-prefix} @strong{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 @command{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.

@item --with-gcc-major-version-only
Specifies that GCC should use only the major number rather than
@var{major}.@var{minor}.@var{patchlevel} in filesystem paths.

@item --with-native-system-header-dir=@var{dirname}
Specifies that @var{dirname} is the directory that contains native system
header files, rather than @file{/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
@option{--with-sysroot} option and will cause GCC to search
@var{dirname} inside the system root specified by that option.

@item --enable-shared[=@var{package}[,@dots{}]]
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
@samp{libgcc} (also known as @samp{gcc}), @samp{libstdc++} (not
@samp{libstdc++-v3}), @samp{libffi}, @samp{zlib}, @samp{boehm-gc},
@samp{ada}, @samp{libada}, @samp{libgo}, @samp{libobjc}, and @samp{libphobos}.
Note @samp{libiberty} does not support shared libraries at all.

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

Contrast with @option{--enable-host-shared}, which affects @emph{host}
code.

@item --enable-host-shared
Specify that the @emph{host} code should be built into position-independent
machine code (with @option{-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 @option{--enable-shared}, which affects @emph{target}
libraries.

@item --enable-host-pie
Specify that the @emph{host} executables should be built into
position-independent executables (with @option{-fPIE} and @option{-pie}),
yielding a slightly slower compiler (but faster than
@option{--enable-host-shared}).  Position-independent executables are loaded
at random addresses each time they are executed, therefore provide additional
protection against Return Oriented Programming (ROP) attacks.

@option{--enable-host-pie}) may be used with @option{--enable-host-shared}),
in which case @option{-fPIC} is used when compiling, and @option{-pie} when
linking.

@item @anchor{with-gnu-as}--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 @option{--with-gnu-as}.)  If you have more than one
assembler installed on your system, you may want to use this option in
connection with @option{--with-as=@var{pathname}} or
@option{--with-build-time-tools=@var{pathname}}.

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

@itemize @bullet
@item @samp{hppa1.0-@var{any}-@var{any}}
@item @samp{hppa1.1-@var{any}-@var{any}}
@item @samp{sparc-sun-solaris2.@var{any}}
@item @samp{sparc64-@var{any}-solaris2.@var{any}}
@end itemize

@item @anchor{with-as}--with-as=@var{pathname}
Specify that the compiler should use the assembler pointed to by
@var{pathname}, rather than the one found by the standard rules to find
an assembler, which are:
@itemize @bullet
@item
Unless GCC is being built with a cross compiler, check the
@file{@var{libexec}/gcc/@var{target}/@var{version}} directory.
@var{libexec} defaults to @file{@var{exec-prefix}/libexec};
@var{exec-prefix} defaults to @var{prefix}, which
defaults to @file{/usr/local} unless overridden by the
@option{--prefix=@var{pathname}} switch described above.  @var{target}
is the target system triple, such as @samp{sparc-sun-solaris2.7}, and
@var{version} denotes the GCC version, such as 3.0.

@item
If the target system is the same that you are building on, check
operating system specific directories (e.g.@: @file{/usr/ccs/bin} on
Solaris 2).

@item
Check in the @env{PATH} for a tool whose name is prefixed by the
target system triple.

@item
Check in the @env{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).
@end itemize

You may want to use @option{--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.

@item @anchor{with-gnu-ld}--with-gnu-ld
Same as @uref{#with-gnu-as,,@option{--with-gnu-as}}
but for the linker.

@item --with-ld=@var{pathname}
Same as @uref{#with-as,,@option{--with-as}}
but for the linker.

@item --with-dsymutil=@var{pathname}
Same as @uref{#with-as,,@option{--with-as}}
but for the debug linker (only used on Darwin platforms so far).

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

@item --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 @option{--with-sysroot}, and without
@option{--with-native-system-header-dir}.
More documentation about multiarch can be found at
@uref{https://wiki.debian.org/Multiarch}.

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

@item --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 @option{--disable-libvtv} to turn off building libvtv).
@option{--disable-vtable-verify} is the default.

@item --disable-gcov
Specify that the run-time library used for coverage analysis
and associated host tools should not be built.

@item --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., @option{--disable-softfloat}):
@table @code
@item arm-*-*
fpu, 26bit, underscore, interwork, biendian, nofmult.

@item m68*-*-*
softfloat, m68881, m68000, m68020.

@item mips*-*-*
single-float, biendian, softfloat.

@item msp430-*-*
no-exceptions

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

@end table

@item --with-multilib-list=@var{list}
@itemx --without-multilib-list
Specify what multilibs to build.  @var{list} is a comma separated list of
values, possibly consisting of a single value.  Currently only implemented
for aarch64*-*-*, arm*-*-*, loongarch64-*-*, riscv*-*-*, sh*-*-* and
x86-64-*-linux*.  The accepted values and meaning for each target is given
below.

@table @code
@item aarch64*-*-*
@var{list} is a comma separated list of @code{ilp32}, and @code{lp64}
to enable ILP32 and LP64 run-time libraries, respectively.  If
@var{list} is empty, then there will be no multilibs and only the
default run-time library will be built.  If @var{list} is
@code{default} or --with-multilib-list= is not specified, then the
default set of libraries is selected based on the value of
@option{--target}.

@item arm*-*-*
@var{list} is a comma separated list of @code{aprofile} and
@code{rmprofile} to build multilibs for A or R and M architecture
profiles respectively.  Note that, due to some limitation of the current
multilib framework, using the combined @code{aprofile,rmprofile}
multilibs selects in some cases a less optimal multilib than when using
the multilib profile for the architecture targetted.  The special value
@code{default} is also accepted and is equivalent to omitting the
option, i.e., only the default run-time library will be enabled.

@var{list} may instead contain @code{@@name}, to use the multilib
configuration Makefile fragment @file{name} in @file{gcc/config/arm} in
the source tree (it is part of the corresponding sources, after all).
It is recommended, but not required, that files used for this purpose to
be named starting with @file{t-ml-}, to make their intended purpose
self-evident, in line with GCC conventions.  Such files enable custom,
user-chosen multilib lists to be configured.  Whether multiple such
files can be used together depends on the contents of the supplied
files.  See @file{gcc/config/arm/t-multilib} and its supplementary
@file{gcc/config/arm/t-*profile} files for an example of what such
Makefile fragments might look like for this version of GCC.  The macros
expected to be defined in these fragments are not stable across GCC
releases, so make sure they define the @code{MULTILIB}-related macros
expected by the version of GCC you are building.
@ifnothtml
@xref{Target Fragment,, Target Makefile Fragments, gccint, GNU Compiler
Collection (GCC) Internals}.
@end ifnothtml
@ifhtml
See ``Target Makefile Fragments'' in the internals manual.
@end ifhtml

The table below gives the combination of ISAs, architectures, FPUs and
floating-point ABIs for which multilibs are built for each predefined
profile.  The union of these options is considered when specifying both
@code{aprofile} and @code{rmprofile}.

@multitable @columnfractions .15 .28 .30
@item Option @tab aprofile @tab rmprofile
@item ISAs
@tab @code{-marm} and @code{-mthumb}
@tab @code{-mthumb}
@item Architectures@*@*@*@*@*@*
@tab default architecture@*
@code{-march=armv7-a}@*
@code{-march=armv7ve}@*
@code{-march=armv8-a}@*@*@*
@tab default architecture@*
@code{-march=armv6s-m}@*
@code{-march=armv7-m}@*
@code{-march=armv7e-m}@*
@code{-march=armv8-m.base}@*
@code{-march=armv8-m.main}@*
@code{-march=armv7}
@item FPUs@*@*@*@*@*
@tab none@*
@code{-mfpu=vfpv3-d16}@*
@code{-mfpu=neon}@*
@code{-mfpu=vfpv4-d16}@*
@code{-mfpu=neon-vfpv4}@*
@code{-mfpu=neon-fp-armv8}
@tab none@*
@code{-mfpu=vfpv3-d16}@*
@code{-mfpu=fpv4-sp-d16}@*
@code{-mfpu=fpv5-sp-d16}@*
@code{-mfpu=fpv5-d16}@*
@item floating-point@/ ABIs@*@*
@tab @code{-mfloat-abi=soft}@*
@code{-mfloat-abi=softfp}@*
@code{-mfloat-abi=hard}
@tab @code{-mfloat-abi=soft}@*
@code{-mfloat-abi=softfp}@*
@code{-mfloat-abi=hard}
@end multitable

@item loongarch*-*-*
@var{list} is a comma-separated list of the following ABI identifiers:
@code{lp64d[/base]} @code{lp64f[/base]} @code{lp64d[/base]}, where the
@code{/base} suffix may be omitted, to enable their respective run-time
libraries.  If @var{list} is empty or @code{default},
or if @option{--with-multilib-list} is not specified, then the default ABI
as specified by @option{--with-abi} or implied by @option{--target} is selected.

@item riscv*-*-*
@var{list} is a single ABI name.  The target architecture must be either
@code{rv32gc} or @code{rv64gc}.  This will build a single multilib for the
specified architecture and ABI pair.  If @code{--with-multilib-list} is not
given, then a default set of multilibs is selected based on the value of
@option{--target}.  This is usually a large set of multilibs.

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

If @var{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 @code{!}
(exclamation point), then it is added to the list of excluded multilibs.
Entries of this sort should be compatible with @samp{MULTILIB_EXCLUDES}
(once the leading @code{!} has been stripped).

If @option{--with-multilib-list} is not given, then a default set of
multilibs is selected based on the value of @option{--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:
@smallexample
--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
@end smallexample

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

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

If @option{--with-multilib-list} is not given, then only 32-bit and
64-bit run-time libraries will be enabled.
@end table

@item --with-multilib-generator=@var{config}
Specify what multilibs to build.  @var{config} is a semicolon separated list of
values, possibly consisting of a single value.  Currently only implemented
for riscv*-*-elf*.  The accepted values and meanings are given below.


Every config is constructed with four components: architecture string, ABI,
reuse rule with architecture string and reuse rule with sub-extension.

Example 1: Add multi-lib suppport for rv32i with ilp32.
@smallexample
rv32i-ilp32--
@end smallexample

Example 2: Add multi-lib suppport for rv32i with ilp32 and rv32imafd with ilp32.
@smallexample
rv32i-ilp32--;rv32imafd-ilp32--
@end smallexample

Example 3: Add multi-lib suppport for rv32i with ilp32; rv32im with ilp32 and
rv32ic with ilp32 will reuse this multi-lib set.
@smallexample
rv32i-ilp32-rv32im-c
@end smallexample

Example 4: Add multi-lib suppport for rv64ima with lp64; rv64imaf with lp64,
rv64imac with lp64 and rv64imafc with lp64 will reuse this multi-lib set.
@smallexample
rv64ima-lp64--f,c,fc
@end smallexample

@option{--with-multilib-generator} have an optional configuration argument
@option{--cmodel=val} for code model, this option will expand with other
config options, @var{val} is a comma separated list of possible code model,
currently we support medlow and medany.

Example 5: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
medlow code model
@smallexample
rv64ima-lp64--;--cmodel=medlow
@end smallexample

Example 6: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
medlow code model; rv64ima with lp64 and medany code model
@smallexample
rv64ima-lp64--;--cmodel=medlow,medany
@end smallexample

@item --with-endian=@var{endians}
Specify what endians to use.
Currently only implemented for sh*-*-*.

@var{endians} may be one of the following:
@table @code
@item big
Use big endian exclusively.
@item little
Use little endian exclusively.
@item big,little
Use big endian by default.  Provide a multilib for little endian.
@item little,big
Use little endian by default.  Provide a multilib for big endian.
@end table

@item --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++.
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, @option{--enable-threads} is an
alias for @option{--enable-threads=single}.

@item --disable-threads
Specify that threading support should be disabled for the system.
This is an alias for @option{--enable-threads=single}.

@item --enable-threads=@var{lib}
Specify that
@var{lib} is the thread support library.  This affects the Objective-C
compiler and runtime library, and exception handling for other languages
like C++.  The possibilities for @var{lib} are:

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

@item --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
@option{--enable-tls} or @option{--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.

@item --disable-tls
Specify that the target does not support TLS.
This is an alias for @option{--enable-tls=no}.

@item --disable-tm-clone-registry
Disable TM clone registry in libgcc. It is enabled in libgcc by default.
This option helps to reduce code size for embedded targets which do
not use transactional memory.

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

@item --with-schedule=@var{cpu}
@itemx --with-arch=@var{cpu}
@itemx --with-arch-32=@var{cpu}
@itemx --with-arch-64=@var{cpu}
@itemx --with-tune=@var{cpu}
@itemx --with-tune-32=@var{cpu}
@itemx --with-tune-64=@var{cpu}
@itemx --with-abi=@var{abi}
@itemx --with-fpu=@var{type}
@itemx --with-float=@var{type}
These configure options provide default values for the @option{-mschedule=},
@option{-march=}, @option{-mtune=}, @option{-mabi=}, and @option{-mfpu=}
options and for @option{-mhard-float} or @option{-msoft-float}.  As with
@option{--with-cpu}, which switches will be accepted and acceptable values
of the arguments depend on the target.

@item --with-mode=@var{mode}
Specify if the compiler should default to @option{-marm} or @option{-mthumb}.
This option is only supported on ARM targets.

@item --with-stack-offset=@var{num}
This option sets the default for the -mstack-offset=@var{num} option,
and will thus generally also control the setting of this option for
libraries.  This option is only supported on Epiphany targets.

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

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

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

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

@item --with-nan=@var{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 @var{encoding} are:
@table @code
@item legacy
Use the legacy encoding, as with the @option{-mnan=legacy} command-line
option.
@item 2008
Use the 754-2008 encoding, as with the @option{-mnan=2008} command-line
option.
@end table
To use this configuration option you must have an assembler version
installed that supports the @option{-mnan=} command-line option too.
In the absence of this configuration option the default convention is
the legacy encoding, as when neither of the @option{-mnan=2008} and
@option{-mnan=legacy} command-line options has been used.

@item --with-divide=@var{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 @var{type} are:
@table @code
@item traps
Division by zero checks use conditional traps (this is the default on
systems that support conditional traps).
@item breaks
Division by zero checks use the break instruction.
@end table

@item --with-compact-branches=@var{policy}
Specify how the compiler should generate branch instructions.
This option is only supported on the MIPS target.
The possibilities for @var{type} are:
@table @code
@item optimal
Cause a delay slot branch to be used if one is available in the
current ISA and the delay slot is successfully filled. If the delay slot
is not filled, a compact branch will be chosen if one is available.
@item never
Ensures that compact branch instructions will never be generated.
@item always
Ensures that a compact branch instruction will be generated if available.
If a compact branch instruction is not available,
a delay slot form of the branch will be used instead.
This option is supported from MIPS Release 6 onwards.
For pre-R6/microMIPS/MIPS16, this option is just same as never/optimal.
@end table

@c If you make --with-llsc the default for additional targets,
@c update the --with-llsc description in the MIPS section below.

@item --with-llsc
On MIPS targets, make @option{-mllsc} the default when no
@option{-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.

@item --without-llsc
On MIPS targets, make @option{-mno-llsc} the default when no
@option{-mllsc} option is passed.

@item --with-synci
On MIPS targets, make @option{-msynci} the default when no
@option{-mno-synci} option is passed.

@item --without-synci
On MIPS targets, make @option{-mno-synci} the default when no
@option{-msynci} option is passed.  This is the default.

@item --with-lxc1-sxc1
On MIPS targets, make @option{-mlxc1-sxc1} the default when no
@option{-mno-lxc1-sxc1} option is passed.  This is the default.

@item --without-lxc1-sxc1
On MIPS targets, make @option{-mno-lxc1-sxc1} the default when no
@option{-mlxc1-sxc1} option is passed.  The indexed load/store
instructions are not directly a problem but can lead to unexpected
behaviour when deployed in an application intended for a 32-bit address
space but run on a 64-bit processor.  The issue is seen because all
known MIPS 64-bit Linux kernels execute o32 and n32 applications
with 64-bit addressing enabled which affects the overflow behaviour
of the indexed addressing mode.  GCC will assume that ordinary
32-bit arithmetic overflow behaviour is the same whether performed
as an @code{addu} instruction or as part of the address calculation
in @code{lwxc1} type instructions.  This assumption holds true in a
pure 32-bit environment and can hold true in a 64-bit environment if
the address space is accurately set to be 32-bit for o32 and n32.

@item --with-madd4
On MIPS targets, make @option{-mmadd4} the default when no
@option{-mno-madd4} option is passed.  This is the default.

@item --without-madd4
On MIPS targets, make @option{-mno-madd4} the default when no
@option{-mmadd4} option is passed.  The @code{madd4} instruction
family can be problematic when targeting a combination of cores that
implement these instructions differently.  There are two known cores
that implement these as fused operations instead of unfused (where
unfused is normally expected).  Disabling these instructions is the
only way to ensure compatible code is generated; this will incur
a performance penalty.

@item --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.

@item --with-stack-clash-protection-guard-size=@var{size}
On certain targets this option sets the default stack clash protection guard
size as a power of two in bytes.  On AArch64 @var{size} is required to be either
12 (4KB) or 16 (64KB).

@item --with-isa-spec=@var{ISA-spec-string}
On RISC-V targets specify the default version of the RISC-V Unprivileged
(formerly User-Level) ISA specification to produce code conforming to.
The possibilities for @var{ISA-spec-string} are:
@table @code
@item 2.2
Produce code conforming to version 2.2.
@item 20190608
Produce code conforming to version 20190608.
@item 20191213
Produce code conforming to version 20191213.
@end table
In the absence of this configuration option the default version is 20191213.

@item --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
@option{-fuse-cxa-atexit} to be passed by default.

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

@item --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.

@item --with-cpp-install-dir=@var{dirname}
Specify that the user visible @command{cpp} program should be installed
in @file{@var{prefix}/@var{dirname}/cpp}, in addition to @var{bindir}.

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

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

@item --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.

@item --enable-link-serialization
When building GCC, use make dependencies to serialize linking the compilers for
multiple languages, to avoid thrashing on build
systems with limited free memory.  The default is not to add such
dependencies and thus with parallel make potentially link different
compilers concurrently.  If the argument is a positive integer, allow
that number of concurrent link processes for the large binaries.

@item --enable-maintainer-mode
The build rules that regenerate the Autoconf and Automake output files as
well as the GCC master message catalog @file{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 @option{--enable-maintainer-mode} will enable
this.  Note that you need a recent version of the @code{gettext} tools
to do so.

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

@item --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 @option{--enable-bootstrap}.

@item --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 repository 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 @option{--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.

@item --enable-version-specific-runtime-libs
Specify
that runtime libraries should be installed in the compiler specific
subdirectory (@file{@var{libdir}/gcc}) rather than the usual places.  In
addition, @samp{libstdc++}'s include files will be installed into
@file{@var{libdir}} unless you overruled it by using
@option{--with-gxx-include-dir=@var{dirname}}.  Using this option is
particularly useful if you intend to use several versions of GCC in
parallel.  The default is @samp{yes} for @samp{libada}, and @samp{no} for
the remaining libraries.

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

@anchor{AixLdCommand}For detailed information please refer to the AIX
@uref{https://www.ibm.com/support/knowledgecenter/search/%22the%20ld%20command%2C%20also%20called%20the%20linkage%20editor%20or%20binder%22,,ld
Command} reference.

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

As long as static library creation is enabled, upon:
@table @code
@item --with-aix-soname=svr4
 A @code{Static Archive Library} is created:
 @itemize @bullet
 @item using the @samp{libNAME.a} filename scheme
 @item with all the @code{Static Object} files as archive members, which
  @itemize @minus
   @item are used for static linking
  @end itemize
 @end itemize
@end table

While the aix-soname=@samp{svr4} option does not create @code{Shared Object}
files as members of unversioned @code{Archive Library} files any more, package
managers still are responsible to
@uref{./specific.html#TransferAixShobj,,transfer} @code{Shared Object} files
found as member of a previously installed unversioned @code{Archive Library}
file into the newly installed @code{Archive Library} file with the same
filename.

@emph{WARNING:} Creating @code{Shared Object} files with @code{Runtime Linking}
enabled may bloat the TOC, eventually leading to @code{TOC overflow} errors,
requiring the use of either the @option{-Wl,-bbigtoc} linker flag (seen to
break with the @code{GDB} debugger) or some of the TOC-related compiler flags,
@ifnothtml
@xref{RS/6000 and PowerPC Options,, RS/6000 and PowerPC Options, gcc,
Using the GNU Compiler Collection (GCC)}.
@end ifnothtml
@ifhtml
see ``RS/6000 and PowerPC Options'' in the main manual.
@end ifhtml

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

Default is the traditional behavior @option{--with-aix-soname=@samp{aix}}.

@item --enable-languages=@var{lang1},@var{lang2},@dots{}
Specify that only a particular subset of compilers and
their runtime libraries should be built.  For a list of valid values for
@var{langN} you can issue the following command in the
@file{gcc} directory of your GCC source tree:@*
@smallexample
grep ^language= */config-lang.in
@end smallexample
Currently, you can use any of the following:
@code{all}, @code{default}, @code{ada}, @code{c}, @code{c++}, @code{d},
@code{fortran}, @code{go}, @code{jit}, @code{lto}, @code{objc}, @code{obj-c++}.
Building the Ada compiler has special requirements, see below.
If you do not pass this flag, or specify the option @code{default}, then the
default languages available in the @file{gcc} sub-tree will be configured.
Ada, D, Go, Jit, and Objective-C++ are not default languages.  LTO is not a
default language, but is built by default because @option{--enable-lto} is
enabled by default.  The other languages are default languages.  If
@code{all} is specified, then all available languages are built.  An
exception is @code{jit} language, which requires
@option{--enable-host-shared} to be included with @code{all}.

@item --enable-stage1-languages=@var{lang1},@var{lang2},@dots{}
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
@option{--enable-languages}, and the option @code{all} will select all
of the languages enabled by @option{--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 @command{make
stage1-bubble all-target}, or run the testsuite on the stage-1 compiler
for the specified languages using @command{make stage1-start check-gcc}.

@item --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 @samp{make -C gcc gnatlib_and_tools}.

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

@item --disable-libssp
Specify that the run-time libraries for stack smashing protection
should not be built or linked against.  On many targets library support
is provided by the C library instead.

@item --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 @option{--disable-libquadmath-support}
is used.

@item --disable-libquadmath-support
Specify that the Fortran front end and @code{libgfortran} do not add
support for @code{libquadmath} on systems supporting it.

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

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

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

@item --with-advance-toolchain=@var{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 @var{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.

@item --enable-targets=all
@itemx --enable-targets=@var{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.

@item --enable-default-pie
Turn on @option{-fPIE} and @option{-pie} by default.

@item --enable-secureplt
This option enables @option{-msecure-plt} by default for powerpc-linux.
@ifnothtml
@xref{RS/6000 and PowerPC Options,, RS/6000 and PowerPC Options, gcc,
Using the GNU Compiler Collection (GCC)},
@end ifnothtml
@ifhtml
See ``RS/6000 and PowerPC Options'' in the main manual
@end ifhtml

@item --enable-default-ssp
Turn on @option{-fstack-protector-strong} by default.

@item --enable-cld
This option enables @option{-mcld} by default for 32-bit x86 targets.
@ifnothtml
@xref{i386 and x86-64 Options,, i386 and x86-64 Options, gcc,
Using the GNU Compiler Collection (GCC)},
@end ifnothtml
@ifhtml
See ``i386 and x86-64 Options'' in the main manual
@end ifhtml

@item --enable-large-address-aware
The @option{--enable-large-address-aware} option arranges for MinGW
executables to be linked using the @option{--large-address-aware}
option, that enables the use of more than 2GB of memory.  If GCC is
configured with this option, its effects can be reversed by passing the
@option{-Wl,--disable-large-address-aware} option to the so-configured
compiler driver.

@item --enable-win32-registry
@itemx --enable-win32-registry=@var{key}
@itemx --disable-win32-registry
The @option{--enable-win32-registry} option enables Microsoft Windows-hosted GCC
to look up installations paths in the registry using the following key:

@smallexample
@code{HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\@var{key}}
@end smallexample

@var{key} defaults to GCC version number, and can be overridden by the
@option{--enable-win32-registry=@var{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 @option{--disable-win32-registry}
option.  This option has no effect on the other hosts.

@item --nfp
Specify that the machine does not have a floating point unit.  This
option only applies to @samp{m68k-sun-sunos@var{n}}.  On any other
system, @option{--nfp} has no effect.

@item --enable-werror
@itemx --disable-werror
@itemx --enable-werror=yes
@itemx --enable-werror=no
When you specify this option, it controls whether certain files in the
compiler are built with @option{-Werror} in bootstrap stage2 and later.
If you don't specify it, @option{-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 @option{-Werror} are
controlled by the Makefiles.

@item --enable-checking
@itemx --disable-checking
@itemx --enable-checking=@var{list}
This option controls performing internal consistency checks in the compiler.
It does not change the generated code, but adds error checking of the
requested complexity.  This slows down the compiler and may only work
properly if you are building the compiler with GCC@.

When the option is not specified, the active set of checks depends on context.
Namely, bootstrap stage 1 defaults to @samp{--enable-checking=yes}, builds
from release branches or release archives default to
@samp{--enable-checking=release}, and otherwise
@samp{--enable-checking=yes,extra} is used.  When the option is
specified without a @var{list}, the result is the same as
@samp{--enable-checking=yes}.  Likewise, @samp{--disable-checking} is
equivalent to @samp{--enable-checking=no}.

The categories of checks available in @var{list} are @samp{yes} (most common
checks @samp{assert,misc,gc,gimple,rtlflag,runtime,tree,types}), @samp{no}
(no checks at all), @samp{all} (all but @samp{valgrind}), @samp{release}
(cheapest checks @samp{assert,runtime}) or @samp{none} (same as @samp{no}).
@samp{release} checks are always on and to disable them
@samp{--disable-checking} or @samp{--enable-checking=no[,<other checks>]}
must be explicitly requested.  Disabling assertions makes the compiler and
runtime slightly faster but increases the risk of undetected internal errors
causing wrong code to be generated.

Individual checks can be enabled with these flags: @samp{assert}, @samp{df},
@samp{extra}, @samp{fold}, @samp{gc}, @samp{gcac}, @samp{gimple},
@samp{misc}, @samp{rtl}, @samp{rtlflag}, @samp{runtime}, @samp{tree},
@samp{types} and @samp{valgrind}.  @samp{extra} extends @samp{misc}
checking with extra checks that might affect code generation and should
therefore not differ between stage1 and later stages in bootstrap.

The @samp{valgrind} check requires the external @command{valgrind} simulator,
available from @uref{https://valgrind.org}.  The @samp{rtl} checks are
expensive and the @samp{df}, @samp{gcac} and @samp{valgrind} checks are very
expensive.

@item --disable-stage1-checking
@itemx --enable-stage1-checking
@itemx --enable-stage1-checking=@var{list}
This option affects only bootstrap build.  If no @option{--enable-checking}
option is specified the stage1 compiler is built with @samp{yes} checking
enabled, otherwise the stage1 checking flags are the same as specified by
@option{--enable-checking}.  To build the stage1 compiler with
different checking options use @option{--enable-stage1-checking}.
The list of checking options is the same as for @option{--enable-checking}.
If your system is too slow or too small to bootstrap a released compiler
with checking for stage1 enabled, you can use @samp{--disable-stage1-checking}
to disable checking for the stage1 compiler.

@item --enable-coverage
@itemx --enable-coverage=@var{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
@var{level} argument controls whether the compiler is built optimized or
not, values are @samp{opt} and @samp{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.

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

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

@item --enable-nls
@itemx --disable-nls
The @option{--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 @option{--disable-nls} option disables NLS@.

@item --with-included-gettext
If NLS is enabled, the @option{--with-included-gettext} option causes the build
procedure to prefer its copy of GNU @command{gettext}.

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

@item --with-libiconv-prefix=@var{dir}
Search for libiconv header files in @file{@var{dir}/include} and
libiconv library files in @file{@var{dir}/lib}.

@item --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.

@item --enable-decimal-float
@itemx --enable-decimal-float=yes
@itemx --enable-decimal-float=no
@itemx --enable-decimal-float=bid
@itemx --enable-decimal-float=dpd
@itemx --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
@samp{bid} or @samp{dpd}).  The @samp{bid} (binary integer decimal)
format is default on i386 and x86_64 systems, and the @samp{dpd}
(densely packed decimal) format is default on PowerPC systems.

@item --enable-fixed-point
@itemx --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.

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

@item --with-long-double-format=ibm
@itemx --with-long-double-format=ieee
Specify whether @code{long double} uses the IBM extended double format
or the IEEE 128-bit floating point format on PowerPC Linux systems.
This configuration switch will only work on little endian PowerPC
Linux systems and on big endian 64-bit systems where the default cpu
is at least power7 (i.e.@: @option{--with-cpu=power7},
@option{--with-cpu=power8}, or @option{--with-cpu=power9} is used).

If you use the @option{--with-long-double-64} configuration option,
the @option{--with-long-double-format=ibm} and
@option{--with-long-double-format=ieee} options are ignored.

The default @code{long double} format is to use IBM extended double.
Until all of the libraries are converted to use IEEE 128-bit floating
point, it is not recommended to use
@option{--with-long-double-format=ieee}.

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

@item --with-gmp=@var{pathname}
@itemx --with-gmp-include=@var{pathname}
@itemx --with-gmp-lib=@var{pathname}
@itemx --with-mpfr=@var{pathname}
@itemx --with-mpfr-include=@var{pathname}
@itemx --with-mpfr-lib=@var{pathname}
@itemx --with-mpc=@var{pathname}
@itemx --with-mpc-include=@var{pathname}
@itemx --with-mpc-lib=@var{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
(@samp{--with-gmp=@var{gmpinstalldir}},
@samp{--with-mpfr=@/@var{mpfrinstalldir}},
@samp{--with-mpc=@/@var{mpcinstalldir}}).  The
@option{--with-gmp=@/@var{gmpinstalldir}} option is shorthand for
@option{--with-gmp-lib=@/@var{gmpinstalldir}/lib} and
@option{--with-gmp-include=@/@var{gmpinstalldir}/include}.  Likewise the
@option{--with-mpfr=@/@var{mpfrinstalldir}} option is shorthand for
@option{--with-mpfr-lib=@/@var{mpfrinstalldir}/lib} and
@option{--with-mpfr-include=@/@var{mpfrinstalldir}/include}, also the
@option{--with-mpc=@/@var{mpcinstalldir}} option is shorthand for
@option{--with-mpc-lib=@/@var{mpcinstalldir}/lib} and
@option{--with-mpc-include=@/@var{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 (@env{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.

@item --with-isl=@var{pathname}
@itemx --with-isl-include=@var{pathname}
@itemx --with-isl-lib=@var{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 (@samp{--with-isl=@/@var{islinstalldir}}). The
@option{--with-isl=@/@var{islinstalldir}} option is shorthand for
@option{--with-isl-lib=@/@var{islinstalldir}/lib} and
@option{--with-isl-include=@/@var{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.

@item --with-stage1-ldflags=@var{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
@option{--disable-bootstrap}.  If @option{--with-stage1-libs} is not set to a
value, then the default is @samp{-static-libstdc++ -static-libgcc}, if
supported.

@item --with-stage1-libs=@var{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
@option{--disable-bootstrap}.

@item --with-boot-ldflags=@var{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
@samp{-static-libstdc++ -static-libgcc}.

@item --with-boot-libs=@var{libs}
This option may be used to set libraries to be used when linking stage 2
and later when bootstrapping GCC.

@item --with-debug-prefix-map=@var{map}
Convert source directory names using @option{-fdebug-prefix-map} when
building runtime libraries.  @samp{@var{map}} is a space-separated
list of maps of the form @samp{@var{old}=@var{new}}.

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

@item --with-linker-hash-style=@var{choice}
Tells GCC to pass @option{--hash-style=@var{choice}} option to the
linker for all final links. @var{choice} can be one of
@samp{sysv}, @samp{gnu}, and @samp{both} where @samp{sysv} is the default.

@item --enable-gnu-unique-object
@itemx --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.

@item --with-diagnostics-color=@var{choice}
Tells GCC to use @var{choice} as the default for @option{-fdiagnostics-color=}
option (if not used explicitly on the command line).  @var{choice}
can be one of @samp{never}, @samp{auto}, @samp{always}, and @samp{auto-if-env}
where @samp{auto} is the default.  @samp{auto-if-env} makes
@option{-fdiagnostics-color=auto} the default if @env{GCC_COLORS}
is present and non-empty in the environment of the compiler, and
@option{-fdiagnostics-color=never} otherwise.

@item --with-diagnostics-urls=@var{choice}
Tells GCC to use @var{choice} as the default for @option{-fdiagnostics-urls=}
option (if not used explicitly on the command line).  @var{choice}
can be one of @samp{never}, @samp{auto}, @samp{always}, and @samp{auto-if-env}
where @samp{auto} is the default.  @samp{auto-if-env} makes
@option{-fdiagnostics-urls=auto} the default if @env{GCC_URLS}
or @env{TERM_URLS} is present and non-empty in the environment of the
compiler, and @option{-fdiagnostics-urls=never} otherwise.

@item --enable-lto
@itemx --disable-lto
Enable support for link-time optimization (LTO).  This is enabled by
default, and may be disabled using @option{--disable-lto}.

@item --enable-linker-plugin-configure-flags=FLAGS
@itemx --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
(@samp{x86_64-pc-linux-gnu}) host system, but have a 32-bit x86
GNU/Linux (@samp{i686-pc-linux-gnu}) linker executable (which is
executable on the former system), you can configure GCC as follows for
getting compatible linker plugins:

@smallexample
% @var{srcdir}/configure \
    --host=x86_64-pc-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'
@end smallexample

@item --with-plugin-ld=@var{pathname}
Enable an alternate linker to be used at link-time optimization (LTO)
link time when @option{-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 @option{-fuse-linker-plugin} for details.

@item --enable-canonical-system-headers
@itemx --disable-canonical-system-headers
Enable system header path canonicalization for @file{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
@option{--disable-canonical-system-headers}.

@item --with-glibc-version=@var{major}.@var{minor}
Tell GCC that when the GNU C Library (glibc) is used on the target it
will be version @var{major}.@var{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.

@item --enable-as-accelerator-for=@var{target}
Build as offload target compiler. Specify offload host triple by @var{target}.

@item --enable-offload-targets=@var{target1}[=@var{path1}],@dots{},@var{targetN}[=@var{pathN}]
Enable offloading to targets @var{target1}, @dots{}, @var{targetN}.
Offload compilers are expected to be already installed.  Default search
path for them is @file{@var{exec-prefix}}, but it can be changed by
specifying paths @var{path1}, @dots{}, @var{pathN}.

@smallexample
% @var{srcdir}/configure \
    --enable-offload-targets=amdgcn-amdhsa,nvptx-none
@end smallexample

@item --enable-offload-defaulted

Tell GCC that configured but not installed offload compilers and libgomp
plugins are silently ignored.  Useful for distribution compilers where
those are in separate optional packages and where the presence or absence
of those optional packages should determine the actual supported offloading
target set rather than the GCC configure-time selection.

@item --enable-cet
@itemx --disable-cet
Enable building target run-time libraries with control-flow
instrumentation, see @option{-fcf-protection} option.  When
@code{--enable-cet} is specified target libraries are configured
to add @option{-fcf-protection} and, if needed, other target
specific options to a set of building options.

@code{--enable-cet=auto} is default.  CET is enabled on Linux/x86 if
target binutils supports @code{Intel CET} instructions and disabled
otherwise.  In this case, the target libraries are configured to get
additional @option{-fcf-protection} option.

@item --with-riscv-attribute=@samp{yes}, @samp{no} or @samp{default}
Generate RISC-V attribute by default, in order to record extra build
information in object.

The option is disabled by default. It is enabled on RISC-V/ELF (bare-metal)
target if target binutils supported.

@item --enable-s390-excess-float-precision
@itemx --disable-s390-excess-float-precision
On s390(x) targets, enable treatment of float expressions with double precision
when in standards-compliant mode (e.g., when @code{--std=c99} or
@code{-fexcess-precision=standard} are given).

For a native build and cross compiles that have target headers, the option's
default is derived from glibc's behavior. When glibc clamps float_t to double,
GCC follows and enables the option. For other cross compiles, the default is
disabled.

@item --with-zstd=@var{pathname}
@itemx --with-zstd-include=@var{pathname}
@itemx --with-zstd-lib=@var{pathname}
If you do not have the @code{zstd} library installed in a standard
location and you want to build GCC, you can explicitly specify the
directory where it is installed (@samp{--with-zstd=@/@var{zstdinstalldir}}).
The @option{--with-zstd=@/@var{zstdinstalldir}} option is shorthand for
@option{--with-zstd-lib=@/@var{zstdinstalldir}/lib} and
@option{--with-zstd-include=@/@var{zstdinstalldir}/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.
@end table

@subheading Cross-Compiler-Specific Options
The following options only apply to building cross compilers.

@table @code
@item --with-toolexeclibdir=@var{dir}
Specify the installation directory for libraries built with a cross compiler.
The default is @option{$@{gcc_tooldir@}/lib}.

@item --with-sysroot
@itemx --with-sysroot=@var{dir}
Tells GCC to consider @var{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
@option{--sysroot=@var{dir}} was added to the default options of the built
compiler.  The specified directory is not copied into the
install tree, unlike the options @option{--with-headers} and
@option{--with-libs} that this option obsoletes.  The default value,
in case @option{--with-sysroot} is not given an argument, is
@option{$@{gcc_tooldir@}/sys-root}.  If the specified directory is a
subdirectory of @option{$@{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 @code{make install}; it does not affect the compiler which is
used to build GCC itself.

If you specify the @option{--with-native-system-header-dir=@var{dirname}}
option then the compiler will search that directory within @var{dirname} for
native system headers rather than the default @file{/usr/include}.

@item --with-build-sysroot
@itemx --with-build-sysroot=@var{dir}
Tells GCC to consider @var{dir} as the system root (see
@option{--with-sysroot}) while building target libraries, instead of
the directory specified with @option{--with-sysroot}.  This option is
only useful when you are already using @option{--with-sysroot}.  You
can use @option{--with-build-sysroot} when you are configuring with
@option{--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 @option{--with-native-system-header-dir=@var{dirname}}
option then the compiler will search that directory within @var{dirname} for
native system headers rather than the default @file{/usr/include}.

@item --with-headers
@itemx --with-headers=@var{dir}
Deprecated in favor of @option{--with-sysroot}.
Specifies that target headers are available when building a cross compiler.
The @var{dir} argument specifies a directory which has the target include
files.  These include files will be copied into the @file{gcc} install
directory.  @emph{This option with the @var{dir} argument is required} when
building a cross compiler, if @file{@var{prefix}/@var{target}/sys-include}
doesn't pre-exist.  If @file{@var{prefix}/@var{target}/sys-include} does
pre-exist, the @var{dir} argument may be omitted.  @command{fixincludes}
will be run on these files to make them compatible with GCC@.

@item --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.

@item --with-libs
@itemx --with-libs="@var{dir1} @var{dir2} @dots{} @var{dirN}"
Deprecated in favor of @option{--with-sysroot}.
Specifies a list of directories which contain the target runtime
libraries.  These libraries will be copied into the @file{gcc} install
directory.  If the directory list is omitted, this option has no
effect.

@item --with-newlib
Specifies that @samp{newlib} is
being used as the target C library.  This causes @code{__eprintf} to be
omitted from @file{libgcc.a} on the assumption that it will be provided by
@samp{newlib}.

@html
<a name="avr"></a>
@end html
@item --with-avrlibc
Only supported for the AVR target. Specifies that @samp{AVR-Libc} is
being used as the target C@tie{} library.  This causes float support
functions like @code{__addsf3} to be omitted from @file{libgcc.a} on
the assumption that it will be provided by @file{libm.a}.  For more
technical details, cf. @uref{https://gcc.gnu.org/PR54461,,PR54461}.
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.

@item --with-double=@{32|64|32,64|64,32@}
@itemx --with-long-double=@{32|64|32,64|64,32|double@}
Only supported for the AVR target since version@tie{}10.
Specify the default layout available for the C/C++ @samp{double}
and @samp{long double} type, respectively. The following rules apply:
@itemize
@item
The first value after the @samp{=} specifies the default layout (in bits)
of the type and also the default for the @option{-mdouble=} resp.
@option{-mlong-double=} compiler option.
@item
If more than one value is specified, respective multilib variants are
available, and  @option{-mdouble=} resp. @option{-mlong-double=} acts
as a multilib option.
@item
If @option{--with-long-double=double} is specified, @samp{double} and
@samp{long double} will have the same layout.
@item
The defaults are @option{--with-long-double=64,32} and
@option{--with-double=32,64}.  The default @samp{double} layout imposed by
the latter is compatible with older versions of the compiler that implement
@samp{double} as a 32-bit type, which does not comply to the language standard.
@end itemize
Not all combinations of @option{--with-double=} and
@option{--with-long-double=} are valid.  For example, the combination
@option{--with-double=32,64} @option{--with-long-double=32} will be
rejected because the first option specifies the availability of
multilibs for @samp{double}, whereas the second option implies
that @samp{long double} --- and hence also @samp{double} --- is always
32@tie{}bits wide.

@item --with-double-comparison=@{tristate|bool|libf7@}
Only supported for the AVR target since version@tie{}10.
Specify what result format is returned by library functions that
compare 64-bit floating point values (@code{DFmode}).
The GCC default is @samp{tristate}.  If the floating point
implementation returns a boolean instead, set it to @samp{bool}.

@item --with-libf7=@{libgcc|math|math-symbols|no@}
Only supported for the AVR target since version@tie{}10.
Specify to which degree code from LibF7 is included in libgcc.
LibF7 is an ad-hoc, AVR-specific, 64-bit floating point emulation
written in C and (inline) assembly. @samp{libgcc} adds support
for functions that one would usually expect in libgcc like double addition,
double comparisons and double conversions. @samp{math} also adds routines
that one would expect in @file{libm.a}, but with @code{__} (two underscores)
prepended to the symbol names as specified by @file{math.h}.
@samp{math-symbols} also defines weak aliases for the functions
declared in @file{math.h}.  However, @code{--with-libf7} won't
install no @file{math.h} header file whatsoever, this file must come
from elsewhere.  This option sets @option{--with-double-comparison}
to @samp{bool}.

@item --with-nds32-lib=@var{library}
Specifies that @var{library} setting is used for building @file{libgcc.a}.
Currently, the valid @var{library} is @samp{newlib} or @samp{mculib}.
This option is only supported for the NDS32 target.

@item --with-build-time-tools=@var{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 @samp{ia64-hp-hpux} system, you may have the GNU
assembler and linker in @file{/usr/bin}, and the native tools in a
different path, and build a toolchain that expects to find the
native tools in @file{/usr/bin}.

When you use this option, you should ensure that @var{dir} includes
@command{ar}, @command{as}, @command{ld}, @command{nm},
@command{ranlib} and @command{strip} if necessary, and possibly
@command{objdump}.  Otherwise, GCC may use an inconsistent set of
tools.
@end table

@subsubheading Overriding @command{configure} test results

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

@table @code

@item build_configargs
@cindex @code{build_configargs}
The contents of this variable is passed to all build @command{configure}
scripts.

@item host_configargs
@cindex @code{host_configargs}
The contents of this variable is passed to all host @command{configure}
scripts.

@item target_configargs
@cindex @code{target_configargs}
The contents of this variable is passed to all target @command{configure}
scripts.

@end table

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

@subheading Objective-C-Specific Options

The following options apply to the build of the Objective-C runtime library.

@table @code
@item --enable-objc-gc
Specify that an additional variant of the GNU Objective-C runtime library
is built, using an external build of the Boehm-Demers-Weiser garbage
collector (@uref{https://www.hboehm.info/gc/}).  This library needs to be
available for each multilib variant, unless configured with
@option{--enable-objc-gc=@samp{auto}} in which case the build of the
additional runtime library is skipped when not available and the build
continues.

@item --with-target-bdw-gc=@var{list}
@itemx --with-target-bdw-gc-include=@var{list}
@itemx --with-target-bdw-gc-lib=@var{list}
Specify search directories for the garbage collector header files and
libraries. @var{list} is a comma separated list of key value pairs of the
form @samp{@var{multilibdir}=@var{path}}, where the default multilib key
is named as @samp{.} (dot), or is omitted (e.g.@:
@samp{--with-target-bdw-gc=/opt/bdw-gc,32=/opt-bdw-gc32}).

The options @option{--with-target-bdw-gc-include} and
@option{--with-target-bdw-gc-lib} must always be specified together
for each multilib variant and they take precedence over
@option{--with-target-bdw-gc}.  If @option{--with-target-bdw-gc-include}
is missing values for a multilib, then the value for the default
multilib is used (e.g.@: @samp{--with-target-bdw-gc-include=/opt/bdw-gc/include}
@samp{--with-target-bdw-gc-lib=/opt/bdw-gc/lib64,32=/opt-bdw-gc/lib32}).
If none of these options are specified, the library is assumed in
default locations.
@end table

@subheading D-Specific Options

The following options apply to the build of the D runtime library.

@table @code
@item --enable-libphobos-checking
@itemx --disable-libphobos-checking
@itemx --enable-libphobos-checking=@var{list}
This option controls whether run-time checks and contracts are compiled into
the D runtime library.  When the option is not specified, the library is built
with @samp{release} checking.  When the option is specified without a
@var{list}, the result is the same as @samp{--enable-libphobos-checking=yes}.
Likewise, @samp{--disable-libphobos-checking} is equivalent to
@samp{--enable-libphobos-checking=no}.

The categories of checks available in @var{list} are @samp{yes} (compiles
libphobos with @option{-fno-release}), @samp{no} (compiles libphobos with
@option{-frelease}), @samp{all} (same as @samp{yes}), @samp{none} or
@samp{release} (same as @samp{no}).

Individual checks available in @var{list} are @samp{assert} (compiles libphobos
with an extra option @option{-fassert}).

@item --with-libphobos-druntime-only
@itemx --with-libphobos-druntime-only=@var{choice}
Specify whether to build only the core D runtime library (druntime), or both
the core and standard library (phobos) into libphobos.  This is useful for
targets that have full support in druntime, but no or incomplete support
in phobos.  @var{choice} can be one of @samp{auto}, @samp{yes}, and @samp{no}
where @samp{auto} is the default.

When the option is not specified, the default choice @samp{auto} means that it
is inferred whether the target has support for the phobos standard library.
When the option is specified without a @var{choice},  the result is the same as
@samp{--with-libphobos-druntime-only=yes}.

@item --with-target-system-zlib
Use installed @samp{zlib} rather than that included with GCC@.  This needs
to be available for each multilib variant, unless configured with
@option{--with-target-system-zlib=@samp{auto}} in which case the GCC@ included
@samp{zlib} is only used when the system installed library is not available.
@end table

@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***Building****************************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Building, Testing, Configuration, Installing GCC
@end ifnothtml
@ifset buildhtml
@ifnothtml
@chapter Building
@end ifnothtml
@cindex Installing GCC: 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 @command{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
@option{--disable-werror}.

On certain old systems, defining certain environment variables such as
@env{CC} can interfere with the functioning of @command{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 @command{fixincludes} if the
System V file system doesn't support symbolic links.  These problems
result in a failure to fix the declaration of @code{size_t} in
@file{sys/types.h}.  If you find that @code{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 the source repository or snapshots, or if you modify
@file{*.l} files, you need the Flex lexical analyzer generator
installed.  If you do not modify @file{*.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 the source repository 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.

@section Building a native compiler

For a native build, the default configuration is to perform
a 3-stage bootstrap of the compiler when @samp{make} is invoked.
This will build the entire GCC system and ensure that it compiles
itself correctly.  It can be disabled with the @option{--disable-bootstrap}
parameter to @samp{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:

@itemize @bullet
@item
Build tools necessary to build the compiler.

@item
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.

@item
Perform a comparison test of the stage2 and stage3 compilers.

@item
Build runtime libraries using the stage3 compiler from the previous step.

@end itemize

If you are short on disk space you might consider @samp{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 @code{BOOT_CFLAGS} on the command line when
doing @samp{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.)

@smallexample
make BOOT_CFLAGS='-O' bootstrap
@end smallexample

You can place non-default optimization flags into @code{BOOT_CFLAGS}; they
are less well tested here than the default of @samp{-g -O2}, but should
still work.  In a few cases, you may find that you need to specify special
flags such as @option{-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 @code{BOOT_CFLAGS} to avoid the parts
of the stage1 compiler that were miscompiled, or by using @samp{make
bootstrap4} to increase the number of stages of bootstrap.

@code{BOOT_CFLAGS} does not apply to bootstrapped target libraries.
Since these are always compiled with the compiler currently being
bootstrapped, you can use @code{CFLAGS_FOR_TARGET} to modify their
compilation flags, as for non-bootstrapped target libraries.
Again, if the native compiler miscompiles the stage1 compiler, you may
need to work around this by avoiding non-working parts of the stage1
compiler.  Use @code{STAGE1_TFLAGS} to this end.

If you used the flag @option{--enable-languages=@dots{}} 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 @env{LANGUAGES} when calling @samp{make}
@strong{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 @file{Makefile}.)

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

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

@table @asis
@item @samp{bootstrap-O1}
Removes any @option{-O}-started option from @code{BOOT_CFLAGS}, and adds
@option{-O1} to it.  @samp{BUILD_CONFIG=bootstrap-O1} is equivalent to
@samp{BOOT_CFLAGS='-g -O1'}.

@item @samp{bootstrap-O3}
@itemx @samp{bootstrap-Og}
Analogous to @code{bootstrap-O1}.

@item @samp{bootstrap-lto}
Enables Link-Time Optimization for host tools during bootstrapping.
@samp{BUILD_CONFIG=bootstrap-lto} is equivalent to adding
@option{-flto} to @samp{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).

@item @samp{bootstrap-lto-noplugin}
This option is similar to @code{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 @file{libbackend.a} this means
that only the front end is actually LTO optimized.

@item @samp{bootstrap-lto-lean}
This option is similar to @code{bootstrap-lto}, but is intended for
faster build by only using LTO in the final bootstrap stage.
With @samp{make profiledbootstrap} the LTO frontend
is trained only on generator files.

@item @samp{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
@file{contrib/compare-debug} to compare them with the stripped stage3
object files.  If @code{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
@code{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.

@item @samp{bootstrap-debug-big}
Rather than comparing stripped object files, as in
@code{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 @samp{bootstrap-debug}.

@item @samp{bootstrap-debug-lean}
This option saves disk space compared with @code{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
@option{-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.

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

There aren't @code{-lean} or @code{-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.

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

@item @samp{bootstrap-cet}
This option enables Intel CET for host tools during bootstrapping.
@samp{BUILD_CONFIG=bootstrap-cet} is equivalent to adding
@option{-fcf-protection} to @samp{BOOT_CFLAGS}.  This option
assumes that the host supports Intel CET (e.g.@: GNU assembler version
2.30 or later).

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

@item @samp{bootstrap-asan}
Compiles GCC itself using Address Sanitization in order to catch invalid memory
accesses within the GCC code.

@item @samp{bootstrap-hwasan}
Compiles GCC itself using HWAddress Sanitization in order to catch invalid
memory accesses within the GCC code.  This option is only available on AArch64
systems that are running Linux kernel version 5.4 or later.

@end table

@section 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.

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

@itemize @bullet
@item
Build host tools necessary to build the compiler.

@item
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.

@item
Build the compiler (single stage only).

@item
Build runtime libraries using the compiler from the previous step.
@end itemize

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
@file{@var{prefix}/@var{target}/bin}.  Here is a table of the tools
you should put in this directory:

@table @file
@item as
This should be the cross-assembler.

@item ld
This should be the cross-linker.

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

@item ranlib
This should be a program to construct a symbol table in an archive file.
@end table

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

@section 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 @samp{make -j 2}
instead of @samp{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.

@section Building the Ada compiler

@ifnothtml
@ref{GNAT-prerequisite}.
@end ifnothtml
@ifhtml
@uref{prerequisites.html#GNAT-prerequisite,,GNAT prerequisites}.
@end ifhtml

@section Building the D compiler

@ifnothtml
@ref{GDC-prerequisite}.
@end ifnothtml
@ifhtml
@uref{prerequisites.html#GDC-prerequisite,,GDC prerequisites}.
@end ifhtml

@section 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 @code{make profiledbootstrap}.

When @samp{make profiledbootstrap} is run, it will first build a @code{stage1}
compiler.  This compiler is used to build a @code{stageprofile} compiler
instrumented to collect execution counts of instruction and branch
probabilities.  Training run is done by building @code{stagetrain}
compiler.  Finally a @code{stagefeedback} compiler is built
using the information collected.

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

On Linux/x86_64 hosts with some restrictions (no virtualization) it is
also possible to do autofdo build with @samp{make
autoprofiledback}. This uses Linux perf to sample branches in the
binary and then rebuild it with feedback derived from the profile.
Linux perf and the @code{autofdo} toolkit needs to be installed for
this.

Only the profile from the current build is used, so when an error
occurs it is recommended to clean before restarting. Otherwise
the code quality may be much worse.

@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***Testing*****************************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Testing, Final install, Building, Installing GCC
@end ifnothtml
@ifset testhtml
@ifnothtml
@chapter Installing GCC: Testing
@end ifnothtml
@cindex Testing
@cindex Installing GCC: Testing
@cindex Testsuite

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
@uref{https://gcc.gnu.org/ml/gcc-testresults/,,gcc-testresults mailing list}.
Some of these archived results are linked from the build status lists
at @uref{https://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 @uref{download.html,,downloaded the testsuites}.
These are included in the source tarball.

Second, you must have the testing tools installed.  This includes
@uref{https://www.gnu.org/software/dejagnu/,,DejaGnu}, Tcl, and Expect;
the DejaGnu site has links to these.
Some optional tests also require Python3 and pytest module.

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

@smallexample
TCL_LIBRARY = /usr/local/share/tcl8.0
DEJAGNULIBS = /usr/local/share/dejagnu
@end smallexample

(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):
@smallexample
cd @var{objdir}; make -k check
@end smallexample

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
@samp{WARNING: Couldn't find the global config file.} or
@samp{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 @uref{https://gcc.gnu.org/simtest-howto.html}.

@section How can you run the testsuite on selected tests?

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


A more selective way to just run all @command{gcc} execute tests in the
testsuite is to use

@smallexample
make check-gcc RUNTESTFLAGS="execute.exp @var{other-options}"
@end smallexample

Likewise, in order to run only the @command{g++} ``old-deja'' tests in
the testsuite with filenames matching @samp{9805*}, you would use

@smallexample
make check-g++ RUNTESTFLAGS="old-deja.exp=9805* @var{other-options}"
@end smallexample

The file-matching expression following @var{filename}@command{.exp=} is treated
as a series of whitespace-delimited glob expressions so that multiple patterns
may be passed, although any whitespace must either be escaped or surrounded by
single quotes if multiple expressions are desired. For example,

@smallexample
make check-g++ RUNTESTFLAGS="old-deja.exp=9805*\ virtual2.c @var{other-options}"
make check-g++ RUNTESTFLAGS="'old-deja.exp=9805* virtual2.c' @var{other-options}"
@end smallexample

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

@section Passing options and running multiple testsuites

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

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

will run the standard @command{g++} testsuites (``unix'' is the target name
for a standard native testsuite situation), passing
@samp{-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:

@smallexample
@dots{}"--target_board=arm-sim\@{-mhard-float,-msoft-float\@}\@{-O1,-O2,-O3,\@}"
@end smallexample

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

@smallexample
--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'
@end smallexample

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

@smallexample
@dots{}"--target_board=unix/-Wextra\@{-O3,-fno-strength\@}\@{-fomit-frame,\@}"
@end smallexample

will generate four combinations, all involving @samp{-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 @command{make}
do the parallel runs.  Instead of using @samp{--target_board}, use a
special makefile target:

@smallexample
make -j@var{N} check-@var{testsuite}//@var{test-target}/@var{option1}/@var{option2}/@dots{}
@end smallexample

For example,

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

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


@section How to interpret test results

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

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

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.


@section Submitting test results

If you want to report the results to the GCC project, use the
@file{contrib/test_summary} shell script.  Start it in the @var{objdir} with

@smallexample
@var{srcdir}/contrib/test_summary -p your_commentary.txt \
    -m gcc-testresults@@gcc.gnu.org |sh
@end smallexample

This script uses the @command{Mail} program to send the results, so
make sure it is in your @env{PATH}.  The file @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.

@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***Final install***********************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Final install, , Testing, Installing GCC
@end ifnothtml
@ifset finalinstallhtml
@ifnothtml
@chapter Installing GCC: Final installation
@end ifnothtml

Now that GCC has been built (and optionally tested), you can install it with
@smallexample
cd @var{objdir} && make install
@end smallexample

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 @file{@var{prefix}/bin} where @var{prefix} is the value
you specified with the @option{--prefix} to configure (or
@file{/usr/local} by default).  (If you specified @option{--bindir},
that directory will be used instead; otherwise, if you specified
@option{--exec-prefix}, @file{@var{exec-prefix}/bin} will be used.)
Headers for the C++ library are installed in
@file{@var{prefix}/include}; libraries in @file{@var{libdir}}
(normally @file{@var{prefix}/lib}); internal parts of the compiler in
@file{@var{libdir}/gcc} and @file{@var{libexecdir}/gcc}; documentation
in info format in @file{@var{infodir}} (normally
@file{@var{prefix}/info}).

When installing cross-compilers, GCC's executables
are not only installed into @file{@var{bindir}}, that
is, @file{@var{exec-prefix}/bin}, but additionally into
@file{@var{exec-prefix}/@var{target-alias}/bin}, if that directory
exists.  Typically, such @dfn{tooldirs} hold target-specific
binutils, including assembler and linker.

Installation into a temporary staging area or into a @command{chroot}
jail can be achieved with the command

@smallexample
make DESTDIR=@var{path-to-rootdir} install
@end smallexample

@noindent
where @var{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 @code{DESTDIR}
need not exist yet; it will be created if necessary.

There is a subtle point with tooldirs and @code{DESTDIR}:
If you relocate a cross-compiler installation with
e.g.@: @samp{DESTDIR=@var{rootdir}}, then the directory
@file{@var{rootdir}/@var{exec-prefix}/@var{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 @code{DESTDIR} feature.

You can install stripped programs and libraries with

@smallexample
make install-strip
@end smallexample

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

@itemize @bullet
@item
Output from running @file{@var{srcdir}/config.guess}.  Do not send
that file itself, just the one-line output from running it.

@item
The output of @samp{gcc -v} for your newly installed @command{gcc}.
This tells us which version of GCC you built and the options you passed to
configure.

@item
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 @samp{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.

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

@item
The version of the Linux kernel, available from @samp{uname --version}
or @samp{uname -a}.

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

@item
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.
@end itemize

We'd also like to know if the
@ifnothtml
@ref{Specific, host/target specific installation notes}
@end ifnothtml
@ifhtml
@uref{specific.html,,host/target specific installation notes}
@end ifhtml
didn't include your host/target information or if that information is
incomplete or out of date.  Send a note to
@email{gcc@@gcc.gnu.org} detailing how the information should be changed.

If you find a bug, please report it following the
@uref{../bugs/,,bug reporting guidelines}.

If you want to print the GCC manuals, do @samp{cd @var{objdir}; make
dvi}.  You will need to have @command{texi2dvi} (version at least 4.7)
and @TeX{} installed.  This creates a number of @file{.dvi} files in
subdirectories of @file{@var{objdir}}; these may be converted for
printing with programs such as @command{dvips}.  Alternately, by using
@samp{make pdf} in place of @samp{make dvi}, you can create documentation
in the form of @file{.pdf} files; this requires @command{texi2pdf}, which
is included with Texinfo version 4.8 and later.  You can also
@uref{https://shop.fsf.org/,,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 @samp{cd
@var{objdir}; make html} and HTML will be generated for the gcc manuals in
@file{@var{objdir}/gcc/HTML}.

@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***Binaries****************************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Binaries, Specific, Installing GCC, Top
@end ifnothtml
@ifset binarieshtml
@ifnothtml
@chapter Installing GCC: Binaries
@end ifnothtml
@cindex Binaries
@cindex 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.

@itemize
@item
AIX:
@itemize
@item
@uref{http://www.perzl.org/aix/,,AIX Open Source Packages (AIX5L AIX 6.1
AIX 7.1)}.
@end itemize

@item
DOS---@uref{http://www.delorie.com/djgpp/,,DJGPP}.

@item
HP-UX:
@itemize
@item
@uref{http://hpux.connect.org.uk/,,HP-UX Porting Center};
@end itemize

@item
Solaris 2 (SPARC, Intel):
@itemize
@item
@uref{https://www.opencsw.org/,,OpenCSW}
@end itemize

@item
macOS:
@itemize
@item
The @uref{https://brew.sh,,Homebrew} package manager;
@item
@uref{https://www.macports.org,,MacPorts}.
@end itemize

@item
Microsoft Windows:
@itemize
@item
The @uref{https://sourceware.org/cygwin/,,Cygwin} project;
@item
The @uref{https://osdn.net/projects/mingw/,,MinGW} and
@uref{https://www.mingw-w64.org/,,mingw-w64} projects.
@end itemize

@item
@uref{http://www.openpkg.org/,,OpenPKG} offers binaries for quite a
number of platforms.

@item
The @uref{https://gcc.gnu.org/wiki/GFortranBinaries,,GFortran Wiki} has
links to GNU Fortran binaries for several platforms.
@end itemize

@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***Specific****************************************************************
@ifnothtml
@comment node-name,     next,          previous, up
@node    Specific, GNU Free Documentation License, Binaries, Top
@end ifnothtml
@ifset specifichtml
@ifnothtml
@chapter Host/target specific installation notes for GCC
@end ifnothtml
@cindex Specific
@cindex Specific installation notes
@cindex Target specific installation
@cindex Host specific installation
@cindex Target specific installation notes

Please read this document carefully @emph{before} installing the
GNU Compiler Collection on your machine.

Note that this list of install notes is @emph{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. 

@ifhtml
@itemize
@item
@uref{#aarch64-x-x,,aarch64*-*-*}
@item
@uref{#alpha-x-x,,alpha*-*-*}
@item
@uref{#amdgcn-x-amdhsa,,amdgcn-*-amdhsa}
@item
@uref{#amd64-x-solaris2,,amd64-*-solaris2*}
@item
@uref{#arc-x-elf32,,arc-*-elf32}
@item
@uref{#arc-linux-uclibc,,arc-linux-uclibc}
@item
@uref{#arm-x-eabi,,arm-*-eabi}
@item
@uref{#avr,,avr}
@item
@uref{#bfin,,Blackfin}
@item
@uref{#cris,,cris}
@item
@uref{#dos,,DOS}
@item
@uref{#epiphany-x-elf,,epiphany-*-elf}
@item
@uref{#ft32-x-elf,,ft32-*-elf}
@item
@uref{#x-x-freebsd,,*-*-freebsd*}
@item
@uref{#h8300-hms,,h8300-hms}
@item
@uref{#hppa-hp-hpux,,hppa*-hp-hpux*}
@item
@uref{#hppa-hp-hpux10,,hppa*-hp-hpux10}
@item
@uref{#hppa-hp-hpux11,,hppa*-hp-hpux11}
@item
@uref{#x-x-linux-gnu,,*-*-linux-gnu}
@item
@uref{#ix86-x-linux,,i?86-*-linux*}
@item
@uref{#ix86-x-solaris2,,i?86-*-solaris2*}
@item
@uref{#ia64-x-linux,,ia64-*-linux}
@item
@uref{#ia64-x-hpux,,ia64-*-hpux*}
@item
@uref{#x-ibm-aix,,*-ibm-aix*}
@item
@uref{#iq2000-x-elf,,iq2000-*-elf}
@item
@uref{#loongarch,,loongarch}
@item
@uref{#lm32-x-elf,,lm32-*-elf}
@item
@uref{#lm32-x-uclinux,,lm32-*-uclinux}
@item
@uref{#m32c-x-elf,,m32c-*-elf}
@item
@uref{#m32r-x-elf,,m32r-*-elf}
@item
@uref{#m68k-x-x,,m68k-*-*}
@item
@uref{#m68k-x-uclinux,,m68k-*-uclinux}
@item
@uref{#microblaze-x-elf,,microblaze-*-elf}
@item
@uref{#mips-x-x,,mips-*-*}
@item
@uref{#moxie-x-elf,,moxie-*-elf}
@item
@uref{#msp430-x-elf,,msp430-*-elf}
@item
@uref{#nds32le-x-elf,,nds32le-*-elf}
@item
@uref{#nds32be-x-elf,,nds32be-*-elf}
@item
@uref{#nvptx-x-none,,nvptx-*-none}
@item
@uref{#or1k-x-elf,,or1k-*-elf}
@item
@uref{#or1k-x-linux,,or1k-*-linux}
@item
@uref{#powerpc-x-x,,powerpc*-*-*}
@item
@uref{#powerpc-x-darwin,,powerpc-*-darwin*}
@item
@uref{#powerpc-x-elf,,powerpc-*-elf}
@item
@uref{#powerpc-x-linux-gnu,,powerpc*-*-linux-gnu*}
@item
@uref{#powerpc-x-netbsd,,powerpc-*-netbsd*}
@item
@uref{#powerpc-x-eabisim,,powerpc-*-eabisim}
@item
@uref{#powerpc-x-eabi,,powerpc-*-eabi}
@item
@uref{#powerpcle-x-elf,,powerpcle-*-elf}
@item
@uref{#powerpcle-x-eabisim,,powerpcle-*-eabisim}
@item
@uref{#powerpcle-x-eabi,,powerpcle-*-eabi}
@item
@uref{#riscv32-x-elf,,riscv32-*-elf}
@item
@uref{#riscv32-x-linux,,riscv32-*-linux}
@item
@uref{#riscv64-x-elf,,riscv64-*-elf}
@item
@uref{#riscv64-x-linux,,riscv64-*-linux}
@item
@uref{#rl78-x-elf,,rl78-*-elf}
@item
@uref{#rx-x-elf,,rx-*-elf}
@item
@uref{#s390-x-linux,,s390-*-linux*}
@item
@uref{#s390x-x-linux,,s390x-*-linux*}
@item
@uref{#s390x-ibm-tpf,,s390x-ibm-tpf*}
@item
@uref{#x-x-solaris2,,*-*-solaris2*}
@item
@uref{#sparc-x-x,,sparc*-*-*}
@item
@uref{#sparc-sun-solaris2,,sparc-sun-solaris2*}
@item
@uref{#sparc-x-linux,,sparc-*-linux*}
@item
@uref{#sparc64-x-solaris2,,sparc64-*-solaris2*}
@item
@uref{#sparcv9-x-solaris2,,sparcv9-*-solaris2*}
@item
@uref{#c6x-x-x,,c6x-*-*}
@item
@uref{#visium-x-elf, visium-*-elf}
@item
@uref{#x-x-vxworks,,*-*-vxworks*}
@item
@uref{#x86-64-x-x,,x86_64-*-*, amd64-*-*}
@item
@uref{#x86-64-x-solaris2,,x86_64-*-solaris2*}
@item
@uref{#xtensa-x-elf,,xtensa*-*-elf}
@item
@uref{#xtensa-x-linux,,xtensa*-*-linux*}
@item
@uref{#windows,,Microsoft Windows}
@item
@uref{#x-x-cygwin,,*-*-cygwin}
@item
@uref{#x-x-mingw32,,*-*-mingw32}
@item
@uref{#os2,,OS/2}
@item
@uref{#older,,Older systems}
@end itemize

@itemize
@item
@uref{#elf,,all ELF targets} (SVR4, Solaris 2, etc.)
@end itemize
@end ifhtml


@html
<!-- -------- host/target specific issues start here ---------------- -->
<hr />
@end html
@anchor{aarch64-x-x}
@heading aarch64*-*-*
Binutils pre 2.24 does not have support for selecting @option{-mabi} and
does not support ILP32.  If it is used to build GCC 4.9 or later, GCC will
not support option @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
@option{--enable-fix-cortex-a53-835769} option.  This will enable the fix by
default and can be explicitly disabled during compilation by passing the
@option{-mno-fix-cortex-a53-835769} option.  Conversely,
@option{--disable-fix-cortex-a53-835769} will disable the workaround by
default.  The workaround is disabled by default if neither of
@option{--enable-fix-cortex-a53-835769} or
@option{--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
@option{--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
@option{-mno-fix-cortex-a53-843419} option.  Conversely,
@option{--disable-fix-cortex-a53-843419} will disable the workaround by default.
The workaround is disabled by default if neither of
@option{--enable-fix-cortex-a53-843419} or
@option{--disable-fix-cortex-a53-843419} is given at configure time.

To enable Branch Target Identification Mechanism and Return Address Signing by
default at configure time use the @option{--enable-standard-branch-protection}
option.  This is equivalent to having @option{-mbranch-protection=standard}
during compilation.  This can be explicitly disabled during compilation by
passing the @option{-mbranch-protection=none} option which turns off all
types of branch protections.  Conversely,
@option{--disable-standard-branch-protection} will disable both the
protections by default.  This mechanism is turned off by default if neither
of the options are given at configure time.

@html
<hr />
@end html
@anchor{alpha-x-x}
@heading alpha*-*-*
This section contains general configuration information for all
Alpha-based platforms using ELF@.  In addition to reading this
section, please read all other sections that match your target.

@html
<hr />
@end html
@anchor{amd64-x-solaris2}
@heading amd64-*-solaris2*
This is a synonym for @samp{x86_64-*-solaris2*}.

@html
<hr />
@end html
@anchor{amdgcn-x-amdhsa}
@heading amdgcn-*-amdhsa
AMD GCN GPU target.

Instead of GNU Binutils, you will need to install LLVM 13.0.1, or later, and copy
@file{bin/llvm-mc} to @file{amdgcn-amdhsa/bin/as},
@file{bin/lld} to @file{amdgcn-amdhsa/bin/ld},
@file{bin/llvm-nm} to @file{amdgcn-amdhsa/bin/nm}, and
@file{bin/llvm-ar} to both @file{bin/amdgcn-amdhsa-ar} and
@file{bin/amdgcn-amdhsa-ranlib}.

Use Newlib (3.2.0, or newer).

To run the binaries, install the HSA Runtime from the
@uref{https://rocm.github.io,,ROCm Platform}, and use
@file{libexec/gcc/amdhsa-amdhsa/@var{version}/gcn-run} to launch them
on the GPU.

@html
<hr />
@end html
@anchor{arc-x-elf32}
@heading arc-*-elf32

Use @samp{configure --target=arc-elf32 --with-cpu=@var{cpu} --enable-languages="c,c++"}
to configure GCC, with @var{cpu} being one of @samp{arc600}, @samp{arc601},
or @samp{arc700}@.

@html
<hr />
@end html
@anchor{arc-linux-uclibc}
@heading arc-linux-uclibc

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

@html
<hr />
@end html
@anchor{arm-x-eabi}
@heading arm-*-eabi
ARM-family processors.

Building the Ada frontend commonly fails (an infinite loop executing
@code{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.

@html
<hr />
@end html
@anchor{avr}
@heading avr
ATMEL AVR-family micro controllers.  These are used in embedded
applications.  There are no standard Unix configurations.
@ifnothtml
@xref{AVR Options,, AVR Options, gcc, Using the GNU Compiler
Collection (GCC)},
@end ifnothtml
@ifhtml
See ``AVR Options'' in the main manual
@end ifhtml
for the list of supported MCU types.

Use @samp{configure --target=avr --enable-languages="c"} to configure GCC@.

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

@itemize @bullet
@item
@uref{http://www.nongnu.org/avr/,,http://www.nongnu.org/avr/}
@item
@uref{http://www.amelek.gda.pl/avr/,,http://www.amelek.gda.pl/avr/}
@end itemize

The following error:
@smallexample
Error: register required
@end smallexample

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

@html
<hr />
@end html
@anchor{bfin}
@heading Blackfin
The Blackfin processor, an Analog Devices DSP.
@ifnothtml
@xref{Blackfin Options,, Blackfin Options, gcc, Using the GNU Compiler
Collection (GCC)},
@end ifnothtml
@ifhtml
See ``Blackfin Options'' in the main manual
@end ifhtml

More information, and a version of binutils with support for this processor,
are available at @uref{https://sourceforge.net/projects/adi-toolchain/}.

@html
<hr />
@end html
@anchor{cris}
@heading CRIS
CRIS is a CPU architecture in Axis Communications systems-on-a-chip, for
example the ETRAX series.  These are used in embedded applications.

@ifnothtml
@xref{CRIS Options,, CRIS Options, gcc, Using the GNU Compiler
Collection (GCC)},
@end ifnothtml
@ifhtml
See ``CRIS Options'' in the main manual
@end ifhtml
for a list of CRIS-specific options.

Use @samp{configure --target=cris-elf} to configure GCC@ for building
a cross-compiler for CRIS.
@html
<hr />
@end html
@anchor{dos}
@heading DOS
Please have a look at the @uref{binaries.html,,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.

@html
<hr />
@end html
@anchor{epiphany-x-elf}
@heading epiphany-*-elf
Adapteva Epiphany.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{x-x-freebsd}
@heading *-*-freebsd*
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 @code{__cxa_atexit} by default
(on FreeBSD 6 or later).  The use of @code{dl_iterate_phdr} inside
@file{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.  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, @option{--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 @file{/usr/bin} probably works
with this release of GCC@.  Bootstrapping against the latest GNU
binutils and/or the version found in @file{/usr/ports/devel/binutils} has
been known to enable additional features and improve overall testsuite
results.  However, it is currently known that boehm-gc may not configure
properly on FreeBSD prior to the FreeBSD 7.0 release with GNU binutils
after 2.16.1.

@html
<hr />
@end html
@anchor{ft32-x-elf}
@heading ft32-*-elf
The FT32 processor.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{h8300-hms}
@heading h8300-hms
Renesas H8/300 series of processors.

Please have a look at the @uref{binaries.html,,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.

@html
<hr />
@end html
@anchor{hppa-hp-hpux}
@heading 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
@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}} and
@option{--with-as=@dots{}} 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, @option{-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
@samp{make all-host all-target} after getting the failure from @samp{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 @samp{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, @env{UNIX_STD} can be set to @samp{95}
or @samp{98}.  Another way is to add an appropriate set of predefines
to @env{CC}.  The description for the @option{munix=} option contains
a list of the predefines used with each standard.

More specific information to @samp{hppa*-hp-hpux*} targets follows.

@html
<hr />
@end html
@anchor{hppa-hp-hpux10}
@heading hppa*-hp-hpux10
For hpux10.20, we @emph{highly} recommend you pick up the latest sed patch
@code{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.

@html
<hr />
@end html
@anchor{hppa-hp-hpux11}
@heading 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 library haven't been ported to 64-bit HP-UX@ and doesn't build.

Refer to @uref{binaries.html,,binaries} for information about obtaining
precompiled GCC binaries for HP-UX@.  Precompiled binaries must be obtained
to build the Ada language as it cannot 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.

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 @samp{hppa[1-2]*-hp-hpux11*} target generates code
for the 32-bit PA-RISC runtime architecture and uses the HP linker.
The @samp{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 @env{PATH} or @env{CC} so
that configure finds an appropriate compiler for the initial bootstrap.
When @env{CC} is used, the definition should contain the options that are
needed whenever @env{CC} is used.

Specifically, options that determine the runtime architecture must be
in @env{CC} to correctly select the target for the build.  It is also
convenient to place many other compiler options in @env{CC}.  For example,
@env{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 @option{+DA2.0W} option will result in
the automatic selection of the @samp{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
@option{-Ac} option.  These defines aren't necessary with @option{-Ae}.

It is best to explicitly configure the @samp{hppa64-hp-hpux11*} target
with the @option{--with-ld=@dots{}} 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.  @code{PHSS_26559} and @code{PHSS_24304} are the
oldest linker patches that are known to work.  They are for HP-UX
11.00 and 11.11, respectively.  @code{PHSS_24303}, the companion to
@code{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 @option{+init} and @option{+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
@samp{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 cannot successfully link binaries
containing branch offsets larger than 8 megabytes.  In addition,
there are problems linking shared libraries, linking executables
with @option{-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 cannot 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 @option{--disable-symvers} when using GNU ld.

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

@html
<hr />
@end html
@anchor{x-x-linux-gnu}
@heading *-*-linux-gnu
The @code{.init_array} and @code{.fini_array} sections are enabled
unconditionally which requires at least glibc 2.1 and binutils 2.12.

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.

@html
<hr />
@end html
@anchor{ix86-x-linux}
@heading i?86-*-linux*
As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
See @uref{https://gcc.gnu.org/PR10877,,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 @uref{https://www.bitwizard.nl/sig11/,,www.bitwizard.nl}.

@html
<hr />
@end html
@anchor{ix86-x-solaris2}
@heading i?86-*-solaris2*
Use this for Solaris 11.3 or later on x86 and x86-64 systems.  Starting
with GCC 4.7, there is also a 64-bit @samp{amd64-*-solaris2*} or
@samp{x86_64-*-solaris2*} configuration that corresponds to
@samp{sparcv9-sun-solaris2*}.

It is recommended that you configure GCC to use the GNU assembler.  The
versions included in Solaris 11.3, from GNU binutils 2.23.1 or
newer (available as @file{/usr/bin/gas} and
@file{/usr/gnu/bin/as}), work fine.  The current version, from GNU
binutils 2.34, is known to work.  Recent versions of the Solaris assembler in
@file{/usr/bin/as} work almost as well, though.

For linking, the Solaris linker is preferred.  If you want to use the GNU
linker instead, the version in Solaris 11.3, from GNU binutils 2.23.1 or
newer (in @file{/usr/gnu/bin/ld} and @file{/usr/bin/gld}), works,
as does the latest version, from GNU binutils 2.34.

To use GNU @command{as}, configure with the options
@option{--with-gnu-as --with-as=@//usr/@/gnu/@/bin/@/as}.  It may be necessary
to configure with @option{--without-gnu-ld --with-ld=@//usr/@/ccs/@/bin/@/ld} to
guarantee use of Solaris @command{ld}.
@c FIXME: why --without-gnu-ld --with-ld?

@html
<hr />
@end html
@anchor{ia64-x-linux}
@heading 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
@option{--with-system-libunwind}, then you must use libunwind 0.98 or
later.

@html
<hr />
@end html
@anchor{ia64-x-hpux}
@heading 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 @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, @option{--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, @option{--enable-libunwind-exceptions} is
removed and the system libunwind library will always be used.

@html
<hr />
<!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
@end html
@anchor{x-ibm-aix}
@heading *-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
@file{/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
@var{LDR_CNTRL} environment variable, e.g.,

@smallexample
% LDR_CNTRL=MAXDATA=0x50000000
% export LDR_CNTRL
@end smallexample

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 @command{/bin/sh}, e.g.,

@smallexample
% CONFIG_SHELL=/opt/freeware/bin/bash
% export CONFIG_SHELL
@end smallexample

and then proceed as described in @uref{build.html,,the build
instructions}, where we strongly recommend specifying an absolute path
to invoke @var{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 @code{alloca} when building GCC generally are due
to an incorrect definition of @code{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 @strong{must} be invoked as @command{cc}
(not @command{xlc}).  Once @command{configure} has been informed of
@command{xlc}, one needs to use @samp{make distclean} to remove the
configure cache files and ensure that @env{CC} environment variable
does not provide a definition that will confuse @command{configure}.
If this error occurs during stage2 or later, then the problem most likely
is the version of Make (see above).

The native @command{as} and @command{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 @file{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)

@anchor{TransferAixShobj}
@samp{libstdc++} in GCC 3.4 increments the major version number of the
shared object and GCC installation places the @file{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 @samp{libstdc++} shared object needs to be available
to the AIX runtime loader.  The GCC 3.1 @samp{libstdc++.so.4}, if
present, and GCC 3.3 @samp{libstdc++.so.5} shared objects can be
installed for runtime dynamic loading using the following steps to set
the @samp{F_LOADONLY} flag in the shared object for @emph{each}
multilib @file{libstdc++.a} installed:

Extract the shared objects from the currently installed
@file{libstdc++.a} archive:
@smallexample
% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
@end smallexample

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

Archive the runtime-only shared object in the GCC 3.4
@file{libstdc++.a} archive:
@smallexample
% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
@end smallexample

Eventually, the
@uref{./configure.html#WithAixSoname,,@option{--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 @option{-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 @option{-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
@uref{https://techsupport.services.ibm.com/,,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
@uref{https://techsupport.services.ibm.com/,,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
@uref{https://techsupport.services.ibm.com/,,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., @samp{.}  vs @samp{,} 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 @env{LANG}
environment variable to @samp{C} or @samp{En_US}.

A default can be specified with the @option{-mcpu=@var{cpu_type}}
switch and using the configure option @option{--with-cpu-@var{cpu_type}}.

@html
<hr />
@end html
@anchor{iq2000-x-elf}
@heading iq2000-*-elf
Vitesse IQ2000 processors.  These are used in embedded
applications.  There are no standard Unix configurations.

@html
<hr />
@end html
@anchor{lm32-x-elf}
@heading lm32-*-elf
Lattice Mico32 processor.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{lm32-x-uclinux}
@heading lm32-*-uclinux
Lattice Mico32 processor.
This configuration is intended for embedded systems running uClinux.

@html
<hr />
@end html
@anchor{loongarch}
@heading LoongArch
LoongArch processor.
The following LoongArch targets are available:
@table @code
@item loongarch64-linux-gnu*
LoongArch processor running GNU/Linux.  This target triplet may be coupled
with a small set of possible suffixes to identify their default ABI type:
@table @code
@item f64
Uses @code{lp64d/base} ABI by default.
@item f32
Uses @code{lp64f/base} ABI by default.
@item sf
Uses @code{lp64s/base} ABI by default.
@end table

@item loongarch64-linux-gnu
Same as @code{loongarch64-linux-gnuf64}, but may be used with
@option{--with-abi=*} to configure the default ABI type.
@end table

More information about LoongArch can be found at
@uref{https://github.com/loongson/LoongArch-Documentation}.

@html
<hr />
@end html
@anchor{m32c-x-elf}
@heading m32c-*-elf
Renesas M32C processor.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{m32r-x-elf}
@heading m32r-*-elf
Renesas M32R processor.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{m68k-x-x}
@heading m68k-*-*
By default,
@samp{m68k-*-elf*}, @samp{m68k-*-rtems},  @samp{m68k-*-uclinux} and
@samp{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
@option{--with-arch=m68k} to @command{configure}.  Alternatively, you
can omit the M680x0 libraries by passing @option{--with-arch=cf} to
@command{configure}.  These targets default to 5206 or 5475 code as
appropriate for the target system when
configured with @option{--with-arch=cf} and 68020 code otherwise.

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

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

GCC requires at least binutils version 2.17 on these targets.

@html
<hr />
@end html
@anchor{m68k-x-uclinux}
@heading m68k-*-uclinux
GCC 4.3 changed the uClinux configuration so that it uses the
@samp{m68k-linux-gnu} ABI rather than the @samp{m68k-elf} ABI.
It also added improved support for C++ and flat shared libraries,
both of which were ABI changes.

@html
<hr />
@end html
@anchor{microblaze-x-elf}
@heading microblaze-*-elf
Xilinx MicroBlaze processor.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{mips-x-x}
@heading 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 @samp{mips*-*-*} use the generic implementation instead.  You can also
configure for @samp{mipsel-elf} as a workaround.  The
@samp{mips*-*-linux*} target continues to use the MIPS II routines.  More
work on this is expected in future releases.

@c If you make --with-llsc the default for another target, please also
@c update the description of the --with-llsc option.

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

MIPS systems check for division by zero (unless
@option{-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 (@code{SIGFPE}).  To enable
the use of break, use the @option{--with-divide=breaks}
@command{configure} option when configuring GCC@.  The default is to
use traps on systems that support them.

@html
<hr />
@end html
@anchor{moxie-x-elf}
@heading moxie-*-elf
The moxie processor.

@html
<hr />
@end html
@anchor{msp430-x-elf}
@heading msp430-*-elf*
TI MSP430 processor.
This configuration is intended for embedded systems.

@samp{msp430-*-elf} is the standard configuration with most GCC
features enabled by default.

@samp{msp430-*-elfbare} is tuned for a bare-metal environment, and disables
features related to shared libraries and other functionality not used for
this device.  This reduces code and data usage of the GCC libraries, resulting
in a minimal run-time environment by default.

Features disabled by default include:
@itemize
@item transactional memory
@item __cxa_atexit
@end itemize

@html
<hr />
@end html
@anchor{nds32le-x-elf}
@heading nds32le-*-elf
Andes NDS32 target in little endian mode.

@html
<hr />
@end html
@anchor{nds32be-x-elf}
@heading nds32be-*-elf
Andes NDS32 target in big endian mode.

@html
<hr />
@end html
@anchor{nvptx-x-none}
@heading nvptx-*-none
Nvidia PTX target.

Instead of GNU binutils, you will need to install
@uref{https://github.com/MentorEmbedded/nvptx-tools/,,nvptx-tools}.
Tell GCC where to find it:
@option{--with-build-time-tools=[install-nvptx-tools]/nvptx-none/bin}.

You will need newlib 3.1.0 or later.  It can be
automatically built together with GCC@.  For this, add a symbolic link
to nvptx-newlib's @file{newlib} directory to the directory containing
the GCC sources.

Use the @option{--disable-sjlj-exceptions} and
@option{--enable-newlib-io-long-long} options when configuring.

The @option{--with-arch} option may be specified to override the
default value for the @option{-march} option, and to also build
corresponding target libraries.
The default is @option{--with-arch=sm_30}.

For example, if @option{--with-arch=sm_70} is specified,
@option{-march=sm_30} and @option{-march=sm_70} target libraries are
built, and code generation defaults to @option{-march=sm_70}.

@html
<hr />
@end html
@anchor{or1k-x-elf}
@heading or1k-*-elf
The OpenRISC 1000 32-bit processor with delay slots.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{or1k-x-linux}
@heading or1k-*-linux
The OpenRISC 1000 32-bit processor with delay slots.

@html
<hr />
@end html
@anchor{powerpc-x-x}
@heading powerpc-*-*
You can specify a default version for the @option{-mcpu=@var{cpu_type}}
switch by using the configure option @option{--with-cpu-@var{cpu_type}}.

You will need GNU binutils 2.20 or newer.

@html
<hr />
@end html
@anchor{powerpc-x-darwin}
@heading 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
@uref{https://opensource.apple.com}.

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

@html
<hr />
@end html
@anchor{powerpc-x-elf}
@heading powerpc-*-elf
PowerPC system in big endian mode, running System V.4.

@html
<hr />
@end html
@anchor{powerpc-x-linux-gnu}
@heading powerpc*-*-linux-gnu*
PowerPC system in big endian mode running Linux.

@html
<hr />
@end html
@anchor{powerpc-x-netbsd}
@heading powerpc-*-netbsd*
PowerPC system in big endian mode running NetBSD@.

@html
<hr />
@end html
@anchor{powerpc-x-eabisim}
@heading powerpc-*-eabisim
Embedded PowerPC system in big endian mode for use in running under the
PSIM simulator.

@html
<hr />
@end html
@anchor{powerpc-x-eabi}
@heading powerpc-*-eabi
Embedded PowerPC system in big endian mode.

@html
<hr />
@end html
@anchor{powerpcle-x-elf}
@heading powerpcle-*-elf
PowerPC system in little endian mode, running System V.4.

@html
<hr />
@end html
@anchor{powerpcle-x-eabisim}
@heading powerpcle-*-eabisim
Embedded PowerPC system in little endian mode for use in running under
the PSIM simulator.

@html
<hr />
@end html
@anchor{powerpcle-x-eabi}
@heading powerpcle-*-eabi
Embedded PowerPC system in little endian mode.

@html
<hr />
@end html
@anchor{rl78-x-elf}
@heading rl78-*-elf
The Renesas RL78 processor.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{riscv32-x-elf}
@heading riscv32-*-elf
The RISC-V RV32 instruction set.
This configuration is intended for embedded systems.
This (and all other RISC-V) targets require the binutils 2.30 release.

@html
<hr />
@end html
@anchor{riscv32-x-linux}
@heading riscv32-*-linux
The RISC-V RV32 instruction set running GNU/Linux.
This (and all other RISC-V) targets require the binutils 2.30 release.

@html
<hr />
@end html
@anchor{riscv64-x-elf}
@heading riscv64-*-elf
The RISC-V RV64 instruction set.
This configuration is intended for embedded systems.
This (and all other RISC-V) targets require the binutils 2.30 release.

@html
<hr />
@end html
@anchor{riscv64-x-linux}
@heading riscv64-*-linux
The RISC-V RV64 instruction set running GNU/Linux.
This (and all other RISC-V) targets require the binutils 2.30 release.

@html
<hr />
@end html
@anchor{rx-x-elf}
@heading rx-*-elf
The Renesas RX processor.

@html
<hr />
@end html
@anchor{s390-x-linux}
@heading s390-*-linux*
S/390 system running GNU/Linux for S/390@.

@html
<hr />
@end html
@anchor{s390x-x-linux}
@heading s390x-*-linux*
zSeries system (64-bit) running GNU/Linux for zSeries@.

@html
<hr />
@end html
@anchor{s390x-ibm-tpf}
@heading s390x-ibm-tpf*
zSeries system (64-bit) running TPF@.  This platform is
supported as cross-compilation target only.

@html
<hr />
@end html
@c Please use Solaris 2 to refer to all release of Solaris, starting
@c with 2.0 until 2.6, 7, 8, etc.  Solaris 1 was a marketing name for
@c SunOS 4 releases which we don't use to avoid confusion.  Solaris
@c alone is too unspecific and must be avoided.
@anchor{x-x-solaris2}
@heading *-*-solaris2*
Support for Solaris 10 has been removed in GCC 10.  Support for Solaris
9 has been removed in GCC 5.  Support for Solaris 8 has been removed in
GCC 4.8.  Support for Solaris 7 has been removed in GCC 4.6.

Solaris 11.3 provides GCC 4.5.2, 4.7.3, and 4.8.2 as
@command{/usr/gcc/4.5/bin/gcc} or similar.  Newer Solaris versions
provide one or more of GCC 5, 7, and 9.  Alternatively,
you can install a pre-built GCC to bootstrap and install GCC.  See the
@uref{binaries.html,,binaries page} for details.

The Solaris 2 @command{/bin/sh} will often fail to configure
@samp{libstdc++-v3}.  We therefore recommend using the
following initial sequence of commands

@smallexample
% CONFIG_SHELL=/bin/ksh
% export CONFIG_SHELL
@end smallexample

@noindent
and proceed as described in @uref{configure.html,,the configure instructions}.
In addition we strongly recommend specifying an absolute path to invoke
@command{@var{srcdir}/configure}.

In Solaris 11, you need to check for @code{system/header},
@code{system/linker}, and @code{developer/assembler} packages.

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

The build process works more smoothly with the legacy Solaris tools so, if you
have @file{/usr/xpg4/bin} in your @env{PATH}, we recommend that you place
@file{/usr/bin} before @file{/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 @command{as}
versions included in Solaris 11.3,
from GNU binutils 2.23.1 or newer (in @file{/usr/bin/gas} and
@file{/usr/gnu/bin/as}), are known to work.
The current version, from GNU binutils 2.34,
is known to work as well.  Note that your mileage may vary
if you use a combination of the GNU tools and the Solaris tools: while the
combination GNU @command{as} + Solaris @command{ld} should reasonably work,
the reverse combination Solaris @command{as} + GNU @command{ld} may fail to
build or cause memory corruption at runtime in some cases for C++ programs.
@c FIXME: still?
GNU @command{ld} usually works as well.  Again, the current
version (2.34) is known to work, but generally lacks platform specific
features, so better stay with Solaris @command{ld}.  To use the LTO linker
plugin (@option{-fuse-linker-plugin}) with GNU @command{ld}, GNU
binutils @emph{must} be configured with @option{--enable-largefile}.

To enable symbol versioning in @samp{libstdc++} with the Solaris linker,
you need to have any version of GNU @command{c++filt}, which is part of
GNU binutils.  @samp{libstdc++} symbol versioning will be disabled if no
appropriate version is found.  Solaris @command{c++filt} from the Solaris
Studio compilers does @emph{not} work.

In order to build the GNU D compiler, GDC, a working @samp{libphobos} is
needed.  That library wasn't built by default in GCC 9--11 on SPARC, or
on x86 when the Solaris assembler is used, but can be enabled by
configuring with @option{--enable-libphobos}.  Also, GDC 9.4.0 is
required on x86, while GDC 9.3.0 is known to work on SPARC.

The versions of the GNU Multiple Precision Library (GMP), the MPFR
library and the MPC library bundled with Solaris 11.3 and later are
usually recent enough to match GCC's requirements.  There are two
caveats:

@itemize @bullet
@item
While the version of the GMP library in Solaris 11.3 works with GCC, you
need to configure with @option{--with-gmp-include=/usr/include/gmp}.

@item
The version of the MPFR libary included in Solaris 11.3 is too old; you
need to provide a more recent one.

@end itemize

@html
<hr />
@end html
@anchor{sparc-x-x}
@heading 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 @uref{prerequisites.html,,the prerequisites}.

@html
<hr />
@end html
@anchor{sparc-sun-solaris2}
@heading 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 Solaris 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 @option{-m64} option enables 64-bit code generation.
However, if all you want is code tuned for the UltraSPARC CPU, you
should try the @option{-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 @command{build} parameter on the
configure line.  This target triplet can be obtained by invoking @command{./config.guess} in the toplevel source directory of GCC (and
not that of GMP or MPFR or MPC).  For example on a Solaris 11 system:

@smallexample
% ./configure --build=sparc-sun-solaris2.11 --prefix=xxx
@end smallexample

@html
<hr />
@end html
@anchor{sparc-x-linux}
@heading sparc-*-linux*

@html
<hr />
@end html
@anchor{sparc64-x-solaris2}
@heading sparc64-*-solaris2*
When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a
build compiler that generates 64-bit code, either by default or by
specifying @samp{CC='gcc -m64' CXX='gcc-m64'} to @command{configure}.
Additionally, you @emph{must} pass @option{--build=sparc64-sun-solaris2.11}
or @option{--build=sparcv9-sun-solaris2.11} because @file{config.guess}
misdetects this situation, which can cause build failures.

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

@smallexample
% ./configure --build=sparc64-sun-solaris2.11 --prefix=xxx
@end smallexample

@html
<hr />
@end html
@anchor{sparcv9-x-solaris2}
@heading sparcv9-*-solaris2*
This is a synonym for @samp{sparc64-*-solaris2*}.

@html
<hr />
@end html
@anchor{c6x-x-x}
@heading c6x-*-*
The C6X family of processors. This port requires binutils-2.22 or newer.

@html
<hr />
@end html
@anchor{visium-x-elf}
@heading visium-*-elf
CDS VISIUMcore processor.
This configuration is intended for embedded systems.

@html
<hr />
@end html
@anchor{x-x-vxworks}
@heading *-*-vxworks*
Support for VxWorks is in flux.  At present GCC supports @emph{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
@file{@var{$WIND_BASE}/host}; we recommend you do not overwrite it.
Choose an installation @var{prefix} entirely outside @var{$WIND_BASE}.
Before running @command{configure}, create the directories @file{@var{prefix}}
and @file{@var{prefix}/bin}.  Link or copy the appropriate assembler,
linker, etc.@: into @file{@var{prefix}/bin}, and set your @var{PATH} to
include that directory while running both @command{configure} and
@command{make}.

You must give @command{configure} the
@option{--with-headers=@var{$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 @option{--target=@var{target}}.
@command{configure} will attempt to create the directory
@file{@var{prefix}/@var{target}/sys-include} and copy files into it;
make sure the user running @command{configure} has sufficient privilege
to do so.

GCC's exception handling runtime requires a special ``configlette''
module, @file{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.)

@html
<hr />
@end html
@anchor{x86-64-x-x}
@heading 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 @option{-m32} switch).

@html
<hr />
@end html
@anchor{x86-64-x-solaris2}
@heading x86_64-*-solaris2*
GCC also supports the x86-64 architecture implemented by the AMD64
processor (@samp{amd64-*-*} is an alias for @samp{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 @option{-m64} switch.  Since
GCC 4.7, there is also a configuration that defaults to 64-bit code, but
can generate 32-bit code with @option{-m32}.  To configure and build
this way, you have to provide all support libraries like @file{libgmp}
as 64-bit code, configure with @option{--target=x86_64-pc-solaris2.11}
and @samp{CC=gcc -m64}.

@html
<hr />
@end html
@anchor{xtensa-x-elf}
@heading xtensa*-*-elf
This target is intended for embedded Xtensa systems using the
@samp{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 @file{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.

@html
<hr />
@end html
@anchor{xtensa-x-linux}
@heading 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
@option{-fpic} or @option{-fPIC} options are used.  In other
respects, this target is the same as the
@uref{#xtensa*-*-elf,,@samp{xtensa*-*-elf}} target.

@html
<hr />
@end html
@anchor{windows}
@heading Microsoft Windows

@subheading 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.

@subheading 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.

@itemize
@item Cygwin @uref{#x-x-cygwin,,*-*-cygwin}: Cygwin provides a user-space
Linux API emulation layer in the Win32 subsystem.
@item MinGW @uref{#x-x-mingw32,,*-*-mingw32}: MinGW is a native GCC port for
the Win32 subsystem that provides a subset of POSIX.
@item MKS i386-pc-mks: NuTCracker from MKS.  See
@uref{https://www.mkssoftware.com} for more information.
@end itemize

@subheading Intel 64-bit versions
GCC contains support for x86-64 using the mingw-w64
runtime library, available from @uref{https://www.mingw-w64.org/downloads/}.
This library should be used with the target triple x86_64-pc-mingw32.

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

@subheading 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 @uref{http://pw32.sourceforge.net/} for more information.

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

@html
<hr />
@end html
@anchor{x-x-cygwin}
@heading *-*-cygwin
Ports of GCC are included with the
@uref{http://www.cygwin.com/,,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.

@html
<hr />
@end html
@anchor{x-x-mingw32}
@heading *-*-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 @code{extern inline} in @code{-std=c99} and @code{-std=gnu99} modes.

To support emitting DWARF debugging info you need to use GNU binutils
version 2.16 or above containing support for the @code{.secrel32}
assembler pseudo-op.

@html
<hr />
@end html
@anchor{older}
@heading 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
@command{configure} will fail unless the @option{--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
@file{old-releases} directory on the @uref{../mirrors.html,,GCC mirror
sites}.  Header bugs may generally be avoided using
@command{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
@uref{../contribute.html,,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 @file{pub/binutils/old-releases} on
@uref{https://sourceware.org/mirrors.html,,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.

@html
<hr />
@end html
@anchor{elf}
@heading all ELF targets (SVR4, Solaris 2, etc.)
C++ support is significantly better on ELF targets if you use the
@uref{./configure.html#with-gnu-ld,,GNU linker}; duplicate copies of
inlines, vtables and template instantiations will be discarded
automatically.


@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***GFDL********************************************************************
@ifset gfdlhtml
@include fdl.texi
@html
<hr />
<p>
@end html
@ifhtml
@uref{./index.html,,Return to the GCC Installation page}
@end ifhtml
@end ifset

@c ***************************************************************************
@c Part 6 The End of the Document
@ifinfo
@comment node-name,     next,          previous, up
@node    Concept Index, , GNU Free Documentation License, Top
@end ifinfo

@ifinfo
@unnumbered Concept Index

@printindex cp

@contents
@end ifinfo
@bye
