@c Copyright (C) 1988, 89, 92-98, 1999 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.

Note most of this information is out of date and superceded by the EGCS
install procedures.  It is provided for historical reference only.

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

@menu
* Configuration Files::  Files created by running @code{configure}.
* 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 GNU or 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.

@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
Specify the host, build and target machine configurations.  You do this
when you run the @file{configure} script.

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{--host} option; the host and target will default to be
the same as the host machine.  (If you are building a cross-compiler,
see @ref{Cross-Compiler}.)

Here is an example:

@smallexample
./configure --host=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.

@item
When running @code{configure}, you may also need to specify certain
additional options that 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.
@c Specifically, it inhibits the installation of @code{collect2}, a program
@c which otherwise serves as a front-end for the system's linker on most
@c 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 Haifa scheduler
@cindex scheduler, experimental
@item --enable-haifa
@itemx --disable-haifa
Use @samp{--enable-haifa} to enable use of an experimental instruction
scheduler (from IBM Haifa).  This may or may not produce better code.
Some targets on which it is known to be a win enable it by default; use
@samp{--disable-haifa} to disable it in these cases.  @code{configure}
will print out whether the Haifa scheduler is enabled when it is run.

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

@cindex Internal Compiler Checking
@item --enable-checking
When you specify this option, the compiler is built to perform checking
of tree node types when referencing fields of that node.  This does not
change the generated code, but adds error checking within the compiler.
This will slow down the compiler and may only work properly if you
are building the compiler with GNU C.

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}.
@end itemize

@cindex Native Language Support
@cindex NLS
@item --enable-nls
@itemx --disable-nls
The @samp{--enable-nls} option enables Native Language Support (NLS),
which lets GCC output diagnostics in languages other than American
English.  No translations are available yet, so the main users of this
option now are those translating GCC's diagnostics who want to test
their work.  Once translations become available, Native Language Support
will become enabled by default.  The @samp{--disable-nls} option
disables NLS.

@cindex @code{gettext}
@item --with-included-gettext
If NLS is enabled, the GCC build procedure normally attempts to use the
host's @code{gettext} libraries, and falls back on GCC's copy of the GNU
@code{gettext} library only if the host libraries do not suffice.  The
@samp{--with-included-gettext} option causes the build procedure to
prefer its copy of GNU @code{gettext}.

@cindex @code{catgets}
@item --with-catgets
If NLS is enabled, and if the host lacks @code{gettext} but has the
inferior @code{catgets} interface, the GCC build procedure normally
ignores @code{catgets} and instead uses GCC's copy of the GNU
@code{gettext} library.  The @samp{--with-catgets} option causes the
build procedure to use the host's @code{catgets} in this situation.
@end table

@item
In certain cases, you should specify certain other options when you run
@code{configure}.

@itemize @bullet
@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{--with-local-prefix} option below.  The directory
you specify need not exist, but its parent directory must exist.

@item
Specify @samp{--with-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{--with-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{--with-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{--with-local-prefix}!  The
directory you use for @samp{--with-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.
@end itemize

@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}, a warning about a comparison always being zero
in @file{enquire.o}, and warnings about shift counts exceeding type
widths in @file{cexp.y}.  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 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
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
canonicalized form of target machine type specified when you ran
@file{configure}, and @var{version} is the version number of GNU CC.
This naming scheme permits various versions and/or cross-compilers to
coexist.  It also copies the executables for compilers for other
languages (e.g., @file{cc1plus} for C++) to the same directory.

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

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

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

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

@item
@cindex C++ runtime library
@cindex @code{libstdc++}
If you're going to use C++, you need to install the C++ runtime library.
This includes all I/O functionality, special class libraries, etc.

The standard C++ runtime library for GNU CC is called @samp{libstdc++}.
An obsolescent library @samp{libg++} may also be available, but it's
necessary only for older software that hasn't been converted yet; if
you don't know whether you need @samp{libg++} then you probably don't
need it.

Here's one way to build and install @samp{libstdc++} for GNU CC:

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

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

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

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

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

@end itemize

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

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

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

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

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

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

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

@node Configuration Files
@section Files Created by @code{configure}

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

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

Here are the possible CPU types:

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

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

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

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

Here is a list of system types:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@item decstation-*
MIPS-based DECstations can support three different personalities:
Ultrix, DEC OSF/1, and OSF/rose.  (Alpha-based DECstation products have
a configuration name beginning with @samp{alpha-dec}.)  To configure GCC
for these platforms use the following configurations:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

On some versions of HP-UX, you will need to install GNU @file{sed}.

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

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

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

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

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

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

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

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

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

GNU CC can generate COFF binaries if you specify @samp{-mcoff} or ELF
binaries, the default.    A full @samp{make bootstrap} is recommended
so that an ELF compiler that builds ELF is generated.                   

You must have TLS597 from @uref{ftp://ftp.sco.com/TLS} installed for ELF
C++ binaries to work correctly on releases before 5.0.4. 

The native SCO assembler that is provided with the OS at no charge
is normally required.  If, however, you must be able to use the GNU
assembler (perhaps you have complex asms) you must configure this
package @samp{--with-gnu-as}.  To do this, install (cp or symlink)
gcc/as to your copy of the GNU assembler.  You must use a recent version
of GNU binutils; version 2.9.1 seems to work well.  If you select this
option, you will be unable to build COFF images.  Trying to do so will
result in non-obvious failures.  In general, the "--with-gnu-as" option
isn't as well tested as the native assembler.

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

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

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

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

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

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

@item i386-sequent-ptx1*
@itemx i386-sequent-ptx2*
You must install GNU @file{sed} before running @file{configure}.

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

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

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

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

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

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

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

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

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

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

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

@item m68000-hp-bsd
HP 9000 series 200 running BSD.  Note that the C compiler that comes
with this system cannot compile GNU CC; contact @code{law@@cygnus.com}
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 find binaries of GNU CC
for bootstrapping on @code{jagubox.gsfc.nasa.gov}.
You will also a patched version of @file{/bin/ld} there that
raises some of the arbitrary limits found in the original.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@item rs6000-*-aix
@itemx powerpc-*-aix
Various early versions of each release of the IBM XLC compiler will not
bootstrap GNU CC.  Symptoms include differences between the stage2 and
stage3 object files, and errors when compiling @file{libgcc.a} or
@file{enquire}.  Known problematic releases include: xlc-1.2.1.8,
xlc-1.3.0.0 (distributed with AIX 3.2.5), and xlc-1.3.0.19.  Both
xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are known to produce working
versions of GNU CC, but most other recent releases correctly bootstrap
GNU CC.

Release 4.3.0 of AIX and ones 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 any 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, do not use the linker or other tools in
@file{/usr/ucb} to build GNU CC.  Use @code{/usr/ccs/bin}.

If the assembler reports @samp{Error: misaligned data} when bootstrapping,
you are probably using an obsolete version of the GNU assembler.  Upgrade
to the latest version of GNU @code{binutils}, or use the Solaris assembler.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@smallexample
$ @@vmsconfig.com
@end smallexample

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@node Collect2
@section @code{collect2}

GNU CC uses a utility called @code{collect2} on nearly all systems to arrange
to call various initialization functions at start time.

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

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

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

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

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

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

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

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

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

Cross-compilers search a little differently:

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

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

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

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

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

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

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

@node Header Dirs
@section Standard Header File Directories

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

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

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

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

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