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