]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/doc/install.texi
Update copyright years.
[thirdparty/gcc.git] / gcc / doc / install.texi
CommitLineData
d77de738
ML
1\input texinfo.tex @c -*-texinfo-*-
2@c @ifnothtml
3@c %**start of header
4@setfilename gccinstall.info
5@setchapternewpage odd
6@c %**end of header
7@c @end ifnothtml
8
9@include gcc-common.texi
10
11@c Specify title for specific html page
12@ifset indexhtml
13@settitle Installing GCC
14@end ifset
15@ifset specifichtml
16@settitle Host/Target specific installation notes for GCC
17@end ifset
18@ifset prerequisiteshtml
19@settitle Prerequisites for GCC
20@end ifset
21@ifset downloadhtml
22@settitle Downloading GCC
23@end ifset
24@ifset configurehtml
25@settitle Installing GCC: Configuration
26@end ifset
27@ifset buildhtml
28@settitle Installing GCC: Building
29@end ifset
30@ifset testhtml
31@settitle Installing GCC: Testing
32@end ifset
33@ifset finalinstallhtml
34@settitle Installing GCC: Final installation
35@end ifset
36@ifset binarieshtml
37@settitle Installing GCC: Binaries
38@end ifset
39@ifset gfdlhtml
40@settitle Installing GCC: GNU Free Documentation License
41@end ifset
42
74d5206f 43@c Copyright (C) 1988-2023 Free Software Foundation, Inc.
d77de738
ML
44@c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com
45
46@c IMPORTANT: whenever you modify this file, run `install.texi2html' to
47@c test the generation of HTML documents for the gcc.gnu.org web pages.
48@c
49@c Do not use @footnote{} in this file as it breaks install.texi2html!
50
51@c Include everything if we're not making html
52@ifnothtml
53@set indexhtml
54@set specifichtml
55@set prerequisiteshtml
56@set downloadhtml
57@set configurehtml
58@set buildhtml
59@set testhtml
60@set finalinstallhtml
61@set binarieshtml
62@set gfdlhtml
63@end ifnothtml
64
65@c Part 2 Summary Description and Copyright
66@copying
74d5206f 67Copyright @copyright{} 1988-2023 Free Software Foundation, Inc.
d77de738
ML
68@sp 1
69Permission is granted to copy, distribute and/or modify this document
70under the terms of the GNU Free Documentation License, Version 1.3 or
71any later version published by the Free Software Foundation; with no
72Invariant Sections, the Front-Cover texts being (a) (see below), and
73with the Back-Cover Texts being (b) (see below). A copy of the
74license is included in the section entitled ``@uref{./gfdl.html,,GNU
75Free Documentation License}''.
76
77(a) The FSF's Front-Cover Text is:
78
79 A GNU Manual
80
81(b) The FSF's Back-Cover Text is:
82
83 You have freedom to copy and modify this GNU Manual, like GNU
84 software. Copies published by the Free Software Foundation raise
85 funds for GNU development.
86@end copying
87@ifinfo
88@insertcopying
89@end ifinfo
90@dircategory Software development
91@direntry
92* gccinstall: (gccinstall). Installing the GNU Compiler Collection.
93@end direntry
94
95@c Part 3 Titlepage and Copyright
96@titlepage
97@title Installing GCC
98@versionsubtitle
99
100@c The following two commands start the copyright page.
101@page
102@vskip 0pt plus 1filll
103@insertcopying
104@end titlepage
105
106@c Part 4 Top node, Master Menu, and/or Table of Contents
107@ifinfo
108@node Top, , , (dir)
109@comment node-name, next, Previous, up
110
111@menu
112* Installing GCC:: This document describes the generic installation
113 procedure for GCC as well as detailing some target
114 specific installation instructions.
115
116* Specific:: Host/target specific installation notes for GCC.
117* Binaries:: Where to get pre-compiled binaries.
118
119* GNU Free Documentation License:: How you can copy and share this manual.
120* Concept Index:: This index has two entries.
121@end menu
122@end ifinfo
123
124@iftex
125@contents
126@end iftex
127
128@c Part 5 The Body of the Document
129@c ***Installing GCC**********************************************************
130@ifnothtml
131@comment node-name, next, previous, up
132@node Installing GCC, Binaries, , Top
133@end ifnothtml
134@ifset indexhtml
135@ifnothtml
136@chapter Installing GCC
137@end ifnothtml
138
139The latest version of this document is always available at
140@uref{https://gcc.gnu.org/install/,,https://gcc.gnu.org/install/}.
141It refers to the current development sources, instructions for
142specific released versions are included with the sources.
143
144This document describes the generic installation procedure for GCC as well
145as detailing some target specific installation instructions.
146
147GCC includes several components that previously were separate distributions
148with their own installation instructions. This document supersedes all
149package-specific installation instructions.
150
151@emph{Before} starting the build/install procedure please check the
152@ifnothtml
153@ref{Specific, host/target specific installation notes}.
154@end ifnothtml
155@ifhtml
156@uref{specific.html,,host/target specific installation notes}.
157@end ifhtml
158We recommend you browse the entire generic installation instructions before
159you proceed.
160
161Lists of successful builds for released versions of GCC are
162available at @uref{https://gcc.gnu.org/buildstat.html}.
163These lists are updated as new information becomes available.
164
165The installation procedure itself is broken into five steps.
166
167@ifinfo
168@menu
169* Prerequisites::
170* Downloading the source::
171* Configuration::
172* Building::
173* Testing:: (optional)
174* Final install::
175@end menu
176@end ifinfo
177@ifhtml
178@enumerate
179@item
180@uref{prerequisites.html,,Prerequisites}
181@item
182@uref{download.html,,Downloading the source}
183@item
184@uref{configure.html,,Configuration}
185@item
186@uref{build.html,,Building}
187@item
188@uref{test.html,,Testing} (optional)
189@item
190@uref{finalinstall.html,,Final install}
191@end enumerate
192@end ifhtml
193
194Please note that GCC does not support @samp{make uninstall} and probably
195won't do so in the near future as this would open a can of worms. Instead,
196we suggest that you install GCC into a directory of its own and simply
197remove that directory when you do not need that specific version of GCC
198any longer, and, if shared libraries are installed there as well, no
199more binaries exist that use them.
200
201@html
202<hr />
203<p>
204@end html
205@ifhtml
206@uref{./index.html,,Return to the GCC Installation page}
207
208@insertcopying
209@end ifhtml
210@end ifset
211
212@c ***Prerequisites**************************************************
213@ifnothtml
214@comment node-name, next, previous, up
215@node Prerequisites, Downloading the source, , Installing GCC
216@end ifnothtml
217@ifset prerequisiteshtml
218@ifnothtml
219@chapter Prerequisites
220@end ifnothtml
221@cindex Prerequisites
222
223GCC requires that various tools and packages be available for use in the
224build procedure. Modifying GCC sources requires additional tools
225described below.
226
227@heading Tools/packages necessary for building GCC
228@table @asis
229@item ISO C++11 compiler
b97c33fb
RB
230Necessary to bootstrap GCC. GCC 4.8.3 or newer has sufficient
231support for used C++11 features, with earlier GCC versions you
232might run into implementation bugs.
d77de738
ML
233
234Versions of GCC prior to 11 also allow bootstrapping with an ISO C++98
235compiler, versions of GCC prior to 4.8 also allow bootstrapping with a
236ISO C89 compiler, and versions of GCC prior to 3.4 also allow
237bootstrapping with a traditional (K&R) C compiler.
238
239To build all languages in a cross-compiler or other configuration where
2403-stage bootstrap is not performed, you need to start with an existing
b97c33fb 241GCC binary (version 4.8.3 or later) because source code for language
d77de738
ML
242frontends other than C might use GCC extensions.
243
244@item C standard library and headers
245
246In order to build GCC, the C standard library and headers must be present
247for all target variants for which target libraries will be built (and not
248only the variant of the host C++ compiler).
249
250This affects the popular @samp{x86_64-pc-linux-gnu} platform (among
251other multilib targets), for which 64-bit (@samp{x86_64}) and 32-bit
252(@samp{i386}) libc headers are usually packaged separately. If you do a
253build of a native compiler on @samp{x86_64-pc-linux-gnu}, make sure you
254either have the 32-bit libc developer package properly installed (the exact
255name of the package depends on your distro) or you must build GCC as a
25664-bit only compiler by configuring with the option
257@option{--disable-multilib}. Otherwise, you may encounter an error such as
258@samp{fatal error: gnu/stubs-32.h: No such file}
259
260@item @anchor{GNAT-prerequisite}GNAT
261
262In order to build GNAT, the Ada compiler, you need a working GNAT
263compiler (GCC version 5.1 or later).
264
265This includes GNAT tools such as @command{gnatmake} and
266@command{gnatlink}, since the Ada front end is written in Ada and
267uses some GNAT-specific extensions.
268
269In order to build a cross compiler, it is strongly recommended to install
270the new compiler as native first, and then use it to build the cross
271compiler. Other native compiler versions may work but this is not guaranteed and
272will typically fail with hard to understand compilation errors during the
273build.
274
275Similarly, it is strongly recommended to use an older version of GNAT to build
276GNAT. More recent versions of GNAT than the version built are not guaranteed
277to work and will often fail during the build with compilation errors.
278
279Note that @command{configure} does not test whether the GNAT installation works
280and has a sufficiently recent version; if too old a GNAT version is
281installed and @option{--enable-languages=ada} is used, the build will fail.
282
283@env{ADA_INCLUDE_PATH} and @env{ADA_OBJECT_PATH} environment variables
284must not be set when building the Ada compiler, the Ada tools, or the
285Ada runtime libraries. You can check that your build environment is clean
286by verifying that @samp{gnatls -v} lists only one explicit path in each
287section.
288
289@item @anchor{GDC-prerequisite}GDC
290
291In order to build GDC, the D compiler, you need a working GDC
05b7cf52 292compiler (GCC version 9.4 or later) and D runtime library,
d77de738
ML
293@samp{libphobos}, as the D front end is written in D.
294
295Versions of GDC prior to 12 can be built with an ISO C++11 compiler, which can
296then be installed and used to bootstrap newer versions of the D front end.
297
298It is strongly recommended to use an older version of GDC to build GDC. More
299recent versions of GDC than the version built are not guaranteed to work and
300will often fail during the build with compilation errors relating to
301deprecations or removed features.
302
303Note that @command{configure} does not test whether the GDC installation works
304and has a sufficiently recent version. Though the implementation of the D
305front end does not make use of any GDC-specific extensions, or novel features
306of the D language, if too old a GDC version is installed and
307@option{--enable-languages=d} is used, the build will fail.
308
309On some targets, @samp{libphobos} isn't enabled by default, but compiles
310and works if @option{--enable-libphobos} is used. Specifics are
311documented for affected targets.
312
1eee94d3
GM
313@item @anchor{GM2-prerequisite}GM2
314
315Python3 is required if you want to build the complete Modula-2
316documentation including the target @code{SYSTEM} definition module.
317If Python3 is unavailable Modula-2 documentation will include a target
318independent version of the SYSTEM modules.
319
d77de738
ML
320@item A ``working'' POSIX compatible shell, or GNU bash
321
322Necessary when running @command{configure} because some
323@command{/bin/sh} shells have bugs and may crash when configuring the
324target libraries. In other cases, @command{/bin/sh} or @command{ksh}
325have disastrous corner-case performance problems. This
326can cause target @command{configure} runs to literally take days to
327complete in some cases.
328
329So on some platforms @command{/bin/ksh} is sufficient, on others it
330isn't. See the host/target specific instructions for your platform, or
331use @command{bash} to be sure. Then set @env{CONFIG_SHELL} in your
332environment to your ``good'' shell prior to running
333@command{configure}/@command{make}.
334
335@command{zsh} is not a fully compliant POSIX shell and will not
336work when configuring GCC@.
337
338@item A POSIX or SVR4 awk
339
340Necessary for creating some of the generated source files for GCC@.
341If in doubt, use a recent GNU awk version, as some of the older ones
342are broken. GNU awk version 3.1.5 is known to work.
343
344@item GNU binutils
345
346Necessary in some circumstances, optional in others. See the
347host/target specific instructions for your platform for the exact
348requirements.
349
350Note binutils 2.35 or newer is required for LTO to work correctly
351with GNU libtool that includes doing a bootstrap with LTO enabled.
352
353@item gzip version 1.2.4 (or later) or
354@itemx bzip2 version 1.0.2 (or later)
355
356Necessary to uncompress GCC @command{tar} files when source code is
357obtained via HTTPS mirror sites.
358
359@item GNU make version 3.80 (or later)
360
361You must have GNU make installed to build GCC@.
362
363@item GNU tar version 1.14 (or later)
364
365Necessary (only on some platforms) to untar the source code. Many
366systems' @command{tar} programs will also work, only try GNU
367@command{tar} if you have problems.
368
369@item Perl version between 5.6.1 and 5.6.24
370
371Necessary when targeting Darwin, building @samp{libstdc++},
372and not using @option{--disable-symvers}.
373Necessary when targeting Solaris 2 with Solaris @command{ld} and not using
374@option{--disable-symvers}.
375
376Necessary when regenerating @file{Makefile} dependencies in libiberty.
377Necessary when regenerating @file{libiberty/functions.texi}.
378Necessary when generating manpages from Texinfo manuals.
379Used by various scripts to generate some files included in the source
380repository (mainly Unicode-related and rarely changing) from source
381tables.
382
383Used by @command{automake}.
384
385@end table
386
387Several support libraries are necessary to build GCC, some are required,
388others optional. While any sufficiently new version of required tools
389usually work, library requirements are generally stricter. Newer
390versions may work in some cases, but it's safer to use the exact
391versions documented. We appreciate bug reports about problems with
392newer versions, though. If your OS vendor provides packages for the
393support libraries then using those packages may be the simplest way to
394install the libraries.
395
396@table @asis
397@item GNU Multiple Precision Library (GMP) version 4.3.2 (or later)
398
399Necessary to build GCC@. If a GMP source distribution is found in a
400subdirectory of your GCC sources named @file{gmp}, it will be built
401together with GCC. Alternatively, if GMP is already installed but it
402is not in your library search path, you will have to configure with the
403@option{--with-gmp} configure option. See also @option{--with-gmp-lib}
404and @option{--with-gmp-include}.
405The in-tree build is only supported with the GMP version that
406download_prerequisites installs.
407
408@item MPFR Library version 3.1.0 (or later)
409
410Necessary to build GCC@. It can be downloaded from
411@uref{https://www.mpfr.org}. If an MPFR source distribution is found
412in a subdirectory of your GCC sources named @file{mpfr}, it will be
413built together with GCC. Alternatively, if MPFR is already installed
414but it is not in your default library search path, the
415@option{--with-mpfr} configure option should be used. See also
416@option{--with-mpfr-lib} and @option{--with-mpfr-include}.
417The in-tree build is only supported with the MPFR version that
418download_prerequisites installs.
419
420@item MPC Library version 1.0.1 (or later)
421
422Necessary to build GCC@. It can be downloaded from
423@uref{https://www.multiprecision.org/mpc/}. If an MPC source distribution
424is found in a subdirectory of your GCC sources named @file{mpc}, it
425will be built together with GCC. Alternatively, if MPC is already
426installed but it is not in your default library search path, the
427@option{--with-mpc} configure option should be used. See also
428@option{--with-mpc-lib} and @option{--with-mpc-include}.
429The in-tree build is only supported with the MPC version that
430download_prerequisites installs.
431
432@item isl Library version 0.15 or later.
433
434Necessary to build GCC with the Graphite loop optimizations.
435It can be downloaded from @uref{https://gcc.gnu.org/pub/gcc/infrastructure/}.
436If an isl source distribution is found
437in a subdirectory of your GCC sources named @file{isl}, it will be
438built together with GCC. Alternatively, the @option{--with-isl} configure
439option should be used if isl is not installed in your default library
440search path.
441
442@item zstd Library.
443
444Necessary to build GCC with zstd compression used for LTO bytecode.
445The library is searched in your default library patch search.
446Alternatively, the @option{--with-zstd} configure option should be used.
447
1eee94d3
GM
448@item Python3 modules
449
450The complete list of Python3 modules broken down by GCC subcomponent
451is shown below:
452
453@table @asis
454@item internal debugging in gdbhooks
455@code{gdb}, @code{gdb.printing}, @code{gdb.types},
456@code{os.path}, @code{re}, @code{sys} and @code{tempfile},
457
458@item g++ testsuite
459@code{gcov}, @code{gzip}, @code{json}, @code{os} and @code{pytest}.
460
461@item c++ cxx api generation
462@code{csv}, @code{os}, @code{sys} and @code{time}.
463
464@item modula-2 documentation
465@code{argparse}, @code{os}, @code{pathlib}, @code{shutil} and
466@code{sys}.
467
468@item git developer tools
469@code{os} and @code{sys}.
470
471@item ada documentation
472@code{latex_elements}, @code{os}, @code{pygments}, @code{re},
473@code{sys} and @code{time}.
474@end table
475
d77de738
ML
476@end table
477
478@heading Tools/packages necessary for modifying GCC
479@table @asis
480@item autoconf version 2.69
481@itemx GNU m4 version 1.4.6 (or later)
482
483Necessary when modifying @file{configure.ac}, @file{aclocal.m4}, etc.@:
484to regenerate @file{configure} and @file{config.in} files.
485
486@item automake version 1.15.1
487
488Necessary when modifying a @file{Makefile.am} file to regenerate its
489associated @file{Makefile.in}.
490
491Much of GCC does not use automake, so directly edit the @file{Makefile.in}
492file. Specifically this applies to the @file{gcc}, @file{intl},
493@file{libcpp}, @file{libiberty}, @file{libobjc} directories as well
494as any of their subdirectories.
495
496For directories that use automake, GCC requires the latest release in
497the 1.15 series, which is currently 1.15.1. When regenerating a directory
498to a newer version, please update all the directories using an older 1.15
499to the latest released version.
500
501@item gettext version 0.14.5 (or later)
502
503Needed to regenerate @file{gcc.pot}.
504
505@item gperf version 2.7.2 (or later)
506
507Necessary when modifying @command{gperf} input files, e.g.@:
508@file{gcc/cp/cfns.gperf} to regenerate its associated header file, e.g.@:
509@file{gcc/cp/cfns.h}.
510
511@item DejaGnu version 1.5.3 (or later)
512@itemx Expect
513@itemx Tcl
514@c Once Tcl 8.5 or higher is required, remove any obsolete
515@c compatibility workarounds:
516@c git grep 'compatibility with earlier Tcl releases'
517
518Necessary to run the GCC testsuite; see the section on testing for
519details.
520
521@item autogen version 5.5.4 (or later) and
522@itemx guile version 1.4.1 (or later)
523
524Necessary to regenerate @file{fixinc/fixincl.x} from
525@file{fixinc/inclhack.def} and @file{fixinc/*.tpl}.
526
527Necessary to run @samp{make check} for @file{fixinc}.
528
529Necessary to regenerate the top level @file{Makefile.in} file from
530@file{Makefile.tpl} and @file{Makefile.def}.
531
532@item Flex version 2.5.4 (or later)
533
534Necessary when modifying @file{*.l} files.
535
536Necessary to build GCC during development because the generated output
537files are not included in the version-controlled source repository.
538They are included in releases.
539
540@item Texinfo version 4.7 (or later)
541
542Necessary for running @command{makeinfo} when modifying @file{*.texi}
543files to test your changes.
544
545Necessary for running @command{make dvi} or @command{make pdf} to
546create printable documentation in DVI or PDF format. Texinfo version
5474.8 or later is required for @command{make pdf}.
548
549Necessary to build GCC documentation during development because the
550generated output files are not included in the repository. They are
551included in releases.
552
553@item @TeX{} (any working version)
554
555Necessary for running @command{texi2dvi} and @command{texi2pdf}, which
556are used when running @command{make dvi} or @command{make pdf} to create
557DVI or PDF files, respectively.
558
559@item Sphinx version 1.0 (or later)
560
561Necessary to regenerate @file{jit/docs/_build/texinfo} from the @file{.rst}
562files in the directories below @file{jit/docs}.
563
564@item git (any version)
565@itemx SSH (any version)
566
567Necessary to access the source repository. Public releases and weekly
568snapshots of the development sources are also available via HTTPS@.
569
570@item GNU diffutils version 2.7 (or later)
571
572Useful when submitting patches for the GCC source code.
573
574@item patch version 2.5.4 (or later)
575
576Necessary when applying patches, created with @command{diff}, to one's
577own sources.
578
579@end table
580
581@html
582<hr />
583<p>
584@end html
585@ifhtml
586@uref{./index.html,,Return to the GCC Installation page}
587@end ifhtml
588@end ifset
589
590@c ***Downloading the source**************************************************
591@ifnothtml
592@comment node-name, next, previous, up
593@node Downloading the source, Configuration, Prerequisites, Installing GCC
594@end ifnothtml
595@ifset downloadhtml
596@ifnothtml
597@chapter Downloading GCC
598@end ifnothtml
599@cindex Downloading GCC
600@cindex Downloading the Source
601
602GCC is distributed via @uref{https://gcc.gnu.org/git.html,,git} and via
603HTTPS as tarballs compressed with @command{gzip} or @command{bzip2}.
604
605Please refer to the @uref{https://gcc.gnu.org/releases.html,,releases web page}
606for information on how to obtain GCC@.
607
608The source distribution includes the C, C++, Objective-C, Fortran,
609and Ada (in the case of GCC 3.1 and later) compilers, as well as
610runtime libraries for C++, Objective-C, and Fortran.
611For previous versions these were downloadable as separate components such
612as the core GCC distribution, which included the C language front end and
613shared components, and language-specific distributions including the
614language front end and the language runtime (where appropriate).
615
616If you also intend to build binutils (either to upgrade an existing
617installation or for use in place of the corresponding tools of your
618OS), unpack the binutils distribution either in the same directory or
619a separate one. In the latter case, add symbolic links to any
620components of the binutils you intend to build alongside the compiler
621(@file{bfd}, @file{binutils}, @file{gas}, @file{gprof}, @file{ld},
622@file{opcodes}, @dots{}) to the directory containing the GCC sources.
623
624Likewise the GMP, MPFR and MPC libraries can be automatically built
625together with GCC. You may simply run the
626@command{contrib/download_prerequisites} script in the GCC source directory
627to set up everything.
628Otherwise unpack the GMP, MPFR and/or MPC source
629distributions in the directory containing the GCC sources and rename
630their directories to @file{gmp}, @file{mpfr} and @file{mpc},
631respectively (or use symbolic links with the same name).
632
633@html
634<hr />
635<p>
636@end html
637@ifhtml
638@uref{./index.html,,Return to the GCC Installation page}
639@end ifhtml
640@end ifset
641
642@c ***Configuration***********************************************************
643@ifnothtml
644@comment node-name, next, previous, up
645@node Configuration, Building, Downloading the source, Installing GCC
646@end ifnothtml
647@ifset configurehtml
648@ifnothtml
649@chapter Installing GCC: Configuration
650@end ifnothtml
651@cindex Configuration
652@cindex Installing GCC: Configuration
653
654Like most GNU software, GCC must be configured before it can be built.
655This document describes the recommended configuration procedure
656for both native and cross targets.
657
658We use @var{srcdir} to refer to the toplevel source directory for
659GCC; we use @var{objdir} to refer to the toplevel build/object directory.
660
661If you obtained the sources by cloning the repository, @var{srcdir}
662must refer to the top @file{gcc} directory, the one where the
663@file{MAINTAINERS} file can be found, and not its @file{gcc}
664subdirectory, otherwise the build will fail.
665
666If either @var{srcdir} or @var{objdir} is located on an automounted NFS
667file system, the shell's built-in @command{pwd} command will return
668temporary pathnames. Using these can lead to various sorts of build
669problems. To avoid this issue, set the @env{PWDCMD} environment
670variable to an automounter-aware @command{pwd} command, e.g.,
671@command{pawd} or @samp{amq -w}, during the configuration and build
672phases.
673
674First, we @strong{highly} recommend that GCC be built into a
675separate directory from the sources which does @strong{not} reside
676within the source tree. This is how we generally build GCC; building
677where @var{srcdir} == @var{objdir} should still work, but doesn't
678get extensive testing; building where @var{objdir} is a subdirectory
679of @var{srcdir} is unsupported.
680
681If you have previously built GCC in the same directory for a
682different target machine, do @samp{make distclean} to delete all files
683that might be invalid. One of the files this deletes is @file{Makefile};
684if @samp{make distclean} complains that @file{Makefile} does not exist
685or issues a message like ``don't know how to make distclean'' it probably
686means that the directory is already suitably clean. However, with the
687recommended method of building in a separate @var{objdir}, you should
688simply use a different @var{objdir} for each target.
689
690Second, when configuring a native system, either @command{cc} or
691@command{gcc} must be in your path or you must set @env{CC} in
692your environment before running configure. Otherwise the configuration
693scripts may fail.
694
695@ignore
696Note that the bootstrap compiler and the resulting GCC must be link
697compatible, else the bootstrap will fail with linker errors about
698incompatible object file formats. Several multilibed targets are
699affected by this requirement, see
700@ifnothtml
701@ref{Specific, host/target specific installation notes}.
702@end ifnothtml
703@ifhtml
704@uref{specific.html,,host/target specific installation notes}.
705@end ifhtml
706@end ignore
707
708To configure GCC:
709
710@smallexample
711% mkdir @var{objdir}
712% cd @var{objdir}
713% @var{srcdir}/configure [@var{options}] [@var{target}]
714@end smallexample
715
716@heading Distributor options
717
718If you will be distributing binary versions of GCC, with modifications
719to the source code, you should use the options described in this
720section to make clear that your version contains modifications.
721
722@table @code
723@item --with-pkgversion=@var{version}
724Specify a string that identifies your package. You may wish
725to include a build number or build date. This version string will be
726included in the output of @command{gcc --version}. This suffix does
727not replace the default version string, only the @samp{GCC} part.
728
729The default value is @samp{GCC}.
730
731@item --with-bugurl=@var{url}
732Specify the URL that users should visit if they wish to report a bug.
733You are of course welcome to forward bugs reported to you to the FSF,
734if you determine that they are not bugs in your modifications.
735
736The default value refers to the FSF's GCC bug tracker.
737
738@item --with-documentation-root-url=@var{url}
739Specify the URL root that contains GCC option documentation. The @var{url}
740should end with a @code{/} character.
741
742The default value is @uref{https://gcc.gnu.org/onlinedocs/,,https://gcc.gnu.org/onlinedocs/}.
743
744@item --with-changes-root-url=@var{url}
745Specify the URL root that contains information about changes in GCC
746releases like @code{gcc-@var{version}/changes.html}.
747The @var{url} should end with a @code{/} character.
748
749The default value is @uref{https://gcc.gnu.org/,,https://gcc.gnu.org/}.
750
751@end table
752
753@heading Host, Build and Target specification
754
755Specify the host, build and target machine configurations. You do this
756when you run the @file{configure} script.
757
758The @dfn{build} machine is the system which you are using, the
759@dfn{host} machine is the system where you want to run the resulting
760compiler (normally the build machine), and the @dfn{target} machine is
761the system for which you want the compiler to generate code.
762
763If you are building a compiler to produce code for the machine it runs
764on (a native compiler), you normally do not need to specify any operands
765to @file{configure}; it will try to guess the type of machine you are on
766and use that as the build, host and target machines. So you don't need
767to specify a configuration when building a native compiler unless
768@file{configure} cannot figure out what your configuration is or guesses
769wrong.
770
771In those cases, specify the build machine's @dfn{configuration name}
772with the @option{--host} option; the host and target will default to be
773the same as the host machine.
774
775Here is an example:
776
777@smallexample
778./configure --host=x86_64-pc-linux-gnu
779@end smallexample
780
781A configuration name may be canonical or it may be more or less
782abbreviated (@file{config.sub} script produces canonical versions).
783
784A canonical configuration name has three parts, separated by dashes.
785It looks like this: @samp{@var{cpu}-@var{company}-@var{system}}.
786
787Here are the possible CPU types:
788
789@quotation
790aarch64, aarch64_be, alpha, alpha64, amdgcn, arc, arceb, arm, armeb, avr, bfin,
791bpf, cris, csky, epiphany, fido, fr30, frv, ft32, h8300, hppa, hppa2.0,
792hppa64, i486, i686, ia64, iq2000, lm32, loongarch64, m32c, m32r, m32rle, m68k,
793mcore, microblaze, microblazeel, mips, mips64, mips64el, mips64octeon,
794mips64orion, mips64vr, mipsel, mipsisa32, mipsisa32r2, mipsisa64, mipsisa64r2,
795mipsisa64r2el, mipsisa64sb1, mipsisa64sr71k, mipstx39, mmix, mn10300, moxie,
796msp430, nds32be, nds32le, nios2, nvptx, or1k, pdp11, powerpc, powerpc64,
797powerpc64le, powerpcle, pru, riscv32, riscv32be, riscv64, riscv64be, rl78, rx,
798s390, s390x, sh, shle, sparc, sparc64, tic6x, v850,
799v850e, v850e1, vax, visium, x86_64, xstormy16, xtensa
800@end quotation
801
802Here is a list of system types:
803
804@quotation
805aix@var{version}, amdhsa, aout, cygwin, darwin@var{version},
806eabi, eabialtivec, eabisim, eabisimaltivec, elf, elf32,
807elfbare, elfoabi, freebsd@var{version}, gnu, hpux, hpux@var{version},
808kfreebsd-gnu, kopensolaris-gnu, linux-androideabi, linux-gnu,
809linux-gnu_altivec, linux-musl, linux-uclibc, lynxos, mingw32, mingw32crt,
810mmixware, msdosdjgpp, netbsd, netbsdelf@var{version}, nto-qnx, openbsd,
811rtems, solaris@var{version}, symbianelf, tpf, uclinux, uclinux_eabi, vms,
812vxworks, vxworksae, vxworksmils
813@end quotation
814
815@heading Options specification
816
817Use @var{options} to override several configure time options for
818GCC@. A list of supported @var{options} follows; @samp{configure
819--help} may list other options, but those not listed below may not
820work and should not normally be used.
821
822Note that each @option{--enable} option has a corresponding
823@option{--disable} option and that each @option{--with} option has a
824corresponding @option{--without} option.
825
826@table @code
827@item --prefix=@var{dirname}
828Specify the toplevel installation
829directory. This is the recommended way to install the tools into a directory
830other than the default. The toplevel installation directory defaults to
831@file{/usr/local}.
832
833We @strong{highly} recommend against @var{dirname} being the same or a
834subdirectory of @var{objdir} or vice versa. If specifying a directory
835beneath a user's home directory tree, some shells will not expand
836@var{dirname} correctly if it contains the @samp{~} metacharacter; use
837@env{$HOME} instead.
838
839The following standard @command{autoconf} options are supported. Normally you
840should not need to use these options.
841@table @code
842@item --exec-prefix=@var{dirname}
843Specify the toplevel installation directory for architecture-dependent
844files. The default is @file{@var{prefix}}.
845
846@item --bindir=@var{dirname}
847Specify the installation directory for the executables called by users
848(such as @command{gcc} and @command{g++}). The default is
849@file{@var{exec-prefix}/bin}.
850
851@item --libdir=@var{dirname}
852Specify the installation directory for object code libraries and
853internal data files of GCC@. The default is @file{@var{exec-prefix}/lib}.
854
855@item --libexecdir=@var{dirname}
856Specify the installation directory for internal executables of GCC@.
857The default is @file{@var{exec-prefix}/libexec}.
858
859@item --with-slibdir=@var{dirname}
860Specify the installation directory for the shared libgcc library. The
861default is @file{@var{libdir}}.
862
863@item --datarootdir=@var{dirname}
864Specify the root of the directory tree for read-only architecture-independent
865data files referenced by GCC@. The default is @file{@var{prefix}/share}.
866
867@item --infodir=@var{dirname}
868Specify the installation directory for documentation in info format.
869The default is @file{@var{datarootdir}/info}.
870
871@item --datadir=@var{dirname}
872Specify the installation directory for some architecture-independent
873data files referenced by GCC@. The default is @file{@var{datarootdir}}.
874
875@item --docdir=@var{dirname}
876Specify the installation directory for documentation files (other
877than Info) for GCC@. The default is @file{@var{datarootdir}/doc}.
878
879@item --htmldir=@var{dirname}
880Specify the installation directory for HTML documentation files.
881The default is @file{@var{docdir}}.
882
883@item --pdfdir=@var{dirname}
884Specify the installation directory for PDF documentation files.
885The default is @file{@var{docdir}}.
886
887@item --mandir=@var{dirname}
888Specify the installation directory for manual pages. The default is
889@file{@var{datarootdir}/man}. (Note that the manual pages are only extracts
890from the full GCC manuals, which are provided in Texinfo format. The manpages
891are derived by an automatic conversion process from parts of the full
892manual.)
893
894@item --with-gxx-include-dir=@var{dirname}
895Specify
896the installation directory for G++ header files. The default depends
897on other configuration options, and differs between cross and native
898configurations.
899
900@item --with-specs=@var{specs}
901Specify additional command line driver SPECS.
902This can be useful if you need to turn on a non-standard feature by
903default without modifying the compiler's source code, for instance
904@option{--with-specs=%@{!fcommon:%@{!fno-common:-fno-common@}@}}.
905@ifnothtml
906@xref{Spec Files,, Specifying subprocesses and the switches to pass to them,
907gcc, Using the GNU Compiler Collection (GCC)},
908@end ifnothtml
909@ifhtml
910See ``Spec Files'' in the main manual
911@end ifhtml
912
913@end table
914
915@item --program-prefix=@var{prefix}
916GCC supports some transformations of the names of its programs when
917installing them. This option prepends @var{prefix} to the names of
918programs to install in @var{bindir} (see above). For example, specifying
919@option{--program-prefix=foo-} would result in @samp{gcc}
920being installed as @file{/usr/local/bin/foo-gcc}.
921
922@item --program-suffix=@var{suffix}
923Appends @var{suffix} to the names of programs to install in @var{bindir}
924(see above). For example, specifying @option{--program-suffix=-3.1}
925would result in @samp{gcc} being installed as
926@file{/usr/local/bin/gcc-3.1}.
927
928@item --program-transform-name=@var{pattern}
929Applies the @samp{sed} script @var{pattern} to be applied to the names
930of programs to install in @var{bindir} (see above). @var{pattern} has to
931consist of one or more basic @samp{sed} editing commands, separated by
932semicolons. For example, if you want the @samp{gcc} program name to be
933transformed to the installed program @file{/usr/local/bin/myowngcc} and
934the @samp{g++} program name to be transformed to
935@file{/usr/local/bin/gspecial++} without changing other program names,
936you could use the pattern
937@option{--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/'}
938to achieve this effect.
939
940All three options can be combined and used together, resulting in more
941complex conversion patterns. As a basic rule, @var{prefix} (and
942@var{suffix}) are prepended (appended) before further transformations
943can happen with a special transformation script @var{pattern}.
944
945As currently implemented, this option only takes effect for native
946builds; cross compiler binaries' names are not transformed even when a
947transformation is explicitly asked for by one of these options.
948
949For native builds, some of the installed programs are also installed
950with the target alias in front of their name, as in
951@samp{i686-pc-linux-gnu-gcc}. All of the above transformations happen
952before the target alias is prepended to the name---so, specifying
953@option{--program-prefix=foo-} and @option{program-suffix=-3.1}, the
954resulting binary would be installed as
955@file{/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1}.
956
957As a last shortcoming, none of the installed Ada programs are
958transformed yet, which will be fixed in some time.
959
960@item --with-local-prefix=@var{dirname}
961Specify the
962installation directory for local include files. The default is
963@file{/usr/local}. Specify this option if you want the compiler to
964search directory @file{@var{dirname}/include} for locally installed
965header files @emph{instead} of @file{/usr/local/include}.
966
967You should specify @option{--with-local-prefix} @strong{only} if your
968site has a different convention (not @file{/usr/local}) for where to put
969site-specific files.
970
971The default value for @option{--with-local-prefix} is @file{/usr/local}
972regardless of the value of @option{--prefix}. Specifying
973@option{--prefix} has no effect on which directory GCC searches for
974local header files. This may seem counterintuitive, but actually it is
975logical.
976
977The purpose of @option{--prefix} is to specify where to @emph{install
978GCC}. The local header files in @file{/usr/local/include}---if you put
979any in that directory---are not part of GCC@. They are part of other
980programs---perhaps many others. (GCC installs its own header files in
981another directory which is based on the @option{--prefix} value.)
982
983Both the local-prefix include directory and the GCC-prefix include
984directory are part of GCC's ``system include'' directories. Although these
985two directories are not fixed, they need to be searched in the proper
986order for the correct processing of the include_next directive. The
987local-prefix include directory is searched before the GCC-prefix
988include directory. Another characteristic of system include directories
989is that pedantic warnings are turned off for headers in these directories.
990
991Some autoconf macros add @option{-I @var{directory}} options to the
992compiler command line, to ensure that directories containing installed
993packages' headers are searched. When @var{directory} is one of GCC's
994system include directories, GCC will ignore the option so that system
995directories continue to be processed in the correct order. This
996may result in a search order different from what was specified but the
997directory will still be searched.
998
999GCC automatically searches for ordinary libraries using
1000@env{GCC_EXEC_PREFIX}. Thus, when the same installation prefix is
1001used for both GCC and packages, GCC will automatically search for
1002both headers and libraries. This provides a configuration that is
1003easy to use. GCC behaves in a manner similar to that when it is
1004installed as a system compiler in @file{/usr}.
1005
1006Sites that need to install multiple versions of GCC may not want to
1007use the above simple configuration. It is possible to use the
1008@option{--program-prefix}, @option{--program-suffix} and
1009@option{--program-transform-name} options to install multiple versions
1010into a single directory, but it may be simpler to use different prefixes
1011and the @option{--with-local-prefix} option to specify the location of the
1012site-specific files for each version. It will then be necessary for
1013users to specify explicitly the location of local site libraries
1014(e.g., with @env{LIBRARY_PATH}).
1015
1016The same value can be used for both @option{--with-local-prefix} and
1017@option{--prefix} provided it is not @file{/usr}. This can be used
1018to avoid the default search of @file{/usr/local/include}.
1019
1020@strong{Do not} specify @file{/usr} as the @option{--with-local-prefix}!
1021The directory you use for @option{--with-local-prefix} @strong{must not}
1022contain any of the system's standard header files. If it did contain
1023them, certain programs would be miscompiled (including GNU Emacs, on
1024certain targets), because this would override and nullify the header
1025file corrections made by the @command{fixincludes} script.
1026
1027Indications are that people who use this option use it based on mistaken
1028ideas of what it is for. People use it as if it specified where to
1029install part of GCC@. Perhaps they make this assumption because
1030installing GCC creates the directory.
1031
1032@item --with-gcc-major-version-only
1033Specifies that GCC should use only the major number rather than
1034@var{major}.@var{minor}.@var{patchlevel} in filesystem paths.
1035
1036@item --with-native-system-header-dir=@var{dirname}
1037Specifies that @var{dirname} is the directory that contains native system
1038header files, rather than @file{/usr/include}. This option is most useful
1039if you are creating a compiler that should be isolated from the system
1040as much as possible. It is most commonly used with the
1041@option{--with-sysroot} option and will cause GCC to search
1042@var{dirname} inside the system root specified by that option.
1043
1044@item --enable-shared[=@var{package}[,@dots{}]]
1045Build shared versions of libraries, if shared libraries are supported on
1046the target platform. Unlike GCC 2.95.x and earlier, shared libraries
1047are enabled by default on all platforms that support shared libraries.
1048
1049If a list of packages is given as an argument, build shared libraries
1050only for the listed packages. For other packages, only static libraries
1051will be built. Package names currently recognized in the GCC tree are
1052@samp{libgcc} (also known as @samp{gcc}), @samp{libstdc++} (not
1053@samp{libstdc++-v3}), @samp{libffi}, @samp{zlib}, @samp{boehm-gc},
1054@samp{ada}, @samp{libada}, @samp{libgo}, @samp{libobjc}, and @samp{libphobos}.
1055Note @samp{libiberty} does not support shared libraries at all.
1056
1057Use @option{--disable-shared} to build only static libraries. Note that
1058@option{--disable-shared} does not accept a list of package names as
1059argument, only @option{--enable-shared} does.
1060
1061Contrast with @option{--enable-host-shared}, which affects @emph{host}
1062code.
1063
1064@item --enable-host-shared
1065Specify that the @emph{host} code should be built into position-independent
04711f51
MP
1066machine code (with -fPIC), allowing it to be used within shared libraries,
1067but yielding a slightly slower compiler.
d77de738
ML
1068
1069This option is required when building the libgccjit.so library.
1070
1071Contrast with @option{--enable-shared}, which affects @emph{target}
1072libraries.
1073
1074@item @anchor{with-gnu-as}--with-gnu-as
1075Specify that the compiler should assume that the
1076assembler it finds is the GNU assembler. However, this does not modify
1077the rules to find an assembler and will result in confusion if the
1078assembler found is not actually the GNU assembler. (Confusion may also
1079result if the compiler finds the GNU assembler but has not been
1080configured with @option{--with-gnu-as}.) If you have more than one
1081assembler installed on your system, you may want to use this option in
1082connection with @option{--with-as=@var{pathname}} or
1083@option{--with-build-time-tools=@var{pathname}}.
1084
1085The following systems are the only ones where it makes a difference
1086whether you use the GNU assembler. On any other system,
1087@option{--with-gnu-as} has no effect.
1088
1089@itemize @bullet
1090@item @samp{hppa1.0-@var{any}-@var{any}}
1091@item @samp{hppa1.1-@var{any}-@var{any}}
1092@item @samp{sparc-sun-solaris2.@var{any}}
1093@item @samp{sparc64-@var{any}-solaris2.@var{any}}
1094@end itemize
1095
1096@item @anchor{with-as}--with-as=@var{pathname}
1097Specify that the compiler should use the assembler pointed to by
1098@var{pathname}, rather than the one found by the standard rules to find
1099an assembler, which are:
1100@itemize @bullet
1101@item
1102Unless GCC is being built with a cross compiler, check the
1103@file{@var{libexec}/gcc/@var{target}/@var{version}} directory.
1104@var{libexec} defaults to @file{@var{exec-prefix}/libexec};
1105@var{exec-prefix} defaults to @var{prefix}, which
1106defaults to @file{/usr/local} unless overridden by the
1107@option{--prefix=@var{pathname}} switch described above. @var{target}
1108is the target system triple, such as @samp{sparc-sun-solaris2.7}, and
1109@var{version} denotes the GCC version, such as 3.0.
1110
1111@item
1112If the target system is the same that you are building on, check
1113operating system specific directories (e.g.@: @file{/usr/ccs/bin} on
1114Solaris 2).
1115
1116@item
1117Check in the @env{PATH} for a tool whose name is prefixed by the
1118target system triple.
1119
1120@item
1121Check in the @env{PATH} for a tool whose name is not prefixed by the
1122target system triple, if the host and target system triple are
1123the same (in other words, we use a host tool if it can be used for
1124the target as well).
1125@end itemize
1126
1127You may want to use @option{--with-as} if no assembler
1128is installed in the directories listed above, or if you have multiple
1129assemblers installed and want to choose one that is not found by the
1130above rules.
1131
1132@item @anchor{with-gnu-ld}--with-gnu-ld
1133Same as @uref{#with-gnu-as,,@option{--with-gnu-as}}
1134but for the linker.
1135
1136@item --with-ld=@var{pathname}
1137Same as @uref{#with-as,,@option{--with-as}}
1138but for the linker.
1139
1140@item --with-dsymutil=@var{pathname}
1141Same as @uref{#with-as,,@option{--with-as}}
1142but for the debug linker (only used on Darwin platforms so far).
1143
1144@item --with-tls=@var{dialect}
1145Specify the default TLS dialect, for systems were there is a choice.
1146For ARM targets, possible values for @var{dialect} are @code{gnu} or
1147@code{gnu2}, which select between the original GNU dialect and the GNU TLS
1148descriptor-based dialect.
1149
1150@item --enable-multiarch
1151Specify whether to enable or disable multiarch support. The default is
1152to check for glibc start files in a multiarch location, and enable it
1153if the files are found. The auto detection is enabled for native builds,
1154and for cross builds configured with @option{--with-sysroot}, and without
1155@option{--with-native-system-header-dir}.
1156More documentation about multiarch can be found at
1157@uref{https://wiki.debian.org/Multiarch}.
1158
1159@item --enable-sjlj-exceptions
1160Force use of the @code{setjmp}/@code{longjmp}-based scheme for exceptions.
1161@samp{configure} ordinarily picks the correct value based on the platform.
1162Only use this option if you are sure you need a different setting.
1163
1164@item --enable-vtable-verify
1165Specify whether to enable or disable the vtable verification feature.
1166Enabling this feature causes libstdc++ to be built with its virtual calls
1167in verifiable mode. This means that, when linked with libvtv, every
1168virtual call in libstdc++ will verify the vtable pointer through which the
1169call will be made before actually making the call. If not linked with libvtv,
1170the verifier will call stub functions (in libstdc++ itself) and do nothing.
1171If vtable verification is disabled, then libstdc++ is not built with its
1172virtual calls in verifiable mode at all. However the libvtv library will
1173still be built (see @option{--disable-libvtv} to turn off building libvtv).
1174@option{--disable-vtable-verify} is the default.
1175
1176@item --disable-gcov
1177Specify that the run-time library used for coverage analysis
1178and associated host tools should not be built.
1179
1180@item --disable-multilib
1181Specify that multiple target
1182libraries to support different target variants, calling
1183conventions, etc.@: should not be built. The default is to build a
1184predefined set of them.
1185
1186Some targets provide finer-grained control over which multilibs are built
1187(e.g., @option{--disable-softfloat}):
1188@table @code
1189@item arm-*-*
1190fpu, 26bit, underscore, interwork, biendian, nofmult.
1191
1192@item m68*-*-*
1193softfloat, m68881, m68000, m68020.
1194
1195@item mips*-*-*
1196single-float, biendian, softfloat.
1197
1198@item msp430-*-*
1199no-exceptions
1200
1201@item powerpc*-*-*, rs6000*-*-*
1202aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian,
1203sysv, aix.
1204
1205@end table
1206
1207@item --with-multilib-list=@var{list}
1208@itemx --without-multilib-list
1209Specify what multilibs to build. @var{list} is a comma separated list of
1210values, possibly consisting of a single value. Currently only implemented
1211for aarch64*-*-*, arm*-*-*, loongarch64-*-*, riscv*-*-*, sh*-*-* and
1212x86-64-*-linux*. The accepted values and meaning for each target is given
1213below.
1214
1215@table @code
1216@item aarch64*-*-*
1217@var{list} is a comma separated list of @code{ilp32}, and @code{lp64}
1218to enable ILP32 and LP64 run-time libraries, respectively. If
1219@var{list} is empty, then there will be no multilibs and only the
1220default run-time library will be built. If @var{list} is
1221@code{default} or --with-multilib-list= is not specified, then the
1222default set of libraries is selected based on the value of
1223@option{--target}.
1224
1225@item arm*-*-*
1226@var{list} is a comma separated list of @code{aprofile} and
1227@code{rmprofile} to build multilibs for A or R and M architecture
1228profiles respectively. Note that, due to some limitation of the current
1229multilib framework, using the combined @code{aprofile,rmprofile}
1230multilibs selects in some cases a less optimal multilib than when using
1231the multilib profile for the architecture targetted. The special value
1232@code{default} is also accepted and is equivalent to omitting the
1233option, i.e., only the default run-time library will be enabled.
1234
1235@var{list} may instead contain @code{@@name}, to use the multilib
1236configuration Makefile fragment @file{name} in @file{gcc/config/arm} in
1237the source tree (it is part of the corresponding sources, after all).
1238It is recommended, but not required, that files used for this purpose to
1239be named starting with @file{t-ml-}, to make their intended purpose
1240self-evident, in line with GCC conventions. Such files enable custom,
1241user-chosen multilib lists to be configured. Whether multiple such
1242files can be used together depends on the contents of the supplied
1243files. See @file{gcc/config/arm/t-multilib} and its supplementary
1244@file{gcc/config/arm/t-*profile} files for an example of what such
1245Makefile fragments might look like for this version of GCC. The macros
1246expected to be defined in these fragments are not stable across GCC
1247releases, so make sure they define the @code{MULTILIB}-related macros
1248expected by the version of GCC you are building.
1249@ifnothtml
1250@xref{Target Fragment,, Target Makefile Fragments, gccint, GNU Compiler
1251Collection (GCC) Internals}.
1252@end ifnothtml
1253@ifhtml
1254See ``Target Makefile Fragments'' in the internals manual.
1255@end ifhtml
1256
1257The table below gives the combination of ISAs, architectures, FPUs and
1258floating-point ABIs for which multilibs are built for each predefined
1259profile. The union of these options is considered when specifying both
1260@code{aprofile} and @code{rmprofile}.
1261
1262@multitable @columnfractions .15 .28 .30
1263@item Option @tab aprofile @tab rmprofile
1264@item ISAs
1265@tab @code{-marm} and @code{-mthumb}
1266@tab @code{-mthumb}
1267@item Architectures@*@*@*@*@*@*
1268@tab default architecture@*
1269@code{-march=armv7-a}@*
1270@code{-march=armv7ve}@*
1271@code{-march=armv8-a}@*@*@*
1272@tab default architecture@*
1273@code{-march=armv6s-m}@*
1274@code{-march=armv7-m}@*
1275@code{-march=armv7e-m}@*
1276@code{-march=armv8-m.base}@*
1277@code{-march=armv8-m.main}@*
1278@code{-march=armv7}
1279@item FPUs@*@*@*@*@*
1280@tab none@*
1281@code{-mfpu=vfpv3-d16}@*
1282@code{-mfpu=neon}@*
1283@code{-mfpu=vfpv4-d16}@*
1284@code{-mfpu=neon-vfpv4}@*
1285@code{-mfpu=neon-fp-armv8}
1286@tab none@*
1287@code{-mfpu=vfpv3-d16}@*
1288@code{-mfpu=fpv4-sp-d16}@*
1289@code{-mfpu=fpv5-sp-d16}@*
1290@code{-mfpu=fpv5-d16}@*
1291@item floating-point@/ ABIs@*@*
1292@tab @code{-mfloat-abi=soft}@*
1293@code{-mfloat-abi=softfp}@*
1294@code{-mfloat-abi=hard}
1295@tab @code{-mfloat-abi=soft}@*
1296@code{-mfloat-abi=softfp}@*
1297@code{-mfloat-abi=hard}
1298@end multitable
1299
1300@item loongarch*-*-*
1301@var{list} is a comma-separated list of the following ABI identifiers:
1302@code{lp64d[/base]} @code{lp64f[/base]} @code{lp64d[/base]}, where the
1303@code{/base} suffix may be omitted, to enable their respective run-time
1304libraries. If @var{list} is empty or @code{default},
1305or if @option{--with-multilib-list} is not specified, then the default ABI
1306as specified by @option{--with-abi} or implied by @option{--target} is selected.
1307
1308@item riscv*-*-*
1309@var{list} is a single ABI name. The target architecture must be either
1310@code{rv32gc} or @code{rv64gc}. This will build a single multilib for the
1311specified architecture and ABI pair. If @code{--with-multilib-list} is not
1312given, then a default set of multilibs is selected based on the value of
1313@option{--target}. This is usually a large set of multilibs.
1314
1315@item sh*-*-*
1316@var{list} is a comma separated list of CPU names. These must be of the
1317form @code{sh*} or @code{m*} (in which case they match the compiler option
1318for that processor). The list should not contain any endian options -
1319these are handled by @option{--with-endian}.
1320
1321If @var{list} is empty, then there will be no multilibs for extra
1322processors. The multilib for the secondary endian remains enabled.
1323
1324As a special case, if an entry in the list starts with a @code{!}
1325(exclamation point), then it is added to the list of excluded multilibs.
1326Entries of this sort should be compatible with @samp{MULTILIB_EXCLUDES}
1327(once the leading @code{!} has been stripped).
1328
1329If @option{--with-multilib-list} is not given, then a default set of
1330multilibs is selected based on the value of @option{--target}. This is
1331usually the complete set of libraries, but some targets imply a more
1332specialized subset.
1333
1334Example 1: to configure a compiler for SH4A only, but supporting both
1335endians, with little endian being the default:
1336@smallexample
1337--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
1338@end smallexample
1339
1340Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with
1341only little endian SH4AL:
1342@smallexample
1343--with-cpu=sh4a --with-endian=little,big \
1344--with-multilib-list=sh4al,!mb/m4al
1345@end smallexample
1346
1347@item x86-64-*-linux*
1348@var{list} is a comma separated list of @code{m32}, @code{m64} and
1349@code{mx32} to enable 32-bit, 64-bit and x32 run-time libraries,
1350respectively. If @var{list} is empty, then there will be no multilibs
1351and only the default run-time library will be enabled.
1352
1353If @option{--with-multilib-list} is not given, then only 32-bit and
135464-bit run-time libraries will be enabled.
1355@end table
1356
1357@item --with-multilib-generator=@var{config}
1358Specify what multilibs to build. @var{config} is a semicolon separated list of
1359values, possibly consisting of a single value. Currently only implemented
1360for riscv*-*-elf*. The accepted values and meanings are given below.
1361
1362
1363Every config is constructed with four components: architecture string, ABI,
1364reuse rule with architecture string and reuse rule with sub-extension.
1365
1366Example 1: Add multi-lib suppport for rv32i with ilp32.
1367@smallexample
1368rv32i-ilp32--
1369@end smallexample
1370
1371Example 2: Add multi-lib suppport for rv32i with ilp32 and rv32imafd with ilp32.
1372@smallexample
1373rv32i-ilp32--;rv32imafd-ilp32--
1374@end smallexample
1375
1376Example 3: Add multi-lib suppport for rv32i with ilp32; rv32im with ilp32 and
1377rv32ic with ilp32 will reuse this multi-lib set.
1378@smallexample
1379rv32i-ilp32-rv32im-c
1380@end smallexample
1381
1382Example 4: Add multi-lib suppport for rv64ima with lp64; rv64imaf with lp64,
1383rv64imac with lp64 and rv64imafc with lp64 will reuse this multi-lib set.
1384@smallexample
1385rv64ima-lp64--f,c,fc
1386@end smallexample
1387
1388@option{--with-multilib-generator} have an optional configuration argument
1389@option{--cmodel=val} for code model, this option will expand with other
1390config options, @var{val} is a comma separated list of possible code model,
1391currently we support medlow and medany.
1392
1393Example 5: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
1394medlow code model
1395@smallexample
1396rv64ima-lp64--;--cmodel=medlow
1397@end smallexample
1398
1399Example 6: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and
1400medlow code model; rv64ima with lp64 and medany code model
1401@smallexample
1402rv64ima-lp64--;--cmodel=medlow,medany
1403@end smallexample
1404
1405@item --with-endian=@var{endians}
1406Specify what endians to use.
1407Currently only implemented for sh*-*-*.
1408
1409@var{endians} may be one of the following:
1410@table @code
1411@item big
1412Use big endian exclusively.
1413@item little
1414Use little endian exclusively.
1415@item big,little
1416Use big endian by default. Provide a multilib for little endian.
1417@item little,big
1418Use little endian by default. Provide a multilib for big endian.
1419@end table
1420
1421@item --enable-threads
1422Specify that the target
1423supports threads. This affects the Objective-C compiler and runtime
1424library, and exception handling for other languages like C++.
1425On some systems, this is the default.
1426
1427In general, the best (and, in many cases, the only known) threading
1428model available will be configured for use. Beware that on some
1429systems, GCC has not been taught what threading models are generally
1430available for the system. In this case, @option{--enable-threads} is an
1431alias for @option{--enable-threads=single}.
1432
1433@item --disable-threads
1434Specify that threading support should be disabled for the system.
1435This is an alias for @option{--enable-threads=single}.
1436
1437@item --enable-threads=@var{lib}
1438Specify that
1439@var{lib} is the thread support library. This affects the Objective-C
1440compiler and runtime library, and exception handling for other languages
1441like C++. The possibilities for @var{lib} are:
1442
1443@table @code
1444@item aix
1445AIX thread support.
1446@item dce
1447DCE thread support.
1448@item lynx
1449LynxOS thread support.
1450@item mipssde
1451MIPS SDE thread support.
1452@item no
1453This is an alias for @samp{single}.
1454@item posix
1455Generic POSIX/Unix98 thread support.
1456@item rtems
1457RTEMS thread support.
1458@item single
1459Disable thread support, should work for all platforms.
1460@item tpf
1461TPF thread support.
1462@item vxworks
1463VxWorks thread support.
1464@item win32
1465Microsoft Win32 API thread support.
1466@end table
1467
1468@item --enable-tls
1469Specify that the target supports TLS (Thread Local Storage). Usually
1470configure can correctly determine if TLS is supported. In cases where
1471it guesses incorrectly, TLS can be explicitly enabled or disabled with
1472@option{--enable-tls} or @option{--disable-tls}. This can happen if
1473the assembler supports TLS but the C library does not, or if the
1474assumptions made by the configure test are incorrect.
1475
1476@item --disable-tls
1477Specify that the target does not support TLS.
1478This is an alias for @option{--enable-tls=no}.
1479
1480@item --disable-tm-clone-registry
1481Disable TM clone registry in libgcc. It is enabled in libgcc by default.
1482This option helps to reduce code size for embedded targets which do
1483not use transactional memory.
1484
1485@item --with-cpu=@var{cpu}
1486@itemx --with-cpu-32=@var{cpu}
1487@itemx --with-cpu-64=@var{cpu}
1488Specify which cpu variant the compiler should generate code for by default.
1489@var{cpu} will be used as the default value of the @option{-mcpu=} switch.
1490This option is only supported on some targets, including ARC, ARM, i386, M68k,
1491PowerPC, and SPARC@. It is mandatory for ARC@. The @option{--with-cpu-32} and
1492@option{--with-cpu-64} options specify separate default CPUs for
149332-bit and 64-bit modes; these options are only supported for aarch64, i386,
1494x86-64, PowerPC, and SPARC@.
1495
1496@item --with-schedule=@var{cpu}
1497@itemx --with-arch=@var{cpu}
1498@itemx --with-arch-32=@var{cpu}
1499@itemx --with-arch-64=@var{cpu}
1500@itemx --with-tune=@var{cpu}
1501@itemx --with-tune-32=@var{cpu}
1502@itemx --with-tune-64=@var{cpu}
1503@itemx --with-abi=@var{abi}
1504@itemx --with-fpu=@var{type}
1505@itemx --with-float=@var{type}
1506These configure options provide default values for the @option{-mschedule=},
1507@option{-march=}, @option{-mtune=}, @option{-mabi=}, and @option{-mfpu=}
1508options and for @option{-mhard-float} or @option{-msoft-float}. As with
1509@option{--with-cpu}, which switches will be accepted and acceptable values
1510of the arguments depend on the target.
1511
1512@item --with-mode=@var{mode}
1513Specify if the compiler should default to @option{-marm} or @option{-mthumb}.
1514This option is only supported on ARM targets.
1515
1516@item --with-stack-offset=@var{num}
1517This option sets the default for the -mstack-offset=@var{num} option,
1518and will thus generally also control the setting of this option for
1519libraries. This option is only supported on Epiphany targets.
1520
1521@item --with-fpmath=@var{isa}
1522This options sets @option{-mfpmath=sse} by default and specifies the default
1523ISA for floating-point arithmetics. You can select either @samp{sse} which
1524enables @option{-msse2} or @samp{avx} which enables @option{-mavx} by default.
1525This option is only supported on i386 and x86-64 targets.
1526
1527@item --with-fp-32=@var{mode}
1528On MIPS targets, set the default value for the @option{-mfp} option when using
1529the o32 ABI. The possibilities for @var{mode} are:
1530@table @code
1531@item 32
1532Use the o32 FP32 ABI extension, as with the @option{-mfp32} command-line
1533option.
1534@item xx
1535Use the o32 FPXX ABI extension, as with the @option{-mfpxx} command-line
1536option.
1537@item 64
1538Use the o32 FP64 ABI extension, as with the @option{-mfp64} command-line
1539option.
1540@end table
1541In the absence of this configuration option the default is to use the o32
1542FP32 ABI extension.
1543
1544@item --with-odd-spreg-32
1545On MIPS targets, set the @option{-modd-spreg} option by default when using
1546the o32 ABI.
1547
1548@item --without-odd-spreg-32
1549On MIPS targets, set the @option{-mno-odd-spreg} option by default when using
1550the o32 ABI. This is normally used in conjunction with
1551@option{--with-fp-32=64} in order to target the o32 FP64A ABI extension.
1552
1553@item --with-nan=@var{encoding}
1554On MIPS targets, set the default encoding convention to use for the
1555special not-a-number (NaN) IEEE 754 floating-point data. The
1556possibilities for @var{encoding} are:
1557@table @code
1558@item legacy
1559Use the legacy encoding, as with the @option{-mnan=legacy} command-line
1560option.
1561@item 2008
1562Use the 754-2008 encoding, as with the @option{-mnan=2008} command-line
1563option.
1564@end table
1565To use this configuration option you must have an assembler version
1566installed that supports the @option{-mnan=} command-line option too.
1567In the absence of this configuration option the default convention is
1568the legacy encoding, as when neither of the @option{-mnan=2008} and
1569@option{-mnan=legacy} command-line options has been used.
1570
1571@item --with-divide=@var{type}
1572Specify how the compiler should generate code for checking for
1573division by zero. This option is only supported on the MIPS target.
1574The possibilities for @var{type} are:
1575@table @code
1576@item traps
1577Division by zero checks use conditional traps (this is the default on
1578systems that support conditional traps).
1579@item breaks
1580Division by zero checks use the break instruction.
1581@end table
1582
1583@item --with-compact-branches=@var{policy}
1584Specify how the compiler should generate branch instructions.
1585This option is only supported on the MIPS target.
1586The possibilities for @var{type} are:
1587@table @code
1588@item optimal
1589Cause a delay slot branch to be used if one is available in the
1590current ISA and the delay slot is successfully filled. If the delay slot
1591is not filled, a compact branch will be chosen if one is available.
1592@item never
1593Ensures that compact branch instructions will never be generated.
1594@item always
1595Ensures that a compact branch instruction will be generated if available.
1596If a compact branch instruction is not available,
1597a delay slot form of the branch will be used instead.
1598This option is supported from MIPS Release 6 onwards.
1599For pre-R6/microMIPS/MIPS16, this option is just same as never/optimal.
1600@end table
1601
1602@c If you make --with-llsc the default for additional targets,
1603@c update the --with-llsc description in the MIPS section below.
1604
1605@item --with-llsc
1606On MIPS targets, make @option{-mllsc} the default when no
1607@option{-mno-llsc} option is passed. This is the default for
1608Linux-based targets, as the kernel will emulate them if the ISA does
1609not provide them.
1610
1611@item --without-llsc
1612On MIPS targets, make @option{-mno-llsc} the default when no
1613@option{-mllsc} option is passed.
1614
1615@item --with-synci
1616On MIPS targets, make @option{-msynci} the default when no
1617@option{-mno-synci} option is passed.
1618
1619@item --without-synci
1620On MIPS targets, make @option{-mno-synci} the default when no
1621@option{-msynci} option is passed. This is the default.
1622
1623@item --with-lxc1-sxc1
1624On MIPS targets, make @option{-mlxc1-sxc1} the default when no
1625@option{-mno-lxc1-sxc1} option is passed. This is the default.
1626
1627@item --without-lxc1-sxc1
1628On MIPS targets, make @option{-mno-lxc1-sxc1} the default when no
1629@option{-mlxc1-sxc1} option is passed. The indexed load/store
1630instructions are not directly a problem but can lead to unexpected
1631behaviour when deployed in an application intended for a 32-bit address
1632space but run on a 64-bit processor. The issue is seen because all
1633known MIPS 64-bit Linux kernels execute o32 and n32 applications
1634with 64-bit addressing enabled which affects the overflow behaviour
1635of the indexed addressing mode. GCC will assume that ordinary
163632-bit arithmetic overflow behaviour is the same whether performed
1637as an @code{addu} instruction or as part of the address calculation
1638in @code{lwxc1} type instructions. This assumption holds true in a
1639pure 32-bit environment and can hold true in a 64-bit environment if
1640the address space is accurately set to be 32-bit for o32 and n32.
1641
1642@item --with-madd4
1643On MIPS targets, make @option{-mmadd4} the default when no
1644@option{-mno-madd4} option is passed. This is the default.
1645
1646@item --without-madd4
1647On MIPS targets, make @option{-mno-madd4} the default when no
1648@option{-mmadd4} option is passed. The @code{madd4} instruction
1649family can be problematic when targeting a combination of cores that
1650implement these instructions differently. There are two known cores
1651that implement these as fused operations instead of unfused (where
1652unfused is normally expected). Disabling these instructions is the
1653only way to ensure compatible code is generated; this will incur
1654a performance penalty.
1655
1656@item --with-mips-plt
1657On MIPS targets, make use of copy relocations and PLTs.
1658These features are extensions to the traditional
1659SVR4-based MIPS ABIs and require support from GNU binutils
1660and the runtime C library.
1661
1662@item --with-stack-clash-protection-guard-size=@var{size}
1663On certain targets this option sets the default stack clash protection guard
1664size as a power of two in bytes. On AArch64 @var{size} is required to be either
166512 (4KB) or 16 (64KB).
1666
1667@item --with-isa-spec=@var{ISA-spec-string}
1668On RISC-V targets specify the default version of the RISC-V Unprivileged
1669(formerly User-Level) ISA specification to produce code conforming to.
1670The possibilities for @var{ISA-spec-string} are:
1671@table @code
1672@item 2.2
1673Produce code conforming to version 2.2.
1674@item 20190608
1675Produce code conforming to version 20190608.
1676@item 20191213
1677Produce code conforming to version 20191213.
1678@end table
1679In the absence of this configuration option the default version is 20191213.
1680
1681@item --enable-__cxa_atexit
1682Define if you want to use __cxa_atexit, rather than atexit, to
1683register C++ destructors for local statics and global objects.
1684This is essential for fully standards-compliant handling of
1685destructors, but requires __cxa_atexit in libc. This option is currently
1686only available on systems with GNU libc. When enabled, this will cause
1687@option{-fuse-cxa-atexit} to be passed by default.
1688
1689@item --enable-gnu-indirect-function
1690Define if you want to enable the @code{ifunc} attribute. This option is
1691currently only available on systems with GNU libc on certain targets.
1692
1693@item --enable-target-optspace
1694Specify that target
1695libraries should be optimized for code space instead of code speed.
1696This is the default for the m32r platform.
1697
1698@item --with-cpp-install-dir=@var{dirname}
1699Specify that the user visible @command{cpp} program should be installed
1700in @file{@var{prefix}/@var{dirname}/cpp}, in addition to @var{bindir}.
1701
1702@item --enable-comdat
1703Enable COMDAT group support. This is primarily used to override the
1704automatically detected value.
1705
1706@item --enable-initfini-array
1707Force the use of sections @code{.init_array} and @code{.fini_array}
1708(instead of @code{.init} and @code{.fini}) for constructors and
1709destructors. Option @option{--disable-initfini-array} has the
1710opposite effect. If neither option is specified, the configure script
1711will try to guess whether the @code{.init_array} and
1712@code{.fini_array} sections are supported and, if they are, use them.
1713
1714@item --enable-link-mutex
1715When building GCC, use a mutex to avoid linking the compilers for
1716multiple languages at the same time, to avoid thrashing on build
1717systems with limited free memory. The default is not to use such a mutex.
1718
1719@item --enable-link-serialization
1720When building GCC, use make dependencies to serialize linking the compilers for
1721multiple languages, to avoid thrashing on build
1722systems with limited free memory. The default is not to add such
1723dependencies and thus with parallel make potentially link different
1724compilers concurrently. If the argument is a positive integer, allow
1725that number of concurrent link processes for the large binaries.
1726
1727@item --enable-maintainer-mode
1728The build rules that regenerate the Autoconf and Automake output files as
1729well as the GCC master message catalog @file{gcc.pot} are normally
1730disabled. This is because it can only be rebuilt if the complete source
1731tree is present. If you have changed the sources and want to rebuild the
1732catalog, configuring with @option{--enable-maintainer-mode} will enable
1733this. Note that you need a recent version of the @code{gettext} tools
1734to do so.
1735
1736@item --disable-bootstrap
1737For a native build, the default configuration is to perform
1738a 3-stage bootstrap of the compiler when @samp{make} is invoked,
1739testing that GCC can compile itself correctly. If you want to disable
1740this process, you can configure with @option{--disable-bootstrap}.
1741
1742@item --enable-bootstrap
1743In special cases, you may want to perform a 3-stage build
1744even if the target and host triplets are different.
1745This is possible when the host can run code compiled for
1746the target (e.g.@: host is i686-linux, target is i486-linux).
1747Starting from GCC 4.2, to do this you have to configure explicitly
1748with @option{--enable-bootstrap}.
1749
1750@item --enable-generated-files-in-srcdir
1751Neither the .c and .h files that are generated from Bison and flex nor the
1752info manuals and man pages that are built from the .texi files are present
1753in the repository development tree. When building GCC from that development tree,
1754or from one of our snapshots, those generated files are placed in your
1755build directory, which allows for the source to be in a readonly
1756directory.
1757
1758If you configure with @option{--enable-generated-files-in-srcdir} then those
1759generated files will go into the source directory. This is mainly intended
1760for generating release or prerelease tarballs of the GCC sources, since it
1761is not a requirement that the users of source releases to have flex, Bison,
1762or makeinfo.
1763
1764@item --enable-version-specific-runtime-libs
1765Specify
1766that runtime libraries should be installed in the compiler specific
1767subdirectory (@file{@var{libdir}/gcc}) rather than the usual places. In
1768addition, @samp{libstdc++}'s include files will be installed into
1769@file{@var{libdir}} unless you overruled it by using
1770@option{--with-gxx-include-dir=@var{dirname}}. Using this option is
1771particularly useful if you intend to use several versions of GCC in
1772parallel. The default is @samp{yes} for @samp{libada}, and @samp{no} for
1773the remaining libraries.
1774
1775@item @anchor{WithAixSoname}--with-aix-soname=@samp{aix}, @samp{svr4} or @samp{both}
1776Traditional AIX shared library versioning (versioned @code{Shared Object}
1777files as members of unversioned @code{Archive Library} files named
1778@samp{lib.a}) causes numerous headaches for package managers. However,
1779@code{Import Files} as members of @code{Archive Library} files allow for
1780@strong{filename-based versioning} of shared libraries as seen on Linux/SVR4,
1781where this is called the "SONAME". But as they prevent static linking,
1782@code{Import Files} may be used with @code{Runtime Linking} only, where the
1783linker does search for @samp{libNAME.so} before @samp{libNAME.a} library
1784filenames with the @samp{-lNAME} linker flag.
1785
1786@anchor{AixLdCommand}For detailed information please refer to the AIX
1787@uref{https://www.ibm.com/support/knowledgecenter/search/%22the%20ld%20command%2C%20also%20called%20the%20linkage%20editor%20or%20binder%22,,ld
1788Command} reference.
1789
1790As long as shared library creation is enabled, upon:
1791@table @code
1792@item --with-aix-soname=aix
1793@item --with-aix-soname=both
1794 A (traditional AIX) @code{Shared Archive Library} file is created:
1795 @itemize @bullet
1796 @item using the @samp{libNAME.a} filename scheme
1797 @item with the @code{Shared Object} file as archive member named
1798 @samp{libNAME.so.V} (except for @samp{libgcc_s}, where the @code{Shared
1799 Object} file is named @samp{shr.o} for backwards compatibility), which
1800 @itemize @minus
1801 @item is used for runtime loading from inside the @samp{libNAME.a} file
1802 @item is used for dynamic loading via
1803 @code{dlopen("libNAME.a(libNAME.so.V)", RTLD_MEMBER)}
1804 @item is used for shared linking
1805 @item is used for static linking, so no separate @code{Static Archive
1806 Library} file is needed
1807 @end itemize
1808 @end itemize
1809@item --with-aix-soname=both
1810@item --with-aix-soname=svr4
1811 A (second) @code{Shared Archive Library} file is created:
1812 @itemize @bullet
1813 @item using the @samp{libNAME.so.V} filename scheme
1814 @item with the @code{Shared Object} file as archive member named
1815 @samp{shr.o}, which
1816 @itemize @minus
1817 @item is created with the @code{-G linker flag}
1818 @item has the @code{F_LOADONLY} flag set
1819 @item is used for runtime loading from inside the @samp{libNAME.so.V} file
1820 @item is used for dynamic loading via @code{dlopen("libNAME.so.V(shr.o)",
1821 RTLD_MEMBER)}
1822 @end itemize
1823 @item with the @code{Import File} as archive member named @samp{shr.imp},
1824 which
1825 @itemize @minus
1826 @item refers to @samp{libNAME.so.V(shr.o)} as the "SONAME", to be recorded
1827 in the @code{Loader Section} of subsequent binaries
1828 @item indicates whether @samp{libNAME.so.V(shr.o)} is 32 or 64 bit
1829 @item lists all the public symbols exported by @samp{lib.so.V(shr.o)},
1830 eventually decorated with the @code{@samp{weak} Keyword}
1831 @item is necessary for shared linking against @samp{lib.so.V(shr.o)}
1832 @end itemize
1833 @end itemize
1834 A symbolic link using the @samp{libNAME.so} filename scheme is created:
1835 @itemize @bullet
1836 @item pointing to the @samp{libNAME.so.V} @code{Shared Archive Library} file
1837 @item to permit the @code{ld Command} to find @samp{lib.so.V(shr.imp)} via
1838 the @samp{-lNAME} argument (requires @code{Runtime Linking} to be enabled)
1839 @item to permit dynamic loading of @samp{lib.so.V(shr.o)} without the need
1840 to specify the version number via @code{dlopen("libNAME.so(shr.o)",
1841 RTLD_MEMBER)}
1842 @end itemize
1843@end table
1844
1845As long as static library creation is enabled, upon:
1846@table @code
1847@item --with-aix-soname=svr4
1848 A @code{Static Archive Library} is created:
1849 @itemize @bullet
1850 @item using the @samp{libNAME.a} filename scheme
1851 @item with all the @code{Static Object} files as archive members, which
1852 @itemize @minus
1853 @item are used for static linking
1854 @end itemize
1855 @end itemize
1856@end table
1857
1858While the aix-soname=@samp{svr4} option does not create @code{Shared Object}
1859files as members of unversioned @code{Archive Library} files any more, package
1860managers still are responsible to
1861@uref{./specific.html#TransferAixShobj,,transfer} @code{Shared Object} files
1862found as member of a previously installed unversioned @code{Archive Library}
1863file into the newly installed @code{Archive Library} file with the same
1864filename.
1865
1866@emph{WARNING:} Creating @code{Shared Object} files with @code{Runtime Linking}
1867enabled may bloat the TOC, eventually leading to @code{TOC overflow} errors,
1868requiring the use of either the @option{-Wl,-bbigtoc} linker flag (seen to
1869break with the @code{GDB} debugger) or some of the TOC-related compiler flags,
1870@ifnothtml
1871@xref{RS/6000 and PowerPC Options,, RS/6000 and PowerPC Options, gcc,
1872Using the GNU Compiler Collection (GCC)}.
1873@end ifnothtml
1874@ifhtml
1875see ``RS/6000 and PowerPC Options'' in the main manual.
1876@end ifhtml
1877
1878@option{--with-aix-soname} is currently supported by @samp{libgcc_s} only, so
1879this option is still experimental and not for normal use yet.
1880
1881Default is the traditional behavior @option{--with-aix-soname=@samp{aix}}.
1882
1883@item --enable-languages=@var{lang1},@var{lang2},@dots{}
1884Specify that only a particular subset of compilers and
1885their runtime libraries should be built. For a list of valid values for
1886@var{langN} you can issue the following command in the
1887@file{gcc} directory of your GCC source tree:@*
1888@smallexample
1889grep ^language= */config-lang.in
1890@end smallexample
1891Currently, you can use any of the following:
1892@code{all}, @code{default}, @code{ada}, @code{c}, @code{c++}, @code{d},
1eee94d3
GM
1893@code{fortran}, @code{go}, @code{jit}, @code{lto}, @code{m2},
1894@code{objc}, @code{obj-c++}.
d77de738
ML
1895Building the Ada compiler has special requirements, see below.
1896If you do not pass this flag, or specify the option @code{default}, then the
1897default languages available in the @file{gcc} sub-tree will be configured.
1eee94d3
GM
1898Ada, D, Go, Jit, Objective-C++ and Modula-2 are not default languages.
1899LTO is not a
d77de738
ML
1900default language, but is built by default because @option{--enable-lto} is
1901enabled by default. The other languages are default languages. If
1902@code{all} is specified, then all available languages are built. An
1903exception is @code{jit} language, which requires
1904@option{--enable-host-shared} to be included with @code{all}.
1905
1906@item --enable-stage1-languages=@var{lang1},@var{lang2},@dots{}
1907Specify that a particular subset of compilers and their runtime
1908libraries should be built with the system C compiler during stage 1 of
1909the bootstrap process, rather than only in later stages with the
1910bootstrapped C compiler. The list of valid values is the same as for
1911@option{--enable-languages}, and the option @code{all} will select all
1912of the languages enabled by @option{--enable-languages}. This option is
1913primarily useful for GCC development; for instance, when a development
1914version of the compiler cannot bootstrap due to compiler bugs, or when
1915one is debugging front ends other than the C front end. When this
1916option is used, one can then build the target libraries for the
1917specified languages with the stage-1 compiler by using @command{make
1918stage1-bubble all-target}, or run the testsuite on the stage-1 compiler
1919for the specified languages using @command{make stage1-start check-gcc}.
1920
1921@item --disable-libada
1922Specify that the run-time libraries and tools used by GNAT should not
1923be built. This can be useful for debugging, or for compatibility with
1924previous Ada build procedures, when it was required to explicitly
1925do a @samp{make -C gcc gnatlib_and_tools}.
1926
1eee94d3
GM
1927@item --disable-libgm2
1928Specify that the run-time libraries and tools used by Modula-2 should not
1929be built. This can be useful for debugging.
1930
d77de738
ML
1931@item --disable-libsanitizer
1932Specify that the run-time libraries for the various sanitizers should
1933not be built.
1934
1935@item --disable-libssp
1936Specify that the run-time libraries for stack smashing protection
1937should not be built or linked against. On many targets library support
1938is provided by the C library instead.
1939
1940@item --disable-libquadmath
1941Specify that the GCC quad-precision math library should not be built.
1942On some systems, the library is required to be linkable when building
1943the Fortran front end, unless @option{--disable-libquadmath-support}
1944is used.
1945
1946@item --disable-libquadmath-support
1947Specify that the Fortran front end and @code{libgfortran} do not add
1948support for @code{libquadmath} on systems supporting it.
1949
1950@item --disable-libgomp
1951Specify that the GNU Offloading and Multi Processing Runtime Library
1952should not be built.
1953
1954@item --disable-libvtv
1955Specify that the run-time libraries used by vtable verification
1956should not be built.
1957
1958@item --with-dwarf2
1959Specify that the compiler should
a710f3ce
EG
1960use DWARF debugging information as the default; the exact
1961DWARF version that is the default is target-specific.
d77de738
ML
1962
1963@item --with-advance-toolchain=@var{at}
1964On 64-bit PowerPC Linux systems, configure the compiler to use the
1965header files, library files, and the dynamic linker from the Advance
1966Toolchain release @var{at} instead of the default versions that are
1967provided by the Linux distribution. In general, this option is
1968intended for the developers of GCC, and it is not intended for general
1969use.
1970
1971@item --enable-targets=all
1972@itemx --enable-targets=@var{target_list}
1973Some GCC targets, e.g.@: powerpc64-linux, build bi-arch compilers.
1974These are compilers that are able to generate either 64-bit or 32-bit
1975code. Typically, the corresponding 32-bit target, e.g.@:
1976powerpc-linux for powerpc64-linux, only generates 32-bit code. This
1977option enables the 32-bit target to be a bi-arch compiler, which is
1978useful when you want a bi-arch compiler that defaults to 32-bit, and
1979you are building a bi-arch or multi-arch binutils in a combined tree.
1980On mips-linux, this will build a tri-arch compiler (ABI o32/n32/64),
1981defaulted to o32.
1982Currently, this option only affects sparc-linux, powerpc-linux, x86-linux,
1983mips-linux and s390-linux.
1984
1985@item --enable-default-pie
1986Turn on @option{-fPIE} and @option{-pie} by default.
1987
1988@item --enable-secureplt
1989This option enables @option{-msecure-plt} by default for powerpc-linux.
1990@ifnothtml
1991@xref{RS/6000 and PowerPC Options,, RS/6000 and PowerPC Options, gcc,
1992Using the GNU Compiler Collection (GCC)},
1993@end ifnothtml
1994@ifhtml
1995See ``RS/6000 and PowerPC Options'' in the main manual
1996@end ifhtml
1997
1998@item --enable-default-ssp
1999Turn on @option{-fstack-protector-strong} by default.
2000
2001@item --enable-cld
2002This option enables @option{-mcld} by default for 32-bit x86 targets.
2003@ifnothtml
2004@xref{i386 and x86-64 Options,, i386 and x86-64 Options, gcc,
2005Using the GNU Compiler Collection (GCC)},
2006@end ifnothtml
2007@ifhtml
2008See ``i386 and x86-64 Options'' in the main manual
2009@end ifhtml
2010
2011@item --enable-large-address-aware
2012The @option{--enable-large-address-aware} option arranges for MinGW
2013executables to be linked using the @option{--large-address-aware}
2014option, that enables the use of more than 2GB of memory. If GCC is
2015configured with this option, its effects can be reversed by passing the
2016@option{-Wl,--disable-large-address-aware} option to the so-configured
2017compiler driver.
2018
2019@item --enable-win32-registry
2020@itemx --enable-win32-registry=@var{key}
2021@itemx --disable-win32-registry
2022The @option{--enable-win32-registry} option enables Microsoft Windows-hosted GCC
2023to look up installations paths in the registry using the following key:
2024
2025@smallexample
2026@code{HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\@var{key}}
2027@end smallexample
2028
2029@var{key} defaults to GCC version number, and can be overridden by the
2030@option{--enable-win32-registry=@var{key}} option. Vendors and distributors
2031who use custom installers are encouraged to provide a different key,
2032perhaps one comprised of vendor name and GCC version number, to
2033avoid conflict with existing installations. This feature is enabled
2034by default, and can be disabled by @option{--disable-win32-registry}
2035option. This option has no effect on the other hosts.
2036
2037@item --nfp
2038Specify that the machine does not have a floating point unit. This
2039option only applies to @samp{m68k-sun-sunos@var{n}}. On any other
2040system, @option{--nfp} has no effect.
2041
2042@item --enable-werror
2043@itemx --disable-werror
2044@itemx --enable-werror=yes
2045@itemx --enable-werror=no
2046When you specify this option, it controls whether certain files in the
2047compiler are built with @option{-Werror} in bootstrap stage2 and later.
2048If you don't specify it, @option{-Werror} is turned on for the main
2049development trunk. However it defaults to off for release branches and
2050final releases. The specific files which get @option{-Werror} are
2051controlled by the Makefiles.
2052
2053@item --enable-checking
2054@itemx --disable-checking
2055@itemx --enable-checking=@var{list}
2056This option controls performing internal consistency checks in the compiler.
2057It does not change the generated code, but adds error checking of the
2058requested complexity. This slows down the compiler and may only work
2059properly if you are building the compiler with GCC@.
2060
2061When the option is not specified, the active set of checks depends on context.
2062Namely, bootstrap stage 1 defaults to @samp{--enable-checking=yes}, builds
2063from release branches or release archives default to
2064@samp{--enable-checking=release}, and otherwise
2065@samp{--enable-checking=yes,extra} is used. When the option is
2066specified without a @var{list}, the result is the same as
2067@samp{--enable-checking=yes}. Likewise, @samp{--disable-checking} is
2068equivalent to @samp{--enable-checking=no}.
2069
2070The categories of checks available in @var{list} are @samp{yes} (most common
2071checks @samp{assert,misc,gc,gimple,rtlflag,runtime,tree,types}), @samp{no}
2072(no checks at all), @samp{all} (all but @samp{valgrind}), @samp{release}
2073(cheapest checks @samp{assert,runtime}) or @samp{none} (same as @samp{no}).
2074@samp{release} checks are always on and to disable them
2075@samp{--disable-checking} or @samp{--enable-checking=no[,<other checks>]}
2076must be explicitly requested. Disabling assertions makes the compiler and
2077runtime slightly faster but increases the risk of undetected internal errors
2078causing wrong code to be generated.
2079
2080Individual checks can be enabled with these flags: @samp{assert}, @samp{df},
2081@samp{extra}, @samp{fold}, @samp{gc}, @samp{gcac}, @samp{gimple},
2082@samp{misc}, @samp{rtl}, @samp{rtlflag}, @samp{runtime}, @samp{tree},
2083@samp{types} and @samp{valgrind}. @samp{extra} extends @samp{misc}
2084checking with extra checks that might affect code generation and should
2085therefore not differ between stage1 and later stages in bootstrap.
2086
2087The @samp{valgrind} check requires the external @command{valgrind} simulator,
2088available from @uref{https://valgrind.org}. The @samp{rtl} checks are
2089expensive and the @samp{df}, @samp{gcac} and @samp{valgrind} checks are very
2090expensive.
2091
2092@item --disable-stage1-checking
2093@itemx --enable-stage1-checking
2094@itemx --enable-stage1-checking=@var{list}
2095This option affects only bootstrap build. If no @option{--enable-checking}
2096option is specified the stage1 compiler is built with @samp{yes} checking
2097enabled, otherwise the stage1 checking flags are the same as specified by
2098@option{--enable-checking}. To build the stage1 compiler with
2099different checking options use @option{--enable-stage1-checking}.
2100The list of checking options is the same as for @option{--enable-checking}.
2101If your system is too slow or too small to bootstrap a released compiler
2102with checking for stage1 enabled, you can use @samp{--disable-stage1-checking}
2103to disable checking for the stage1 compiler.
2104
2105@item --enable-coverage
2106@itemx --enable-coverage=@var{level}
2107With this option, the compiler is built to collect self coverage
2108information, every time it is run. This is for internal development
2109purposes, and only works when the compiler is being built with gcc. The
2110@var{level} argument controls whether the compiler is built optimized or
2111not, values are @samp{opt} and @samp{noopt}. For coverage analysis you
2112want to disable optimization, for performance analysis you want to
2113enable optimization. When coverage is enabled, the default level is
2114without optimization.
2115
2116@item --enable-gather-detailed-mem-stats
2117When this option is specified more detailed information on memory
2118allocation is gathered. This information is printed when using
2119@option{-fmem-report}.
2120
2121@item --enable-valgrind-annotations
2122Mark selected memory related operations in the compiler when run under
2123valgrind to suppress false positives.
2124
2125@item --enable-nls
2126@itemx --disable-nls
2127The @option{--enable-nls} option enables Native Language Support (NLS),
2128which lets GCC output diagnostics in languages other than American
2129English. Native Language Support is enabled by default if not doing a
2130canadian cross build. The @option{--disable-nls} option disables NLS@.
2131
2132@item --with-included-gettext
2133If NLS is enabled, the @option{--with-included-gettext} option causes the build
2134procedure to prefer its copy of GNU @command{gettext}.
2135
2136@item --with-catgets
2137If NLS is enabled, and if the host lacks @code{gettext} but has the
2138inferior @code{catgets} interface, the GCC build procedure normally
2139ignores @code{catgets} and instead uses GCC's copy of the GNU
2140@code{gettext} library. The @option{--with-catgets} option causes the
2141build procedure to use the host's @code{catgets} in this situation.
2142
2143@item --with-libiconv-prefix=@var{dir}
2144Search for libiconv header files in @file{@var{dir}/include} and
2145libiconv library files in @file{@var{dir}/lib}.
2146
2147@item --enable-obsolete
2148Enable configuration for an obsoleted system. If you attempt to
2149configure GCC for a system (build, host, or target) which has been
2150obsoleted, and you do not specify this flag, configure will halt with an
2151error message.
2152
2153All support for systems which have been obsoleted in one release of GCC
2154is removed entirely in the next major release, unless someone steps
2155forward to maintain the port.
2156
2157@item --enable-decimal-float
2158@itemx --enable-decimal-float=yes
2159@itemx --enable-decimal-float=no
2160@itemx --enable-decimal-float=bid
2161@itemx --enable-decimal-float=dpd
2162@itemx --disable-decimal-float
2163Enable (or disable) support for the C decimal floating point extension
2164that is in the IEEE 754-2008 standard. This is enabled by default only
2165on PowerPC, i386, and x86_64 GNU/Linux systems. Other systems may also
2166support it, but require the user to specifically enable it. You can
2167optionally control which decimal floating point format is used (either
2168@samp{bid} or @samp{dpd}). The @samp{bid} (binary integer decimal)
2169format is default on i386 and x86_64 systems, and the @samp{dpd}
2170(densely packed decimal) format is default on PowerPC systems.
2171
2172@item --enable-fixed-point
2173@itemx --disable-fixed-point
2174Enable (or disable) support for C fixed-point arithmetic.
2175This option is enabled by default for some targets (such as MIPS) which
2176have hardware-support for fixed-point operations. On other targets, you
2177may enable this option manually.
2178
2179@item --with-long-double-128
2180Specify if @code{long double} type should be 128-bit by default on selected
2181GNU/Linux architectures. If using @code{--without-long-double-128},
2182@code{long double} will be by default 64-bit, the same as @code{double} type.
2183When neither of these configure options are used, the default will be
2184128-bit @code{long double} when built against GNU C Library 2.4 and later,
218564-bit @code{long double} otherwise.
2186
2187@item --with-long-double-format=ibm
2188@itemx --with-long-double-format=ieee
2189Specify whether @code{long double} uses the IBM extended double format
2190or the IEEE 128-bit floating point format on PowerPC Linux systems.
2191This configuration switch will only work on little endian PowerPC
2192Linux systems and on big endian 64-bit systems where the default cpu
2193is at least power7 (i.e.@: @option{--with-cpu=power7},
2194@option{--with-cpu=power8}, or @option{--with-cpu=power9} is used).
2195
2196If you use the @option{--with-long-double-64} configuration option,
2197the @option{--with-long-double-format=ibm} and
2198@option{--with-long-double-format=ieee} options are ignored.
2199
2200The default @code{long double} format is to use IBM extended double.
2201Until all of the libraries are converted to use IEEE 128-bit floating
2202point, it is not recommended to use
2203@option{--with-long-double-format=ieee}.
2204
2205@item --enable-fdpic
2206On SH Linux systems, generate ELF FDPIC code.
2207
2208@item --with-gmp=@var{pathname}
2209@itemx --with-gmp-include=@var{pathname}
2210@itemx --with-gmp-lib=@var{pathname}
2211@itemx --with-mpfr=@var{pathname}
2212@itemx --with-mpfr-include=@var{pathname}
2213@itemx --with-mpfr-lib=@var{pathname}
2214@itemx --with-mpc=@var{pathname}
2215@itemx --with-mpc-include=@var{pathname}
2216@itemx --with-mpc-lib=@var{pathname}
2217If you want to build GCC but do not have the GMP library, the MPFR
2218library and/or the MPC library installed in a standard location and
2219do not have their sources present in the GCC source tree then you
2220can explicitly specify the directory where they are installed
2221(@samp{--with-gmp=@var{gmpinstalldir}},
2222@samp{--with-mpfr=@/@var{mpfrinstalldir}},
2223@samp{--with-mpc=@/@var{mpcinstalldir}}). The
2224@option{--with-gmp=@/@var{gmpinstalldir}} option is shorthand for
2225@option{--with-gmp-lib=@/@var{gmpinstalldir}/lib} and
2226@option{--with-gmp-include=@/@var{gmpinstalldir}/include}. Likewise the
2227@option{--with-mpfr=@/@var{mpfrinstalldir}} option is shorthand for
2228@option{--with-mpfr-lib=@/@var{mpfrinstalldir}/lib} and
2229@option{--with-mpfr-include=@/@var{mpfrinstalldir}/include}, also the
2230@option{--with-mpc=@/@var{mpcinstalldir}} option is shorthand for
2231@option{--with-mpc-lib=@/@var{mpcinstalldir}/lib} and
2232@option{--with-mpc-include=@/@var{mpcinstalldir}/include}. If these
2233shorthand assumptions are not correct, you can use the explicit
2234include and lib options directly. You might also need to ensure the
2235shared libraries can be found by the dynamic linker when building and
2236using GCC, for example by setting the runtime shared library path
2237variable (@env{LD_LIBRARY_PATH} on GNU/Linux and Solaris systems).
2238
2239These flags are applicable to the host platform only. When building
2240a cross compiler, they will not be used to configure target libraries.
2241
2242@item --with-isl=@var{pathname}
2243@itemx --with-isl-include=@var{pathname}
2244@itemx --with-isl-lib=@var{pathname}
2245If you do not have the isl library installed in a standard location and you
2246want to build GCC, you can explicitly specify the directory where it is
2247installed (@samp{--with-isl=@/@var{islinstalldir}}). The
2248@option{--with-isl=@/@var{islinstalldir}} option is shorthand for
2249@option{--with-isl-lib=@/@var{islinstalldir}/lib} and
2250@option{--with-isl-include=@/@var{islinstalldir}/include}. If this
2251shorthand assumption is not correct, you can use the explicit
2252include and lib options directly.
2253
2254These flags are applicable to the host platform only. When building
2255a cross compiler, they will not be used to configure target libraries.
2256
2257@item --with-stage1-ldflags=@var{flags}
2258This option may be used to set linker flags to be used when linking
2259stage 1 of GCC. These are also used when linking GCC if configured with
2260@option{--disable-bootstrap}. If @option{--with-stage1-libs} is not set to a
2261value, then the default is @samp{-static-libstdc++ -static-libgcc}, if
2262supported.
2263
2264@item --with-stage1-libs=@var{libs}
2265This option may be used to set libraries to be used when linking stage 1
2266of GCC. These are also used when linking GCC if configured with
2267@option{--disable-bootstrap}.
2268
2269@item --with-boot-ldflags=@var{flags}
2270This option may be used to set linker flags to be used when linking
2271stage 2 and later when bootstrapping GCC. If --with-boot-libs
2272is not is set to a value, then the default is
2273@samp{-static-libstdc++ -static-libgcc}.
2274
2275@item --with-boot-libs=@var{libs}
2276This option may be used to set libraries to be used when linking stage 2
2277and later when bootstrapping GCC.
2278
2279@item --with-debug-prefix-map=@var{map}
2280Convert source directory names using @option{-fdebug-prefix-map} when
2281building runtime libraries. @samp{@var{map}} is a space-separated
2282list of maps of the form @samp{@var{old}=@var{new}}.
2283
2284@item --enable-linker-build-id
2285Tells GCC to pass @option{--build-id} option to the linker for all final
2286links (links performed without the @option{-r} or @option{--relocatable}
2287option), if the linker supports it. If you specify
2288@option{--enable-linker-build-id}, but your linker does not
2289support @option{--build-id} option, a warning is issued and the
2290@option{--enable-linker-build-id} option is ignored. The default is off.
2291
2292@item --with-linker-hash-style=@var{choice}
2293Tells GCC to pass @option{--hash-style=@var{choice}} option to the
2294linker for all final links. @var{choice} can be one of
2295@samp{sysv}, @samp{gnu}, and @samp{both} where @samp{sysv} is the default.
2296
2297@item --enable-gnu-unique-object
2298@itemx --disable-gnu-unique-object
2299Tells GCC to use the gnu_unique_object relocation for C++ template
2300static data members and inline function local statics. Enabled by
2301default for a toolchain with an assembler that accepts it and
2302GLIBC 2.11 or above, otherwise disabled.
2303
2304@item --with-diagnostics-color=@var{choice}
2305Tells GCC to use @var{choice} as the default for @option{-fdiagnostics-color=}
2306option (if not used explicitly on the command line). @var{choice}
2307can be one of @samp{never}, @samp{auto}, @samp{always}, and @samp{auto-if-env}
2308where @samp{auto} is the default. @samp{auto-if-env} makes
2309@option{-fdiagnostics-color=auto} the default if @env{GCC_COLORS}
2310is present and non-empty in the environment of the compiler, and
2311@option{-fdiagnostics-color=never} otherwise.
2312
2313@item --with-diagnostics-urls=@var{choice}
2314Tells GCC to use @var{choice} as the default for @option{-fdiagnostics-urls=}
2315option (if not used explicitly on the command line). @var{choice}
2316can be one of @samp{never}, @samp{auto}, @samp{always}, and @samp{auto-if-env}
2317where @samp{auto} is the default. @samp{auto-if-env} makes
2318@option{-fdiagnostics-urls=auto} the default if @env{GCC_URLS}
2319or @env{TERM_URLS} is present and non-empty in the environment of the
2320compiler, and @option{-fdiagnostics-urls=never} otherwise.
2321
2322@item --enable-lto
2323@itemx --disable-lto
2324Enable support for link-time optimization (LTO). This is enabled by
2325default, and may be disabled using @option{--disable-lto}.
2326
2327@item --enable-linker-plugin-configure-flags=FLAGS
2328@itemx --enable-linker-plugin-flags=FLAGS
2329By default, linker plugins (such as the LTO plugin) are built for the
2330host system architecture. For the case that the linker has a
2331different (but run-time compatible) architecture, these flags can be
2332specified to build plugins that are compatible to the linker. For
2333example, if you are building GCC for a 64-bit x86_64
2334(@samp{x86_64-pc-linux-gnu}) host system, but have a 32-bit x86
2335GNU/Linux (@samp{i686-pc-linux-gnu}) linker executable (which is
2336executable on the former system), you can configure GCC as follows for
2337getting compatible linker plugins:
2338
2339@smallexample
2340% @var{srcdir}/configure \
2341 --host=x86_64-pc-linux-gnu \
2342 --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
2343 --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
2344@end smallexample
2345
2346@item --with-plugin-ld=@var{pathname}
2347Enable an alternate linker to be used at link-time optimization (LTO)
2348link time when @option{-fuse-linker-plugin} is enabled.
2349This linker should have plugin support such as gold starting with
2350version 2.20 or GNU ld starting with version 2.21.
2351See @option{-fuse-linker-plugin} for details.
2352
2353@item --enable-canonical-system-headers
2354@itemx --disable-canonical-system-headers
2355Enable system header path canonicalization for @file{libcpp}. This can
2356produce shorter header file paths in diagnostics and dependency output
2357files, but these changed header paths may conflict with some compilation
2358environments. Enabled by default, and may be disabled using
2359@option{--disable-canonical-system-headers}.
2360
2361@item --with-glibc-version=@var{major}.@var{minor}
2362Tell GCC that when the GNU C Library (glibc) is used on the target it
2363will be version @var{major}.@var{minor} or later. Normally this can
2364be detected from the C library's header files, but this option may be
2365needed when bootstrapping a cross toolchain without the header files
2366available for building the initial bootstrap compiler.
2367
2368If GCC is configured with some multilibs that use glibc and some that
2369do not, this option applies only to the multilibs that use glibc.
2370However, such configurations may not work well as not all the relevant
2371configuration in GCC is on a per-multilib basis.
2372
2373@item --enable-as-accelerator-for=@var{target}
2374Build as offload target compiler. Specify offload host triple by @var{target}.
2375
2376@item --enable-offload-targets=@var{target1}[=@var{path1}],@dots{},@var{targetN}[=@var{pathN}]
2377Enable offloading to targets @var{target1}, @dots{}, @var{targetN}.
2378Offload compilers are expected to be already installed. Default search
2379path for them is @file{@var{exec-prefix}}, but it can be changed by
2380specifying paths @var{path1}, @dots{}, @var{pathN}.
2381
2382@smallexample
2383% @var{srcdir}/configure \
2384 --enable-offload-targets=amdgcn-amdhsa,nvptx-none
2385@end smallexample
2386
2387@item --enable-offload-defaulted
2388
2389Tell GCC that configured but not installed offload compilers and libgomp
2390plugins are silently ignored. Useful for distribution compilers where
2391those are in separate optional packages and where the presence or absence
2392of those optional packages should determine the actual supported offloading
2393target set rather than the GCC configure-time selection.
2394
2395@item --enable-cet
2396@itemx --disable-cet
2397Enable building target run-time libraries with control-flow
2398instrumentation, see @option{-fcf-protection} option. When
2399@code{--enable-cet} is specified target libraries are configured
2400to add @option{-fcf-protection} and, if needed, other target
2401specific options to a set of building options.
2402
2403@code{--enable-cet=auto} is default. CET is enabled on Linux/x86 if
2404target binutils supports @code{Intel CET} instructions and disabled
2405otherwise. In this case, the target libraries are configured to get
2406additional @option{-fcf-protection} option.
2407
2408@item --with-riscv-attribute=@samp{yes}, @samp{no} or @samp{default}
2409Generate RISC-V attribute by default, in order to record extra build
2410information in object.
2411
2412The option is disabled by default. It is enabled on RISC-V/ELF (bare-metal)
2413target if target binutils supported.
2414
2415@item --enable-s390-excess-float-precision
2416@itemx --disable-s390-excess-float-precision
2417On s390(x) targets, enable treatment of float expressions with double precision
2418when in standards-compliant mode (e.g., when @code{--std=c99} or
2419@code{-fexcess-precision=standard} are given).
2420
2421For a native build and cross compiles that have target headers, the option's
2422default is derived from glibc's behavior. When glibc clamps float_t to double,
2423GCC follows and enables the option. For other cross compiles, the default is
2424disabled.
2425
2426@item --with-zstd=@var{pathname}
2427@itemx --with-zstd-include=@var{pathname}
2428@itemx --with-zstd-lib=@var{pathname}
2429If you do not have the @code{zstd} library installed in a standard
2430location and you want to build GCC, you can explicitly specify the
2431directory where it is installed (@samp{--with-zstd=@/@var{zstdinstalldir}}).
2432The @option{--with-zstd=@/@var{zstdinstalldir}} option is shorthand for
2433@option{--with-zstd-lib=@/@var{zstdinstalldir}/lib} and
2434@option{--with-zstd-include=@/@var{zstdinstalldir}/include}. If this
2435shorthand assumption is not correct, you can use the explicit
2436include and lib options directly.
2437
2438These flags are applicable to the host platform only. When building
2439a cross compiler, they will not be used to configure target libraries.
2440@end table
2441
2442@subheading Cross-Compiler-Specific Options
2443The following options only apply to building cross compilers.
2444
2445@table @code
2446@item --with-toolexeclibdir=@var{dir}
2447Specify the installation directory for libraries built with a cross compiler.
2448The default is @option{$@{gcc_tooldir@}/lib}.
2449
2450@item --with-sysroot
2451@itemx --with-sysroot=@var{dir}
2452Tells GCC to consider @var{dir} as the root of a tree that contains
2453(a subset of) the root filesystem of the target operating system.
2454Target system headers, libraries and run-time object files will be
2455searched for in there. More specifically, this acts as if
2456@option{--sysroot=@var{dir}} was added to the default options of the built
2457compiler. The specified directory is not copied into the
2458install tree, unlike the options @option{--with-headers} and
2459@option{--with-libs} that this option obsoletes. The default value,
2460in case @option{--with-sysroot} is not given an argument, is
2461@option{$@{gcc_tooldir@}/sys-root}. If the specified directory is a
2462subdirectory of @option{$@{exec_prefix@}}, then it will be found relative to
2463the GCC binaries if the installation tree is moved.
2464
2465This option affects the system root for the compiler used to build
2466target libraries (which runs on the build system) and the compiler newly
2467installed with @code{make install}; it does not affect the compiler which is
2468used to build GCC itself.
2469
2470If you specify the @option{--with-native-system-header-dir=@var{dirname}}
2471option then the compiler will search that directory within @var{dirname} for
2472native system headers rather than the default @file{/usr/include}.
2473
2474@item --with-build-sysroot
2475@itemx --with-build-sysroot=@var{dir}
2476Tells GCC to consider @var{dir} as the system root (see
2477@option{--with-sysroot}) while building target libraries, instead of
2478the directory specified with @option{--with-sysroot}. This option is
2479only useful when you are already using @option{--with-sysroot}. You
2480can use @option{--with-build-sysroot} when you are configuring with
2481@option{--prefix} set to a directory that is different from the one in
2482which you are installing GCC and your target libraries.
2483
2484This option affects the system root for the compiler used to build
2485target libraries (which runs on the build system); it does not affect
2486the compiler which is used to build GCC itself.
2487
2488If you specify the @option{--with-native-system-header-dir=@var{dirname}}
2489option then the compiler will search that directory within @var{dirname} for
2490native system headers rather than the default @file{/usr/include}.
2491
2492@item --with-headers
2493@itemx --with-headers=@var{dir}
2494Deprecated in favor of @option{--with-sysroot}.
2495Specifies that target headers are available when building a cross compiler.
2496The @var{dir} argument specifies a directory which has the target include
2497files. These include files will be copied into the @file{gcc} install
2498directory. @emph{This option with the @var{dir} argument is required} when
2499building a cross compiler, if @file{@var{prefix}/@var{target}/sys-include}
2500doesn't pre-exist. If @file{@var{prefix}/@var{target}/sys-include} does
2501pre-exist, the @var{dir} argument may be omitted. @command{fixincludes}
2502will be run on these files to make them compatible with GCC@.
2503
2504@item --without-headers
2505Tells GCC not use any target headers from a libc when building a cross
2506compiler. When crossing to GNU/Linux, you need the headers so GCC
2507can build the exception handling for libgcc.
2508
2509@item --with-libs
2510@itemx --with-libs="@var{dir1} @var{dir2} @dots{} @var{dirN}"
2511Deprecated in favor of @option{--with-sysroot}.
2512Specifies a list of directories which contain the target runtime
2513libraries. These libraries will be copied into the @file{gcc} install
2514directory. If the directory list is omitted, this option has no
2515effect.
2516
2517@item --with-newlib
2518Specifies that @samp{newlib} is
2519being used as the target C library. This causes @code{__eprintf} to be
2520omitted from @file{libgcc.a} on the assumption that it will be provided by
2521@samp{newlib}.
2522
2523@html
2524<a name="avr"></a>
2525@end html
2526@item --with-avrlibc
2527Only supported for the AVR target. Specifies that @samp{AVR-Libc} is
2528being used as the target C@tie{} library. This causes float support
2529functions like @code{__addsf3} to be omitted from @file{libgcc.a} on
2530the assumption that it will be provided by @file{libm.a}. For more
2531technical details, cf. @uref{https://gcc.gnu.org/PR54461,,PR54461}.
2532It is not supported for
2533RTEMS configurations, which currently use newlib. The option is
2534supported since version 4.7.2 and is the default in 4.8.0 and newer.
2535
2536@item --with-double=@{32|64|32,64|64,32@}
2537@itemx --with-long-double=@{32|64|32,64|64,32|double@}
2538Only supported for the AVR target since version@tie{}10.
2539Specify the default layout available for the C/C++ @samp{double}
2540and @samp{long double} type, respectively. The following rules apply:
2541@itemize
2542@item
2543The first value after the @samp{=} specifies the default layout (in bits)
2544of the type and also the default for the @option{-mdouble=} resp.
2545@option{-mlong-double=} compiler option.
2546@item
2547If more than one value is specified, respective multilib variants are
2548available, and @option{-mdouble=} resp. @option{-mlong-double=} acts
2549as a multilib option.
2550@item
2551If @option{--with-long-double=double} is specified, @samp{double} and
2552@samp{long double} will have the same layout.
2553@item
2554The defaults are @option{--with-long-double=64,32} and
2555@option{--with-double=32,64}. The default @samp{double} layout imposed by
2556the latter is compatible with older versions of the compiler that implement
2557@samp{double} as a 32-bit type, which does not comply to the language standard.
2558@end itemize
2559Not all combinations of @option{--with-double=} and
2560@option{--with-long-double=} are valid. For example, the combination
2561@option{--with-double=32,64} @option{--with-long-double=32} will be
2562rejected because the first option specifies the availability of
2563multilibs for @samp{double}, whereas the second option implies
2564that @samp{long double} --- and hence also @samp{double} --- is always
256532@tie{}bits wide.
2566
2567@item --with-double-comparison=@{tristate|bool|libf7@}
2568Only supported for the AVR target since version@tie{}10.
2569Specify what result format is returned by library functions that
2570compare 64-bit floating point values (@code{DFmode}).
2571The GCC default is @samp{tristate}. If the floating point
2572implementation returns a boolean instead, set it to @samp{bool}.
2573
2574@item --with-libf7=@{libgcc|math|math-symbols|no@}
2575Only supported for the AVR target since version@tie{}10.
2576Specify to which degree code from LibF7 is included in libgcc.
2577LibF7 is an ad-hoc, AVR-specific, 64-bit floating point emulation
2578written in C and (inline) assembly. @samp{libgcc} adds support
2579for functions that one would usually expect in libgcc like double addition,
2580double comparisons and double conversions. @samp{math} also adds routines
2581that one would expect in @file{libm.a}, but with @code{__} (two underscores)
2582prepended to the symbol names as specified by @file{math.h}.
2583@samp{math-symbols} also defines weak aliases for the functions
2584declared in @file{math.h}. However, @code{--with-libf7} won't
2585install no @file{math.h} header file whatsoever, this file must come
2586from elsewhere. This option sets @option{--with-double-comparison}
2587to @samp{bool}.
2588
2589@item --with-nds32-lib=@var{library}
2590Specifies that @var{library} setting is used for building @file{libgcc.a}.
2591Currently, the valid @var{library} is @samp{newlib} or @samp{mculib}.
2592This option is only supported for the NDS32 target.
2593
2594@item --with-build-time-tools=@var{dir}
2595Specifies where to find the set of target tools (assembler, linker, etc.)
2596that will be used while building GCC itself. This option can be useful
2597if the directory layouts are different between the system you are building
2598GCC on, and the system where you will deploy it.
2599
2600For example, on an @samp{ia64-hp-hpux} system, you may have the GNU
2601assembler and linker in @file{/usr/bin}, and the native tools in a
2602different path, and build a toolchain that expects to find the
2603native tools in @file{/usr/bin}.
2604
2605When you use this option, you should ensure that @var{dir} includes
2606@command{ar}, @command{as}, @command{ld}, @command{nm},
2607@command{ranlib} and @command{strip} if necessary, and possibly
2608@command{objdump}. Otherwise, GCC may use an inconsistent set of
2609tools.
2610@end table
2611
2612@subsubheading Overriding @command{configure} test results
2613
2614Sometimes, it might be necessary to override the result of some
2615@command{configure} test, for example in order to ease porting to a new
2616system or work around a bug in a test. The toplevel @command{configure}
2617script provides three variables for this:
2618
2619@table @code
2620
2621@item build_configargs
2622@cindex @code{build_configargs}
2623The contents of this variable is passed to all build @command{configure}
2624scripts.
2625
2626@item host_configargs
2627@cindex @code{host_configargs}
2628The contents of this variable is passed to all host @command{configure}
2629scripts.
2630
2631@item target_configargs
2632@cindex @code{target_configargs}
2633The contents of this variable is passed to all target @command{configure}
2634scripts.
2635
2636@end table
2637
2638In order to avoid shell and @command{make} quoting issues for complex
2639overrides, you can pass a setting for @env{CONFIG_SITE} and set
2640variables in the site file.
2641
2642@subheading Objective-C-Specific Options
2643
2644The following options apply to the build of the Objective-C runtime library.
2645
2646@table @code
2647@item --enable-objc-gc
2648Specify that an additional variant of the GNU Objective-C runtime library
2649is built, using an external build of the Boehm-Demers-Weiser garbage
2650collector (@uref{https://www.hboehm.info/gc/}). This library needs to be
2651available for each multilib variant, unless configured with
2652@option{--enable-objc-gc=@samp{auto}} in which case the build of the
2653additional runtime library is skipped when not available and the build
2654continues.
2655
2656@item --with-target-bdw-gc=@var{list}
2657@itemx --with-target-bdw-gc-include=@var{list}
2658@itemx --with-target-bdw-gc-lib=@var{list}
2659Specify search directories for the garbage collector header files and
2660libraries. @var{list} is a comma separated list of key value pairs of the
2661form @samp{@var{multilibdir}=@var{path}}, where the default multilib key
2662is named as @samp{.} (dot), or is omitted (e.g.@:
2663@samp{--with-target-bdw-gc=/opt/bdw-gc,32=/opt-bdw-gc32}).
2664
2665The options @option{--with-target-bdw-gc-include} and
2666@option{--with-target-bdw-gc-lib} must always be specified together
2667for each multilib variant and they take precedence over
2668@option{--with-target-bdw-gc}. If @option{--with-target-bdw-gc-include}
2669is missing values for a multilib, then the value for the default
2670multilib is used (e.g.@: @samp{--with-target-bdw-gc-include=/opt/bdw-gc/include}
2671@samp{--with-target-bdw-gc-lib=/opt/bdw-gc/lib64,32=/opt-bdw-gc/lib32}).
2672If none of these options are specified, the library is assumed in
2673default locations.
2674@end table
2675
2676@subheading D-Specific Options
2677
2678The following options apply to the build of the D runtime library.
2679
2680@table @code
2681@item --enable-libphobos-checking
2682@itemx --disable-libphobos-checking
2683@itemx --enable-libphobos-checking=@var{list}
2684This option controls whether run-time checks and contracts are compiled into
2685the D runtime library. When the option is not specified, the library is built
2686with @samp{release} checking. When the option is specified without a
2687@var{list}, the result is the same as @samp{--enable-libphobos-checking=yes}.
2688Likewise, @samp{--disable-libphobos-checking} is equivalent to
2689@samp{--enable-libphobos-checking=no}.
2690
2691The categories of checks available in @var{list} are @samp{yes} (compiles
2692libphobos with @option{-fno-release}), @samp{no} (compiles libphobos with
2693@option{-frelease}), @samp{all} (same as @samp{yes}), @samp{none} or
2694@samp{release} (same as @samp{no}).
2695
2696Individual checks available in @var{list} are @samp{assert} (compiles libphobos
2697with an extra option @option{-fassert}).
2698
2699@item --with-libphobos-druntime-only
2700@itemx --with-libphobos-druntime-only=@var{choice}
2701Specify whether to build only the core D runtime library (druntime), or both
2702the core and standard library (phobos) into libphobos. This is useful for
2703targets that have full support in druntime, but no or incomplete support
2704in phobos. @var{choice} can be one of @samp{auto}, @samp{yes}, and @samp{no}
2705where @samp{auto} is the default.
2706
2707When the option is not specified, the default choice @samp{auto} means that it
2708is inferred whether the target has support for the phobos standard library.
2709When the option is specified without a @var{choice}, the result is the same as
2710@samp{--with-libphobos-druntime-only=yes}.
2711
2712@item --with-target-system-zlib
2713Use installed @samp{zlib} rather than that included with GCC@. This needs
2714to be available for each multilib variant, unless configured with
2715@option{--with-target-system-zlib=@samp{auto}} in which case the GCC@ included
2716@samp{zlib} is only used when the system installed library is not available.
2717@end table
2718
2719@html
2720<hr />
2721<p>
2722@end html
2723@ifhtml
2724@uref{./index.html,,Return to the GCC Installation page}
2725@end ifhtml
2726@end ifset
2727
2728@c ***Building****************************************************************
2729@ifnothtml
2730@comment node-name, next, previous, up
2731@node Building, Testing, Configuration, Installing GCC
2732@end ifnothtml
2733@ifset buildhtml
2734@ifnothtml
2735@chapter Building
2736@end ifnothtml
2737@cindex Installing GCC: Building
2738
2739Now that GCC is configured, you are ready to build the compiler and
2740runtime libraries.
2741
2742Some commands executed when making the compiler may fail (return a
2743nonzero status) and be ignored by @command{make}. These failures, which
2744are often due to files that were not found, are expected, and can safely
2745be ignored.
2746
2747It is normal to have compiler warnings when compiling certain files.
2748Unless you are a GCC developer, you can generally ignore these warnings
2749unless they cause compilation to fail. Developers should attempt to fix
2750any warnings encountered, however they can temporarily continue past
2751warnings-as-errors by specifying the configure flag
2752@option{--disable-werror}.
2753
2754On certain old systems, defining certain environment variables such as
2755@env{CC} can interfere with the functioning of @command{make}.
2756
2757If you encounter seemingly strange errors when trying to build the
2758compiler in a directory other than the source directory, it could be
2759because you have previously configured the compiler in the source
2760directory. Make sure you have done all the necessary preparations.
2761
2762If you build GCC on a BSD system using a directory stored in an old System
2763V file system, problems may occur in running @command{fixincludes} if the
2764System V file system doesn't support symbolic links. These problems
2765result in a failure to fix the declaration of @code{size_t} in
2766@file{sys/types.h}. If you find that @code{size_t} is a signed type and
2767that type mismatches occur, this could be the cause.
2768
2769The solution is not to use such a directory for building GCC@.
2770
2771Similarly, when building from the source repository or snapshots, or if you modify
2772@file{*.l} files, you need the Flex lexical analyzer generator
2773installed. If you do not modify @file{*.l} files, releases contain
2774the Flex-generated files and you do not need Flex installed to build
2775them. There is still one Flex-based lexical analyzer (part of the
2776build machinery, not of GCC itself) that is used even if you only
2777build the C front end.
2778
2779When building from the source repository or snapshots, or if you modify Texinfo
2780documentation, you need version 4.7 or later of Texinfo installed if you
2781want Info documentation to be regenerated. Releases contain Info
2782documentation pre-built for the unmodified documentation in the release.
2783
2784@section Building a native compiler
2785
2786For a native build, the default configuration is to perform
2787a 3-stage bootstrap of the compiler when @samp{make} is invoked.
2788This will build the entire GCC system and ensure that it compiles
2789itself correctly. It can be disabled with the @option{--disable-bootstrap}
2790parameter to @samp{configure}, but bootstrapping is suggested because
2791the compiler will be tested more completely and could also have
2792better performance.
2793
2794The bootstrapping process will complete the following steps:
2795
2796@itemize @bullet
2797@item
2798Build tools necessary to build the compiler.
2799
2800@item
2801Perform a 3-stage bootstrap of the compiler. This includes building
2802three times the target tools for use by the compiler such as binutils
2803(bfd, binutils, gas, gprof, ld, and opcodes) if they have been
2804individually linked or moved into the top level GCC source tree before
2805configuring.
2806
2807@item
2808Perform a comparison test of the stage2 and stage3 compilers.
2809
2810@item
2811Build runtime libraries using the stage3 compiler from the previous step.
2812
2813@end itemize
2814
2815If you are short on disk space you might consider @samp{make
2816bootstrap-lean} instead. The sequence of compilation is the
2817same described above, but object files from the stage1 and
2818stage2 of the 3-stage bootstrap of the compiler are deleted as
2819soon as they are no longer needed.
2820
2821If you wish to use non-default GCC flags when compiling the stage2
2822and stage3 compilers, set @code{BOOT_CFLAGS} on the command line when
2823doing @samp{make}. For example, if you want to save additional space
2824during the bootstrap and in the final installation as well, you can
2825build the compiler binaries without debugging information as in the
2826following example. This will save roughly 40% of disk space both for
2827the bootstrap and the final installation. (Libraries will still contain
2828debugging information.)
2829
2830@smallexample
2831make BOOT_CFLAGS='-O' bootstrap
2832@end smallexample
2833
2834You can place non-default optimization flags into @code{BOOT_CFLAGS}; they
2835are less well tested here than the default of @samp{-g -O2}, but should
2836still work. In a few cases, you may find that you need to specify special
2837flags such as @option{-msoft-float} here to complete the bootstrap; or,
2838if the native compiler miscompiles the stage1 compiler, you may need
2839to work around this, by choosing @code{BOOT_CFLAGS} to avoid the parts
2840of the stage1 compiler that were miscompiled, or by using @samp{make
2841bootstrap4} to increase the number of stages of bootstrap.
2842
2843@code{BOOT_CFLAGS} does not apply to bootstrapped target libraries.
2844Since these are always compiled with the compiler currently being
2845bootstrapped, you can use @code{CFLAGS_FOR_TARGET} to modify their
2846compilation flags, as for non-bootstrapped target libraries.
2847Again, if the native compiler miscompiles the stage1 compiler, you may
2848need to work around this by avoiding non-working parts of the stage1
2849compiler. Use @code{STAGE1_TFLAGS} to this end.
2850
2851If you used the flag @option{--enable-languages=@dots{}} to restrict
2852the compilers to be built, only those you've actually enabled will be
2853built. This will of course only build those runtime libraries, for
2854which the particular compiler has been built. Please note,
2855that re-defining @env{LANGUAGES} when calling @samp{make}
2856@strong{does not} work anymore!
2857
2858If the comparison of stage2 and stage3 fails, this normally indicates
2859that the stage2 compiler has compiled GCC incorrectly, and is therefore
2860a potentially serious bug which you should investigate and report. (On
2861a few systems, meaningful comparison of object files is impossible; they
2862always appear ``different''. If you encounter this problem, you will
2863need to disable comparison in the @file{Makefile}.)
2864
2865If you do not want to bootstrap your compiler, you can configure with
2866@option{--disable-bootstrap}. In particular cases, you may want to
2867bootstrap your compiler even if the target system is not the same as
2868the one you are building on: for example, you could build a
2869@code{powerpc-unknown-linux-gnu} toolchain on a
2870@code{powerpc64-unknown-linux-gnu} host. In this case, pass
2871@option{--enable-bootstrap} to the configure script.
2872
2873@code{BUILD_CONFIG} can be used to bring in additional customization
2874to the build. It can be set to a whitespace-separated list of names.
2875For each such @code{NAME}, top-level @file{config/@code{NAME}.mk} will
2876be included by the top-level @file{Makefile}, bringing in any settings
2877it contains. The default @code{BUILD_CONFIG} can be set using the
2878configure option @option{--with-build-config=@code{NAME}...}. Some
2879examples of supported build configurations are:
2880
2881@table @asis
2882@item @samp{bootstrap-O1}
2883Removes any @option{-O}-started option from @code{BOOT_CFLAGS}, and adds
2884@option{-O1} to it. @samp{BUILD_CONFIG=bootstrap-O1} is equivalent to
2885@samp{BOOT_CFLAGS='-g -O1'}.
2886
2887@item @samp{bootstrap-O3}
2888@itemx @samp{bootstrap-Og}
2889Analogous to @code{bootstrap-O1}.
2890
2891@item @samp{bootstrap-lto}
2892Enables Link-Time Optimization for host tools during bootstrapping.
2893@samp{BUILD_CONFIG=bootstrap-lto} is equivalent to adding
2894@option{-flto} to @samp{BOOT_CFLAGS}. This option assumes that the host
2895supports the linker plugin (e.g.@: GNU ld version 2.21 or later or GNU gold
2896version 2.21 or later).
2897
2898@item @samp{bootstrap-lto-noplugin}
2899This option is similar to @code{bootstrap-lto}, but is intended for
2900hosts that do not support the linker plugin. Without the linker plugin
2901static libraries are not compiled with link-time optimizations. Since
2902the GCC middle end and back end are in @file{libbackend.a} this means
2903that only the front end is actually LTO optimized.
2904
2905@item @samp{bootstrap-lto-lean}
2906This option is similar to @code{bootstrap-lto}, but is intended for
2907faster build by only using LTO in the final bootstrap stage.
2908With @samp{make profiledbootstrap} the LTO frontend
2909is trained only on generator files.
2910
2911@item @samp{bootstrap-debug}
2912Verifies that the compiler generates the same executable code, whether
2913or not it is asked to emit debug information. To this end, this
2914option builds stage2 host programs without debug information, and uses
2915@file{contrib/compare-debug} to compare them with the stripped stage3
2916object files. If @code{BOOT_CFLAGS} is overridden so as to not enable
2917debug information, stage2 will have it, and stage3 won't. This option
2918is enabled by default when GCC bootstrapping is enabled, if
2919@code{strip} can turn object files compiled with and without debug
2920info into identical object files. In addition to better test
2921coverage, this option makes default bootstraps faster and leaner.
2922
2923@item @samp{bootstrap-debug-big}
2924Rather than comparing stripped object files, as in
2925@code{bootstrap-debug}, this option saves internal compiler dumps
2926during stage2 and stage3 and compares them as well, which helps catch
2927additional potential problems, but at a great cost in terms of disk
2928space. It can be specified in addition to @samp{bootstrap-debug}.
2929
2930@item @samp{bootstrap-debug-lean}
2931This option saves disk space compared with @code{bootstrap-debug-big},
2932but at the expense of some recompilation. Instead of saving the dumps
2933of stage2 and stage3 until the final compare, it uses
2934@option{-fcompare-debug} to generate, compare and remove the dumps
2935during stage3, repeating the compilation that already took place in
2936stage2, whose dumps were not saved.
2937
2938@item @samp{bootstrap-debug-lib}
2939This option tests executable code invariance over debug information
2940generation on target libraries, just like @code{bootstrap-debug-lean}
2941tests it on host programs. It builds stage3 libraries with
2942@option{-fcompare-debug}, and it can be used along with any of the
2943@code{bootstrap-debug} options above.
2944
2945There aren't @code{-lean} or @code{-big} counterparts to this option
2946because most libraries are only build in stage3, so bootstrap compares
2947would not get significant coverage. Moreover, the few libraries built
2948in stage2 are used in stage3 host programs, so we wouldn't want to
2949compile stage2 libraries with different options for comparison purposes.
2950
2951@item @samp{bootstrap-debug-ckovw}
2952Arranges for error messages to be issued if the compiler built on any
2953stage is run without the option @option{-fcompare-debug}. This is
2954useful to verify the full @option{-fcompare-debug} testing coverage. It
2955must be used along with @code{bootstrap-debug-lean} and
2956@code{bootstrap-debug-lib}.
2957
2958@item @samp{bootstrap-cet}
2959This option enables Intel CET for host tools during bootstrapping.
2960@samp{BUILD_CONFIG=bootstrap-cet} is equivalent to adding
2961@option{-fcf-protection} to @samp{BOOT_CFLAGS}. This option
2962assumes that the host supports Intel CET (e.g.@: GNU assembler version
29632.30 or later).
2964
2965@item @samp{bootstrap-time}
2966Arranges for the run time of each program started by the GCC driver,
2967built in any stage, to be logged to @file{time.log}, in the top level of
2968the build tree.
2969
2970@item @samp{bootstrap-asan}
2971Compiles GCC itself using Address Sanitization in order to catch invalid memory
2972accesses within the GCC code.
2973
2974@item @samp{bootstrap-hwasan}
2975Compiles GCC itself using HWAddress Sanitization in order to catch invalid
2976memory accesses within the GCC code. This option is only available on AArch64
2977systems that are running Linux kernel version 5.4 or later.
2978
2979@end table
2980
2981@section Building a cross compiler
2982
2983When building a cross compiler, it is not generally possible to do a
29843-stage bootstrap of the compiler. This makes for an interesting problem
2985as parts of GCC can only be built with GCC@.
2986
2987To build a cross compiler, we recommend first building and installing a
2988native compiler. You can then use the native GCC compiler to build the
2989cross compiler. The installed native compiler needs to be GCC version
29902.95 or later.
2991
2992Assuming you have already installed a native copy of GCC and configured
2993your cross compiler, issue the command @command{make}, which performs the
2994following steps:
2995
2996@itemize @bullet
2997@item
2998Build host tools necessary to build the compiler.
2999
3000@item
3001Build target tools for use by the compiler such as binutils (bfd,
3002binutils, gas, gprof, ld, and opcodes)
3003if they have been individually linked or moved into the top level GCC source
3004tree before configuring.
3005
3006@item
3007Build the compiler (single stage only).
3008
3009@item
3010Build runtime libraries using the compiler from the previous step.
3011@end itemize
3012
3013Note that if an error occurs in any step the make process will exit.
3014
3015If you are not building GNU binutils in the same source tree as GCC,
3016you will need a cross-assembler and cross-linker installed before
3017configuring GCC@. Put them in the directory
3018@file{@var{prefix}/@var{target}/bin}. Here is a table of the tools
3019you should put in this directory:
3020
3021@table @file
3022@item as
3023This should be the cross-assembler.
3024
3025@item ld
3026This should be the cross-linker.
3027
3028@item ar
3029This should be the cross-archiver: a program which can manipulate
3030archive files (linker libraries) in the target machine's format.
3031
3032@item ranlib
3033This should be a program to construct a symbol table in an archive file.
3034@end table
3035
3036The installation of GCC will find these programs in that directory,
3037and copy or link them to the proper place to for the cross-compiler to
3038find them when run later.
3039
3040The easiest way to provide these files is to build the Binutils package.
3041Configure it with the same @option{--host} and @option{--target}
3042options that you use for configuring GCC, then build and install
3043them. They install their executables automatically into the proper
3044directory. Alas, they do not support all the targets that GCC
3045supports.
3046
3047If you are not building a C library in the same source tree as GCC,
3048you should also provide the target libraries and headers before
3049configuring GCC, specifying the directories with
3050@option{--with-sysroot} or @option{--with-headers} and
3051@option{--with-libs}. Many targets also require ``start files'' such
3052as @file{crt0.o} and
3053@file{crtn.o} which are linked into each executable. There may be several
3054alternatives for @file{crt0.o}, for use with profiling or other
3055compilation options. Check your target's definition of
3056@code{STARTFILE_SPEC} to find out what start files it uses.
3057
3058@section Building in parallel
3059
3060GNU Make 3.80 and above, which is necessary to build GCC, support
3061building in parallel. To activate this, you can use @samp{make -j 2}
3062instead of @samp{make}. You can also specify a bigger number, and
3063in most cases using a value greater than the number of processors in
3064your machine will result in fewer and shorter I/O latency hits, thus
3065improving overall throughput; this is especially true for slow drives
3066and network filesystems.
3067
3068@section Building the Ada compiler
3069
3070@ifnothtml
3071@ref{GNAT-prerequisite}.
3072@end ifnothtml
3073@ifhtml
3074@uref{prerequisites.html#GNAT-prerequisite,,GNAT prerequisites}.
3075@end ifhtml
3076
3077@section Building the D compiler
3078
3079@ifnothtml
3080@ref{GDC-prerequisite}.
3081@end ifnothtml
3082@ifhtml
3083@uref{prerequisites.html#GDC-prerequisite,,GDC prerequisites}.
3084@end ifhtml
3085
3086@section Building with profile feedback
3087
3088It is possible to use profile feedback to optimize the compiler itself. This
3089should result in a faster compiler binary. Experiments done on x86 using gcc
30903.3 showed approximately 7 percent speedup on compiling C programs. To
3091bootstrap the compiler with profile feedback, use @code{make profiledbootstrap}.
3092
3093When @samp{make profiledbootstrap} is run, it will first build a @code{stage1}
3094compiler. This compiler is used to build a @code{stageprofile} compiler
3095instrumented to collect execution counts of instruction and branch
3096probabilities. Training run is done by building @code{stagetrain}
3097compiler. Finally a @code{stagefeedback} compiler is built
3098using the information collected.
3099
3100Unlike standard bootstrap, several additional restrictions apply. The
3101compiler used to build @code{stage1} needs to support a 64-bit integral type.
3102It is recommended to only use GCC for this.
3103
3104On Linux/x86_64 hosts with some restrictions (no virtualization) it is
3105also possible to do autofdo build with @samp{make
3106autoprofiledback}. This uses Linux perf to sample branches in the
3107binary and then rebuild it with feedback derived from the profile.
3108Linux perf and the @code{autofdo} toolkit needs to be installed for
3109this.
3110
3111Only the profile from the current build is used, so when an error
3112occurs it is recommended to clean before restarting. Otherwise
3113the code quality may be much worse.
3114
3115@html
3116<hr />
3117<p>
3118@end html
3119@ifhtml
3120@uref{./index.html,,Return to the GCC Installation page}
3121@end ifhtml
3122@end ifset
3123
3124@c ***Testing*****************************************************************
3125@ifnothtml
3126@comment node-name, next, previous, up
3127@node Testing, Final install, Building, Installing GCC
3128@end ifnothtml
3129@ifset testhtml
3130@ifnothtml
3131@chapter Installing GCC: Testing
3132@end ifnothtml
3133@cindex Testing
3134@cindex Installing GCC: Testing
3135@cindex Testsuite
3136
3137Before you install GCC, we encourage you to run the testsuites and to
3138compare your results with results from a similar configuration that have
3139been submitted to the
3140@uref{https://gcc.gnu.org/ml/gcc-testresults/,,gcc-testresults mailing list}.
3141Some of these archived results are linked from the build status lists
3142at @uref{https://gcc.gnu.org/buildstat.html}, although not everyone who
3143reports a successful build runs the testsuites and submits the results.
3144This step is optional and may require you to download additional software,
3145but it can give you confidence in your new GCC installation or point out
3146problems before you install and start using your new GCC@.
3147
3148First, you must have @uref{download.html,,downloaded the testsuites}.
ce51e843 3149These are included in the source tarball.
d77de738
ML
3150
3151Second, you must have the testing tools installed. This includes
3152@uref{https://www.gnu.org/software/dejagnu/,,DejaGnu}, Tcl, and Expect;
3153the DejaGnu site has links to these.
3154Some optional tests also require Python3 and pytest module.
3155
3156If the directories where @command{runtest} and @command{expect} were
3157installed are not in the @env{PATH}, you may need to set the following
3158environment variables appropriately, as in the following example (which
3159assumes that DejaGnu has been installed under @file{/usr/local}):
3160
3161@smallexample
3162TCL_LIBRARY = /usr/local/share/tcl8.0
3163DEJAGNULIBS = /usr/local/share/dejagnu
3164@end smallexample
3165
3166(On systems such as Cygwin, these paths are required to be actual
3167paths, not mounts or links; presumably this is due to some lack of
3168portability in the DejaGnu code.)
3169
3170
3171Finally, you can run the testsuite (which may take a long time):
3172@smallexample
3173cd @var{objdir}; make -k check
3174@end smallexample
3175
3176This will test various components of GCC, such as compiler
3177front ends and runtime libraries. While running the testsuite, DejaGnu
3178might emit some harmless messages resembling
3179@samp{WARNING: Couldn't find the global config file.} or
3180@samp{WARNING: Couldn't find tool init file} that can be ignored.
3181
3182If you are testing a cross-compiler, you may want to run the testsuite
3183on a simulator as described at @uref{https://gcc.gnu.org/simtest-howto.html}.
3184
3185@section How can you run the testsuite on selected tests?
3186
3187In order to run sets of tests selectively, there are targets
3188@samp{make check-gcc} and language specific @samp{make check-c},
3189@samp{make check-c++}, @samp{make check-d} @samp{make check-fortran},
1eee94d3
GM
3190@samp{make check-ada}, @samp{make check-m2}, @samp{make check-objc},
3191@samp{make check-obj-c++}, @samp{make check-lto} in the @file{gcc}
3192subdirectory of the object directory. You can also just run
3193@samp{make check} in a subdirectory of the object directory.
d77de738
ML
3194
3195
3196A more selective way to just run all @command{gcc} execute tests in the
3197testsuite is to use
3198
3199@smallexample
3200make check-gcc RUNTESTFLAGS="execute.exp @var{other-options}"
3201@end smallexample
3202
3203Likewise, in order to run only the @command{g++} ``old-deja'' tests in
3204the testsuite with filenames matching @samp{9805*}, you would use
3205
3206@smallexample
3207make check-g++ RUNTESTFLAGS="old-deja.exp=9805* @var{other-options}"
3208@end smallexample
3209
3210The file-matching expression following @var{filename}@command{.exp=} is treated
3211as a series of whitespace-delimited glob expressions so that multiple patterns
3212may be passed, although any whitespace must either be escaped or surrounded by
3213single quotes if multiple expressions are desired. For example,
3214
3215@smallexample
3216make check-g++ RUNTESTFLAGS="old-deja.exp=9805*\ virtual2.c @var{other-options}"
3217make check-g++ RUNTESTFLAGS="'old-deja.exp=9805* virtual2.c' @var{other-options}"
3218@end smallexample
3219
3220The @file{*.exp} files are located in the testsuite directories of the GCC
3221source, the most important ones being @file{compile.exp},
3222@file{execute.exp}, @file{dg.exp} and @file{old-deja.exp}.
3223To get a list of the possible @file{*.exp} files, pipe the
3224output of @samp{make check} into a file and look at the
3225@samp{Running @dots{} .exp} lines.
3226
3227@section Passing options and running multiple testsuites
3228
3229You can pass multiple options to the testsuite using the
3230@samp{--target_board} option of DejaGNU, either passed as part of
3231@samp{RUNTESTFLAGS}, or directly to @command{runtest} if you prefer to
3232work outside the makefiles. For example,
3233
3234@smallexample
3235make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"
3236@end smallexample
3237
3238will run the standard @command{g++} testsuites (``unix'' is the target name
3239for a standard native testsuite situation), passing
3240@samp{-O3 -fmerge-constants} to the compiler on every test, i.e.,
3241slashes separate options.
3242
3243You can run the testsuites multiple times using combinations of options
3244with a syntax similar to the brace expansion of popular shells:
3245
3246@smallexample
3247@dots{}"--target_board=arm-sim\@{-mhard-float,-msoft-float\@}\@{-O1,-O2,-O3,\@}"
3248@end smallexample
3249
3250(Note the empty option caused by the trailing comma in the final group.)
3251The following will run each testsuite eight times using the @samp{arm-sim}
3252target, as if you had specified all possible combinations yourself:
3253
3254@smallexample
3255--target_board='arm-sim/-mhard-float/-O1 \
3256 arm-sim/-mhard-float/-O2 \
3257 arm-sim/-mhard-float/-O3 \
3258 arm-sim/-mhard-float \
3259 arm-sim/-msoft-float/-O1 \
3260 arm-sim/-msoft-float/-O2 \
3261 arm-sim/-msoft-float/-O3 \
3262 arm-sim/-msoft-float'
3263@end smallexample
3264
3265They can be combined as many times as you wish, in arbitrary ways. This
3266list:
3267
3268@smallexample
3269@dots{}"--target_board=unix/-Wextra\@{-O3,-fno-strength\@}\@{-fomit-frame,\@}"
3270@end smallexample
3271
3272will generate four combinations, all involving @samp{-Wextra}.
3273
3274The disadvantage to this method is that the testsuites are run in serial,
3275which is a waste on multiprocessor systems. For users with GNU Make and
3276a shell which performs brace expansion, you can run the testsuites in
3277parallel by having the shell perform the combinations and @command{make}
3278do the parallel runs. Instead of using @samp{--target_board}, use a
3279special makefile target:
3280
3281@smallexample
3282make -j@var{N} check-@var{testsuite}//@var{test-target}/@var{option1}/@var{option2}/@dots{}
3283@end smallexample
3284
3285For example,
3286
3287@smallexample
3288make -j3 check-gcc//sh-hms-sim/@{-m1,-m2,-m3,-m3e,-m4@}/@{,-nofpu@}
3289@end smallexample
3290
3291will run three concurrent ``make-gcc'' testsuites, eventually testing all
3292ten combinations as described above. Note that this is currently only
3293supported in the @file{gcc} subdirectory. (To see how this works, try
3294typing @command{echo} before the example given here.)
3295
3296
3297@section How to interpret test results
3298
3299The result of running the testsuite are various @file{*.sum} and @file{*.log}
3300files in the testsuite subdirectories. The @file{*.log} files contain a
3301detailed log of the compiler invocations and the corresponding
3302results, the @file{*.sum} files summarize the results. These summaries
3303contain status codes for all tests:
3304
3305@itemize @bullet
3306@item
3307PASS: the test passed as expected
3308@item
3309XPASS: the test unexpectedly passed
3310@item
3311FAIL: the test unexpectedly failed
3312@item
3313XFAIL: the test failed as expected
3314@item
3315UNSUPPORTED: the test is not supported on this platform
3316@item
3317ERROR: the testsuite detected an error
3318@item
3319WARNING: the testsuite detected a possible problem
3320@end itemize
3321
3322It is normal for some tests to report unexpected failures. At the
3323current time the testing harness does not allow fine grained control
3324over whether or not a test is expected to fail. This problem should
3325be fixed in future releases.
3326
3327
3328@section Submitting test results
3329
3330If you want to report the results to the GCC project, use the
3331@file{contrib/test_summary} shell script. Start it in the @var{objdir} with
3332
3333@smallexample
3334@var{srcdir}/contrib/test_summary -p your_commentary.txt \
3335 -m gcc-testresults@@gcc.gnu.org |sh
3336@end smallexample
3337
3338This script uses the @command{Mail} program to send the results, so
3339make sure it is in your @env{PATH}. The file @file{your_commentary.txt} is
3340prepended to the testsuite summary and should contain any special
3341remarks you have on your results or your build environment. Please
3342do not edit the testsuite result block or the subject line, as these
3343messages may be automatically processed.
3344
3345@html
3346<hr />
3347<p>
3348@end html
3349@ifhtml
3350@uref{./index.html,,Return to the GCC Installation page}
3351@end ifhtml
3352@end ifset
3353
3354@c ***Final install***********************************************************
3355@ifnothtml
3356@comment node-name, next, previous, up
3357@node Final install, , Testing, Installing GCC
3358@end ifnothtml
3359@ifset finalinstallhtml
3360@ifnothtml
3361@chapter Installing GCC: Final installation
3362@end ifnothtml
3363
3364Now that GCC has been built (and optionally tested), you can install it with
3365@smallexample
3366cd @var{objdir} && make install
3367@end smallexample
3368
3369We strongly recommend to install into a target directory where there is
3370no previous version of GCC present. Also, the GNAT runtime should not
3371be stripped, as this would break certain features of the debugger that
3372depend on this debugging information (catching Ada exceptions for
3373instance).
3374
3375That step completes the installation of GCC; user level binaries can
3376be found in @file{@var{prefix}/bin} where @var{prefix} is the value
3377you specified with the @option{--prefix} to configure (or
3378@file{/usr/local} by default). (If you specified @option{--bindir},
3379that directory will be used instead; otherwise, if you specified
3380@option{--exec-prefix}, @file{@var{exec-prefix}/bin} will be used.)
3381Headers for the C++ library are installed in
3382@file{@var{prefix}/include}; libraries in @file{@var{libdir}}
3383(normally @file{@var{prefix}/lib}); internal parts of the compiler in
3384@file{@var{libdir}/gcc} and @file{@var{libexecdir}/gcc}; documentation
3385in info format in @file{@var{infodir}} (normally
3386@file{@var{prefix}/info}).
3387
3388When installing cross-compilers, GCC's executables
3389are not only installed into @file{@var{bindir}}, that
3390is, @file{@var{exec-prefix}/bin}, but additionally into
3391@file{@var{exec-prefix}/@var{target-alias}/bin}, if that directory
3392exists. Typically, such @dfn{tooldirs} hold target-specific
3393binutils, including assembler and linker.
3394
3395Installation into a temporary staging area or into a @command{chroot}
3396jail can be achieved with the command
3397
3398@smallexample
3399make DESTDIR=@var{path-to-rootdir} install
3400@end smallexample
3401
3402@noindent
3403where @var{path-to-rootdir} is the absolute path of
3404a directory relative to which all installation paths will be
3405interpreted. Note that the directory specified by @code{DESTDIR}
3406need not exist yet; it will be created if necessary.
3407
3408There is a subtle point with tooldirs and @code{DESTDIR}:
3409If you relocate a cross-compiler installation with
3410e.g.@: @samp{DESTDIR=@var{rootdir}}, then the directory
3411@file{@var{rootdir}/@var{exec-prefix}/@var{target-alias}/bin} will
3412be filled with duplicated GCC executables only if it already exists,
3413it will not be created otherwise. This is regarded as a feature,
3414not as a bug, because it gives slightly more control to the packagers
3415using the @code{DESTDIR} feature.
3416
3417You can install stripped programs and libraries with
3418
3419@smallexample
3420make install-strip
3421@end smallexample
3422
3423If you are bootstrapping a released version of GCC then please
3424quickly review the build status page for your release, available from
3425@uref{https://gcc.gnu.org/buildstat.html}.
3426If your system is not listed for the version of GCC that you built,
3427send a note to
3428@email{gcc@@gcc.gnu.org} indicating
3429that you successfully built and installed GCC@.
3430Include the following information:
3431
3432@itemize @bullet
3433@item
3434Output from running @file{@var{srcdir}/config.guess}. Do not send
3435that file itself, just the one-line output from running it.
3436
3437@item
3438The output of @samp{gcc -v} for your newly installed @command{gcc}.
3439This tells us which version of GCC you built and the options you passed to
3440configure.
3441
3442@item
3443Whether you enabled all languages or a subset of them. If you used a
3444full distribution then this information is part of the configure
3445options in the output of @samp{gcc -v}, but if you downloaded the
3446``core'' compiler plus additional front ends then it isn't apparent
3447which ones you built unless you tell us about it.
3448
3449@item
3450If the build was for GNU/Linux, also include:
3451@itemize @bullet
3452@item
3453The distribution name and version (e.g., Red Hat 7.1 or Debian 2.2.3);
3454this information should be available from @file{/etc/issue}.
3455
3456@item
3457The version of the Linux kernel, available from @samp{uname --version}
3458or @samp{uname -a}.
3459
3460@item
3461The version of glibc you used; for RPM-based systems like Red Hat,
3462Mandrake, and SuSE type @samp{rpm -q glibc} to get the glibc version,
3463and on systems like Debian and Progeny use @samp{dpkg -l libc6}.
3464@end itemize
3465For other systems, you can include similar information if you think it is
3466relevant.
3467
3468@item
3469Any other information that you think would be useful to people building
3470GCC on the same configuration. The new entry in the build status list
3471will include a link to the archived copy of your message.
3472@end itemize
3473
3474We'd also like to know if the
3475@ifnothtml
3476@ref{Specific, host/target specific installation notes}
3477@end ifnothtml
3478@ifhtml
3479@uref{specific.html,,host/target specific installation notes}
3480@end ifhtml
3481didn't include your host/target information or if that information is
3482incomplete or out of date. Send a note to
3483@email{gcc@@gcc.gnu.org} detailing how the information should be changed.
3484
3485If you find a bug, please report it following the
3486@uref{../bugs/,,bug reporting guidelines}.
3487
3488If you want to print the GCC manuals, do @samp{cd @var{objdir}; make
3489dvi}. You will need to have @command{texi2dvi} (version at least 4.7)
3490and @TeX{} installed. This creates a number of @file{.dvi} files in
3491subdirectories of @file{@var{objdir}}; these may be converted for
3492printing with programs such as @command{dvips}. Alternately, by using
3493@samp{make pdf} in place of @samp{make dvi}, you can create documentation
3494in the form of @file{.pdf} files; this requires @command{texi2pdf}, which
3495is included with Texinfo version 4.8 and later. You can also
3496@uref{https://shop.fsf.org/,,buy printed manuals from the
3497Free Software Foundation}, though such manuals may not be for the most
3498recent version of GCC@.
3499
3500If you would like to generate online HTML documentation, do @samp{cd
3501@var{objdir}; make html} and HTML will be generated for the gcc manuals in
3502@file{@var{objdir}/gcc/HTML}.
3503
3504@html
3505<hr />
3506<p>
3507@end html
3508@ifhtml
3509@uref{./index.html,,Return to the GCC Installation page}
3510@end ifhtml
3511@end ifset
3512
3513@c ***Binaries****************************************************************
3514@ifnothtml
3515@comment node-name, next, previous, up
3516@node Binaries, Specific, Installing GCC, Top
3517@end ifnothtml
3518@ifset binarieshtml
3519@ifnothtml
3520@chapter Installing GCC: Binaries
3521@end ifnothtml
3522@cindex Binaries
3523@cindex Installing GCC: Binaries
3524
3525We are often asked about pre-compiled versions of GCC@. While we cannot
3526provide these for all platforms, below you'll find links to binaries for
3527various platforms where creating them by yourself is not easy due to various
3528reasons.
3529
3530Please note that we did not create these binaries, nor do we
3531support them. If you have any problems installing them, please
3532contact their makers.
3533
3534@itemize
3535@item
3536AIX:
3537@itemize
3538@item
3539@uref{http://www.perzl.org/aix/,,AIX Open Source Packages (AIX5L AIX 6.1
3540AIX 7.1)}.
3541@end itemize
3542
3543@item
3544DOS---@uref{http://www.delorie.com/djgpp/,,DJGPP}.
3545
3546@item
3547HP-UX:
3548@itemize
3549@item
3550@uref{http://hpux.connect.org.uk/,,HP-UX Porting Center};
3551@end itemize
3552
3553@item
3554Solaris 2 (SPARC, Intel):
3555@itemize
3556@item
3557@uref{https://www.opencsw.org/,,OpenCSW}
3558@end itemize
3559
3560@item
3561macOS:
3562@itemize
3563@item
3564The @uref{https://brew.sh,,Homebrew} package manager;
3565@item
3566@uref{https://www.macports.org,,MacPorts}.
3567@end itemize
3568
3569@item
3570Microsoft Windows:
3571@itemize
3572@item
3573The @uref{https://sourceware.org/cygwin/,,Cygwin} project;
3574@item
3575The @uref{https://osdn.net/projects/mingw/,,MinGW} and
3576@uref{https://www.mingw-w64.org/,,mingw-w64} projects.
3577@end itemize
3578
3579@item
3580@uref{http://www.openpkg.org/,,OpenPKG} offers binaries for quite a
3581number of platforms.
3582
3583@item
3584The @uref{https://gcc.gnu.org/wiki/GFortranBinaries,,GFortran Wiki} has
3585links to GNU Fortran binaries for several platforms.
3586@end itemize
3587
3588@html
3589<hr />
3590<p>
3591@end html
3592@ifhtml
3593@uref{./index.html,,Return to the GCC Installation page}
3594@end ifhtml
3595@end ifset
3596
3597@c ***Specific****************************************************************
3598@ifnothtml
3599@comment node-name, next, previous, up
3600@node Specific, GNU Free Documentation License, Binaries, Top
3601@end ifnothtml
3602@ifset specifichtml
3603@ifnothtml
3604@chapter Host/target specific installation notes for GCC
3605@end ifnothtml
3606@cindex Specific
3607@cindex Specific installation notes
3608@cindex Target specific installation
3609@cindex Host specific installation
3610@cindex Target specific installation notes
3611
3612Please read this document carefully @emph{before} installing the
3613GNU Compiler Collection on your machine.
3614
3615Note that this list of install notes is @emph{not} a list of supported
3616hosts or targets. Not all supported hosts and targets are listed
3617here, only the ones that require host-specific or target-specific
3618information have to.
3619
3620@ifhtml
3621@itemize
3622@item
3623@uref{#aarch64-x-x,,aarch64*-*-*}
3624@item
3625@uref{#alpha-x-x,,alpha*-*-*}
3626@item
3627@uref{#amdgcn-x-amdhsa,,amdgcn-*-amdhsa}
3628@item
3629@uref{#amd64-x-solaris2,,amd64-*-solaris2*}
3630@item
3631@uref{#arc-x-elf32,,arc-*-elf32}
3632@item
3633@uref{#arc-linux-uclibc,,arc-linux-uclibc}
3634@item
3635@uref{#arm-x-eabi,,arm-*-eabi}
3636@item
3637@uref{#avr,,avr}
3638@item
3639@uref{#bfin,,Blackfin}
3640@item
3641@uref{#cris,,cris}
3642@item
3643@uref{#dos,,DOS}
3644@item
3645@uref{#epiphany-x-elf,,epiphany-*-elf}
3646@item
3647@uref{#ft32-x-elf,,ft32-*-elf}
3648@item
3649@uref{#x-x-freebsd,,*-*-freebsd*}
3650@item
3651@uref{#h8300-hms,,h8300-hms}
3652@item
3653@uref{#hppa-hp-hpux,,hppa*-hp-hpux*}
3654@item
3655@uref{#hppa-hp-hpux10,,hppa*-hp-hpux10}
3656@item
3657@uref{#hppa-hp-hpux11,,hppa*-hp-hpux11}
3658@item
3659@uref{#x-x-linux-gnu,,*-*-linux-gnu}
3660@item
3661@uref{#ix86-x-linux,,i?86-*-linux*}
3662@item
3663@uref{#ix86-x-solaris2,,i?86-*-solaris2*}
3664@item
3665@uref{#ia64-x-linux,,ia64-*-linux}
3666@item
3667@uref{#ia64-x-hpux,,ia64-*-hpux*}
3668@item
3669@uref{#x-ibm-aix,,*-ibm-aix*}
3670@item
3671@uref{#iq2000-x-elf,,iq2000-*-elf}
3672@item
3673@uref{#loongarch,,loongarch}
3674@item
3675@uref{#lm32-x-elf,,lm32-*-elf}
3676@item
3677@uref{#lm32-x-uclinux,,lm32-*-uclinux}
3678@item
3679@uref{#m32c-x-elf,,m32c-*-elf}
3680@item
3681@uref{#m32r-x-elf,,m32r-*-elf}
3682@item
3683@uref{#m68k-x-x,,m68k-*-*}
3684@item
3685@uref{#m68k-x-uclinux,,m68k-*-uclinux}
3686@item
3687@uref{#microblaze-x-elf,,microblaze-*-elf}
3688@item
3689@uref{#mips-x-x,,mips-*-*}
3690@item
3691@uref{#moxie-x-elf,,moxie-*-elf}
3692@item
3693@uref{#msp430-x-elf,,msp430-*-elf}
3694@item
3695@uref{#nds32le-x-elf,,nds32le-*-elf}
3696@item
3697@uref{#nds32be-x-elf,,nds32be-*-elf}
3698@item
3699@uref{#nvptx-x-none,,nvptx-*-none}
3700@item
3701@uref{#or1k-x-elf,,or1k-*-elf}
3702@item
3703@uref{#or1k-x-linux,,or1k-*-linux}
3704@item
3705@uref{#powerpc-x-x,,powerpc*-*-*}
3706@item
3707@uref{#powerpc-x-darwin,,powerpc-*-darwin*}
3708@item
3709@uref{#powerpc-x-elf,,powerpc-*-elf}
3710@item
3711@uref{#powerpc-x-linux-gnu,,powerpc*-*-linux-gnu*}
3712@item
3713@uref{#powerpc-x-netbsd,,powerpc-*-netbsd*}
3714@item
3715@uref{#powerpc-x-eabisim,,powerpc-*-eabisim}
3716@item
3717@uref{#powerpc-x-eabi,,powerpc-*-eabi}
3718@item
3719@uref{#powerpcle-x-elf,,powerpcle-*-elf}
3720@item
3721@uref{#powerpcle-x-eabisim,,powerpcle-*-eabisim}
3722@item
3723@uref{#powerpcle-x-eabi,,powerpcle-*-eabi}
3724@item
3725@uref{#riscv32-x-elf,,riscv32-*-elf}
3726@item
3727@uref{#riscv32-x-linux,,riscv32-*-linux}
3728@item
3729@uref{#riscv64-x-elf,,riscv64-*-elf}
3730@item
3731@uref{#riscv64-x-linux,,riscv64-*-linux}
3732@item
3733@uref{#rl78-x-elf,,rl78-*-elf}
3734@item
3735@uref{#rx-x-elf,,rx-*-elf}
3736@item
3737@uref{#s390-x-linux,,s390-*-linux*}
3738@item
3739@uref{#s390x-x-linux,,s390x-*-linux*}
3740@item
3741@uref{#s390x-ibm-tpf,,s390x-ibm-tpf*}
3742@item
3743@uref{#x-x-solaris2,,*-*-solaris2*}
3744@item
3745@uref{#sparc-x-x,,sparc*-*-*}
3746@item
3747@uref{#sparc-sun-solaris2,,sparc-sun-solaris2*}
3748@item
3749@uref{#sparc-x-linux,,sparc-*-linux*}
3750@item
3751@uref{#sparc64-x-solaris2,,sparc64-*-solaris2*}
3752@item
3753@uref{#sparcv9-x-solaris2,,sparcv9-*-solaris2*}
3754@item
3755@uref{#c6x-x-x,,c6x-*-*}
3756@item
3757@uref{#visium-x-elf, visium-*-elf}
3758@item
3759@uref{#x-x-vxworks,,*-*-vxworks*}
3760@item
3761@uref{#x86-64-x-x,,x86_64-*-*, amd64-*-*}
3762@item
3763@uref{#x86-64-x-solaris2,,x86_64-*-solaris2*}
3764@item
3765@uref{#xtensa-x-elf,,xtensa*-*-elf}
3766@item
3767@uref{#xtensa-x-linux,,xtensa*-*-linux*}
3768@item
3769@uref{#windows,,Microsoft Windows}
3770@item
3771@uref{#x-x-cygwin,,*-*-cygwin}
3772@item
3773@uref{#x-x-mingw32,,*-*-mingw32}
3774@item
3775@uref{#os2,,OS/2}
3776@item
3777@uref{#older,,Older systems}
3778@end itemize
3779
3780@itemize
3781@item
3782@uref{#elf,,all ELF targets} (SVR4, Solaris 2, etc.)
3783@end itemize
3784@end ifhtml
3785
3786
3787@html
3788<!-- -------- host/target specific issues start here ---------------- -->
3789<hr />
3790@end html
3791@anchor{aarch64-x-x}
3792@heading aarch64*-*-*
3793Binutils pre 2.24 does not have support for selecting @option{-mabi} and
3794does not support ILP32. If it is used to build GCC 4.9 or later, GCC will
3795not support option @option{-mabi=ilp32}.
3796
3797To enable a workaround for the Cortex-A53 erratum number 835769 by default
3798(for all CPUs regardless of -mcpu option given) at configure time use the
3799@option{--enable-fix-cortex-a53-835769} option. This will enable the fix by
3800default and can be explicitly disabled during compilation by passing the
3801@option{-mno-fix-cortex-a53-835769} option. Conversely,
3802@option{--disable-fix-cortex-a53-835769} will disable the workaround by
3803default. The workaround is disabled by default if neither of
3804@option{--enable-fix-cortex-a53-835769} or
3805@option{--disable-fix-cortex-a53-835769} is given at configure time.
3806
3807To enable a workaround for the Cortex-A53 erratum number 843419 by default
3808(for all CPUs regardless of -mcpu option given) at configure time use the
3809@option{--enable-fix-cortex-a53-843419} option. This workaround is applied at
3810link time. Enabling the workaround will cause GCC to pass the relevant option
3811to the linker. It can be explicitly disabled during compilation by passing the
3812@option{-mno-fix-cortex-a53-843419} option. Conversely,
3813@option{--disable-fix-cortex-a53-843419} will disable the workaround by default.
3814The workaround is disabled by default if neither of
3815@option{--enable-fix-cortex-a53-843419} or
3816@option{--disable-fix-cortex-a53-843419} is given at configure time.
3817
3818To enable Branch Target Identification Mechanism and Return Address Signing by
3819default at configure time use the @option{--enable-standard-branch-protection}
3820option. This is equivalent to having @option{-mbranch-protection=standard}
3821during compilation. This can be explicitly disabled during compilation by
3822passing the @option{-mbranch-protection=none} option which turns off all
3823types of branch protections. Conversely,
3824@option{--disable-standard-branch-protection} will disable both the
3825protections by default. This mechanism is turned off by default if neither
3826of the options are given at configure time.
3827
3828@html
3829<hr />
3830@end html
3831@anchor{alpha-x-x}
3832@heading alpha*-*-*
3833This section contains general configuration information for all
3834Alpha-based platforms using ELF@. In addition to reading this
3835section, please read all other sections that match your target.
3836
3837@html
3838<hr />
3839@end html
3840@anchor{amd64-x-solaris2}
3841@heading amd64-*-solaris2*
3842This is a synonym for @samp{x86_64-*-solaris2*}.
3843
3844@html
3845<hr />
3846@end html
3847@anchor{amdgcn-x-amdhsa}
3848@heading amdgcn-*-amdhsa
3849AMD GCN GPU target.
3850
3851Instead of GNU Binutils, you will need to install LLVM 13.0.1, or later, and copy
3852@file{bin/llvm-mc} to @file{amdgcn-amdhsa/bin/as},
3853@file{bin/lld} to @file{amdgcn-amdhsa/bin/ld},
3854@file{bin/llvm-nm} to @file{amdgcn-amdhsa/bin/nm}, and
3855@file{bin/llvm-ar} to both @file{bin/amdgcn-amdhsa-ar} and
3856@file{bin/amdgcn-amdhsa-ranlib}.
3857
3858Use Newlib (3.2.0, or newer).
3859
3860To run the binaries, install the HSA Runtime from the
3861@uref{https://rocm.github.io,,ROCm Platform}, and use
3862@file{libexec/gcc/amdhsa-amdhsa/@var{version}/gcn-run} to launch them
3863on the GPU.
3864
3865@html
3866<hr />
3867@end html
3868@anchor{arc-x-elf32}
3869@heading arc-*-elf32
3870
3871Use @samp{configure --target=arc-elf32 --with-cpu=@var{cpu} --enable-languages="c,c++"}
3872to configure GCC, with @var{cpu} being one of @samp{arc600}, @samp{arc601},
3873or @samp{arc700}@.
3874
3875@html
3876<hr />
3877@end html
3878@anchor{arc-linux-uclibc}
3879@heading arc-linux-uclibc
3880
3881Use @samp{configure --target=arc-linux-uclibc --with-cpu=arc700 --enable-languages="c,c++"} to configure GCC@.
3882
3883@html
3884<hr />
3885@end html
3886@anchor{arm-x-eabi}
3887@heading arm-*-eabi
3888ARM-family processors.
3889
3890Building the Ada frontend commonly fails (an infinite loop executing
3891@code{xsinfo}) if the host compiler is GNAT 4.8. Host compilers built from the
3892GNAT 4.6, 4.9 or 5 release branches are known to succeed.
3893
3894@html
3895<hr />
3896@end html
3897@anchor{avr}
3898@heading avr
3899ATMEL AVR-family micro controllers. These are used in embedded
3900applications. There are no standard Unix configurations.
3901@ifnothtml
3902@xref{AVR Options,, AVR Options, gcc, Using the GNU Compiler
3903Collection (GCC)},
3904@end ifnothtml
3905@ifhtml
3906See ``AVR Options'' in the main manual
3907@end ifhtml
3908for the list of supported MCU types.
3909
3910Use @samp{configure --target=avr --enable-languages="c"} to configure GCC@.
3911
3912Further installation notes and other useful information about AVR tools
3913can also be obtained from:
3914
3915@itemize @bullet
3916@item
3917@uref{http://www.nongnu.org/avr/,,http://www.nongnu.org/avr/}
3918@item
3919@uref{http://www.amelek.gda.pl/avr/,,http://www.amelek.gda.pl/avr/}
3920@end itemize
3921
3922The following error:
3923@smallexample
3924Error: register required
3925@end smallexample
3926
3927indicates that you should upgrade to a newer version of the binutils.
3928
3929@html
3930<hr />
3931@end html
3932@anchor{bfin}
3933@heading Blackfin
3934The Blackfin processor, an Analog Devices DSP.
3935@ifnothtml
3936@xref{Blackfin Options,, Blackfin Options, gcc, Using the GNU Compiler
3937Collection (GCC)},
3938@end ifnothtml
3939@ifhtml
3940See ``Blackfin Options'' in the main manual
3941@end ifhtml
3942
3943More information, and a version of binutils with support for this processor,
3944are available at @uref{https://sourceforge.net/projects/adi-toolchain/}.
3945
3946@html
3947<hr />
3948@end html
3949@anchor{cris}
3950@heading CRIS
3951CRIS is a CPU architecture in Axis Communications systems-on-a-chip, for
3952example the ETRAX series. These are used in embedded applications.
3953
3954@ifnothtml
3955@xref{CRIS Options,, CRIS Options, gcc, Using the GNU Compiler
3956Collection (GCC)},
3957@end ifnothtml
3958@ifhtml
3959See ``CRIS Options'' in the main manual
3960@end ifhtml
3961for a list of CRIS-specific options.
3962
3963Use @samp{configure --target=cris-elf} to configure GCC@ for building
3964a cross-compiler for CRIS.
3965@html
3966<hr />
3967@end html
3968@anchor{dos}
3969@heading DOS
3970Please have a look at the @uref{binaries.html,,binaries page}.
3971
3972You cannot install GCC by itself on MSDOS; it will not compile under
3973any MSDOS compiler except itself. You need to get the complete
3974compilation package DJGPP, which includes binaries as well as sources,
3975and includes all the necessary compilation tools and libraries.
3976
3977@html
3978<hr />
3979@end html
3980@anchor{epiphany-x-elf}
3981@heading epiphany-*-elf
3982Adapteva Epiphany.
3983This configuration is intended for embedded systems.
3984
3985@html
3986<hr />
3987@end html
3988@anchor{x-x-freebsd}
3989@heading *-*-freebsd*
3990In order to better utilize FreeBSD base system functionality and match
3991the configuration of the system compiler, GCC 4.5 and above as well as
3992GCC 4.4 past 2010-06-20 leverage SSP support in libc (which is present
3993on FreeBSD 7 or later) and the use of @code{__cxa_atexit} by default
3994(on FreeBSD 6 or later). The use of @code{dl_iterate_phdr} inside
3995@file{libgcc_s.so.1} and boehm-gc (on FreeBSD 7 or later) is enabled
3996by GCC 4.5 and above.
3997
3998We support FreeBSD using the ELF file format with DWARF 2 debugging
3999for all CPU architectures. There are
4000no known issues with mixing object files and libraries with different
4001debugging formats. Otherwise, this release of GCC should now match
4002more of the configuration used in the stock FreeBSD configuration of
4003GCC@. In particular, @option{--enable-threads} is now configured by
4004default. However, as a general user, do not attempt to replace the
4005system compiler with this release. Known to bootstrap and check with
4006good results on FreeBSD 7.2-STABLE@. In the past, known to bootstrap
4007and check with good results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3, 4.4,
40084.5, 4.8, 4.9 and 5-CURRENT@.
4009
4010The version of binutils installed in @file{/usr/bin} probably works
4011with this release of GCC@. Bootstrapping against the latest GNU
4012binutils and/or the version found in @file{/usr/ports/devel/binutils} has
4013been known to enable additional features and improve overall testsuite
4014results. However, it is currently known that boehm-gc may not configure
4015properly on FreeBSD prior to the FreeBSD 7.0 release with GNU binutils
4016after 2.16.1.
4017
4018@html
4019<hr />
4020@end html
4021@anchor{ft32-x-elf}
4022@heading ft32-*-elf
4023The FT32 processor.
4024This configuration is intended for embedded systems.
4025
4026@html
4027<hr />
4028@end html
4029@anchor{h8300-hms}
4030@heading h8300-hms
4031Renesas H8/300 series of processors.
4032
4033Please have a look at the @uref{binaries.html,,binaries page}.
4034
4035The calling convention and structure layout has changed in release 2.6.
4036All code must be recompiled. The calling convention now passes the
4037first three arguments in function calls in registers. Structures are no
4038longer a multiple of 2 bytes.
4039
4040@html
4041<hr />
4042@end html
4043@anchor{hppa-hp-hpux}
4044@heading hppa*-hp-hpux*
4045Support for HP-UX version 9 and older was discontinued in GCC 3.4.
4046
4047We require using gas/binutils on all hppa platforms. Version 2.19 or
4048later is recommended.
4049
4050It may be helpful to configure GCC with the
4051@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}} and
4052@option{--with-as=@dots{}} options to ensure that GCC can find GAS@.
4053
4054The HP assembler should not be used with GCC. It is rarely tested and may
4055not work. It shouldn't be used with any languages other than C due to its
4056many limitations.
4057
4058Specifically, @option{-g} does not work (HP-UX uses a peculiar debugging
4059format which GCC does not know about). It also inserts timestamps
4060into each object file it creates, causing the 3-stage comparison test to
4061fail during a bootstrap. You should be able to continue by saying
4062@samp{make all-host all-target} after getting the failure from @samp{make}.
4063
4064Various GCC features are not supported. For example, it does not support weak
4065symbols or alias definitions. As a result, explicit template instantiations
4066are required when using C++. This makes it difficult if not impossible to
4067build many C++ applications.
4068
4069There are two default scheduling models for instructions. These are
4070PROCESSOR_7100LC and PROCESSOR_8000. They are selected from the pa-risc
4071architecture specified for the target machine when configuring.
4072PROCESSOR_8000 is the default. PROCESSOR_7100LC is selected when
4073the target is a @samp{hppa1*} machine.
4074
4075The PROCESSOR_8000 model is not well suited to older processors. Thus,
4076it is important to completely specify the machine architecture when
4077configuring if you want a model other than PROCESSOR_8000. The macro
4078TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different
4079default scheduling model is desired.
4080
4081As of GCC 4.0, GCC uses the UNIX 95 namespace for HP-UX 10.10
4082through 11.00, and the UNIX 98 namespace for HP-UX 11.11 and later.
4083This namespace change might cause problems when bootstrapping with
4084an earlier version of GCC or the HP compiler as essentially the same
4085namespace is required for an entire build. This problem can be avoided
4086in a number of ways. With HP cc, @env{UNIX_STD} can be set to @samp{95}
4087or @samp{98}. Another way is to add an appropriate set of predefines
4088to @env{CC}. The description for the @option{munix=} option contains
4089a list of the predefines used with each standard.
4090
4091More specific information to @samp{hppa*-hp-hpux*} targets follows.
4092
4093@html
4094<hr />
4095@end html
4096@anchor{hppa-hp-hpux10}
4097@heading hppa*-hp-hpux10
4098For hpux10.20, we @emph{highly} recommend you pick up the latest sed patch
4099@code{PHCO_19798} from HP@.
4100
4101The C++ ABI has changed incompatibly in GCC 4.0. COMDAT subspaces are
4102used for one-only code and data. This resolves many of the previous
4103problems in using C++ on this target. However, the ABI is not compatible
4104with the one implemented under HP-UX 11 using secondary definitions.
4105
4106@html
4107<hr />
4108@end html
4109@anchor{hppa-hp-hpux11}
4110@heading hppa*-hp-hpux11
4111GCC 3.0 and up support HP-UX 11. GCC 2.95.x is not supported and cannot
4112be used to compile GCC 3.0 and up.
4113
4114The libffi library haven't been ported to 64-bit HP-UX@ and doesn't build.
4115
4116Refer to @uref{binaries.html,,binaries} for information about obtaining
4117precompiled GCC binaries for HP-UX@. Precompiled binaries must be obtained
4118to build the Ada language as it cannot be bootstrapped using C@. Ada is
4119only available for the 32-bit PA-RISC runtime.
4120
4121Starting with GCC 3.4 an ISO C compiler is required to bootstrap. The
4122bundled compiler supports only traditional C; you will need either HP's
4123unbundled compiler, or a binary distribution of GCC@.
4124
4125It is possible to build GCC 3.3 starting with the bundled HP compiler,
4126but the process requires several steps. GCC 3.3 can then be used to
4127build later versions.
4128
4129There are several possible approaches to building the distribution.
4130Binutils can be built first using the HP tools. Then, the GCC
4131distribution can be built. The second approach is to build GCC
4132first using the HP tools, then build binutils, then rebuild GCC@.
4133There have been problems with various binary distributions, so it
4134is best not to start from a binary distribution.
4135
4136On 64-bit capable systems, there are two distinct targets. Different
4137installation prefixes must be used if both are to be installed on
4138the same system. The @samp{hppa[1-2]*-hp-hpux11*} target generates code
4139for the 32-bit PA-RISC runtime architecture and uses the HP linker.
4140The @samp{hppa64-hp-hpux11*} target generates 64-bit code for the
4141PA-RISC 2.0 architecture.
4142
4143The script config.guess now selects the target type based on the compiler
4144detected during configuration. You must define @env{PATH} or @env{CC} so
4145that configure finds an appropriate compiler for the initial bootstrap.
4146When @env{CC} is used, the definition should contain the options that are
4147needed whenever @env{CC} is used.
4148
4149Specifically, options that determine the runtime architecture must be
4150in @env{CC} to correctly select the target for the build. It is also
4151convenient to place many other compiler options in @env{CC}. For example,
4152@env{CC="cc -Ac +DA2.0W -Wp,-H16376 -D_CLASSIC_TYPES -D_HPUX_SOURCE"}
4153can be used to bootstrap the GCC 3.3 branch with the HP compiler in
415464-bit K&R/bundled mode. The @option{+DA2.0W} option will result in
4155the automatic selection of the @samp{hppa64-hp-hpux11*} target. The
4156macro definition table of cpp needs to be increased for a successful
4157build with the HP compiler. _CLASSIC_TYPES and _HPUX_SOURCE need to
4158be defined when building with the bundled compiler, or when using the
4159@option{-Ac} option. These defines aren't necessary with @option{-Ae}.
4160
4161It is best to explicitly configure the @samp{hppa64-hp-hpux11*} target
4162with the @option{--with-ld=@dots{}} option. This overrides the standard
4163search for ld. The two linkers supported on this target require different
4164commands. The default linker is determined during configuration. As a
4165result, it's not possible to switch linkers in the middle of a GCC build.
4166This has been reported to sometimes occur in unified builds of binutils
4167and GCC@.
4168
4169A recent linker patch must be installed for the correct operation of
4170GCC 3.3 and later. @code{PHSS_26559} and @code{PHSS_24304} are the
4171oldest linker patches that are known to work. They are for HP-UX
417211.00 and 11.11, respectively. @code{PHSS_24303}, the companion to
4173@code{PHSS_24304}, might be usable but it hasn't been tested. These
4174patches have been superseded. Consult the HP patch database to obtain
4175the currently recommended linker patch for your system.
4176
4177The patches are necessary for the support of weak symbols on the
417832-bit port, and for the running of initializers and finalizers. Weak
4179symbols are implemented using SOM secondary definition symbols. Prior
4180to HP-UX 11, there are bugs in the linker support for secondary symbols.
4181The patches correct a problem of linker core dumps creating shared
4182libraries containing secondary symbols, as well as various other
4183linking issues involving secondary symbols.
4184
4185GCC 3.3 uses the ELF DT_INIT_ARRAY and DT_FINI_ARRAY capabilities to
4186run initializers and finalizers on the 64-bit port. The 32-bit port
4187uses the linker @option{+init} and @option{+fini} options for the same
4188purpose. The patches correct various problems with the +init/+fini
4189options, including program core dumps. Binutils 2.14 corrects a
4190problem on the 64-bit port resulting from HP's non-standard use of
4191the .init and .fini sections for array initializers and finalizers.
4192
4193Although the HP and GNU linkers are both supported for the
4194@samp{hppa64-hp-hpux11*} target, it is strongly recommended that the
4195HP linker be used for link editing on this target.
4196
4197At this time, the GNU linker does not support the creation of long
4198branch stubs. As a result, it cannot successfully link binaries
4199containing branch offsets larger than 8 megabytes. In addition,
4200there are problems linking shared libraries, linking executables
4201with @option{-static}, and with dwarf2 unwind and exception support.
4202It also doesn't provide stubs for internal calls to global functions
4203in shared libraries, so these calls cannot be overloaded.
4204
4205The HP dynamic loader does not support GNU symbol versioning, so symbol
4206versioning is not supported. It may be necessary to disable symbol
4207versioning with @option{--disable-symvers} when using GNU ld.
4208
4209POSIX threads are the default. The optional DCE thread library is not
4210supported, so @option{--enable-threads=dce} does not work.
4211
4212@html
4213<hr />
4214@end html
4215@anchor{x-x-linux-gnu}
4216@heading *-*-linux-gnu
4217The @code{.init_array} and @code{.fini_array} sections are enabled
4218unconditionally which requires at least glibc 2.1 and binutils 2.12.
4219
4220Versions of libstdc++-v3 starting with 3.2.1 require bug fixes present
4221in glibc 2.2.5 and later. More information is available in the
4222libstdc++-v3 documentation.
4223
4224@html
4225<hr />
4226@end html
4227@anchor{ix86-x-linux}
4228@heading i?86-*-linux*
4229As of GCC 3.3, binutils 2.13.1 or later is required for this platform.
4230See @uref{https://gcc.gnu.org/PR10877,,bug 10877} for more information.
4231
4232If you receive Signal 11 errors when building on GNU/Linux, then it is
4233possible you have a hardware problem. Further information on this can be
4234found on @uref{https://www.bitwizard.nl/sig11/,,www.bitwizard.nl}.
4235
4236@html
4237<hr />
4238@end html
4239@anchor{ix86-x-solaris2}
4240@heading i?86-*-solaris2*
4241Use this for Solaris 11.3 or later on x86 and x86-64 systems. Starting
4242with GCC 4.7, there is also a 64-bit @samp{amd64-*-solaris2*} or
4243@samp{x86_64-*-solaris2*} configuration that corresponds to
4244@samp{sparcv9-sun-solaris2*}.
4245
4246It is recommended that you configure GCC to use the GNU assembler. The
4247versions included in Solaris 11.3, from GNU binutils 2.23.1 or
4248newer (available as @file{/usr/bin/gas} and
4249@file{/usr/gnu/bin/as}), work fine. The current version, from GNU
4250binutils 2.34, is known to work. Recent versions of the Solaris assembler in
4251@file{/usr/bin/as} work almost as well, though.
4252
4253For linking, the Solaris linker is preferred. If you want to use the GNU
4254linker instead, the version in Solaris 11.3, from GNU binutils 2.23.1 or
4255newer (in @file{/usr/gnu/bin/ld} and @file{/usr/bin/gld}), works,
4256as does the latest version, from GNU binutils 2.34.
4257
4258To use GNU @command{as}, configure with the options
4259@option{--with-gnu-as --with-as=@//usr/@/gnu/@/bin/@/as}. It may be necessary
4260to configure with @option{--without-gnu-ld --with-ld=@//usr/@/ccs/@/bin/@/ld} to
4261guarantee use of Solaris @command{ld}.
4262@c FIXME: why --without-gnu-ld --with-ld?
4263
4264@html
4265<hr />
4266@end html
4267@anchor{ia64-x-linux}
4268@heading ia64-*-linux
4269IA-64 processor (also known as IPF, or Itanium Processor Family)
4270running GNU/Linux.
4271
4272If you are using the installed system libunwind library with
4273@option{--with-system-libunwind}, then you must use libunwind 0.98 or
4274later.
4275
4276@html
4277<hr />
4278@end html
4279@anchor{ia64-x-hpux}
4280@heading ia64-*-hpux*
4281Building GCC on this target requires the GNU Assembler. The bundled HP
4282assembler will not work. To prevent GCC from using the wrong assembler,
4283the option @option{--with-gnu-as} may be necessary.
4284
4285The GCC libunwind library has not been ported to HPUX@. This means that for
4286GCC versions 3.2.3 and earlier, @option{--enable-libunwind-exceptions}
4287is required to build GCC@. For GCC 3.3 and later, this is the default.
4288For gcc 3.4.3 and later, @option{--enable-libunwind-exceptions} is
4289removed and the system libunwind library will always be used.
4290
4291@html
4292<hr />
4293<!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
4294@end html
4295@anchor{x-ibm-aix}
4296@heading *-ibm-aix*
4297Support for AIX version 3 and older was discontinued in GCC 3.4.
4298Support for AIX version 4.2 and older was discontinued in GCC 4.5.
4299
4300``out of memory'' bootstrap failures may indicate a problem with
4301process resource limits (ulimit). Hard limits are configured in the
4302@file{/etc/security/limits} system configuration file.
4303
4304GCC 4.9 and above require a C++ compiler for bootstrap. IBM VAC++ / xlC
4305cannot bootstrap GCC. xlc can bootstrap an older version of GCC and
4306G++ can bootstrap recent releases of GCC.
4307
4308GCC can bootstrap with recent versions of IBM XLC, but bootstrapping
4309with an earlier release of GCC is recommended. Bootstrapping with XLC
4310requires a larger data segment, which can be enabled through the
4311@var{LDR_CNTRL} environment variable, e.g.,
4312
4313@smallexample
4314% LDR_CNTRL=MAXDATA=0x50000000
4315% export LDR_CNTRL
4316@end smallexample
4317
4318One can start with a pre-compiled version of GCC to build from
4319sources. One may delete GCC's ``fixed'' header files when starting
4320with a version of GCC built for an earlier release of AIX.
4321
4322To speed up the configuration phases of bootstrapping and installing GCC,
4323one may use GNU Bash instead of AIX @command{/bin/sh}, e.g.,
4324
4325@smallexample
4326% CONFIG_SHELL=/opt/freeware/bin/bash
4327% export CONFIG_SHELL
4328@end smallexample
4329
4330and then proceed as described in @uref{build.html,,the build
4331instructions}, where we strongly recommend specifying an absolute path
4332to invoke @var{srcdir}/configure.
4333
4334Because GCC on AIX is built as a 32-bit executable by default,
4335(although it can generate 64-bit programs) the GMP and MPFR libraries
4336required by gfortran must be 32-bit libraries. Building GMP and MPFR
4337as static archive libraries works better than shared libraries.
4338
4339Errors involving @code{alloca} when building GCC generally are due
4340to an incorrect definition of @code{CC} in the Makefile or mixing files
4341compiled with the native C compiler and GCC@. During the stage1 phase of
4342the build, the native AIX compiler @strong{must} be invoked as @command{cc}
4343(not @command{xlc}). Once @command{configure} has been informed of
4344@command{xlc}, one needs to use @samp{make distclean} to remove the
4345configure cache files and ensure that @env{CC} environment variable
4346does not provide a definition that will confuse @command{configure}.
4347If this error occurs during stage2 or later, then the problem most likely
4348is the version of Make (see above).
4349
4350The native @command{as} and @command{ld} are recommended for
4351bootstrapping on AIX@. The GNU Assembler, GNU Linker, and GNU
4352Binutils version 2.20 is the minimum level that supports bootstrap on
4353AIX 5@. The GNU Assembler has not been updated to support AIX 6@ or
4354AIX 7. The native AIX tools do interoperate with GCC@.
4355
4356AIX 7.1 added partial support for DWARF debugging, but full support
4357requires AIX 7.1 TL03 SP7 that supports additional DWARF sections and
4358fixes a bug in the assembler. AIX 7.1 TL03 SP5 distributed a version
4359of libm.a missing important symbols; a fix for IV77796 will be
4360included in SP6.
4361
4362AIX 5.3 TL10, AIX 6.1 TL05 and AIX 7.1 TL00 introduced an AIX
4363assembler change that sometimes produces corrupt assembly files
4364causing AIX linker errors. The bug breaks GCC bootstrap on AIX and
4365can cause compilation failures with existing GCC installations. An
4366AIX iFix for AIX 5.3 is available (APAR IZ98385 for AIX 5.3 TL10, APAR
4367IZ98477 for AIX 5.3 TL11 and IZ98134 for AIX 5.3 TL12). AIX 5.3 TL11 SP8,
4368AIX 5.3 TL12 SP5, AIX 6.1 TL04 SP11, AIX 6.1 TL05 SP7, AIX 6.1 TL06 SP6,
4369AIX 6.1 TL07 and AIX 7.1 TL01 should include the fix.
4370
4371Building @file{libstdc++.a} requires a fix for an AIX Assembler bug
4372APAR IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1). It also requires a
4373fix for another AIX Assembler bug and a co-dependent AIX Archiver fix
4374referenced as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)
4375
4376@anchor{TransferAixShobj}
4377@samp{libstdc++} in GCC 3.4 increments the major version number of the
4378shared object and GCC installation places the @file{libstdc++.a}
4379shared library in a common location which will overwrite the and GCC
43803.3 version of the shared library. Applications either need to be
4381re-linked against the new shared library or the GCC 3.1 and GCC 3.3
4382versions of the @samp{libstdc++} shared object needs to be available
4383to the AIX runtime loader. The GCC 3.1 @samp{libstdc++.so.4}, if
4384present, and GCC 3.3 @samp{libstdc++.so.5} shared objects can be
4385installed for runtime dynamic loading using the following steps to set
4386the @samp{F_LOADONLY} flag in the shared object for @emph{each}
4387multilib @file{libstdc++.a} installed:
4388
4389Extract the shared objects from the currently installed
4390@file{libstdc++.a} archive:
4391@smallexample
4392% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
4393@end smallexample
4394
4395Enable the @samp{F_LOADONLY} flag so that the shared object will be
4396available for runtime dynamic loading, but not linking:
4397@smallexample
4398% strip -e libstdc++.so.4 libstdc++.so.5
4399@end smallexample
4400
4401Archive the runtime-only shared object in the GCC 3.4
4402@file{libstdc++.a} archive:
4403@smallexample
4404% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
4405@end smallexample
4406
4407Eventually, the
4408@uref{./configure.html#WithAixSoname,,@option{--with-aix-soname=svr4}}
4409configure option may drop the need for this procedure for libraries that
4410support it.
4411
4412Linking executables and shared libraries may produce warnings of
4413duplicate symbols. The assembly files generated by GCC for AIX always
4414have included multiple symbol definitions for certain global variable
4415and function declarations in the original program. The warnings should
4416not prevent the linker from producing a correct library or runnable
4417executable.
4418
4419AIX 4.3 utilizes a ``large format'' archive to support both 32-bit and
442064-bit object modules. The routines provided in AIX 4.3.0 and AIX 4.3.1
4421to parse archive libraries did not handle the new format correctly.
4422These routines are used by GCC and result in error messages during
4423linking such as ``not a COFF file''. The version of the routines shipped
4424with AIX 4.3.1 should work for a 32-bit environment. The @option{-g}
4425option of the archive command may be used to create archives of 32-bit
4426objects using the original ``small format''. A correct version of the
4427routines is shipped with AIX 4.3.2 and above.
4428
4429Some versions of the AIX binder (linker) can fail with a relocation
4430overflow severe error when the @option{-bbigtoc} option is used to link
4431GCC-produced object files into an executable that overflows the TOC@. A fix
4432for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is
4433available from IBM Customer Support and from its
4434@uref{https://techsupport.services.ibm.com/,,techsupport.services.ibm.com}
4435website as PTF U455193.
4436
4437The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core
4438with a segmentation fault when invoked by any version of GCC@. A fix for
4439APAR IX87327 is available from IBM Customer Support and from its
4440@uref{https://techsupport.services.ibm.com/,,techsupport.services.ibm.com}
4441website as PTF U461879. This fix is incorporated in AIX 4.3.3 and above.
4442
4443The initial assembler shipped with AIX 4.3.0 generates incorrect object
4444files. A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS
4445TO ASSEMBLE/BIND) is available from IBM Customer Support and from its
4446@uref{https://techsupport.services.ibm.com/,,techsupport.services.ibm.com}
4447website as PTF U453956. This fix is incorporated in AIX 4.3.1 and above.
4448
4449AIX provides National Language Support (NLS)@. Compilers and assemblers
4450use NLS to support locale-specific representations of various data
4451formats including floating-point numbers (e.g., @samp{.} vs @samp{,} for
4452separating decimal fractions). There have been problems reported where
4453GCC does not produce the same floating-point formats that the assembler
4454expects. If one encounters this problem, set the @env{LANG}
4455environment variable to @samp{C} or @samp{En_US}.
4456
4457A default can be specified with the @option{-mcpu=@var{cpu_type}}
4458switch and using the configure option @option{--with-cpu-@var{cpu_type}}.
4459
4460@html
4461<hr />
4462@end html
4463@anchor{iq2000-x-elf}
4464@heading iq2000-*-elf
4465Vitesse IQ2000 processors. These are used in embedded
4466applications. There are no standard Unix configurations.
4467
4468@html
4469<hr />
4470@end html
4471@anchor{lm32-x-elf}
4472@heading lm32-*-elf
4473Lattice Mico32 processor.
4474This configuration is intended for embedded systems.
4475
4476@html
4477<hr />
4478@end html
4479@anchor{lm32-x-uclinux}
4480@heading lm32-*-uclinux
4481Lattice Mico32 processor.
4482This configuration is intended for embedded systems running uClinux.
4483
4484@html
4485<hr />
4486@end html
4487@anchor{loongarch}
4488@heading LoongArch
4489LoongArch processor.
4490The following LoongArch targets are available:
4491@table @code
4492@item loongarch64-linux-gnu*
4493LoongArch processor running GNU/Linux. This target triplet may be coupled
4494with a small set of possible suffixes to identify their default ABI type:
4495@table @code
4496@item f64
4497Uses @code{lp64d/base} ABI by default.
4498@item f32
4499Uses @code{lp64f/base} ABI by default.
4500@item sf
4501Uses @code{lp64s/base} ABI by default.
4502@end table
4503
4504@item loongarch64-linux-gnu
4505Same as @code{loongarch64-linux-gnuf64}, but may be used with
4506@option{--with-abi=*} to configure the default ABI type.
4507@end table
4508
4509More information about LoongArch can be found at
4510@uref{https://github.com/loongson/LoongArch-Documentation}.
4511
4512@html
4513<hr />
4514@end html
4515@anchor{m32c-x-elf}
4516@heading m32c-*-elf
4517Renesas M32C processor.
4518This configuration is intended for embedded systems.
4519
4520@html
4521<hr />
4522@end html
4523@anchor{m32r-x-elf}
4524@heading m32r-*-elf
4525Renesas M32R processor.
4526This configuration is intended for embedded systems.
4527
4528@html
4529<hr />
4530@end html
4531@anchor{m68k-x-x}
4532@heading m68k-*-*
4533By default,
4534@samp{m68k-*-elf*}, @samp{m68k-*-rtems}, @samp{m68k-*-uclinux} and
4535@samp{m68k-*-linux}
4536build libraries for both M680x0 and ColdFire processors. If you only
4537need the M680x0 libraries, you can omit the ColdFire ones by passing
4538@option{--with-arch=m68k} to @command{configure}. Alternatively, you
4539can omit the M680x0 libraries by passing @option{--with-arch=cf} to
4540@command{configure}. These targets default to 5206 or 5475 code as
4541appropriate for the target system when
4542configured with @option{--with-arch=cf} and 68020 code otherwise.
4543
4544The @samp{m68k-*-netbsd} and
4545@samp{m68k-*-openbsd} targets also support the @option{--with-arch}
4546option. They will generate ColdFire CFV4e code when configured with
4547@option{--with-arch=cf} and 68020 code otherwise.
4548
4549You can override the default processors listed above by configuring
4550with @option{--with-cpu=@var{target}}. This @var{target} can either
4551be a @option{-mcpu} argument or one of the following values:
4552@samp{m68000}, @samp{m68010}, @samp{m68020}, @samp{m68030},
4553@samp{m68040}, @samp{m68060}, @samp{m68020-40} and @samp{m68020-60}.
4554
4555GCC requires at least binutils version 2.17 on these targets.
4556
4557@html
4558<hr />
4559@end html
4560@anchor{m68k-x-uclinux}
4561@heading m68k-*-uclinux
4562GCC 4.3 changed the uClinux configuration so that it uses the
4563@samp{m68k-linux-gnu} ABI rather than the @samp{m68k-elf} ABI.
4564It also added improved support for C++ and flat shared libraries,
4565both of which were ABI changes.
4566
4567@html
4568<hr />
4569@end html
4570@anchor{microblaze-x-elf}
4571@heading microblaze-*-elf
4572Xilinx MicroBlaze processor.
4573This configuration is intended for embedded systems.
4574
4575@html
4576<hr />
4577@end html
4578@anchor{mips-x-x}
4579@heading mips-*-*
4580If on a MIPS system you get an error message saying ``does not have gp
4581sections for all it's [sic] sectons [sic]'', don't worry about it. This
4582happens whenever you use GAS with the MIPS linker, but there is not
4583really anything wrong, and it is okay to use the output file. You can
4584stop such warnings by installing the GNU linker.
4585
4586It would be nice to extend GAS to produce the gp tables, but they are
4587optional, and there should not be a warning about their absence.
4588
4589The libstdc++ atomic locking routines for MIPS targets requires MIPS II
4590and later. A patch went in just after the GCC 3.3 release to
4591make @samp{mips*-*-*} use the generic implementation instead. You can also
4592configure for @samp{mipsel-elf} as a workaround. The
4593@samp{mips*-*-linux*} target continues to use the MIPS II routines. More
4594work on this is expected in future releases.
4595
4596@c If you make --with-llsc the default for another target, please also
4597@c update the description of the --with-llsc option.
4598
4599The built-in @code{__sync_*} functions are available on MIPS II and
4600later systems and others that support the @samp{ll}, @samp{sc} and
4601@samp{sync} instructions. This can be overridden by passing
4602@option{--with-llsc} or @option{--without-llsc} when configuring GCC.
4603Since the Linux kernel emulates these instructions if they are
4604missing, the default for @samp{mips*-*-linux*} targets is
4605@option{--with-llsc}. The @option{--with-llsc} and
4606@option{--without-llsc} configure options may be overridden at compile
4607time by passing the @option{-mllsc} or @option{-mno-llsc} options to
4608the compiler.
4609
4610MIPS systems check for division by zero (unless
4611@option{-mno-check-zero-division} is passed to the compiler) by
4612generating either a conditional trap or a break instruction. Using
4613trap results in smaller code, but is only supported on MIPS II and
4614later. Also, some versions of the Linux kernel have a bug that
4615prevents trap from generating the proper signal (@code{SIGFPE}). To enable
4616the use of break, use the @option{--with-divide=breaks}
4617@command{configure} option when configuring GCC@. The default is to
4618use traps on systems that support them.
4619
4620@html
4621<hr />
4622@end html
4623@anchor{moxie-x-elf}
4624@heading moxie-*-elf
4625The moxie processor.
4626
4627@html
4628<hr />
4629@end html
4630@anchor{msp430-x-elf}
4631@heading msp430-*-elf*
4632TI MSP430 processor.
4633This configuration is intended for embedded systems.
4634
4635@samp{msp430-*-elf} is the standard configuration with most GCC
4636features enabled by default.
4637
4638@samp{msp430-*-elfbare} is tuned for a bare-metal environment, and disables
4639features related to shared libraries and other functionality not used for
4640this device. This reduces code and data usage of the GCC libraries, resulting
4641in a minimal run-time environment by default.
4642
4643Features disabled by default include:
4644@itemize
4645@item transactional memory
4646@item __cxa_atexit
4647@end itemize
4648
4649@html
4650<hr />
4651@end html
4652@anchor{nds32le-x-elf}
4653@heading nds32le-*-elf
4654Andes NDS32 target in little endian mode.
4655
4656@html
4657<hr />
4658@end html
4659@anchor{nds32be-x-elf}
4660@heading nds32be-*-elf
4661Andes NDS32 target in big endian mode.
4662
4663@html
4664<hr />
4665@end html
4666@anchor{nvptx-x-none}
4667@heading nvptx-*-none
4668Nvidia PTX target.
4669
4670Instead of GNU binutils, you will need to install
4671@uref{https://github.com/MentorEmbedded/nvptx-tools/,,nvptx-tools}.
4672Tell GCC where to find it:
4673@option{--with-build-time-tools=[install-nvptx-tools]/nvptx-none/bin}.
4674
4675You will need newlib 3.1.0 or later. It can be
4676automatically built together with GCC@. For this, add a symbolic link
4677to nvptx-newlib's @file{newlib} directory to the directory containing
4678the GCC sources.
4679
4680Use the @option{--disable-sjlj-exceptions} and
4681@option{--enable-newlib-io-long-long} options when configuring.
4682
4683The @option{--with-arch} option may be specified to override the
4684default value for the @option{-march} option, and to also build
4685corresponding target libraries.
4686The default is @option{--with-arch=sm_30}.
4687
4688For example, if @option{--with-arch=sm_70} is specified,
4689@option{-march=sm_30} and @option{-march=sm_70} target libraries are
4690built, and code generation defaults to @option{-march=sm_70}.
4691
4692@html
4693<hr />
4694@end html
4695@anchor{or1k-x-elf}
4696@heading or1k-*-elf
4697The OpenRISC 1000 32-bit processor with delay slots.
4698This configuration is intended for embedded systems.
4699
4700@html
4701<hr />
4702@end html
4703@anchor{or1k-x-linux}
4704@heading or1k-*-linux
4705The OpenRISC 1000 32-bit processor with delay slots.
4706
4707@html
4708<hr />
4709@end html
4710@anchor{powerpc-x-x}
4711@heading powerpc-*-*
4712You can specify a default version for the @option{-mcpu=@var{cpu_type}}
4713switch by using the configure option @option{--with-cpu-@var{cpu_type}}.
4714
4715You will need GNU binutils 2.20 or newer.
4716
4717@html
4718<hr />
4719@end html
4720@anchor{powerpc-x-darwin}
4721@heading powerpc-*-darwin*
4722PowerPC running Darwin (Mac OS X kernel).
4723
4724Pre-installed versions of Mac OS X may not include any developer tools,
4725meaning that you will not be able to build GCC from source. Tool
4726binaries are available at
4727@uref{https://opensource.apple.com}.
4728
4729This version of GCC requires at least cctools-590.36. The
4730cctools-590.36 package referenced from
4731@uref{https://gcc.gnu.org/ml/gcc/2006-03/msg00507.html} will not work
4732on systems older than 10.3.9 (aka darwin7.9.0).
4733
4734@html
4735<hr />
4736@end html
4737@anchor{powerpc-x-elf}
4738@heading powerpc-*-elf
4739PowerPC system in big endian mode, running System V.4.
4740
4741@html
4742<hr />
4743@end html
4744@anchor{powerpc-x-linux-gnu}
4745@heading powerpc*-*-linux-gnu*
4746PowerPC system in big endian mode running Linux.
4747
4748@html
4749<hr />
4750@end html
4751@anchor{powerpc-x-netbsd}
4752@heading powerpc-*-netbsd*
4753PowerPC system in big endian mode running NetBSD@.
4754
4755@html
4756<hr />
4757@end html
4758@anchor{powerpc-x-eabisim}
4759@heading powerpc-*-eabisim
4760Embedded PowerPC system in big endian mode for use in running under the
4761PSIM simulator.
4762
4763@html
4764<hr />
4765@end html
4766@anchor{powerpc-x-eabi}
4767@heading powerpc-*-eabi
4768Embedded PowerPC system in big endian mode.
4769
4770@html
4771<hr />
4772@end html
4773@anchor{powerpcle-x-elf}
4774@heading powerpcle-*-elf
4775PowerPC system in little endian mode, running System V.4.
4776
4777@html
4778<hr />
4779@end html
4780@anchor{powerpcle-x-eabisim}
4781@heading powerpcle-*-eabisim
4782Embedded PowerPC system in little endian mode for use in running under
4783the PSIM simulator.
4784
4785@html
4786<hr />
4787@end html
4788@anchor{powerpcle-x-eabi}
4789@heading powerpcle-*-eabi
4790Embedded PowerPC system in little endian mode.
4791
4792@html
4793<hr />
4794@end html
4795@anchor{rl78-x-elf}
4796@heading rl78-*-elf
4797The Renesas RL78 processor.
4798This configuration is intended for embedded systems.
4799
4800@html
4801<hr />
4802@end html
4803@anchor{riscv32-x-elf}
4804@heading riscv32-*-elf
4805The RISC-V RV32 instruction set.
4806This configuration is intended for embedded systems.
4807This (and all other RISC-V) targets require the binutils 2.30 release.
4808
4809@html
4810<hr />
4811@end html
4812@anchor{riscv32-x-linux}
4813@heading riscv32-*-linux
4814The RISC-V RV32 instruction set running GNU/Linux.
4815This (and all other RISC-V) targets require the binutils 2.30 release.
4816
4817@html
4818<hr />
4819@end html
4820@anchor{riscv64-x-elf}
4821@heading riscv64-*-elf
4822The RISC-V RV64 instruction set.
4823This configuration is intended for embedded systems.
4824This (and all other RISC-V) targets require the binutils 2.30 release.
4825
4826@html
4827<hr />
4828@end html
4829@anchor{riscv64-x-linux}
4830@heading riscv64-*-linux
4831The RISC-V RV64 instruction set running GNU/Linux.
4832This (and all other RISC-V) targets require the binutils 2.30 release.
4833
4834@html
4835<hr />
4836@end html
4837@anchor{rx-x-elf}
4838@heading rx-*-elf
4839The Renesas RX processor.
4840
4841@html
4842<hr />
4843@end html
4844@anchor{s390-x-linux}
4845@heading s390-*-linux*
4846S/390 system running GNU/Linux for S/390@.
4847
4848@html
4849<hr />
4850@end html
4851@anchor{s390x-x-linux}
4852@heading s390x-*-linux*
4853zSeries system (64-bit) running GNU/Linux for zSeries@.
4854
4855@html
4856<hr />
4857@end html
4858@anchor{s390x-ibm-tpf}
4859@heading s390x-ibm-tpf*
4860zSeries system (64-bit) running TPF@. This platform is
4861supported as cross-compilation target only.
4862
4863@html
4864<hr />
4865@end html
4866@c Please use Solaris 2 to refer to all release of Solaris, starting
4867@c with 2.0 until 2.6, 7, 8, etc. Solaris 1 was a marketing name for
4868@c SunOS 4 releases which we don't use to avoid confusion. Solaris
4869@c alone is too unspecific and must be avoided.
4870@anchor{x-x-solaris2}
4871@heading *-*-solaris2*
fd69977f
RO
4872Support for Solaris 11.3 and earlier has been obsoleted in GCC 13, but
4873can still be enabled by configuring with @option{--enable-obsolete}.
d77de738
ML
4874Support for Solaris 10 has been removed in GCC 10. Support for Solaris
48759 has been removed in GCC 5. Support for Solaris 8 has been removed in
4876GCC 4.8. Support for Solaris 7 has been removed in GCC 4.6.
4877
4878Solaris 11.3 provides GCC 4.5.2, 4.7.3, and 4.8.2 as
4879@command{/usr/gcc/4.5/bin/gcc} or similar. Newer Solaris versions
4880provide one or more of GCC 5, 7, and 9. Alternatively,
4881you can install a pre-built GCC to bootstrap and install GCC. See the
4882@uref{binaries.html,,binaries page} for details.
4883
4884The Solaris 2 @command{/bin/sh} will often fail to configure
4885@samp{libstdc++-v3}. We therefore recommend using the
4886following initial sequence of commands
4887
4888@smallexample
4889% CONFIG_SHELL=/bin/ksh
4890% export CONFIG_SHELL
4891@end smallexample
4892
4893@noindent
4894and proceed as described in @uref{configure.html,,the configure instructions}.
4895In addition we strongly recommend specifying an absolute path to invoke
4896@command{@var{srcdir}/configure}.
4897
4898In Solaris 11, you need to check for @code{system/header},
4899@code{system/linker}, and @code{developer/assembler} packages.
4900
4901Trying to use the linker and other tools in
4902@file{/usr/ucb} to install GCC has been observed to cause trouble.
4903For example, the linker may hang indefinitely. The fix is to remove
4904@file{/usr/ucb} from your @env{PATH}.
4905
4906The build process works more smoothly with the legacy Solaris tools so, if you
4907have @file{/usr/xpg4/bin} in your @env{PATH}, we recommend that you place
4908@file{/usr/bin} before @file{/usr/xpg4/bin} for the duration of the build.
4909
4910We recommend the use of the Solaris assembler or the GNU assembler, in
4911conjunction with the Solaris linker. The GNU @command{as}
4912versions included in Solaris 11.3,
4913from GNU binutils 2.23.1 or newer (in @file{/usr/bin/gas} and
4914@file{/usr/gnu/bin/as}), are known to work.
4915The current version, from GNU binutils 2.34,
4916is known to work as well. Note that your mileage may vary
4917if you use a combination of the GNU tools and the Solaris tools: while the
4918combination GNU @command{as} + Solaris @command{ld} should reasonably work,
4919the reverse combination Solaris @command{as} + GNU @command{ld} may fail to
4920build or cause memory corruption at runtime in some cases for C++ programs.
4921@c FIXME: still?
4922GNU @command{ld} usually works as well. Again, the current
4923version (2.34) is known to work, but generally lacks platform specific
4924features, so better stay with Solaris @command{ld}. To use the LTO linker
4925plugin (@option{-fuse-linker-plugin}) with GNU @command{ld}, GNU
4926binutils @emph{must} be configured with @option{--enable-largefile}.
4927
4928To enable symbol versioning in @samp{libstdc++} with the Solaris linker,
4929you need to have any version of GNU @command{c++filt}, which is part of
4930GNU binutils. @samp{libstdc++} symbol versioning will be disabled if no
4931appropriate version is found. Solaris @command{c++filt} from the Solaris
4932Studio compilers does @emph{not} work.
4933
4934In order to build the GNU D compiler, GDC, a working @samp{libphobos} is
4935needed. That library wasn't built by default in GCC 9--11 on SPARC, or
4936on x86 when the Solaris assembler is used, but can be enabled by
4937configuring with @option{--enable-libphobos}. Also, GDC 9.4.0 is
4938required on x86, while GDC 9.3.0 is known to work on SPARC.
4939
4940The versions of the GNU Multiple Precision Library (GMP), the MPFR
4941library and the MPC library bundled with Solaris 11.3 and later are
4942usually recent enough to match GCC's requirements. There are two
4943caveats:
4944
4945@itemize @bullet
4946@item
4947While the version of the GMP library in Solaris 11.3 works with GCC, you
4948need to configure with @option{--with-gmp-include=/usr/include/gmp}.
4949
4950@item
4951The version of the MPFR libary included in Solaris 11.3 is too old; you
4952need to provide a more recent one.
4953
4954@end itemize
4955
4956@html
4957<hr />
4958@end html
4959@anchor{sparc-x-x}
4960@heading sparc*-*-*
4961This section contains general configuration information for all
4962SPARC-based platforms. In addition to reading this section, please
4963read all other sections that match your target.
4964
4965Newer versions of the GNU Multiple Precision Library (GMP), the MPFR
4966library and the MPC library are known to be miscompiled by earlier
4967versions of GCC on these platforms. We therefore recommend the use
4968of the exact versions of these libraries listed as minimal versions
4969in @uref{prerequisites.html,,the prerequisites}.
4970
4971@html
4972<hr />
4973@end html
4974@anchor{sparc-sun-solaris2}
4975@heading sparc-sun-solaris2*
4976When GCC is configured to use GNU binutils 2.14 or later, the binaries
4977produced are smaller than the ones produced using Solaris native tools;
4978this difference is quite significant for binaries containing debugging
4979information.
4980
4981Starting with Solaris 7, the operating system is capable of executing
498264-bit SPARC V9 binaries. GCC 3.1 and later properly supports
4983this; the @option{-m64} option enables 64-bit code generation.
4984However, if all you want is code tuned for the UltraSPARC CPU, you
4985should try the @option{-mtune=ultrasparc} option instead, which produces
4986code that, unlike full 64-bit code, can still run on non-UltraSPARC
4987machines.
4988
4989When configuring the GNU Multiple Precision Library (GMP), the MPFR
4990library or the MPC library on a Solaris 7 or later system, the canonical
4991target triplet must be specified as the @command{build} parameter on the
4992configure line. This target triplet can be obtained by invoking @command{./config.guess} in the toplevel source directory of GCC (and
4993not that of GMP or MPFR or MPC). For example on a Solaris 11 system:
4994
4995@smallexample
4996% ./configure --build=sparc-sun-solaris2.11 --prefix=xxx
4997@end smallexample
4998
4999@html
5000<hr />
5001@end html
5002@anchor{sparc-x-linux}
5003@heading sparc-*-linux*
5004
5005@html
5006<hr />
5007@end html
5008@anchor{sparc64-x-solaris2}
5009@heading sparc64-*-solaris2*
5010When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a
5011build compiler that generates 64-bit code, either by default or by
5012specifying @samp{CC='gcc -m64' CXX='gcc-m64'} to @command{configure}.
5013Additionally, you @emph{must} pass @option{--build=sparc64-sun-solaris2.11}
5014or @option{--build=sparcv9-sun-solaris2.11} because @file{config.guess}
5015misdetects this situation, which can cause build failures.
5016
5017When configuring the GNU Multiple Precision Library (GMP), the MPFR
5018library or the MPC library, the canonical target triplet must be specified
5019as the @command{build} parameter on the configure line. For example
5020on a Solaris 11 system:
5021
5022@smallexample
5023% ./configure --build=sparc64-sun-solaris2.11 --prefix=xxx
5024@end smallexample
5025
5026@html
5027<hr />
5028@end html
5029@anchor{sparcv9-x-solaris2}
5030@heading sparcv9-*-solaris2*
5031This is a synonym for @samp{sparc64-*-solaris2*}.
5032
5033@html
5034<hr />
5035@end html
5036@anchor{c6x-x-x}
5037@heading c6x-*-*
5038The C6X family of processors. This port requires binutils-2.22 or newer.
5039
5040@html
5041<hr />
5042@end html
5043@anchor{visium-x-elf}
5044@heading visium-*-elf
5045CDS VISIUMcore processor.
5046This configuration is intended for embedded systems.
5047
5048@html
5049<hr />
5050@end html
5051@anchor{x-x-vxworks}
5052@heading *-*-vxworks*
5053Support for VxWorks is in flux. At present GCC supports @emph{only} the
5054very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC@.
5055We welcome patches for other architectures supported by VxWorks 5.5.
5056Support for VxWorks AE would also be welcome; we believe this is merely
5057a matter of writing an appropriate ``configlette'' (see below). We are
5058not interested in supporting older, a.out or COFF-based, versions of
5059VxWorks in GCC 3.
5060
5061VxWorks comes with an older version of GCC installed in
5062@file{@var{$WIND_BASE}/host}; we recommend you do not overwrite it.
5063Choose an installation @var{prefix} entirely outside @var{$WIND_BASE}.
5064Before running @command{configure}, create the directories @file{@var{prefix}}
5065and @file{@var{prefix}/bin}. Link or copy the appropriate assembler,
5066linker, etc.@: into @file{@var{prefix}/bin}, and set your @var{PATH} to
5067include that directory while running both @command{configure} and
5068@command{make}.
5069
5070You must give @command{configure} the
5071@option{--with-headers=@var{$WIND_BASE}/target/h} switch so that it can
5072find the VxWorks system headers. Since VxWorks is a cross compilation
5073target only, you must also specify @option{--target=@var{target}}.
5074@command{configure} will attempt to create the directory
5075@file{@var{prefix}/@var{target}/sys-include} and copy files into it;
5076make sure the user running @command{configure} has sufficient privilege
5077to do so.
5078
5079GCC's exception handling runtime requires a special ``configlette''
5080module, @file{contrib/gthr_supp_vxw_5x.c}. Follow the instructions in
5081that file to add the module to your kernel build. (Future versions of
5082VxWorks will incorporate this module.)
5083
5084@html
5085<hr />
5086@end html
5087@anchor{x86-64-x-x}
5088@heading x86_64-*-*, amd64-*-*
5089GCC supports the x86-64 architecture implemented by the AMD64 processor
5090(amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD@.
5091On GNU/Linux the default is a bi-arch compiler which is able to generate
5092both 64-bit x86-64 and 32-bit x86 code (via the @option{-m32} switch).
5093
5094@html
5095<hr />
5096@end html
5097@anchor{x86-64-x-solaris2}
5098@heading x86_64-*-solaris2*
5099GCC also supports the x86-64 architecture implemented by the AMD64
5100processor (@samp{amd64-*-*} is an alias for @samp{x86_64-*-*}) on
5101Solaris 10 or later. Unlike other systems, without special options a
5102bi-arch compiler is built which generates 32-bit code by default, but
5103can generate 64-bit x86-64 code with the @option{-m64} switch. Since
5104GCC 4.7, there is also a configuration that defaults to 64-bit code, but
5105can generate 32-bit code with @option{-m32}. To configure and build
5106this way, you have to provide all support libraries like @file{libgmp}
5107as 64-bit code, configure with @option{--target=x86_64-pc-solaris2.11}
5108and @samp{CC=gcc -m64}.
5109
5110@html
5111<hr />
5112@end html
5113@anchor{xtensa-x-elf}
5114@heading xtensa*-*-elf
5115This target is intended for embedded Xtensa systems using the
5116@samp{newlib} C library. It uses ELF but does not support shared
5117objects. Designed-defined instructions specified via the
5118Tensilica Instruction Extension (TIE) language are only supported
5119through inline assembly.
5120
5121The Xtensa configuration information must be specified prior to
5122building GCC@. The @file{include/xtensa-config.h} header
5123file contains the configuration information. If you created your
5124own Xtensa configuration with the Xtensa Processor Generator, the
5125downloaded files include a customized copy of this header file,
5126which you can use to replace the default header file.
5127
5128@html
5129<hr />
5130@end html
5131@anchor{xtensa-x-linux}
5132@heading xtensa*-*-linux*
5133This target is for Xtensa systems running GNU/Linux. It supports ELF
5134shared objects and the GNU C library (glibc). It also generates
5135position-independent code (PIC) regardless of whether the
5136@option{-fpic} or @option{-fPIC} options are used. In other
5137respects, this target is the same as the
5138@uref{#xtensa*-*-elf,,@samp{xtensa*-*-elf}} target.
5139
5140@html
5141<hr />
5142@end html
5143@anchor{windows}
5144@heading Microsoft Windows
5145
5146@subheading Intel 16-bit versions
5147The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not
5148supported.
5149
5150However, the 32-bit port has limited support for Microsoft
5151Windows 3.11 in the Win32s environment, as a target only. See below.
5152
5153@subheading Intel 32-bit versions
5154The 32-bit versions of Windows, including Windows 95, Windows NT, Windows
5155XP, and Windows Vista, are supported by several different target
5156platforms. These targets differ in which Windows subsystem they target
5157and which C libraries are used.
5158
5159@itemize
5160@item Cygwin @uref{#x-x-cygwin,,*-*-cygwin}: Cygwin provides a user-space
5161Linux API emulation layer in the Win32 subsystem.
5162@item MinGW @uref{#x-x-mingw32,,*-*-mingw32}: MinGW is a native GCC port for
5163the Win32 subsystem that provides a subset of POSIX.
5164@item MKS i386-pc-mks: NuTCracker from MKS. See
5165@uref{https://www.mkssoftware.com} for more information.
5166@end itemize
5167
5168@subheading Intel 64-bit versions
5169GCC contains support for x86-64 using the mingw-w64
5170runtime library, available from @uref{https://www.mingw-w64.org/downloads/}.
5171This library should be used with the target triple x86_64-pc-mingw32.
5172
5173@subheading Windows CE
5174Windows CE is supported as a target only on Hitachi
5175SuperH (sh-wince-pe), and MIPS (mips-wince-pe).
5176
5177@subheading Other Windows Platforms
5178GCC no longer supports Windows NT on the Alpha or PowerPC.
5179
5180GCC no longer supports the Windows POSIX subsystem. However, it does
5181support the Interix subsystem. See above.
5182
5183Old target names including *-*-winnt and *-*-windowsnt are no longer used.
5184
5185PW32 (i386-pc-pw32) support was never completed, and the project seems to
5186be inactive. See @uref{http://pw32.sourceforge.net/} for more information.
5187
5188UWIN support has been removed due to a lack of maintenance.
5189
5190@html
5191<hr />
5192@end html
5193@anchor{x-x-cygwin}
5194@heading *-*-cygwin
5195Ports of GCC are included with the
5196@uref{http://www.cygwin.com/,,Cygwin environment}.
5197
5198GCC will build under Cygwin without modification; it does not build
5199with Microsoft's C++ compiler and there are no plans to make it do so.
5200
5201The Cygwin native compiler can be configured to target any 32-bit x86
5202cpu architecture desired; the default is i686-pc-cygwin. It should be
5203used with as up-to-date a version of binutils as possible; use either
5204the latest official GNU binutils release in the Cygwin distribution,
5205or version 2.20 or above if building your own.
5206
5207@html
5208<hr />
5209@end html
5210@anchor{x-x-mingw32}
5211@heading *-*-mingw32
5212GCC will build with and support only MinGW runtime 3.12 and later.
5213Earlier versions of headers are incompatible with the new default semantics
5214of @code{extern inline} in @code{-std=c99} and @code{-std=gnu99} modes.
5215
5216To support emitting DWARF debugging info you need to use GNU binutils
5217version 2.16 or above containing support for the @code{.secrel32}
5218assembler pseudo-op.
5219
5220@html
5221<hr />
5222@end html
5223@anchor{older}
5224@heading Older systems
5225GCC contains support files for many older (1980s and early
52261990s) Unix variants. For the most part, support for these systems
5227has not been deliberately removed, but it has not been maintained for
5228several years and may suffer from bitrot.
5229
5230Starting with GCC 3.1, each release has a list of ``obsoleted'' systems.
5231Support for these systems is still present in that release, but
5232@command{configure} will fail unless the @option{--enable-obsolete}
5233option is given. Unless a maintainer steps forward, support for these
5234systems will be removed from the next release of GCC@.
5235
5236Support for old systems as hosts for GCC can cause problems if the
5237workarounds for compiler, library and operating system bugs affect the
5238cleanliness or maintainability of the rest of GCC@. In some cases, to
5239bring GCC up on such a system, if still possible with current GCC, may
5240require first installing an old version of GCC which did work on that
5241system, and using it to compile a more recent GCC, to avoid bugs in the
5242vendor compiler. Old releases of GCC 1 and GCC 2 are available in the
5243@file{old-releases} directory on the @uref{../mirrors.html,,GCC mirror
5244sites}. Header bugs may generally be avoided using
5245@command{fixincludes}, but bugs or deficiencies in libraries and the
5246operating system may still cause problems.
5247
5248Support for older systems as targets for cross-compilation is less
5249problematic than support for them as hosts for GCC; if an enthusiast
5250wishes to make such a target work again (including resurrecting any of
5251the targets that never worked with GCC 2, starting from the last
5252version before they were removed), patches
5253@uref{../contribute.html,,following the usual requirements} would be
5254likely to be accepted, since they should not affect the support for more
5255modern targets.
5256
5257For some systems, old versions of GNU binutils may also be useful,
5258and are available from @file{pub/binutils/old-releases} on
5259@uref{https://sourceware.org/mirrors.html,,sourceware.org mirror sites}.
5260
5261Some of the information on specific systems above relates to
5262such older systems, but much of the information
5263about GCC on such systems (which may no longer be applicable to
5264current GCC) is to be found in the GCC texinfo manual.
5265
5266@html
5267<hr />
5268@end html
5269@anchor{elf}
5270@heading all ELF targets (SVR4, Solaris 2, etc.)
5271C++ support is significantly better on ELF targets if you use the
5272@uref{./configure.html#with-gnu-ld,,GNU linker}; duplicate copies of
5273inlines, vtables and template instantiations will be discarded
5274automatically.
5275
5276
5277@html
5278<hr />
5279<p>
5280@end html
5281@ifhtml
5282@uref{./index.html,,Return to the GCC Installation page}
5283@end ifhtml
5284@end ifset
5285
5286@c ***GFDL********************************************************************
5287@ifset gfdlhtml
5288@include fdl.texi
5289@html
5290<hr />
5291<p>
5292@end html
5293@ifhtml
5294@uref{./index.html,,Return to the GCC Installation page}
5295@end ifhtml
5296@end ifset
5297
5298@c ***************************************************************************
5299@c Part 6 The End of the Document
5300@ifinfo
5301@comment node-name, next, previous, up
5302@node Concept Index, , GNU Free Documentation License, Top
5303@end ifinfo
5304
5305@ifinfo
5306@unnumbered Concept Index
5307
5308@printindex cp
5309
5310@contents
5311@end ifinfo
5312@bye