Like most GNU software, GCC must be configured before it can be built. This document describes the recommended configuration procedure for both native and cross targets.
We use srcdir to refer to the toplevel source directory for GCC; we use objdir to refer to the toplevel build/object directory.
If you obtained the sources via CVS, srcdir must refer to the top
gcc
directory, the one where the MAINTAINERS
can be found,
and not its gcc
subdirectory, otherwise the build will fail.
First, we highly recommend that GCC be built into a separate directory than the sources which does not reside within the source tree. This is how we generally build GCC; building where srcdir == objdir should still work, but doesn't get extensive testing; building where objdir is a subdirectory of srcdir is unsupported.
If you have built GNU CC previously in the same directory for a
different target machine, do make distclean
to delete all files
that might be invalid. One of the files this deletes is
Makefile
; if make distclean
complains that Makefile
does not exist, it probably means that the directory is already suitably
clean. However, with the recommended method of building in a separate
objdir, you should simply use a different objdir for each
target.
Second, when configuring a native system, either cc
or
gcc
must be in your path or you must set CC
in
your environment before running configure. Otherwise the configuration
scripts may fail.
To configure GCC:
% mkdir objdir % cd objdir % srcdir/configure [target] [options]
--target=target
when configuring a cross compiler; examples of valid targets would be
i960-rtems, m68k-coff, sh-elf, etc.
--target=target
implies that the host defaults to target.
Use options to override several configure time options for GCC. A partial list of supported options:
--prefix=dirname
/usr/local
.
We highly recommend against dirname being the same or a subdirectory of objdir or vice versa.
These additional options control where certain parts of the distribution are installed. Normally you should not need to use these options.
--exec-prefix=dirname
prefix
.
--bindir=dirname
gcc
and g++
). The default is
exec-prefix/bin
.
--libdir=dirname
exec-prefix/lib
.
--with-slibdir=dirname
libdir
.
--infodir=dirname
prefix/info
.
--mandir=dirname
prefix/man
. (Note that the manual pages are only extracts from
the full GCC manuals, which are provided in Texinfo format. The
g77
manpage is unmaintained and may be out of date; the others
are derived by an automatic conversion process from parts of the full
manual.)
--with-gxx-include-dir=dirname
prefix/include/g++-v3
.
--with-local-prefix=dirname
/usr/local
. Specify this option if you want the compiler to
search directory dirname/include
for locally installed
header files instead of /usr/local/include
.
You should specify --with-local-prefix
only if your
site has a different convention (not /usr/local
) for where to put
site-specific files.
The default value for --with-local-prefix
is /usr/local
regardless of the value of --prefix
. Specifying
--prefix
has no effect on which directory GCC searches for
local header files. This may seem counterintuitive, but actually it is
logical.
The purpose of --prefix
is to specify where to install
GCC. The local header files in /usr/local/include
--if you put
any in that directory--are not part of GCC. They are part of other
programs--perhaps many others. (GCC installs its own header files in
another directory which is based on the --prefix
value.)
Do not specify /usr
as the --with-local-prefix
!
The directory you use for --with-local-prefix
must not
contain any of the system's standard header files. If it did contain
them, certain programs would be miscompiled (including GNU Emacs, on
certain targets), because this would override and nullify the header
file corrections made by the fixincludes
script.
Indications are that people who use this option use it based on mistaken
ideas of what it is for. People use it as if it specified where to
install part of GCC. Perhaps they make this assumption because
installing GCC creates the directory.
--enable-shared[=package[,...]]
If a list of packages is given as an argument, build shared libraries
only for the listed packages. For other packages, only static libraries
will be built. Package names currently recognized in the GCC tree are
libgcc
(also known as gcc
), libstdc++
(not
libstdc++-v3
), libffi
, zlib
, boehm-gc
and
libjava
. Note that libobjc
does not recognize itself by
any name, so, if you list package names in --enable-shared
,
you'll only get static Objective C libraries. libf2c
and
libiberty
do not support shared libraries at all.
Use --disable-shared
to build only static libraries. Note that
--disable-shared
does not accept a list of package names as
argument, only --enable-shared
does.
--with-gnu-as
--with-as=/path/to/gas
.
--with-as=/path/to/as
exec_prefix/lib/gcc-lib/target/version
directory, where exec_prefix defaults to prefix which
defaults to /usr/local
unless overridden by the
--prefix=/pathname
switch described above. target is the
target system triple, such as sparc-sun-solaris2.7, and
version denotes the GCC version, such as 2.95.2.
/usr/ccs/bin
on
Sun Solaris).
PATH
. You may
want to use --with-as
if no assembler is installed in the
directories listed above, or if you have multiple assemblers installed
and want to choose one that is not found by the above rules.
--with-gnu-ld
--with-gnu-as
but for linker.
--with-ld=/path/to/ld
--with-as
, but for the linker.
--with-stabs
--enable-multilib
--enable-threads
--enable-threads=lib
aix
dce
decosf1
irix
mach
os2
posix
pthreads
posix
.
single
solaris
vxworks
win32
--with-cpu=cpu
--enable-target-optspace
--disable-cpp
cpp
program should not be installed.
--with-cpp-install-dir=dirname
cpp
program should be installed
in prefix/dirname/cpp
, in addition to bindir.
--enable-maintainer-mode
gcc.pot
are normally
disabled. This is because it can only be rebuilt if the complete source
tree is present. If you have changed the sources and want to rebuild the
catalog, configuring with --enable-maintainer-mode
will enable
this. Note that you need a recent version of the gettext
tools
to do so.
--enable-version-specific-runtime-libs
libsubdir
) rather than the usual places. In
addition, libstdc++'s include files will be installed in
libsubdir/include/g++
unless you overruled it by using
--with-gxx-include-dir=dirname
. Using this option is
particularly useful if you intend to use several versions of GCC in
parallel. This is currently supported by libf2c
and
libstdc++
.
--enable-languages=lang1,lang2,...
gcc
directory of your GCC source tree:grep language=
*/config-lang.in
c++
, f77
, java
and objc
.
CHILL
is not currently maintained, and will almost
certainly fail to compile. Note that this switch does not work with
EGCS 1.1.2 or older versions of egcs. It is supported in GCC 2.95
and newer versions.gcc
sub-tree will be configured. Re-defining LANGUAGES
when calling
make bootstrap
does not work anymore, as those
language sub-directories might not have been configured!
--disable-libgcj
configure.in
so that libgcj is enabled by default on this platform,
you may use --enable-libgcj
to override the default.
--with-dwarf2
--enable-win32-registry
--enable-win32-registry=KEY
--disable-win32-registry
--enable-win32-registry
option enables Windows-hosted GCC
to look up installations paths in the registry using the following key:
HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\KEY
KEY defaults to GCC version number, and can be overridden by the
--enable-win32-registry=KEY
option. Vendors and distributors
who use custom installers are encouraged to provide a different key,
perhaps one comprised of vendor name and GCC version number, to
avoid conflict with existing installations. This feature is enabled
by default, and can be disabled by --disable-win32-registry
option. This option has no effect on the other hosts.
--nfp
m68k-sun-sunosn
and
m68k-isi-bsd
. On any other system, --nfp
has no effect.
--enable-checking
--enable-checking=list
misc
, tree
, gc
, rtl
and gcac
. The
default when list is not specified is misc,tree,gc
; the
checks rtl
and gcac
are very expensive.
--enable-nls
--disable-nls
--enable-nls
option enables Native Language Support (NLS),
which lets GCC output diagnostics in languages other than American
English. Native Language Support is enabled by default if not doing a
canadian cross build. The --disable-nls
option disables NLS.
--with-included-gettext
--with-included-gettext
option causes the build
procedure to prefer its copy of GNU gettext
.
--with-catgets
gettext
but has the
inferior catgets
interface, the GCC build procedure normally
ignores catgets
and instead uses GCC's copy of the GNU
gettext
library. The --with-catgets
option causes the
build procedure to use the host's catgets
in this situation.
Some options which only apply to building cross compilers:
--with-headers=dir
prefix/target/sys-include
doesn't pre-exist.
These include files will be copied into the gcc
install directory.
Fixincludes will be run on these files to make them compatible with
gcc
.
--with-libs=``dir1 dir2 ... dirN''
gcc
install
directory.
--with-newlib
__eprintf
to be
omitted from libgcc.a on the assumption that it will be provided by
newlib.
Note that each --enable
option has a corresponding
--disable
option and that each --with
option has a
corresponding --without
option.