@c Copyright (C) 1988,89,92,93,94,95,96,97,1998 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.

@c The text of this file appears in the file INSTALL
@c in the GCC distribution, as well as in the GCC manual.

@ifclear INSTALLONLY
@node Installation
@chapter Installing GNU CC
@end ifclear
@cindex installing GNU CC

@menu
* Configurations::    Configurations Supported by GNU CC.
* Other Dir::     Compiling in a separate directory (not where the source is).
* Cross-Compiler::   Building and installing a cross-compiler.
* Sun Install::   See below for installation on the Sun.
* VMS Install::   See below for installation on VMS.
* Collect2::	  How @code{collect2} works; how it finds @code{ld}.
* Header Dirs::   Understanding the standard header file directories.
@end menu

Here is the procedure for installing GNU CC on a Unix system.  See
@ref{VMS Install}, for VMS systems.  In this section we assume you
compile in the same directory that contains the source files; see
@ref{Other Dir}, to find out how to compile in a separate directory on Unix
systems.

You cannot install GNU C by itself on MSDOS; it will not compile under
any MSDOS compiler except itself.  You need to get the complete
compilation package DJGPP, which includes binaries as well as sources,
and includes all the necessary compilation tools and libraries.

@enumerate
@item
If you have built GNU CC previously in the same directory for a
different target machine, do @samp{make distclean} to delete all files
that might be invalid.  One of the files this deletes is
@file{Makefile}; if @samp{make distclean} complains that @file{Makefile}
does not exist, it probably means that the directory is already suitably
clean.

@item
On a System V release 4 system, make sure @file{/usr/bin} precedes
@file{/usr/ucb} in @code{PATH}.  The @code{cc} command in
@file{/usr/ucb} uses libraries which have bugs.

@item
Specify the host, build and target machine configurations.  You do this
by running the file @file{configure}.

The @dfn{build} machine is the system which you are using, the
@dfn{host} machine is the system where you want to run the resulting
compiler (normally the build machine), and the @dfn{target} machine is
the system for which you want the compiler to generate code.

If you are building a compiler to produce code for the machine it runs
on (a native compiler), you normally do not need to specify any operands
to @file{configure}; it will try to guess the type of machine you are on
and use that as the build, host and target machines.  So you don't need
to specify a configuration when building a native compiler unless
@file{configure} cannot figure out what your configuration is or guesses
wrong.

In those cases, specify the build machine's @dfn{configuration name}
with the @samp{--build} option; the host and target will default to be
the same as the build machine.  (If you are building a cross-compiler,
see @ref{Cross-Compiler}.)

Here is an example:

@smallexample
./configure --build=sparc-sun-sunos4.1
@end smallexample

A configuration name may be canonical or it may be more or less
abbreviated.

A canonical configuration name has three parts, separated by dashes.
It looks like this: @samp{@var{cpu}-@var{company}-@var{system}}.
(The three parts may themselves contain dashes; @file{configure}
can figure out which dashes serve which purpose.)  For example,
@samp{m68k-sun-sunos4.1} specifies a Sun 3.

You can also replace parts of the configuration by nicknames or aliases.
For example, @samp{sun3} stands for @samp{m68k-sun}, so
@samp{sun3-sunos4.1} is another way to specify a Sun 3.  You can also
use simply @samp{sun3-sunos}, since the version of SunOS is assumed by
default to be version 4.

You can specify a version number after any of the system types, and some
of the CPU types.  In most cases, the version is irrelevant, and will be
ignored.  So you might as well specify the version if you know it.

See @ref{Configurations}, for a list of supported configuration names and
notes on many of the configurations.  You should check the notes in that
section before proceeding any further with the installation of GNU CC.

There are four additional options you can specify independently to
describe variant hardware and software configurations.  These are
@samp{--with-gnu-as}, @samp{--with-gnu-ld}, @samp{--with-stabs} and
@samp{--nfp}.

@table @samp
@item --with-gnu-as
If you will use GNU CC with the GNU assembler (GAS), you should declare
this by using the @samp{--with-gnu-as} option when you run
@file{configure}.

Using this option does not install GAS.  It only modifies the output of
GNU CC to work with GAS.  Building and installing GAS is up to you.

Conversely, if you @emph{do not} wish to use GAS and do not specify
@samp{--with-gnu-as} when building GNU CC, it is up to you to make sure
that GAS is not installed.  GNU CC searches for a program named
@code{as} in various directories; if the program it finds is GAS, then
it runs GAS.  If you are not sure where GNU CC finds the assembler it is
using, try specifying @samp{-v} when you run it.

The systems where it makes a difference whether you use GAS are@*
@samp{hppa1.0-@var{any}-@var{any}}, @samp{hppa1.1-@var{any}-@var{any}},
@samp{i386-@var{any}-sysv}, @samp{i386-@var{any}-isc},@*
@samp{i860-@var{any}-bsd}, @samp{m68k-bull-sysv},@*
@samp{m68k-hp-hpux}, @samp{m68k-sony-bsd},@*
@samp{m68k-altos-sysv}, @samp{m68000-hp-hpux},@*
@samp{m68000-att-sysv}, @samp{@var{any}-lynx-lynxos},
and @samp{mips-@var{any}}).
On any other system, @samp{--with-gnu-as} has no effect.

On the systems listed above (except for the HP-PA, for ISC on the
386, and for @samp{mips-sgi-irix5.*}), if you use GAS, you should also
use the GNU linker (and specify @samp{--with-gnu-ld}).

@item --with-gnu-ld
Specify the option @samp{--with-gnu-ld} if you plan to use the GNU
linker with GNU CC.

This option does not cause the GNU linker to be installed; it just
modifies the behavior of GNU CC to work with the GNU linker.
Specifically, it inhibits the installation of @code{collect2}, a program
which otherwise serves as a front-end for the system's linker on most
configurations.

@item --with-stabs
On MIPS based systems and on Alphas, you must specify whether you want
GNU CC to create the normal ECOFF debugging format, or to use BSD-style
stabs passed through the ECOFF symbol table.  The normal ECOFF debug
format cannot fully handle languages other than C.  BSD stabs format can
handle other languages, but it only works with the GNU debugger GDB.

Normally, GNU CC uses the ECOFF debugging format by default; if you
prefer BSD stabs, specify @samp{--with-stabs} when you configure GNU
CC.

No matter which default you choose when you configure GNU CC, the user
can use the @samp{-gcoff} and @samp{-gstabs+} options to specify explicitly
the debug format for a particular compilation.

@samp{--with-stabs} is meaningful on the ISC system on the 386, also, if
@samp{--with-gas} is used.  It selects use of stabs debugging
information embedded in COFF output.  This kind of debugging information
supports C++ well; ordinary COFF debugging information does not.

@samp{--with-stabs} is also meaningful on 386 systems running SVR4.  It
selects use of stabs debugging information embedded in ELF output.  The
C++ compiler currently (2.6.0) does not support the DWARF debugging
information normally used on 386 SVR4 platforms; stabs provide a
workable alternative.  This requires gas and gdb, as the normal SVR4
tools can not generate or interpret stabs.

@item --nfp
On certain systems, you must specify whether the machine has a floating
point unit.  These systems include @samp{m68k-sun-sunos@var{n}} and
@samp{m68k-isi-bsd}.  On any other system, @samp{--nfp} currently has no
effect, though perhaps there are other systems where it could usefully
make a difference.

@cindex Objective C threads
@cindex threads, Objective C
@item --enable-threads=@var{type}
Certain systems, notably Linux-based GNU systems, can't be relied on to
supply a threads facility for the Objective C runtime and so will
default to single-threaded runtime.  They may, however, have a library
threads implementation available, in which case threads can be enabled
with this option by supplying a suitable @var{type}, probably
@samp{posix}.  The possibilities for @var{type} are @samp{single},
@samp{posix}, @samp{win32}, @samp{solaris}, @samp{irix} and @samp{mach}.
@end table

The @file{configure} script searches subdirectories of the source
directory for other compilers that are to be integrated into GNU CC.
The GNU compiler for C++, called G++ is in a subdirectory named
@file{cp}.  @file{configure} inserts rules into @file{Makefile} to build
all of those compilers.

Here we spell out what files will be set up by @code{configure}.  Normally
you need not be concerned with these files.

@itemize @bullet
@item
@ifset INTERNALS
A file named @file{config.h} is created that contains a @samp{#include}
of the top-level config file for the machine you will run the compiler
on (@pxref{Config}).  This file is responsible for defining information
about the host machine.  It includes @file{tm.h}.
@end ifset
@ifclear INTERNALS
A file named @file{config.h} is created that contains a @samp{#include}
of the top-level config file for the machine you will run the compiler
on (@pxref{Config,,The Configuration File, gcc.info, Using and Porting
GCC}).  This file is responsible for defining information about the host
machine.  It includes @file{tm.h}.
@end ifclear

The top-level config file is located in the subdirectory @file{config}.
Its name is always @file{xm-@var{something}.h}; usually
@file{xm-@var{machine}.h}, but there are some exceptions.

If your system does not support symbolic links, you might want to
set up @file{config.h} to contain a @samp{#include} command which
refers to the appropriate file.

@item
A file named @file{tconfig.h} is created which includes the top-level config
file for your target machine.  This is used for compiling certain
programs to run on that machine.

@item
A file named @file{tm.h} is created which includes the
machine-description macro file for your target machine.  It should be in
the subdirectory @file{config} and its name is often
@file{@var{machine}.h}.

@item
The command file @file{configure} also constructs the file
@file{Makefile} by adding some text to the template file
@file{Makefile.in}.  The additional text comes from files in the
@file{config} directory, named @file{t-@var{target}} and
@file{x-@var{host}}.  If these files do not exist, it means nothing
needs to be added for a given target or host.
@end itemize

@item
The standard directory for installing GNU CC is @file{/usr/local/lib}.
If you want to install its files somewhere else, specify
@samp{--prefix=@var{dir}} when you run @file{configure}.  Here @var{dir}
is a directory name to use instead of @file{/usr/local} for all purposes
with one exception: the directory @file{/usr/local/include} is searched
for header files no matter where you install the compiler.  To override
this name, use the @code{--local-prefix} option below.

@item
Specify @samp{--local-prefix=@var{dir}} if you want the compiler to
search directory @file{@var{dir}/include} for locally installed header
files @emph{instead} of @file{/usr/local/include}.

You should specify @samp{--local-prefix} @strong{only} if your site has
a different convention (not @file{/usr/local}) for where to put
site-specific files.

The default value for @samp{--local-prefix} is @file{/usr/local}
regardless of the value of @samp{--prefix}.  Specifying @samp{--prefix}
has no effect on which directory GNU CC searches for local header files.
This may seem counterintuitive, but actually it is logical.

The purpose of @samp{--prefix} is to specify where to @emph{install GNU
CC}.  The local header files in @file{/usr/local/include}---if you put
any in that directory---are not part of GNU CC.  They are part of other
programs---perhaps many others.  (GNU CC installs its own header files
in another directory which is based on the @samp{--prefix} value.)

@strong{Do not} specify @file{/usr} as the @samp{--local-prefix}!  The
directory you use for @samp{--local-prefix} @strong{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 @code{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 GNU CC.  Perhaps they make this assumption
because installing GNU CC creates the directory.

@cindex Bison parser generator
@cindex parser generator, Bison
@item
Make sure the Bison parser generator is installed.  (This is
unnecessary if the Bison output files @file{c-parse.c} and
@file{cexp.c} are more recent than @file{c-parse.y} and @file{cexp.y}
and you do not plan to change the @samp{.y} files.)

Bison versions older than Sept 8, 1988 will produce incorrect output
for @file{c-parse.c}.

@item
If you have chosen a configuration for GNU CC which requires other GNU
tools (such as GAS or the GNU linker) instead of the standard system
tools, install the required tools in the build directory under the names
@file{as}, @file{ld} or whatever is appropriate.  This will enable the
compiler to find the proper tools for compilation of the program
@file{enquire}.

Alternatively, you can do subsequent compilation using a value of the
@code{PATH} environment variable such that the necessary GNU tools come
before the standard system tools.

@item
Build the compiler.  Just type @samp{make LANGUAGES=c} in the compiler
directory.

@samp{LANGUAGES=c} specifies that only the C compiler should be
compiled.  The makefile normally builds compilers for all the supported
languages; currently, C, C++ and Objective C.  However, C is the only
language that is sure to work when you build with other non-GNU C
compilers.  In addition, building anything but C at this stage is a
waste of time.

In general, you can specify the languages to build by typing the
argument @samp{LANGUAGES="@var{list}"}, where @var{list} is one or more
words from the list @samp{c}, @samp{c++}, and @samp{objective-c}.  If
you have any additional GNU compilers as subdirectories of the GNU CC
source directory, you may also specify their names in this list.

Ignore any warnings you may see about ``statement not reached'' in
@file{insn-emit.c}; they are normal.  Also, warnings about ``unknown
escape sequence'' are normal in @file{genopinit.c} and perhaps some
other files.  Likewise, you should ignore warnings about ``constant is
so large that it is unsigned'' in @file{insn-emit.c} and
@file{insn-recog.c} and a warning about a comparison always being zero
in @file{enquire.o}.  Any other compilation errors may represent bugs in
the port to your machine or operating system, and
@ifclear INSTALLONLY
should be investigated and reported (@pxref{Bugs}).
@end ifclear
@ifset INSTALLONLY
should be investigated and reported.
@end ifset

Some commercial compilers fail to compile GNU CC because they have bugs
or limitations.  For example, the Microsoft compiler is said to run out
of macro space.  Some Ultrix compilers run out of expression space; then
you need to break up the statement where the problem happens.

@item
If you are building a cross-compiler, stop here.  @xref{Cross-Compiler}.

@cindex stage1
@item
Move the first-stage object files and executables into a subdirectory
with this command:

@smallexample
make stage1
@end smallexample

The files are moved into a subdirectory named @file{stage1}.
Once installation is complete, you may wish to delete these files
with @code{rm -r stage1}.

@item
If you have chosen a configuration for GNU CC which requires other GNU
tools (such as GAS or the GNU linker) instead of the standard system
tools, install the required tools in the @file{stage1} subdirectory
under the names @file{as}, @file{ld} or whatever is appropriate.  This
will enable the stage 1 compiler to find the proper tools in the
following stage.

Alternatively, you can do subsequent compilation using a value of the
@code{PATH} environment variable such that the necessary GNU tools come
before the standard system tools.

@item
Recompile the compiler with itself, with this command:

@smallexample
make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2"
@end smallexample

This is called making the stage 2 compiler.

The command shown above builds compilers for all the supported
languages.  If you don't want them all, you can specify the languages to
build by typing the argument @samp{LANGUAGES="@var{list}"}.  @var{list}
should contain one or more words from the list @samp{c}, @samp{c++},
@samp{objective-c}, and @samp{proto}.  Separate the words with spaces.
@samp{proto} stands for the programs @code{protoize} and
@code{unprotoize}; they are not a separate language, but you use
@code{LANGUAGES} to enable or disable their installation.

If you are going to build the stage 3 compiler, then you might want to
build only the C language in stage 2.

Once you have built the stage 2 compiler, if you are short of disk
space, you can delete the subdirectory @file{stage1}.

On a 68000 or 68020 system lacking floating point hardware,
unless you have selected a @file{tm.h} file that expects by default
that there is no such hardware, do this instead:

@smallexample
make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2 -msoft-float"
@end smallexample

@item
If you wish to test the compiler by compiling it with itself one more
time, install any other necessary GNU tools (such as GAS or the GNU
linker) in the @file{stage2} subdirectory as you did in the
@file{stage1} subdirectory, then do this:

@smallexample
make stage2
make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2"
@end smallexample

@noindent
This is called making the stage 3 compiler.  Aside from the @samp{-B}
option, the compiler options should be the same as when you made the
stage 2 compiler.  But the @code{LANGUAGES} option need not be the
same.  The command shown above builds compilers for all the supported
languages; if you don't want them all, you can specify the languages to
build by typing the argument @samp{LANGUAGES="@var{list}"}, as described
above.

If you do not have to install any additional GNU tools, you may use the
command

@smallexample
make bootstrap LANGUAGES=@var{language-list} BOOT_CFLAGS=@var{option-list}
@end smallexample

@noindent
instead of making @file{stage1}, @file{stage2}, and performing
the two compiler builds.

@item
Then compare the latest object files with the stage 2 object
files---they ought to be identical, aside from time stamps (if any).

On some systems, meaningful comparison of object files is impossible;
they always appear ``different.''  This is currently true on Solaris and
some systems that use ELF object file format.  On some versions of Irix
on SGI machines and DEC Unix (OSF/1) on Alpha systems, you will not be
able to compare the files without specifying @file{-save-temps}; see the
description of individual systems above to see if you get comparison
failures.  You may have similar problems on other systems.

Use this command to compare the files:

@smallexample
make compare
@end smallexample

This will mention any object files that differ between stage 2 and stage
3.  Any difference, no matter how innocuous, indicates that the stage 2
compiler has compiled GNU CC incorrectly, and is therefore a potentially
@ifclear INSTALLONLY
serious bug which you should investigate and report (@pxref{Bugs}).
@end ifclear
@ifset INSTALLONLY
serious bug which you should investigate and report.
@end ifset

If your system does not put time stamps in the object files, then this
is a faster way to compare them (using the Bourne shell):

@smallexample
for file in *.o; do
cmp $file stage2/$file
done
@end smallexample

If you have built the compiler with the @samp{-mno-mips-tfile} option on
MIPS machines, you will not be able to compare the files.

@item
Install the compiler driver, the compiler's passes and run-time support
with @samp{make install}.  Use the same value for @code{CC},
@code{CFLAGS} and @code{LANGUAGES} that you used when compiling the
files that are being installed.  One reason this is necessary is that
some versions of Make have bugs and recompile files gratuitously when
you do this step.  If you use the same variable values, those files will
be recompiled properly.

For example, if you have built the stage 2 compiler, you can use the
following command:

@smallexample
make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="@var{list}"
@end smallexample

@noindent
This copies the files @file{cc1}, @file{cpp} and @file{libgcc.a} to
files @file{cc1}, @file{cpp} and @file{libgcc.a} in the directory
@file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}, which is where
the compiler driver program looks for them.  Here @var{target} is the
target machine type specified when you ran @file{configure}, and
@var{version} is the version number of GNU CC.  This naming scheme
permits various versions and/or cross-compilers to coexist.
It also copies the executables for compilers for other languages
(e.g., @file{cc1plus} for C++) to the same directory.

This also copies the driver program @file{xgcc} into
@file{/usr/local/bin/gcc}, so that it appears in typical execution
search paths.  It also copies @file{gcc.1} into
@file{/usr/local/man/man1} and info pages into @file{/usr/local/info}.

On some systems, this command causes recompilation of some files.  This
is usually due to bugs in @code{make}.  You should either ignore this
problem, or use GNU Make.

@cindex @code{alloca} and SunOS
@strong{Warning: there is a bug in @code{alloca} in the Sun library.  To
avoid this bug, be sure to install the executables of GNU CC that were
compiled by GNU CC.  (That is, the executables from stage 2 or 3, not
stage 1.)  They use @code{alloca} as a built-in function and never the
one in the library.}

(It is usually better to install GNU CC executables from stage 2 or 3,
since they usually run faster than the ones compiled with some other
compiler.)

@item
@cindex C++ runtime library
@cindex @code{libstdc++}
If you're going to use C++, it's likely that you need to also install
a C++ runtime library.  Just as GNU C does not
distribute a C runtime library, it also does not include a C++ runtime
library.  All I/O functionality, special class libraries, etc., are
provided by the C++ runtime library.

Here's one way to build and install a C++ runtime library for GNU CC:

@itemize @bullet
@item
Build and install GNU CC, so that invoking @samp{gcc} obtains the GNU CC
that was just built.

@item
Obtain a copy of a compatible @samp{libstdc++} distribution.  For
example, the @samp{libstdc++-2.8.0.tar.gz} distribution should be
compatible with GCC 2.8.0.  GCC distributors normally distribute
@samp{libstdc++} as well.

@item
Set the @samp{CXX} environment variable to @samp{gcc} while running the
@samp{libstdc++} distribution's @file{configure} command.  Use the same
@file{configure} options that you used when you invoked GCC's
@file{configure} command.

@item
Invoke @samp{make} to build the C++ runtime.

@item
Invoke @samp{make install} to install the C++ runtime.

@end itemize

To summarize, after building and installing GNU CC, invoke the following
shell commands in the topmost directory of the C++ library distribution.
For @var{configure-options}, use the same options that
you used to configure GNU CC.

@example
$ CXX=gcc ./configure @var{configure-options}
$ make
$ make install
@end example

@item
GNU CC includes a runtime library for Objective-C because it is an
integral part of the language.  You can find the files associated with
the library in the subdirectory @file{objc}.  The GNU Objective-C
Runtime Library requires header files for the target's C library in
order to be compiled,and also requires the header files for the target's
thread library if you want thread support.  @xref{Cross Headers,
Cross-Compilers and Header Files, Cross-Compilers and Header Files}, for
discussion about header files issues for cross-compilation.

When you run @file{configure}, it picks the appropriate Objective-C
thread implementation file for the target platform.  In some situations,
you may wish to choose a different back-end as some platforms support
multiple thread implementations or you may wish to disable thread
support completely.  You do this by specifying a value for the
@var{OBJC_THREAD_FILE} makefile variable on the command line when you
run make, for example:

@smallexample
make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2" OBJC_THREAD_FILE=thr-single
@end smallexample

@noindent
Below is a list of the currently available back-ends.

@itemize @bullet
@item thr-single
Disable thread support, should work for all platforms.
@item thr-decosf1
DEC OSF/1 thread support.
@item thr-irix
SGI IRIX thread support.
@item thr-mach
Generic MACH thread support, known to work on NEXTSTEP.
@item thr-os2
IBM OS/2 thread support.
@item thr-posix
Generix POSIX thread support.
@item thr-pthreads
PCThreads on Linux-based GNU systems.
@item thr-solaris
SUN Solaris thread support.
@item thr-win32
Microsoft Win32 API thread support.
@end itemize
@end enumerate

@node Configurations
@section Configurations Supported by GNU CC
@cindex configurations supported by GNU CC

Here are the possible CPU types:

@quotation
@c gmicro, alliant, spur and tahoe omitted since they don't work.
1750a, a29k, alpha, arm, c@var{n}, clipper, dsp16xx, elxsi, h8300,
hppa1.0, hppa1.1, i370, i386, i486, i586, i860, i960, m32r, m68000, m68k,
m88k, mips, mipsel, mips64, mips64el, ns32k, powerpc, powerpcle,
pyramid, romp, rs6000, sh, sparc, sparclite, sparc64, vax, we32k.
@end quotation

Here are the recognized company names.  As you can see, customary
abbreviations are used rather than the longer official names.

@c What should be done about merlin, tek*, dolphin?
@quotation
acorn, alliant, altos, apollo, apple, att, bull,
cbm, convergent, convex, crds, dec, dg, dolphin,
elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi,
mips, motorola, ncr, next, ns, omron, plexus,
sequent, sgi, sony, sun, tti, unicom, wrs.
@end quotation

The company name is meaningful only to disambiguate when the rest of
the information supplied is insufficient.  You can omit it, writing
just @samp{@var{cpu}-@var{system}}, if it is not needed.  For example,
@samp{vax-ultrix4.2} is equivalent to @samp{vax-dec-ultrix4.2}.

Here is a list of system types:

@quotation
386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux,
dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux-gnu,
hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs,
netbsd, newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco, sim,
solaris, sunos, sym, sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta,
vxworks, winnt, xenix.
@end quotation

@noindent
You can omit the system type; then @file{configure} guesses the
operating system from the CPU and company.

You can add a version number to the system type; this may or may not
make a difference.  For example, you can write @samp{bsd4.3} or
@samp{bsd4.4} to distinguish versions of BSD.  In practice, the version
number is most needed for @samp{sysv3} and @samp{sysv4}, which are often
treated differently.

If you specify an impossible combination such as @samp{i860-dg-vms},
then you may get an error message from @file{configure}, or it may
ignore part of the information and do the best it can with the rest.
@file{configure} always prints the canonical name for the alternative
that it used.  GNU CC does not support all possible alternatives.

Often a particular model of machine has a name.  Many machine names are
recognized as aliases for CPU/company combinations.  Thus, the machine
name @samp{sun3}, mentioned above, is an alias for @samp{m68k-sun}.
Sometimes we accept a company name as a machine name, when the name is
popularly used for a particular machine.  Here is a table of the known
machine names:

@quotation
3300, 3b1, 3b@var{n}, 7300, altos3068, altos,
apollo68, att-7300, balance,
convex-c@var{n}, crds, decstation-3100,
decstation, delta, encore,
fx2800, gmicro, hp7@var{nn}, hp8@var{nn},
hp9k2@var{nn}, hp9k3@var{nn}, hp9k7@var{nn},
hp9k8@var{nn}, iris4d, iris, isi68,
m3230, magnum, merlin, miniframe,
mmax, news-3600, news800, news, next,
pbd, pc532, pmax, powerpc, powerpcle, ps2, risc-news,
rtpc, sun2, sun386i, sun386, sun3,
sun4, symmetry, tower-32, tower.
@end quotation

@noindent
Remember that a machine name specifies both the cpu type and the company
name.
If you want to install your own homemade configuration files, you can
use @samp{local} as the company name to access them.  If you use
configuration @samp{@var{cpu}-local}, the configuration name
without the cpu prefix
is used to form the configuration file names.

Thus, if you specify @samp{m68k-local}, configuration uses
files @file{m68k.md}, @file{local.h}, @file{m68k.c},
@file{xm-local.h}, @file{t-local}, and @file{x-local}, all in the
directory @file{config/m68k}.

Here is a list of configurations that have special treatment or special
things you must know:

@table @samp
@item 1750a-*-*
MIL-STD-1750A processors.

The MIL-STD-1750A cross configuration produces output for
@code{as1750}, an assembler/linker available under the GNU Public
License for the 1750A. @code{as1750} can be obtained at 
@emph{ftp://ftp.fta-berlin.de/pub/crossgcc/1750gals/}.
A similarly licensed simulator for
the 1750A is available from same address.

You should ignore a fatal error during the building of libgcc (libgcc is
not yet implemented for the 1750A.)

The @code{as1750} assembler requires the file @file{ms1750.inc}, which is
found in the directory @file{config/1750a}.

GNU CC produced the same sections as the Fairchild F9450 C Compiler,
namely:

@table @code
@item Normal
The program code section.

@item Static
The read/write (RAM) data section.

@item Konst
The read-only (ROM) constants section.

@item Init
Initialization section (code to copy KREL to SREL).
@end table

The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16).  This
means that type `char' is represented with a 16-bit word per character.
The 1750A's "Load/Store Upper/Lower Byte" instructions are not used by
GNU CC.

@item alpha-*-osf1
Systems using processors that implement the DEC Alpha architecture and
are running the DEC Unix (OSF/1) operating system, for example the DEC
Alpha AXP systems.CC.)

GNU CC writes a @samp{.verstamp} directive to the assembler output file
unless it is built as a cross-compiler.  It gets the version to use from
the system header file @file{/usr/include/stamp.h}.  If you install a
new version of DEC Unix, you should rebuild GCC to pick up the new version
stamp.

Note that since the Alpha is a 64-bit architecture, cross-compilers from
32-bit machines will not generate code as efficient as that generated
when the compiler is running on a 64-bit machine because many
optimizations that depend on being able to represent a word on the
target in an integral value on the host cannot be performed.  Building
cross-compilers on the Alpha for 32-bit machines has only been tested in
a few cases and may not work properly.

@code{make compare} may fail on old versions of DEC Unix unless you add
@samp{-save-temps} to @code{CFLAGS}.  On these systems, the name of the
assembler input file is stored in the object file, and that makes
comparison fail if it differs between the @code{stage1} and
@code{stage2} compilations.  The option @samp{-save-temps} forces a
fixed name to be used for the assembler input file, instead of a
randomly chosen name in @file{/tmp}.  Do not add @samp{-save-temps}
unless the comparisons fail without that option.  If you add
@samp{-save-temps}, you will have to manually delete the @samp{.i} and
@samp{.s} files after each series of compilations.

GNU CC now supports both the native (ECOFF) debugging format used by DBX
and GDB and an encapsulated STABS format for use only with GDB.  See the
discussion of the @samp{--with-stabs} option of @file{configure} above
for more information on these formats and how to select them.

There is a bug in DEC's assembler that produces incorrect line numbers
for ECOFF format when the @samp{.align} directive is used.  To work
around this problem, GNU CC will not emit such alignment directives
while writing ECOFF format debugging information even if optimization is
being performed.  Unfortunately, this has the very undesirable
side-effect that code addresses when @samp{-O} is specified are
different depending on whether or not @samp{-g} is also specified.

To avoid this behavior, specify @samp{-gstabs+} and use GDB instead of
DBX.  DEC is now aware of this problem with the assembler and hopes to
provide a fix shortly.

@item arc-*-elf
Argonaut ARC processor.
This configuration is intended for embedded systems.

@item arm-*-aout
Advanced RISC Machines ARM-family processors.  These are often used in
embedded applications.  There are no standard Unix configurations.
This configuration corresponds to the basic instruction sequences and will
produce @file{a.out} format object modules.

You may need to make a variant of the file @file{arm.h} for your particular
configuration.

@item arm-*-linuxaout
Any of the ARM family processors running the Linux-based GNU system with
the @file{a.out} binary format (ELF is not yet supported).  You must use
version 2.8.1.0.7 or later of the GNU/Linux binutils, which you can download
from @file{sunsite.unc.edu:/pub/Linux/GCC} and other mirror sites for
Linux-based GNU systems.

@item arm-*-riscix
The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix.
If you are running a version of RISC iX prior to 1.2 then you must
specify the version number during configuration.  Note that the
assembler shipped with RISC iX does not support stabs debugging
information; a new version of the assembler, with stabs support
included, is now available from Acorn and via ftp
@file{ftp.acorn.com:/pub/riscix/as+xterm.tar.Z}.  To enable stabs
debugging, pass @samp{--with-gnu-as} to configure.

You will need to install GNU @file{sed} before you can run configure.

@item a29k
AMD Am29k-family processors.  These are normally used in embedded
applications.  There are no standard Unix configurations.
This configuration
corresponds to AMD's standard calling sequence and binary interface
and is compatible with other 29k tools.

You may need to make a variant of the file @file{a29k.h} for your
particular configuration.

@item a29k-*-bsd
AMD Am29050 used in a system running a variant of BSD Unix.

@item decstation-*
DECstations can support three different personalities: Ultrix,
DEC OSF/1, and OSF/rose.  To configure GCC for these platforms
use the following configurations:

@table @samp
@item decstation-ultrix
Ultrix configuration.

@item decstation-osf1
Dec's version of OSF/1.

@item decstation-osfrose
Open Software Foundation reference port of OSF/1 which uses the
OSF/rose object file format instead of ECOFF.  Normally, you
would not select this configuration.
@end table

The MIPS C compiler needs to be told to increase its table size
for switch statements with the @samp{-Wf,-XNg1500} option in
order to compile @file{cp/parse.c}.  If you use the @samp{-O2}
optimization option, you also need to use @samp{-Olimit 3000}.
Both of these options are automatically generated in the
@file{Makefile} that the shell script @file{configure} builds.
If you override the @code{CC} make variable and use the MIPS
compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.

@item elxsi-elxsi-bsd
The Elxsi's C compiler has known limitations that prevent it from
compiling GNU C.  Please contact @code{mrs@@cygnus.com} for more details.

@item dsp16xx
A port to the AT&T DSP1610 family of processors.

@ignore
@item fx80
Alliant FX/8 computer.  Note that the standard installed C compiler in
Concentrix 5.0 has a bug which prevent it from compiling GNU CC
correctly.  You can patch the compiler bug as follows:

@smallexample
cp /bin/pcc ./pcc
adb -w ./pcc - << EOF
15f6?w 6610
EOF
@end smallexample

Then you must use the @samp{-ip12} option when compiling GNU CC
with the patched compiler, as shown here:

@smallexample
make CC="./pcc -ip12" CFLAGS=-w
@end smallexample

Note also that Alliant's version of DBX does not manage to work with the
output from GNU CC.
@end ignore

@item h8300-*-*
Hitachi H8/300 series of processors.

The calling convention and structure layout has changed in release 2.6.
All code must be recompiled.  The calling convention now passes the
first three arguments in function calls in registers.  Structures are no
longer a multiple of 2 bytes.

@item hppa*-*-*
There are several variants of the HP-PA processor which run a variety
of operating systems.  GNU CC must be configured to use the correct
processor type and operating system, or GNU CC will not function correctly.
The easiest way to handle this problem is to @emph{not} specify a target
when configuring GNU CC, the @file{configure} script will try to automatically
determine the right processor type and operating system.

@samp{-g} does not work on HP-UX, since that system uses a peculiar
debugging format which GNU CC does not know about.  However, @samp{-g}
will work if you also use GAS and GDB in conjunction with GCC.  We
highly recommend using GAS for all HP-PA configurations.

You should be using GAS-2.6 (or later) along with GDB-4.16 (or later).  These
can be retrieved from all the traditional GNU ftp archive sites.

GAS will need to be installed into a directory before @code{/bin},
@code{/usr/bin}, and @code{/usr/ccs/bin} in your search path.  You
should install GAS before you build GNU CC.

To enable debugging, you must configure GNU CC with the @samp{--with-gnu-as}
option before building.

@item i370-*-*
This port is very preliminary and has many known bugs.  We hope to
have a higher-quality port for this machine soon.

@item i386-*-linux-gnuoldld
Use this configuration to generate @file{a.out} binaries on Linux-based
GNU systems if you do not have gas/binutils version 2.5.2 or later
installed. This is an obsolete configuration.

@item i386-*-linux-gnuaout
Use this configuration to generate @file{a.out} binaries on Linux-based
GNU systems. This configuration is being superseded. You must use
gas/binutils version 2.5.2 or later.

@item i386-*-linux-gnu
Use this configuration to generate ELF binaries on Linux-based GNU
systems.  You must use gas/binutils version 2.5.2 or later.

@item i386-*-sco
Compilation with RCC is recommended.  Also, it may be a good idea to
link with GNU malloc instead of the malloc that comes with the system.

@item i386-*-sco3.2v4
Use this configuration for SCO release 3.2 version 4.

@item i386-*-sco3.2v5*
Use this for the SCO OpenServer Release family including 5.0.0, 5.0.2, 
5.0.4, Internet FastStart 1.0, and Internet FastStart 1.1.

GNU CC can generate ELF binaries (if you specify @samp{-melf}) or COFF 
binaries (the default).  If you are going to build your compiler in ELF 
mode (once you have bootstrapped the first stage compiler) you 
@strong{must} specify @samp{-melf} as part of @code{CC},
@emph{not} @code{CFLAGS}, for example as
@samp{CC="stage1/xgcc -melf -Bstage1/" }.  If you do not do this, the
bootstrap will generate incorrect versions of @file{libgcc.a}.

You must have TLS597 (from ftp.sco.com/TLS) installed for ELF
binaries to work correctly. Note that Open Server 5.0.2 @emph{does}
need TLS597 installed.

@emph{NOTE:} You must follow the instructions about invoking
@samp{make bootstrap} because the native OpenServer compiler builds
a @file{cc1plus} that will not correctly parse many valid C++ programs.
You must do a @samp{make bootstrap} if you are building with the native
compiler.

@item i386-*-isc
It may be a good idea to link with GNU malloc instead of the malloc that
comes with the system.

In ISC version 4.1, @file{sed} core dumps when building
@file{deduced.h}.  Use the version of @file{sed} from version 4.0.

@item i386-*-esix
It may be good idea to link with GNU malloc instead of the malloc that
comes with the system.

@item i386-ibm-aix
You need to use GAS version 2.1 or later, and LD from
GNU binutils version 2.2 or later.

@item i386-sequent-bsd
Go to the Berkeley universe before compiling.

@item i386-sequent-ptx1*
Sequent DYNIX/ptx 1.x.

@item i386-sequent-ptx2*
Sequent DYNIX/ptx 2.x.

@item i386-sun-sunos4
You may find that you need another version of GNU CC to begin
bootstrapping with, since the current version when built with the
system's own compiler seems to get an infinite loop compiling part of
@file{libgcc2.c}.  GNU CC version 2 compiled with GNU CC (any version)
seems not to have this problem.

See @ref{Sun Install}, for information on installing GNU CC on Sun
systems.

@item i[345]86-*-winnt3.5
This version requires a GAS that has not yet been released.  Until it
is, you can get a prebuilt binary version via anonymous ftp from
@file{cs.washington.edu:pub/gnat} or @file{cs.nyu.edu:pub/gnat}. You
must also use the Microsoft header files from the Windows NT 3.5 SDK.
Find these on the CDROM in the @file{/mstools/h} directory dated 9/4/94.  You
must use a fixed version of Microsoft linker made especially for NT 3.5,
which is also is available on the NT 3.5 SDK CDROM.  If you do not have
this linker, can you also use the linker from Visual C/C++ 1.0 or 2.0.

Installing GNU CC for NT builds a wrapper linker, called @file{ld.exe},
which mimics the behaviour of Unix @file{ld} in the specification of
libraries (@samp{-L} and @samp{-l}).  @file{ld.exe} looks for both Unix
and Microsoft named libraries.  For example, if you specify
@samp{-lfoo}, @file{ld.exe} will look first for @file{libfoo.a}
and then for @file{foo.lib}.

You may install GNU CC for Windows NT in one of two ways, depending on
whether or not you have a Unix-like shell and various Unix-like
utilities.

@enumerate
@item
If you do not have a Unix-like shell and few Unix-like utilities, you
will use a DOS style batch script called @file{configure.bat}.  Invoke
it as @code{configure winnt} from an MSDOS console window or from the
program manager dialog box.  @file{configure.bat} assumes you have
already installed and have in your path a Unix-like @file{sed} program
which is used to create a working @file{Makefile} from @file{Makefile.in}.

@file{Makefile} uses the Microsoft Nmake program maintenance utility and
the Visual C/C++ V8.00 compiler to build GNU CC.  You need only have the
utilities @file{sed} and @file{touch} to use this installation method,
which only automatically builds the compiler itself.  You must then
examine what @file{fixinc.winnt} does, edit the header files by hand and
build @file{libgcc.a} manually.

@item
The second type of installation assumes you are running a Unix-like
shell, have a complete suite of Unix-like utilities in your path, and
have a previous version of GNU CC already installed, either through
building it via the above installation method or acquiring a pre-built
binary.  In this case, use the @file{configure} script in the normal
fashion.
@end enumerate

@item i860-intel-osf1
This is the Paragon.
@ifset INSTALLONLY
If you have version 1.0 of the operating system, you need to take
special steps to build GNU CC due to peculiarities of the system.  Newer
system versions have no problem.  See the section `Installation Problems'
in the GNU CC Manual.
@end ifset
@ifclear INSTALLONLY
If you have version 1.0 of the operating system,
see @ref{Installation Problems}, for special things you need to do to
compensate for peculiarities in the system.
@end ifclear

@item *-lynx-lynxos
LynxOS 2.2 and earlier comes with GNU CC 1.x already installed as
@file{/bin/gcc}.  You should compile with this instead of @file{/bin/cc}.
You can tell GNU CC to use the GNU assembler and linker, by specifying
@samp{--with-gnu-as --with-gnu-ld} when configuring.  These will produce
COFF format object files and executables;  otherwise GNU CC will use the
installed tools, which produce @file{a.out} format executables.

@item m32r-*-elf
Mitsubishi M32R processor.
This configuration is intended for embedded systems.

@item m68000-hp-bsd
HP 9000 series 200 running BSD.  Note that the C compiler that comes
with this system cannot compile GNU CC; contact @code{law@@cs.utah.edu}
to get binaries of GNU CC for bootstrapping.

@item m68k-altos
Altos 3068.  You must use the GNU assembler, linker and debugger.
Also, you must fix a kernel bug.  Details in the file @file{README.ALTOS}.

@item m68k-apple-aux
Apple Macintosh running A/UX.
You may configure GCC  to use either the system assembler and
linker or the GNU assembler and linker.  You should use the GNU configuration
if you can, especially if you also want to use GNU C++.  You enabled
that configuration with + the @samp{--with-gnu-as} and @samp{--with-gnu-ld}
options to @code{configure}.

Note the C compiler that comes
with this system cannot compile GNU CC.  You can fine binaries of GNU CC
for bootstrapping on @code{jagubox.gsfc.nasa.gov}.
You will also a patched version of @file{/bin/ld} there that
raises some of the arbitrary limits found in the original.

@item m68k-att-sysv
AT&T 3b1, a.k.a. 7300 PC.  Special procedures are needed to compile GNU
CC with this machine's standard C compiler, due to bugs in that
compiler.  You can bootstrap it more easily with
previous versions of GNU CC if you have them.

Installing GNU CC on the 3b1 is difficult if you do not already have
GNU CC running, due to bugs in the installed C compiler.  However,
the following procedure might work.  We are unable to test it.

@enumerate
@item
Comment out the @samp{#include "config.h"} line near the start of
@file{cccp.c} and do @samp{make cpp}.  This makes a preliminary version
of GNU cpp.

@item
Save the old @file{/lib/cpp} and copy the preliminary GNU cpp to that
file name.

@item
Undo your change in @file{cccp.c}, or reinstall the original version,
and do @samp{make cpp} again.

@item
Copy this final version of GNU cpp into @file{/lib/cpp}.

@findex obstack_free
@item
Replace every occurrence of @code{obstack_free} in the file
@file{tree.c} with @code{_obstack_free}.

@item
Run @code{make} to get the first-stage GNU CC.

@item
Reinstall the original version of @file{/lib/cpp}.

@item
Now you can compile GNU CC with itself and install it in the normal
fashion.
@end enumerate

@item m68k-bull-sysv
Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GNU CC works
either with native assembler or GNU assembler. You can use
GNU assembler with native coff generation by providing @samp{--with-gnu-as} to
the configure script or use GNU assembler with dbx-in-coff encapsulation
by providing @samp{--with-gnu-as --stabs}. For any problem with native
assembler or for availability of the DPX/2 port of GAS, contact
@code{F.Pierresteguy@@frcl.bull.fr}.

@item m68k-crds-unox
Use @samp{configure unos} for building on Unos.

The Unos assembler is named @code{casm} instead of @code{as}.  For some
strange reason linking @file{/bin/as} to @file{/bin/casm} changes the
behavior, and does not work.  So, when installing GNU CC, you should
install the following script as @file{as} in the subdirectory where
the passes of GCC are installed:

@example
#!/bin/sh
casm $*
@end example

The default Unos library is named @file{libunos.a} instead of
@file{libc.a}.  To allow GNU CC to function, either change all
references to @samp{-lc} in @file{gcc.c} to @samp{-lunos} or link
@file{/lib/libc.a} to @file{/lib/libunos.a}.

@cindex @code{alloca}, for Unos
When compiling GNU CC with the standard compiler, to overcome bugs in
the support of @code{alloca}, do not use @samp{-O} when making stage 2.
Then use the stage 2 compiler with @samp{-O} to make the stage 3
compiler.  This compiler will have the same characteristics as the usual
stage 2 compiler on other systems.  Use it to make a stage 4 compiler
and compare that with stage 3 to verify proper compilation.

(Perhaps simply defining @code{ALLOCA} in @file{x-crds} as described in
the comments there will make the above paragraph superfluous.  Please
inform us of whether this works.)

Unos uses memory segmentation instead of demand paging, so you will need
a lot of memory.  5 Mb is barely enough if no other tasks are running.
If linking @file{cc1} fails, try putting the object files into a library
and linking from that library.

@item m68k-hp-hpux
HP 9000 series 300 or 400 running HP-UX.  HP-UX version 8.0 has a bug in
the assembler that prevents compilation of GNU CC.  To fix it, get patch
PHCO_4484 from HP.

In addition, if you wish to use gas @samp{--with-gnu-as} you must use
gas version 2.1 or later, and you must use the GNU linker version 2.1 or
later.  Earlier versions of gas relied upon a program which converted the
gas output into the native HP/UX format, but that program has not been
kept up to date.  gdb does not understand that native HP/UX format, so
you must use gas if you wish to use gdb.

@item m68k-sun
Sun 3.  We do not provide a configuration file to use the Sun FPA by
default, because programs that establish signal handlers for floating
point traps inherently cannot work with the FPA.

See @ref{Sun Install}, for information on installing GNU CC on Sun
systems.

@item m88k-*-svr3
Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port.
These systems tend to use the Green Hills C, revision 1.8.5, as the
standard C compiler.  There are apparently bugs in this compiler that
result in object files differences between stage 2 and stage 3.  If this
happens, make the stage 4 compiler and compare it to the stage 3
compiler.  If the stage 3 and stage 4 object files are identical, this
suggests you encountered a problem with the standard C compiler; the
stage 3 and 4 compilers may be usable.

It is best, however, to use an older version of GNU CC for bootstrapping
if you have one.

@item m88k-*-dgux
Motorola m88k running DG/UX.  To build 88open BCS native or cross
compilers on DG/UX, specify the configuration name as
@samp{m88k-*-dguxbcs} and build in the 88open BCS software development
environment.  To build ELF native or cross compilers on DG/UX, specify
@samp{m88k-*-dgux} and build in the DG/UX ELF development environment.
You set the software development environment by issuing
@samp{sde-target} command and specifying either @samp{m88kbcs} or
@samp{m88kdguxelf} as the operand.

If you do not specify a configuration name, @file{configure} guesses the
configuration based on the current software development environment.

@item m88k-tektronix-sysv3
Tektronix XD88 running UTekV 3.2e.  Do not turn on
optimization while building stage1 if you bootstrap with
the buggy Green Hills compiler.  Also, The bundled LAI
System V NFS is buggy so if you build in an NFS mounted
directory, start from a fresh reboot, or avoid NFS all together.
Otherwise you may have trouble getting clean comparisons
between stages.

@item mips-mips-bsd
MIPS machines running the MIPS operating system in BSD mode.  It's
possible that some old versions of the system lack the functions
@code{memcpy}, @code{memcmp}, and @code{memset}.  If your system lacks
these, you must remove or undo the definition of
@code{TARGET_MEM_FUNCTIONS} in @file{mips-bsd.h}.

The MIPS C compiler needs to be told to increase its table size
for switch statements with the @samp{-Wf,-XNg1500} option in
order to compile @file{cp/parse.c}.  If you use the @samp{-O2}
optimization option, you also need to use @samp{-Olimit 3000}.
Both of these options are automatically generated in the
@file{Makefile} that the shell script @file{configure} builds.
If you override the @code{CC} make variable and use the MIPS
compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.

@item mips-mips-riscos*
The MIPS C compiler needs to be told to increase its table size
for switch statements with the @samp{-Wf,-XNg1500} option in
order to compile @file{cp/parse.c}.  If you use the @samp{-O2}
optimization option, you also need to use @samp{-Olimit 3000}.
Both of these options are automatically generated in the
@file{Makefile} that the shell script @file{configure} builds.
If you override the @code{CC} make variable and use the MIPS
compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.

MIPS computers running RISC-OS can support four different
personalities: default, BSD 4.3, System V.3, and System V.4
(older versions of RISC-OS don't support V.4).  To configure GCC
for these platforms use the following configurations:

@table @samp
@item mips-mips-riscos@code{rev}
Default configuration for RISC-OS, revision @code{rev}.

@item mips-mips-riscos@code{rev}bsd
BSD 4.3 configuration for RISC-OS, revision @code{rev}.

@item mips-mips-riscos@code{rev}sysv4
System V.4 configuration for RISC-OS, revision @code{rev}.

@item mips-mips-riscos@code{rev}sysv
System V.3 configuration for RISC-OS, revision @code{rev}.
@end table

The revision @code{rev} mentioned above is the revision of
RISC-OS to use.  You must reconfigure GCC when going from a
RISC-OS revision 4 to RISC-OS revision 5.  This has the effect of
avoiding a linker
@ifclear INSTALLONLY
bug (see @ref{Installation Problems}, for more details).
@end ifclear
@ifset INSTALLONLY
bug.
@end ifset

@item mips-sgi-*
In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib"
option must be installed from the CD-ROM supplied from Silicon Graphics.
This is found on the 2nd CD in release 4.0.1.

In order to compile GCC on an SGI running IRIX 5, the "compiler_dev.hdr"
subsystem must be installed from the IDO CD-ROM supplied by Silicon
Graphics.

@code{make compare} may fail on version 5 of IRIX unless you add
@samp{-save-temps} to @code{CFLAGS}.  On these systems, the name of the
assembler input file is stored in the object file, and that makes
comparison fail if it differs between the @code{stage1} and
@code{stage2} compilations.  The option @samp{-save-temps} forces a
fixed name to be used for the assembler input file, instead of a
randomly chosen name in @file{/tmp}.  Do not add @samp{-save-temps}
unless the comparisons fail without that option.  If you do you
@samp{-save-temps}, you will have to manually delete the @samp{.i} and
@samp{.s} files after each series of compilations.

The MIPS C compiler needs to be told to increase its table size
for switch statements with the @samp{-Wf,-XNg1500} option in
order to compile @file{cp/parse.c}.  If you use the @samp{-O2}
optimization option, you also need to use @samp{-Olimit 3000}.
Both of these options are automatically generated in the
@file{Makefile} that the shell script @file{configure} builds.
If you override the @code{CC} make variable and use the MIPS
compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.

On Irix version 4.0.5F, and perhaps on some other versions as well,
there is an assembler bug that reorders instructions incorrectly.  To
work around it, specify the target configuration
@samp{mips-sgi-irix4loser}.  This configuration inhibits assembler
optimization.

In a compiler configured with target @samp{mips-sgi-irix4}, you can turn
off assembler optimization by using the @samp{-noasmopt} option.  This
compiler option passes the option @samp{-O0} to the assembler, to
inhibit reordering.

The @samp{-noasmopt} option can be useful for testing whether a problem
is due to erroneous assembler reordering.  Even if a problem does not go
away with @samp{-noasmopt}, it may still be due to assembler
reordering---perhaps GNU CC itself was miscompiled as a result.

To enable debugging under Irix 5, you must use GNU as 2.5 or later,
and use the @samp{--with-gnu-as} configure option when configuring gcc.
GNU as is distributed as part of the binutils package.

@item mips-sony-sysv
Sony MIPS NEWS.  This works in NEWSOS 5.0.1, but not in 5.0.2 (which
uses ELF instead of COFF).  Support for 5.0.2 will probably be provided
soon by volunteers.  In particular, the linker does not like the
code generated by GCC when shared libraries are linked in.

@item ns32k-encore
Encore ns32000 system.  Encore systems are supported only under BSD.

@item ns32k-*-genix
National Semiconductor ns32000 system.  Genix has bugs in @code{alloca}
and @code{malloc}; you must get the compiled versions of these from GNU
Emacs.

@item ns32k-sequent
Go to the Berkeley universe before compiling.

@item ns32k-utek
UTEK ns32000 system (``merlin'').  The C compiler that comes with this
system cannot compile GNU CC; contact @samp{tektronix!reed!mason} to get
binaries of GNU CC for bootstrapping.

@item romp-*-aos
@itemx romp-*-mach
The only operating systems supported for the IBM RT PC are AOS and
MACH.  GNU CC does not support AIX running on the RT.  We recommend you
compile GNU CC with an earlier version of itself; if you compile GNU CC
with @code{hc}, the Metaware compiler, it will work, but you will get
mismatches between the stage 2 and stage 3 compilers in various files.
These errors are minor differences in some floating-point constants and
can be safely ignored; the stage 3 compiler is correct.

@item rs6000-*-aix
@itemx powerpc-*-aix
Various early versions of each release of the IBM XLC compiler will not
bootstrap GNU CC.  Symptoms include differences between the stage2 and
stage3 object files, and errors when compiling @file{libgcc.a} or
@file{enquire}.  Known problematic releases include: xlc-1.2.1.8,
xlc-1.3.0.0 (distributed with AIX 3.2.5), and xlc-1.3.0.19.  Both
xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are known to produce working
versions of GNU CC, but most other recent releases correctly bootstrap
GNU CC.  Also, releases of AIX prior to AIX 3.2.4 include a version of
the IBM assembler which does not accept debugging directives: assembler
updates are available as PTFs.  Also, if you are using AIX 3.2.5 or
greater and the GNU assembler, you must have a version modified after
October 16th, 1995 in order for the GNU C compiler to build.  See the
file @file{README.RS6000} for more details on of these problems.

GNU CC does not yet support the 64-bit PowerPC instructions.

Objective C does not work on this architecture because it makes assumptions
that are incompatible with the calling conventions.

AIX on the RS/6000 provides support (NLS) for environments outside of
the United States.  Compilers and assemblers use NLS to support
locale-specific representations of various objects including
floating-point numbers ("." vs "," for separating decimal fractions).
There have been problems reported where the library linked with GNU CC
does not produce the same floating-point formats that the assembler
accepts.  If you have this problem, set the LANG environment variable to
"C" or "En_US".

Due to changes in the way that GNU CC invokes the binder (linker) for AIX
4.1, you may now receive warnings of duplicate symbols from the link step
that were not reported before.  The assembly files generated by GNU CC for
AIX have always included multiple symbol definitions for certain global
variable and function declarations in the original program.  The warnings
should not prevent the linker from producing a correct library or runnable
executable.

By default, AIX 4.1 produces code that can be used on either Power or
PowerPC processors.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item powerpc-*-elf
@itemx powerpc-*-sysv4
PowerPC system in big endian mode, running System V.4.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item powerpc-*-linux-gnu
PowerPC system in big endian mode, running the Linux-based GNU system.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item powerpc-*-eabiaix
Embedded PowerPC system in big endian mode with -mcall-aix selected as
the default.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item powerpc-*-eabisim
Embedded PowerPC system in big endian mode for use in running under the
PSIM simulator.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item powerpc-*-eabi
Embedded PowerPC system in big endian mode.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item powerpcle-*-elf
@itemx powerpcle-*-sysv4
PowerPC system in little endian mode, running System V.4.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item powerpcle-*-solaris2*
PowerPC system in little endian mode, running Solaris 2.5.1 or higher.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.
Beta versions of the Sun 4.0 compiler do not seem to be able to build
GNU CC correctly.  There are also problems with the host assembler and
linker that are fixed by using the GNU versions of these tools.

@item powerpcle-*-eabisim
Embedded PowerPC system in little endian mode for use in running under
the PSIM simulator.

@itemx powerpcle-*-eabi
Embedded PowerPC system in little endian mode.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item powerpcle-*-winnt
@itemx powerpcle-*-pe
PowerPC system in little endian mode running Windows NT.

You can specify a default version for the @samp{-mcpu=}@var{cpu_type}
switch by using the configure option @samp{--with-cpu-}@var{cpu_type}.

@item vax-dec-ultrix
Don't try compiling with Vax C (@code{vcc}).  It produces incorrect code
in some cases (for example, when @code{alloca} is used).

Meanwhile, compiling @file{cp/parse.c} with pcc does not work because of
an internal table size limitation in that compiler.  To avoid this
problem, compile just the GNU C compiler first, and use it to recompile
building all the languages that you want to run.

@item sparc-sun-*
See @ref{Sun Install}, for information on installing GNU CC on Sun
systems.

@item vax-dec-vms
See @ref{VMS Install}, for details on how to install GNU CC on VMS.

@item we32k-*-*
These computers are also known as the 3b2, 3b5, 3b20 and other similar
names.  (However, the 3b1 is actually a 68000; see
@ref{Configurations}.)

Don't use @samp{-g} when compiling with the system's compiler.  The
system's linker seems to be unable to handle such a large program with
debugging information.

The system's compiler runs out of capacity when compiling @file{stmt.c}
in GNU CC.  You can work around this by building @file{cpp} in GNU CC
first, then use that instead of the system's preprocessor with the
system's C compiler to compile @file{stmt.c}.  Here is how:

@smallexample
mv /lib/cpp /lib/cpp.att
cp cpp /lib/cpp.gnu
echo '/lib/cpp.gnu -traditional $@{1+"$@@"@}' > /lib/cpp
chmod +x /lib/cpp
@end smallexample

The system's compiler produces bad code for some of the GNU CC
optimization files.  So you must build the stage 2 compiler without
optimization.  Then build a stage 3 compiler with optimization.
That executable should work.  Here are the necessary commands:

@smallexample
make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
make stage2
make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
@end smallexample

You may need to raise the ULIMIT setting to build a C++ compiler,
as the file @file{cc1plus} is larger than one megabyte.
@end table

@node Other Dir
@section Compilation in a Separate Directory
@cindex other directory, compilation in
@cindex compilation in a separate directory
@cindex separate directory, compilation in

If you wish to build the object files and executables in a directory
other than the one containing the source files, here is what you must
do differently:

@enumerate
@item
Make sure you have a version of Make that supports the @code{VPATH}
feature.  (GNU Make supports it, as do Make versions on most BSD
systems.)

@item
If you have ever run @file{configure} in the source directory, you must undo
the configuration.  Do this by running:

@example
make distclean
@end example

@item
Go to the directory in which you want to build the compiler before
running @file{configure}:

@example
mkdir gcc-sun3
cd gcc-sun3
@end example

On systems that do not support symbolic links, this directory must be
on the same file system as the source code directory.

@item
Specify where to find @file{configure} when you run it:

@example
../gcc/configure @dots{}
@end example

This also tells @code{configure} where to find the compiler sources;
@code{configure} takes the directory from the file name that was used to
invoke it.  But if you want to be sure, you can specify the source
directory with the @samp{--srcdir} option, like this:

@example
../gcc/configure --srcdir=../gcc @var{other options}
@end example

The directory you specify with @samp{--srcdir} need not be the same
as the one that @code{configure} is found in.
@end enumerate

Now, you can run @code{make} in that directory.  You need not repeat the
configuration steps shown above, when ordinary source files change.  You
must, however, run @code{configure} again when the configuration files
change, if your system does not support symbolic links.

@node Cross-Compiler
@section Building and Installing a Cross-Compiler
@cindex cross-compiler, installation

GNU CC can function as a cross-compiler for many machines, but not all.

@itemize @bullet
@item
Cross-compilers for the Mips as target using the Mips assembler
currently do not work, because the auxiliary programs
@file{mips-tdump.c} and @file{mips-tfile.c} can't be compiled on
anything but a Mips.  It does work to cross compile for a Mips
if you use the GNU assembler and linker.

@item
Cross-compilers between machines with different floating point formats
have not all been made to work.  GNU CC now has a floating point
emulator with which these can work, but each target machine description
needs to be updated to take advantage of it.

@item
Cross-compilation between machines of different word sizes is
somewhat problematic and sometimes does not work.
@end itemize

Since GNU CC generates assembler code, you probably need a
cross-assembler that GNU CC can run, in order to produce object files.
If you want to link on other than the target machine, you need a
cross-linker as well.  You also need header files and libraries suitable
for the target machine that you can install on the host machine.

@menu
* Steps of Cross::      Using a cross-compiler involves several steps
                          that may be carried out on different machines.
* Configure Cross::     Configuring a cross-compiler.
* Tools and Libraries:: Where to put the linker and assembler, and the C library.
* Cross Headers::       Finding and installing header files
                          for a cross-compiler.
* Cross Runtime::       Supplying arithmetic runtime routines (@file{libgcc1.a}).
* Build Cross::         Actually compiling the cross-compiler.
@end menu

@node Steps of Cross
@subsection Steps of Cross-Compilation

To compile and run a program using a cross-compiler involves several
steps:

@itemize @bullet
@item
Run the cross-compiler on the host machine to produce assembler files
for the target machine.  This requires header files for the target
machine.

@item
Assemble the files produced by the cross-compiler.  You can do this
either with an assembler on the target machine, or with a
cross-assembler on the host machine.

@item
Link those files to make an executable.  You can do this either with a
linker on the target machine, or with a cross-linker on the host
machine.  Whichever machine you use, you need libraries and certain
startup files (typically @file{crt@dots{}.o}) for the target machine.
@end itemize

It is most convenient to do all of these steps on the same host machine,
since then you can do it all with a single invocation of GNU CC.  This
requires a suitable cross-assembler and cross-linker.  For some targets,
the GNU assembler and linker are available.

@node Configure Cross
@subsection Configuring a Cross-Compiler

To build GNU CC as a cross-compiler, you start out by running
@file{configure}.  Use the @samp{--target=@var{target}} to specify the
target type.  If @file{configure} was unable to correctly identify the
system you are running on, also specify the @samp{--build=@var{build}}
option.  For example, here is how to configure for a cross-compiler that
produces code for an HP 68030 system running BSD on a system that
@file{configure} can correctly identify:

@smallexample
./configure --target=m68k-hp-bsd4.3
@end smallexample

@node Tools and Libraries
@subsection Tools and Libraries for a Cross-Compiler

If you have a cross-assembler and cross-linker available, you should
install them now.  Put them in the directory
@file{/usr/local/@var{target}/bin}.  Here is a table of the tools
you should put in this directory:

@table @file
@item as
This should be the cross-assembler.

@item ld
This should be the cross-linker.

@item ar
This should be the cross-archiver: a program which can manipulate
archive files (linker libraries) in the target machine's format.

@item ranlib
This should be a program to construct a symbol table in an archive file.
@end table

The installation of GNU CC will find these programs in that directory,
and copy or link them to the proper place to for the cross-compiler to
find them when run later.

The easiest way to provide these files is to build the Binutils package
and GAS.  Configure them with the same @samp{--host} and @samp{--target}
options that you use for configuring GNU CC, then build and install
them.  They install their executables automatically into the proper
directory.  Alas, they do not support all the targets that GNU CC
supports.

If you want to install libraries to use with the cross-compiler, such as
a standard C library, put them in the directory
@file{/usr/local/@var{target}/lib}; installation of GNU CC copies
all the files in that subdirectory into the proper place for GNU CC to
find them and link with them.  Here's an example of copying some
libraries from a target machine:

@example
ftp @var{target-machine}
lcd /usr/local/@var{target}/lib
cd /lib
get libc.a
cd /usr/lib
get libg.a
get libm.a
quit
@end example

@noindent
The precise set of libraries you'll need, and their locations on
the target machine, vary depending on its operating system.

@cindex start files
Many targets require ``start files'' such as @file{crt0.o} and
@file{crtn.o} which are linked into each executable; these too should be
placed in @file{/usr/local/@var{target}/lib}.  There may be several
alternatives for @file{crt0.o}, for use with profiling or other
compilation options.  Check your target's definition of
@code{STARTFILE_SPEC} to find out what start files it uses.
Here's an example of copying these files from a target machine:

@example
ftp @var{target-machine}
lcd /usr/local/@var{target}/lib
prompt
cd /lib
mget *crt*.o
cd /usr/lib
mget *crt*.o
quit
@end example

@node Cross Runtime
@subsection @file{libgcc.a} and Cross-Compilers

Code compiled by GNU CC uses certain runtime support functions
implicitly.  Some of these functions can be compiled successfully with
GNU CC itself, but a few cannot be.  These problem functions are in the
source file @file{libgcc1.c}; the library made from them is called
@file{libgcc1.a}.

When you build a native compiler, these functions are compiled with some
other compiler--the one that you use for bootstrapping GNU CC.
Presumably it knows how to open code these operations, or else knows how
to call the run-time emulation facilities that the machine comes with.
But this approach doesn't work for building a cross-compiler.  The
compiler that you use for building knows about the host system, not the
target system.

So, when you build a cross-compiler you have to supply a suitable
library @file{libgcc1.a} that does the job it is expected to do.

To compile @file{libgcc1.c} with the cross-compiler itself does not
work.  The functions in this file are supposed to implement arithmetic
operations that GNU CC does not know how to open code for your target
machine.  If these functions are compiled with GNU CC itself, they
will compile into infinite recursion.

On any given target, most of these functions are not needed.  If GNU CC
can open code an arithmetic operation, it will not call these functions
to perform the operation.  It is possible that on your target machine,
none of these functions is needed.  If so, you can supply an empty
library as @file{libgcc1.a}.

Many targets need library support only for multiplication and division.
If you are linking with a library that contains functions for
multiplication and division, you can tell GNU CC to call them directly
by defining the macros @code{MULSI3_LIBCALL}, and the like.  These
macros need to be defined in the target description macro file.  For
some targets, they are defined already.  This may be sufficient to
avoid the need for libgcc1.a; if so, you can supply an empty library.

Some targets do not have floating point instructions; they need other
functions in @file{libgcc1.a}, which do floating arithmetic.
Recent versions of GNU CC have a file which emulates floating point.
With a certain amount of work, you should be able to construct a
floating point emulator that can be used as @file{libgcc1.a}.  Perhaps
future versions will contain code to do this automatically and
conveniently.  That depends on whether someone wants to implement it.

Some embedded targets come with all the necessary @file{libgcc1.a}
routines written in C or assembler.  These targets build
@file{libgcc1.a} automatically and you do not need to do anything
special for them.  Other embedded targets do not need any
@file{libgcc1.a} routines since all the necessary operations are
supported by the hardware.

If your target system has another C compiler, you can configure GNU CC
as a native compiler on that machine, build just @file{libgcc1.a} with
@samp{make libgcc1.a} on that machine, and use the resulting file with
the cross-compiler.  To do this, execute the following on the target
machine:

@example
cd @var{target-build-dir}
./configure --host=sparc --target=sun3
make libgcc1.a
@end example

@noindent
And then this on the host machine:

@example
ftp @var{target-machine}
binary
cd @var{target-build-dir}
get libgcc1.a
quit
@end example

Another way to provide the functions you need in @file{libgcc1.a} is to
define the appropriate @code{perform_@dots{}} macros for those
functions.  If these definitions do not use the C arithmetic operators
that they are meant to implement, you should be able to compile them
with the cross-compiler you are building.  (If these definitions already
exist for your target file, then you are all set.)

To build @file{libgcc1.a} using the perform macros, use
@samp{LIBGCC1=libgcc1.a OLDCC=./xgcc} when building the compiler.
Otherwise, you should place your replacement library under the name
@file{libgcc1.a} in the directory in which you will build the
cross-compiler, before you run @code{make}.

@node Cross Headers
@subsection Cross-Compilers and Header Files

If you are cross-compiling a standalone program or a program for an
embedded system, then you may not need any header files except the few
that are part of GNU CC (and those of your program).  However, if you
intend to link your program with a standard C library such as
@file{libc.a}, then you probably need to compile with the header files
that go with the library you use.

The GNU C compiler does not come with these files, because (1) they are
system-specific, and (2) they belong in a C library, not in a compiler.

If the GNU C library supports your target machine, then you can get the
header files from there (assuming you actually use the GNU library when
you link your program).

If your target machine comes with a C compiler, it probably comes with
suitable header files also.  If you make these files accessible from the host
machine, the cross-compiler can use them also.

Otherwise, you're on your own in finding header files to use when
cross-compiling.

When you have found suitable header files, put them in the directory
@file{/usr/local/@var{target}/include}, before building the cross
compiler.  Then installation will run fixincludes properly and install
the corrected versions of the header files where the compiler will use
them.

Provide the header files before you build the cross-compiler, because
the build stage actually runs the cross-compiler to produce parts of
@file{libgcc.a}.  (These are the parts that @emph{can} be compiled with
GNU CC.)  Some of them need suitable header files.

Here's an example showing how to copy the header files from a target
machine.  On the target machine, do this:

@example
(cd /usr/include; tar cf - .) > tarfile
@end example

Then, on the host machine, do this:

@example
ftp @var{target-machine}
lcd /usr/local/@var{target}/include
get tarfile
quit
tar xf tarfile
@end example

@node Build Cross
@subsection Actually Building the Cross-Compiler

Now you can proceed just as for compiling a single-machine compiler
through the step of building stage 1.  If you have not provided some
sort of @file{libgcc1.a}, then compilation will give up at the point
where it needs that file, printing a suitable error message.  If you
do provide @file{libgcc1.a}, then building the compiler will automatically
compile and link a test program called @file{libgcc1-test}; if you get
errors in the linking, it means that not all of the necessary routines
in @file{libgcc1.a} are available.

You must provide the header file @file{float.h}.  One way to do this is
to compile @file{enquire} and run it on your target machine.  The job of
@file{enquire} is to run on the target machine and figure out by
experiment the nature of its floating point representation.
@file{enquire} records its findings in the header file @file{float.h}.
If you can't produce this file by running @file{enquire} on the target
machine, then you will need to come up with a suitable @file{float.h} in
some other way (or else, avoid using it in your programs).

Do not try to build stage 2 for a cross-compiler.  It doesn't work to
rebuild GNU CC as a cross-compiler using the cross-compiler, because
that would produce a program that runs on the target machine, not on the
host.  For example, if you compile a 386-to-68030 cross-compiler with
itself, the result will not be right either for the 386 (because it was
compiled into 68030 code) or for the 68030 (because it was configured
for a 386 as the host).  If you want to compile GNU CC into 68030 code,
whether you compile it on a 68030 or with a cross-compiler on a 386, you
must specify a 68030 as the host when you configure it.

To install the cross-compiler, use @samp{make install}, as usual.

@node Sun Install
@section Installing GNU CC on the Sun
@cindex Sun installation
@cindex installing GNU CC on the Sun

On Solaris (version 2.1), do not use the linker or other tools in
@file{/usr/ucb} to build GNU CC.  Use @code{/usr/ccs/bin}.

Make sure the environment variable @code{FLOAT_OPTION} is not set when
you compile @file{libgcc.a}.  If this option were set to @code{f68881}
when @file{libgcc.a} is compiled, the resulting code would demand to be
linked with a special startup file and would not link properly without
special pains.

@cindex @code{alloca}, for SunOS
There is a bug in @code{alloca} in certain versions of the Sun library.
To avoid this bug, install the binaries of GNU CC that were compiled by
GNU CC.  They use @code{alloca} as a built-in function and never the one
in the library.

Some versions of the Sun compiler crash when compiling GNU CC.  The
problem is a segmentation fault in cpp.  This problem seems to be due to
the bulk of data in the environment variables.  You may be able to avoid
it by using the following command to compile GNU CC with Sun CC:

@example
make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"
@end example

SunOS 4.1.3 and 4.1.3_U1 have bugs that can cause intermittent core
dumps when compiling GNU CC.  A common symptom is an
internal compiler error which does not recur if you run it again.
To fix the problem, install Sun recommended patch 100726 (for SunOS 4.1.3)
or 101508 (for SunOS 4.1.3_U1), or upgrade to a later SunOS release.

@node VMS Install
@section Installing GNU CC on VMS
@cindex VMS installation
@cindex installing GNU CC on VMS

The VMS version of GNU CC is distributed in a backup saveset containing
both source code and precompiled binaries.

To install the @file{gcc} command so you can use the compiler easily, in
the same manner as you use the VMS C compiler, you must install the VMS CLD
file for GNU CC as follows:

@enumerate
@item
Define the VMS logical names @samp{GNU_CC} and @samp{GNU_CC_INCLUDE}
to point to the directories where the GNU CC executables
(@file{gcc-cpp.exe}, @file{gcc-cc1.exe}, etc.) and the C include files are
kept respectively.  This should be done with the commands:@refill

@smallexample
$ assign /system /translation=concealed -
  disk:[gcc.] gnu_cc
$ assign /system /translation=concealed -
  disk:[gcc.include.] gnu_cc_include
@end smallexample

@noindent
with the appropriate disk and directory names.  These commands can be
placed in your system startup file so they will be executed whenever
the machine is rebooted.  You may, if you choose, do this via the
@file{GCC_INSTALL.COM} script in the @file{[GCC]} directory.

@item
Install the @file{GCC} command with the command line:

@smallexample
$ set command /table=sys$common:[syslib]dcltables -
  /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
$ install replace sys$common:[syslib]dcltables
@end smallexample

@item
To install the help file, do the following:

@smallexample
$ library/help sys$library:helplib.hlb gcc.hlp
@end smallexample

@noindent
Now you can invoke the compiler with a command like @samp{gcc /verbose
file.c}, which is equivalent to the command @samp{gcc -v -c file.c} in
Unix.
@end enumerate

If you wish to use GNU C++ you must first install GNU CC, and then
perform the following steps:

@enumerate
@item
Define the VMS logical name @samp{GNU_GXX_INCLUDE} to point to the
directory where the preprocessor will search for the C++ header files.
This can be done with the command:@refill

@smallexample
$ assign /system /translation=concealed -
  disk:[gcc.gxx_include.] gnu_gxx_include
@end smallexample

@noindent
with the appropriate disk and directory name.  If you are going to be
using a C++ runtime library, this is where its install procedure will install
its header files.

@item
Obtain the file @file{gcc-cc1plus.exe}, and place this in the same
directory that @file{gcc-cc1.exe} is kept.

The GNU C++ compiler can be invoked with a command like @samp{gcc /plus
/verbose file.cc}, which is equivalent to the command @samp{g++ -v -c
file.cc} in Unix.
@end enumerate

We try to put corresponding binaries and sources on the VMS distribution
tape.  But sometimes the binaries will be from an older version than the
sources, because we don't always have time to update them.  (Use the
@samp{/version} option to determine the version number of the binaries and
compare it with the source file @file{version.c} to tell whether this is
so.)  In this case, you should use the binaries you get to recompile the
sources.  If you must recompile, here is how:

@enumerate
@item
Execute the command procedure @file{vmsconfig.com} to set up the files
@file{tm.h}, @file{config.h}, @file{aux-output.c}, and @file{md.}, and
to create files @file{tconfig.h} and @file{hconfig.h}.  This procedure
also creates several linker option files used by @file{make-cc1.com} and
a data file used by @file{make-l2.com}.@refill

@smallexample
$ @@vmsconfig.com
@end smallexample

@item
Setup the logical names and command tables as defined above.  In
addition, define the VMS logical name @samp{GNU_BISON} to point at the
to the directories where the Bison executable is kept.  This should be
done with the command:@refill

@smallexample
$ assign /system /translation=concealed -
  disk:[bison.] gnu_bison
@end smallexample

You may, if you choose, use the @file{INSTALL_BISON.COM} script in the
@file{[BISON]} directory.

@item
Install the @samp{BISON} command with the command line:@refill

@smallexample
$ set command /table=sys$common:[syslib]dcltables -
  /output=sys$common:[syslib]dcltables -
  gnu_bison:[000000]bison
$ install replace sys$common:[syslib]dcltables
@end smallexample

@item
Type @samp{@@make-gcc} to recompile everything (alternatively, submit
the file @file{make-gcc.com} to a batch queue).  If you wish to build
the GNU C++ compiler as well as the GNU CC compiler, you must first edit
@file{make-gcc.com} and follow the instructions that appear in the
comments.@refill

@item
In order to use GCC, you need a library of functions which GCC compiled code
will call to perform certain tasks, and these functions are defined in the
file @file{libgcc2.c}.  To compile this you should use the command procedure
@file{make-l2.com}, which will generate the library @file{libgcc2.olb}.
@file{libgcc2.olb} should be built using the compiler built from
the same distribution that @file{libgcc2.c} came from, and
@file{make-gcc.com} will automatically do all of this for you.

To install the library, use the following commands:@refill

@smallexample
$ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
$ library gnu_cc:[000000]gcclib/delete=L_*
$ library libgcc2/extract=*/output=libgcc2.obj
$ library gnu_cc:[000000]gcclib libgcc2.obj
@end smallexample

The first command simply removes old modules that will be replaced with
modules from @file{libgcc2} under different module names.  The modules
@code{new} and @code{eprintf} may not actually be present in your
@file{gcclib.olb}---if the VMS librarian complains about those modules
not being present, simply ignore the message and continue on with the
next command.  The second command removes the modules that came from the
previous version of the library @file{libgcc2.c}.

Whenever you update the compiler on your system, you should also update the
library with the above procedure.

@item
You may wish to build GCC in such a way that no files are written to the
directory where the source files reside.  An example would be the when
the source files are on a read-only disk.  In these cases, execute the
following DCL commands (substituting your actual path names):

@smallexample
$ assign dua0:[gcc.build_dir.]/translation=concealed, -
         dua1:[gcc.source_dir.]/translation=concealed  gcc_build
$ set default gcc_build:[000000]
@end smallexample

@noindent
where the directory @file{dua1:[gcc.source_dir]} contains the source
code, and the directory @file{dua0:[gcc.build_dir]} is meant to contain
all of the generated object files and executables.  Once you have done
this, you can proceed building GCC as described above.  (Keep in mind
that @file{gcc_build} is a rooted logical name, and thus the device
names in each element of the search list must be an actual physical
device name rather than another rooted logical name).

@item
@strong{If you are building GNU CC with a previous version of GNU CC,
you also should check to see that you have the newest version of the
assembler}.  In particular, GNU CC version 2 treats global constant
variables slightly differently from GNU CC version 1, and GAS version
1.38.1 does not have the patches required to work with GCC version 2.
If you use GAS 1.38.1, then @code{extern const} variables will not have
the read-only bit set, and the linker will generate warning messages
about mismatched psect attributes for these variables.  These warning
messages are merely a nuisance, and can safely be ignored.

If you are compiling with a version of GNU CC older than 1.33, specify
@samp{/DEFINE=("inline=")} as an option in all the compilations.  This
requires editing all the @code{gcc} commands in @file{make-cc1.com}.
(The older versions had problems supporting @code{inline}.)  Once you
have a working 1.33 or newer GNU CC, you can change this file back.

@item
If you want to build GNU CC with the VAX C compiler, you will need to
make minor changes in @file{make-cccp.com} and @file{make-cc1.com}
to choose alternate definitions of @code{CC}, @code{CFLAGS}, and
@code{LIBS}.  See comments in those files.  However, you must
also have a working version of the GNU assembler (GNU as, aka GAS) as
it is used as the back-end for GNU CC to produce binary object modules
and is not included in the GNU CC sources.  GAS is also needed to
compile @file{libgcc2} in order to build @file{gcclib} (see above);
@file{make-l2.com} expects to be able to find it operational in
@file{gnu_cc:[000000]gnu-as.exe}.

To use GNU CC on VMS, you need the VMS driver programs
@file{gcc.exe}, @file{gcc.com}, and @file{gcc.cld}.  They are
distributed with the VMS binaries (@file{gcc-vms}) rather than the
GNU CC sources.  GAS is also included in @file{gcc-vms}, as is Bison.

Once you have successfully built GNU CC with VAX C, you should use the
resulting compiler to rebuild itself.  Before doing this, be sure to
restore the @code{CC}, @code{CFLAGS}, and @code{LIBS} definitions in
@file{make-cccp.com} and @file{make-cc1.com}.  The second generation
compiler will be able to take advantage of many optimizations that must
be suppressed when building with other compilers.
@end enumerate

Under previous versions of GNU CC, the generated code would occasionally
give strange results when linked with the sharable @file{VAXCRTL} library.
Now this should work.

Even with this version, however, GNU CC itself should not be linked with
the sharable @file{VAXCRTL}.  The version of @code{qsort} in
@file{VAXCRTL} has a bug (known to be present in VMS versions V4.6
through V5.5) which causes the compiler to fail.

The executables are generated by @file{make-cc1.com} and
@file{make-cccp.com} use the object library version of @file{VAXCRTL} in
order to make use of the @code{qsort} routine in @file{gcclib.olb}.  If
you wish to link the compiler executables with the shareable image
version of @file{VAXCRTL}, you should edit the file @file{tm.h} (created
by @file{vmsconfig.com}) to define the macro @code{QSORT_WORKAROUND}.

@code{QSORT_WORKAROUND} is always defined when GNU CC is compiled with
VAX C, to avoid a problem in case @file{gcclib.olb} is not yet
available.

@node Collect2
@section @code{collect2}

Many target systems do not have support in the assembler and linker for
``constructors''---initialization functions to be called before the
official ``start'' of @code{main}.  On such systems, GNU CC uses a
utility called @code{collect2} to arrange to call these functions at
start time.

The program @code{collect2} works by linking the program once and
looking through the linker output file for symbols with particular names
indicating they are constructor functions.  If it finds any, it
creates a new temporary @samp{.c} file containing a table of them,
compiles it, and links the program a second time including that file.

@findex __main
@cindex constructors, automatic calls
The actual calls to the constructors are carried out by a subroutine
called @code{__main}, which is called (automatically) at the beginning
of the body of @code{main} (provided @code{main} was compiled with GNU
CC).  Calling @code{__main} is necessary, even when compiling C code, to
allow linking C and C++ object code together.  (If you use
@samp{-nostdlib}, you get an unresolved reference to @code{__main},
since it's defined in the standard GCC library.  Include @samp{-lgcc} at
the end of your compiler command line to resolve this reference.)

The program @code{collect2} is installed as @code{ld} in the directory
where the passes of the compiler are installed.  When @code{collect2}
needs to find the @emph{real} @code{ld}, it tries the following file
names:

@itemize @bullet
@item
@file{real-ld} in the directories listed in the compiler's search
directories.

@item
@file{real-ld} in the directories listed in the environment variable
@code{PATH}.

@item
The file specified in the @code{REAL_LD_FILE_NAME} configuration macro,
if specified.

@item
@file{ld} in the compiler's search directories, except that
@code{collect2} will not execute itself recursively.

@item
@file{ld} in @code{PATH}.
@end itemize

``The compiler's search directories'' means all the directories where
@code{gcc} searches for passes of the compiler.  This includes
directories that you specify with @samp{-B}.

Cross-compilers search a little differently:

@itemize @bullet
@item
@file{real-ld} in the compiler's search directories.

@item
@file{@var{target}-real-ld} in @code{PATH}.

@item
The file specified in the @code{REAL_LD_FILE_NAME} configuration macro,
if specified.

@item
@file{ld} in the compiler's search directories.

@item
@file{@var{target}-ld} in @code{PATH}.
@end itemize

@code{collect2} explicitly avoids running @code{ld} using the file name
under which @code{collect2} itself was invoked.  In fact, it remembers
up a list of such names---in case one copy of @code{collect2} finds
another copy (or version) of @code{collect2} installed as @code{ld} in a
second place in the search path.

@code{collect2} searches for the utilities @code{nm} and @code{strip}
using the same algorithm as above for @code{ld}.

@node Header Dirs
@section Standard Header File Directories

@code{GCC_INCLUDE_DIR} means the same thing for native and cross.  It is
where GNU CC stores its private include files, and also where GNU CC
stores the fixed include files.  A cross compiled GNU CC runs
@code{fixincludes} on the header files in @file{$(tooldir)/include}.
(If the cross compilation header files need to be fixed, they must be
installed before GNU CC is built.  If the cross compilation header files
are already suitable for ANSI C and GNU CC, nothing special need be
done).

@code{GPLUS_INCLUDE_DIR} means the same thing for native and cross.  It
is where @code{g++} looks first for header files.  The C++ library
installs only target independent header files in that directory.

@code{LOCAL_INCLUDE_DIR} is used only for a native compiler.  It is
normally @file{/usr/local/include}.  GNU CC searches this directory so
that users can install header files in @file{/usr/local/include}.

@code{CROSS_INCLUDE_DIR} is used only for a cross compiler.  GNU CC
doesn't install anything there.

@code{TOOL_INCLUDE_DIR} is used for both native and cross compilers.  It
is the place for other packages to install header files that GNU CC will
use.  For a cross-compiler, this is the equivalent of
@file{/usr/include}.  When you build a cross-compiler,
@code{fixincludes} processes any header files in this directory.
