@c Copyright (C) 1988,89,92,93,94,95,96 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-objcthreads=@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
If you're going to use C++, it's likely that you need to also install
the libg++ distribution.  It should be available from the same
place where you got the GNU C distribution.  Just as GNU C does not
distribute a C runtime library, it also does not include a C++ run-time
library.  All I/O functionality, special class libraries, etc., are
available in the libg++ distribution.

@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, amigados, 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.  (VMS on the Alpha is not currently supported by GNU
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 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 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.

@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-*-*
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 SCO Open Server Release 5.0.  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 CC, @emph{not} CFLAGS.  You should
use some variant of: @samp{CC="stage1/xgcc -melf" CFLAGS="-Bstage1/"} etc.
If you do not do this, the boostrap will generate completely bogus versions
of libgcc.a generated.

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.

@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.  In addition, you probably
need to create a file named @file{string.h} containing just one line:
@samp{#include <strings.h>}.

@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 let 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
Embedded M32R system.

@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 on line 37 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.  In addition, you probably
need to create a file named @file{string.h} containing just one line:
@samp{#include <strings.h>}.

@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 libg++, this is where the libg++ install procedure will install
the libg++ 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.  @code{libg++}
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.
