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