Necessary to build libgcj, the GCJ runtime.
-@item libelf version 0.8.12 (or later)
-
-Necessary to build link-time optimization (LTO) support. It can be
-downloaded from @uref{http://www.mr511.de/software/libelf-0.8.12.tar.gz},
-though it is commonly available in several systems. The version in
-IRIX 6.5 doesn't work since it lacks @file{gelf.h}. The version in
-Solaris 2 does work.
-
-The @option{--with-libelf} configure option should be used if libelf is
-not installed in your default library search patch.
-
@end table
@heading Tools/packages necessary for modifying GCC
Necessary when targetting Solaris 2 with Sun @command{ld}, building
@samp{libstdc++}, and not using @option{--disable-symvers}. A helper
scripts needs @samp{Glob.pm}, which is missing from @command{perl} 5.005
-included in Solaris~8. The bundled @command{perl} in Solaris~9 and up
+included in Solaris@tie{}8. The bundled @command{perl} in Solaris@tie{}9 and up
works.
Used by various scripts to generate some files included in SVN (mainly
Unicode-related and rarely changing) from source tables.
To configure GCC:
@smallexample
- % mkdir @var{objdir}
- % cd @var{objdir}
- % @var{srcdir}/configure [@var{options}] [@var{target}]
+% mkdir @var{objdir}
+% cd @var{objdir}
+% @var{srcdir}/configure [@var{options}] [@var{target}]
@end smallexample
@heading Distributor options
will be built. Package names currently recognized in the GCC tree are
@samp{libgcc} (also known as @samp{gcc}), @samp{libstdc++} (not
@samp{libstdc++-v3}), @samp{libffi}, @samp{zlib}, @samp{boehm-gc},
-@samp{ada}, @samp{libada}, @samp{libjava} and @samp{libobjc}.
+@samp{ada}, @samp{libada}, @samp{libjava}, @samp{libgo}, and @samp{libobjc}.
Note @samp{libiberty} does not support shared libraries at all.
Use @option{--disable-shared} to build only static libraries. Note that
Specify if the compiler should default to @option{-marm} or @option{-mthumb}.
This option is only supported on ARM targets.
-@item --with-fpmath=sse
-Specify if the compiler should default to @option{-msse2} and
-@option{-mfpmath=sse}. This option is only supported on i386 and
-x86-64 targets.
+@item --with-fpmath=@var{isa}
+This options sets @option{-mfpmath=sse} by default and specifies the default
+ISA for floating-point arithmetics. You can select either @samp{sse} which
+enables @option{-msse2} or @samp{avx} which enables @option{-mavx} by default.
+This option is only supported on i386 and x86-64 targets.
@item --with-divide=@var{type}
Specify how the compiler should generate code for checking for
only available on systems with GNU libc. When enabled, this will cause
@option{-fuse-cxa-atexit} to be passed by default.
+@item --enable-indirect-function
+Define if you want to enable the @code{ifunc} attribute. This option is
+currently only available on systems with GNU libc on certain targets.
+
@item --enable-target-optspace
Specify that target
libraries should be optimized for code space instead of code speed.
grep language= */config-lang.in
@end smallexample
Currently, you can use any of the following:
-@code{all}, @code{ada}, @code{c}, @code{c++}, @code{fortran}, @code{java},
-@code{objc}, @code{obj-c++}.
+@code{all}, @code{ada}, @code{c}, @code{c++}, @code{fortran},
+@code{go}, @code{java}, @code{objc}, @code{obj-c++}.
Building the Ada compiler has special requirements, see below.
If you do not pass this flag, or specify the option @code{all}, then all
default languages available in the @file{gcc} sub-tree will be configured.
-Ada and Objective-C++ are not default languages; the rest are.
-Re-defining @code{LANGUAGES} when calling @samp{make} @strong{does not}
-work anymore, as those language sub-directories might not have been
-configured!
+Ada, Go and Objective-C++ are not default languages; the rest are.
@item --enable-stage1-languages=@var{lang1},@var{lang2},@dots{}
Specify that a particular subset of compilers and their runtime
Specify that the run-time libraries for stack smashing protection
should not be built.
+@item --disable-libquadmath
+Specify that the GCC quad-precision math library should not be built.
+On some systems, the library is required to be linkable when building
+the Fortran front end, unless @option{--disable-libquadmath-support}
+is used.
+
+@item --disable-libquadmath-support
+Specify that the Fortran front end and @code{libgfortran} do not add
+support for @code{libquadmath} on systems supporting it.
+
@item --disable-libgomp
Specify that the run-time libraries used by GOMP should not be built.
@option{--with-mpc-lib=@var{mpcinstalldir}/lib} and
@option{--with-mpc-include=@var{mpcinstalldir}/include}. If these
shorthand assumptions are not correct, you can use the explicit
-include and lib options directly.
+include and lib options directly. You might also need to ensure the
+shared libraries can be found by the dynamic linker when building and
+using GCC, for example by setting the runtime shared library path
+variable (@env{LD_LIBRARY_PATH} on GNU/Linux and Solaris systems).
@item --with-ppl=@var{pathname}
@itemx --with-ppl-include=@var{pathname}
@item --with-boot-ldflags=@var{flags}
This option may be used to set linker flags to be used when linking
-stage 2 and later when bootstrapping GCC. By default no special flags
-are used.
+stage 2 and later when bootstrapping GCC. If neither --with-boot-libs
+nor --with-host-libstdcxx is set to a value, then the default is
+@samp{-static-libstdc++ -static-libgcc}.
@item --with-boot-libs=@var{libs}
This option may be used to set libraries to be used when linking stage 2
GLIBC 2.11 or above, otherwise disabled.
@item --enable-lto
+@itemx --disable-lto
Enable support for link-time optimization (LTO). This is enabled by
-default if a working libelf implementation is found (see
-@option{--with-libelf}).
-
-@item --with-libelf=@var{pathname}
-@itemx --with-libelf-include=@var{pathname}
-@itemx --with-libelf-lib=@var{pathname}
-If you do not have libelf installed in a standard location and you
-want to enable support for link-time optimization (LTO), you can
-explicitly specify the directory where libelf is installed
-(@samp{--with-libelf=@var{libelfinstalldir}}). The
-@option{--with-libelf=@var{libelfinstalldir}} option is shorthand for
-@option{--with-libelf-include=@var{libelfinstalldir}/include}
-@option{--with-libelf-lib=@var{libelfinstalldir}/lib}.
+default, and may be disabled using @option{--disable-lto}.
@item --enable-gold
Enable support for using @command{gold} as the linker. If gold support is
@table @code
@item --with-sysroot
@itemx --with-sysroot=@var{dir}
-Tells GCC to consider @var{dir} as the root of a tree that contains a
-(subset of) the root filesystem of the target operating system.
+Tells GCC to consider @var{dir} as the root of a tree that contains
+(a subset of) the root filesystem of the target operating system.
Target system headers, libraries and run-time object files will be
searched in there. More specifically, this acts as if
@option{--sysroot=@var{dir}} was added to the default options of the built
@end table
+@subsubheading Overriding @command{configure} test results
+
+Sometimes, it might be necessary to override the result of some
+@command{configure} test, for example in order to ease porting to a new
+system or work around a bug in a test. The toplevel @command{configure}
+script provides three variables for this:
+
+@table @code
+
+@item build_configargs
+@cindex @code{build_configargs}
+The contents of this variable is passed to all build @command{configure}
+scripts.
+
+@item host_configargs
+@cindex @code{host_configargs}
+The contents of this variable is passed to all host @command{configure}
+scripts.
+
+@item target_configargs
+@cindex @code{target_configargs}
+The contents of this variable is passed to all target @command{configure}
+scripts.
+
+@end table
+
+In order to avoid shell and @command{make} quoting issues for complex
+overrides, you can pass a setting for @env{CONFIG_SITE} and set
+variables in the site file.
+
@html
<hr />
<p>
debugging information.)
@smallexample
- make BOOT_CFLAGS='-O' bootstrap
+make BOOT_CFLAGS='-O' bootstrap
@end smallexample
You can place non-default optimization flags into @code{BOOT_CFLAGS}; they
assumes that DejaGnu has been installed under @file{/usr/local}):
@smallexample
- TCL_LIBRARY = /usr/local/share/tcl8.0
- DEJAGNULIBS = /usr/local/share/dejagnu
+TCL_LIBRARY = /usr/local/share/tcl8.0
+DEJAGNULIBS = /usr/local/share/dejagnu
@end smallexample
(On systems such as Cygwin, these paths are required to be actual
Finally, you can run the testsuite (which may take a long time):
@smallexample
- cd @var{objdir}; make -k check
+cd @var{objdir}; make -k check
@end smallexample
This will test various components of GCC, such as compiler
testsuite is to use
@smallexample
- make check-gcc RUNTESTFLAGS="execute.exp @var{other-options}"
+make check-gcc RUNTESTFLAGS="execute.exp @var{other-options}"
@end smallexample
Likewise, in order to run only the @command{g++} ``old-deja'' tests in
the testsuite with filenames matching @samp{9805*}, you would use
@smallexample
- make check-g++ RUNTESTFLAGS="old-deja.exp=9805* @var{other-options}"
+make check-g++ RUNTESTFLAGS="old-deja.exp=9805* @var{other-options}"
@end smallexample
The @file{*.exp} files are located in the testsuite directories of the GCC
work outside the makefiles. For example,
@smallexample
- make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"
+make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"
@end smallexample
will run the standard @command{g++} testsuites (``unix'' is the target name
with a syntax similar to the brace expansion of popular shells:
@smallexample
- @dots{}"--target_board=arm-sim\@{-mhard-float,-msoft-float\@}\@{-O1,-O2,-O3,\@}"
+@dots{}"--target_board=arm-sim\@{-mhard-float,-msoft-float\@}\@{-O1,-O2,-O3,\@}"
@end smallexample
(Note the empty option caused by the trailing comma in the final group.)
target, as if you had specified all possible combinations yourself:
@smallexample
- --target_board=arm-sim/-mhard-float/-O1
- --target_board=arm-sim/-mhard-float/-O2
- --target_board=arm-sim/-mhard-float/-O3
- --target_board=arm-sim/-mhard-float
- --target_board=arm-sim/-msoft-float/-O1
- --target_board=arm-sim/-msoft-float/-O2
- --target_board=arm-sim/-msoft-float/-O3
- --target_board=arm-sim/-msoft-float
+--target_board=arm-sim/-mhard-float/-O1
+--target_board=arm-sim/-mhard-float/-O2
+--target_board=arm-sim/-mhard-float/-O3
+--target_board=arm-sim/-mhard-float
+--target_board=arm-sim/-msoft-float/-O1
+--target_board=arm-sim/-msoft-float/-O2
+--target_board=arm-sim/-msoft-float/-O3
+--target_board=arm-sim/-msoft-float
@end smallexample
They can be combined as many times as you wish, in arbitrary ways. This
list:
@smallexample
- @dots{}"--target_board=unix/-Wextra\@{-O3,-fno-strength\@}\@{-fomit-frame,\@}"
+@dots{}"--target_board=unix/-Wextra\@{-O3,-fno-strength\@}\@{-fomit-frame,\@}"
@end smallexample
will generate four combinations, all involving @samp{-Wextra}.
special makefile target:
@smallexample
- make -j@var{N} check-@var{testsuite}//@var{test-target}/@var{option1}/@var{option2}/@dots{}
+make -j@var{N} check-@var{testsuite}//@var{test-target}/@var{option1}/@var{option2}/@dots{}
@end smallexample
For example,
@smallexample
- make -j3 check-gcc//sh-hms-sim/@{-m1,-m2,-m3,-m3e,-m4@}/@{,-nofpu@}
+make -j3 check-gcc//sh-hms-sim/@{-m1,-m2,-m3,-m3e,-m4@}/@{,-nofpu@}
@end smallexample
will run three concurrent ``make-gcc'' testsuites, eventually testing all
@file{contrib/test_summary} shell script. Start it in the @var{objdir} with
@smallexample
- @var{srcdir}/contrib/test_summary -p your_commentary.txt \
- -m gcc-testresults@@gcc.gnu.org |sh
+@var{srcdir}/contrib/test_summary -p your_commentary.txt \
+ -m gcc-testresults@@gcc.gnu.org |sh
@end smallexample
This script uses the @command{Mail} program to send the results, so
Now that GCC has been built (and optionally tested), you can install it with
@smallexample
-cd @var{objdir}; make install
+cd @var{objdir} && make install
@end smallexample
We strongly recommend to install into a target directory where there is
make DESTDIR=@var{path-to-rootdir} install
@end smallexample
-@noindent where @var{path-to-rootdir} is the absolute path of
+@noindent
+where @var{path-to-rootdir} is the absolute path of
a directory relative to which all installation paths will be
interpreted. Note that the directory specified by @code{DESTDIR}
need not exist yet; it will be created if necessary.
not as a bug, because it gives slightly more control to the packagers
using the @code{DESTDIR} feature.
+You can install stripped programs and libraries with
+
+@smallexample
+make install-strip
+@end smallexample
+
If you are bootstrapping a released version of GCC then please
quickly review the build status page for your release, available from
@uref{http://gcc.gnu.org/buildstat.html}.
HP-UX:
@itemize
@item
-@uref{http://hpux.cs.utah.edu/,,HP-UX Porting Center};
+@uref{http://hpux.connect.org.uk/,,HP-UX Porting Center};
@item
@uref{ftp://sunsite.informatik.rwth-aachen.de/pub/packages/gcc_hpux/,,Binaries for HP-UX 11.00 at Aachen University of Technology}.
OpenServer/Unixware}.
@item
-Solaris 2 (SPARC, Intel)---@uref{http://www.sunfreeware.com/,,Sunfreeware}.
+Solaris 2 (SPARC, Intel):
+@itemize
+@item
+@uref{http://www.sunfreeware.com/,,Sunfreeware}
+
+@item
+@uref{http://www.blastwave.org/,,Blastwave}
@item
-SGI---@uref{http://freeware.sgi.com/,,SGI Freeware}.
+@uref{http://www.opencsw.org/,,OpenCSW}
+
+@item
+@uref{http://jupiterrise.com/tgcware/,,TGCware}
+@end itemize
+
+@item
+SGI IRIX:
+@itemize
+@item
+@uref{http://nekochan.net/,,Nekoware}
+
+@item
+@uref{http://jupiterrise.com/tgcware/,,TGCware}
+@end itemize
@item
Microsoft Windows:
@item
@uref{#mep-x-elf,,mep-*-elf}
@item
+@uref{#microblaze-x-elf,,microblaze-*-elf}
+@item
@uref{#mips-x-x,,mips-*-*}
@item
@uref{#mips-sgi-irix5,,mips-sgi-irix5}
@item
@uref{#x-x-solaris2,,*-*-solaris2*}
@item
+@uref{#sparc-x-x,,sparc*-*-*}
+@item
@uref{#sparc-sun-solaris2,,sparc-sun-solaris2*}
@item
@uref{#sparc-sun-solaris210,,sparc-sun-solaris2.10}
The following error:
@smallexample
- Error: register required
+Error: register required
@end smallexample
indicates that you should upgrade to a newer version of the binutils.
FreeBSD 2 (and any mutant a.out variants of FreeBSD 3) was
discontinued in GCC 4.0.
-In GCC 4.5, we enabled the use of @code{dl_iterate_phdr} inside boehm-gc on
-FreeBSD 7 or later. In order to better match the configuration of the
-FreeBSD system compiler: We also enabled the check to see if libc
-provides SSP support (which it does on FreeBSD 7), the use of
-@code{dl_iterate_phdr} inside @file{libgcc_s.so.1} (on FreeBSD 7 or later)
-and the use of @code{__cxa_atexit} by default (on FreeBSD 6 or later).
+In order to better utilize FreeBSD base system functionality and match
+the configuration of the system compiler, GCC 4.5 and above as well as
+GCC 4.4 past 2010-06-20 leverage SSP support in libc (which is present
+on FreeBSD 7 or later) and the use of @code{__cxa_atexit} by default
+(on FreeBSD 6 or later). The use of @code{dl_iterate_phdr} inside
+@file{libgcc_s.so.1} and boehm-gc (on FreeBSD 7 or later) is enabled
+by GCC 4.5 and above.
We support FreeBSD using the ELF file format with DWARF 2 debugging
for all CPU architectures. You may use @option{-gstabs} instead of
version, but the current version, from GNU binutils 2.20.1, is known to
work.
-Solaris~2/x86 doesn't support the execution of SSE/SSE2 instructions
-before Solaris~9 4/04, even if the CPU supports them. Programs will
+Solaris@tie{}2/x86 doesn't support the execution of SSE/SSE2 instructions
+before Solaris@tie{}9 4/04, even if the CPU supports them. Programs will
receive @code{SIGILL} if they try. The fix is available both in
-Solaris~9 Update~6 and kernel patch 112234-12 or newer. There is no
+Solaris@tie{}9 Update@tie{}6 and kernel patch 112234-12 or newer. There is no
corresponding patch for Solaris 8. To avoid this problem,
@option{-march} defaults to @samp{pentiumpro} on Solaris 8 and 9. If
you have the patch installed, you can configure GCC with an appropriate
@var{LDR_CNTRL} environment variable, e.g.,
@smallexample
- % LDR_CNTRL=MAXDATA=0x50000000
- % export LDR_CNTRL
+% LDR_CNTRL=MAXDATA=0x50000000
+% export LDR_CNTRL
@end smallexample
One can start with a pre-compiled version of GCC to build from
one may use GNU Bash instead of AIX @command{/bin/sh}, e.g.,
@smallexample
- % CONFIG_SHELL=/opt/freeware/bin/bash
- % export CONFIG_SHELL
+% CONFIG_SHELL=/opt/freeware/bin/bash
+% export CONFIG_SHELL
@end smallexample
and then proceed as described in @uref{build.html,,the build
Extract the shared objects from the currently installed
@file{libstdc++.a} archive:
@smallexample
- % ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
+% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
@end smallexample
Enable the @samp{F_LOADONLY} flag so that the shared object will be
available for runtime dynamic loading, but not linking:
@smallexample
- % strip -e libstdc++.so.4 libstdc++.so.5
+% strip -e libstdc++.so.4 libstdc++.so.5
@end smallexample
Archive the runtime-only shared object in the GCC 3.4
@file{libstdc++.a} archive:
@smallexample
- % ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
+% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
@end smallexample
Linking executables and shared libraries may produce warnings of
@html
<hr />
@end html
+@heading @anchor{microblaze-x-elf}microblaze-*-elf
+Xilinx MicroBlaze processor.
+This configuration is intended for embedded systems.
+
+@html
+<hr />
+@end html
@heading @anchor{mips-x-x}mips-*-*
If on a MIPS system you get an error message saying ``does not have gp
sections for all it's [sic] sectons [sic]'', don't worry about it. This
recommend using the following initial sequence of commands
@smallexample
- % CONFIG_SHELL=/bin/ksh
- % export CONFIG_SHELL
+% CONFIG_SHELL=/bin/ksh
+% export CONFIG_SHELL
@end smallexample
@noindent
117351-12 or newer for Intel) and Solaris 9 (117171-11 or newer for
SPARC, 117172-11 or newer for Intel) that address this problem.
+Solaris@tie{}8 provides an alternate implementation of the thread libraries,
+@samp{libpthread} and @samp{libthread}. They are required for TLS
+support and have been made the default in Solaris@tie{}9, so they are always
+used on Solaris@tie{}8.
+
+Thread-local storage (TLS) is supported in Solaris@tie{}8 and 9, but requires
+some patches. The @samp{libthread} patches provide the
+@code{__tls_get_addr} (SPARC, 64-bit x86) resp.@ @code{___tls_get_addr}
+(32-bit x86) functions. On Solaris@tie{}8, you need 108993-26 or newer on
+SPARC, 108994-26 or newer on Intel. On Solaris@tie{}9, the necessary support
+on SPARC is present since FCS, while 114432-05 or newer is required on
+Intel. Additionally, on Solaris@tie{}8, patch 109147-14 or newer on SPARC or
+109148-22 or newer on Intel are required for the Sun @command{ld} and
+runtime linker (@command{ld.so.1}) support. Again, Solaris@tie{}9/SPARC
+works since FCS, while 113986-02 is required on Intel. The linker
+patches must be installed even if GNU @command{ld} is used. Sun
+@command{as} in Solaris@tie{}8 and 9 doesn't support the necessary
+relocations, so GNU @command{as} must be used. The @command{configure}
+script checks for those prerequisites and automatically enables TLS
+support if they are met. Although those minimal patch versions should
+work, it is recommended to use the latest patch versions which include
+additional bug fixes.
+
+@html
+<hr />
+@end html
+@heading @anchor{sparc-x-x}sparc*-*-*
+
+This section contains general configuration information for all
+SPARC-based platforms. In addition to reading this section, please
+read all other sections that match your target.
+
+Newer versions of the GNU Multiple Precision Library (GMP), the MPFR
+library and the MPC library are known to be miscompiled by earlier
+versions of GCC on these platforms. We therefore recommend the use
+of the exact versions of these libraries listed as minimal versions
+in @uref{prerequisites.html,,the prerequisites}.
+
@html
<hr />
@end html
To work around this problem, compile with @option{-gstabs+} instead of
plain @option{-g}.
-When configuring the GNU Multiple Precision Library (GMP) or the MPFR
-library on a Solaris 7 or later system, the canonical target triplet
-must be specified as the @command{build} parameter on the configure
-line. This triplet can be obtained by invoking @command{./config.guess} in
-the toplevel source directory of GCC (and not that of GMP or MPFR).
-For example on a Solaris 9 system:
+When configuring the GNU Multiple Precision Library (GMP), the MPFR
+library or the MPC library on a Solaris 7 or later system, the canonical
+target triplet must be specified as the @command{build} parameter on the
+configure line. This target triplet can be obtained by invoking @command{./config.guess} in the toplevel source directory of GCC (and
+not that of GMP or MPFR or MPC). For example on a Solaris 9 system:
@smallexample
- % ./configure --build=sparc-sun-solaris2.9 --prefix=xxx
+% ./configure --build=sparc-sun-solaris2.9 --prefix=xxx
@end smallexample
@html
on a Solaris 9 system:
@smallexample
- % ./configure --build=sparc64-sun-solaris2.9 --prefix=xxx
+% ./configure --build=sparc64-sun-solaris2.9 --prefix=xxx
@end smallexample
The following compiler flags must be specified in the configure
step in order to bootstrap this target with the Sun compiler:
@smallexample
- % CC="cc -xarch=v9 -xildoff" @var{srcdir}/configure [@var{options}] [@var{target}]
+% CC="cc -xarch=v9 -xildoff" @var{srcdir}/configure [@var{options}] [@var{target}]
@end smallexample
@noindent
with this target run in the Interix subsystem, which is separate from
the Win32 subsystem. This target was last known to work in GCC 3.3.
-For more information, see @uref{http://www.interix.com/}.
-
@html
<hr />
@end html