1169 lines
49 KiB
Plaintext
1169 lines
49 KiB
Plaintext
This is Info file gcc.info, produced by Makeinfo-1.47 from the input
|
||
file gcc.texi.
|
||
|
||
This file documents the use and the internals of the GNU compiler.
|
||
|
||
Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
|
||
|
||
Permission is granted to make and distribute verbatim copies of this
|
||
manual provided the copyright notice and this permission notice are
|
||
preserved on all copies.
|
||
|
||
Permission is granted to copy and distribute modified versions of
|
||
this manual under the conditions for verbatim copying, provided also
|
||
that the sections entitled "GNU General Public License" and "Boycott"
|
||
are included exactly as in the original, and provided that the entire
|
||
resulting derived work is distributed under the terms of a permission
|
||
notice identical to this one.
|
||
|
||
Permission is granted to copy and distribute translations of this
|
||
manual into another language, under the above conditions for modified
|
||
versions, except that the sections entitled "GNU General Public
|
||
License" and "Boycott", and this permission notice, may be included in
|
||
translations approved by the Free Software Foundation instead of in the
|
||
original English.
|
||
|
||
|
||
File: gcc.info, Node: M88K Options, Next: RS/6000 Options, Prev: AMD29K Options, Up: Submodel Options
|
||
|
||
M88K Options
|
||
------------
|
||
|
||
These `-m' options are defined for Motorola 88K architectures:
|
||
|
||
`-m88000'
|
||
Generate code that works well on both the m88100 and the m88110.
|
||
|
||
`-m88100'
|
||
Generate code tha Generate code that works best for the m88100,
|
||
but that also runs on the m88110.
|
||
|
||
`-m88110'
|
||
Generate code that works best for the m88110, and may not run on
|
||
the m88100.
|
||
|
||
`-midentify-revision'
|
||
Include an `ident' directive in the assembler output recording the
|
||
source file name, compiler name and version, timestamp, and
|
||
compilation flags used.
|
||
|
||
`-mno-underscores'
|
||
In assembler output, emit symbol names without adding an underscore
|
||
character at the beginning of each name. The default is to use an
|
||
underscore as prefix on each name.
|
||
|
||
`-mocs-debug-info'
|
||
`-mno-ocs-debug-info'
|
||
Include (or omit) additional debugging information (about
|
||
registers used in each stack frame) as specified in the 88open
|
||
Object Compatibility Standard, "OCS". This extra information
|
||
allows debugging of code that has had the frame pointer
|
||
eliminated. The default for DG/UX, SVr4, and Delta 88 SVr3.2 is
|
||
to include this information; other 88k configurations omit this
|
||
information by default.
|
||
|
||
`-mocs-frame-position'
|
||
When emitting COFF debugging information for automatic variables
|
||
and parameters stored on the stack, use the offset from the
|
||
canonical frame address, which is the stack pointer (register 31)
|
||
on entry to the function. The DG/UX, SVr4, Delta88 SVr3.2, and
|
||
BCS configurations use `-mocs-frame-position'; other 88k
|
||
configurations have the default `-mno-ocs-frame-position'.
|
||
|
||
`-mno-ocs-frame-position'
|
||
When emitting COFF debugging information for automatic variables
|
||
and parameters stored on the stack, use the offset from the frame
|
||
pointer register (register 30). When this option is in effect,
|
||
the frame pointer is not eliminated when debugging information is
|
||
selected by the -g switch.
|
||
|
||
`-moptimize-arg-area'
|
||
`-mno-optimize-arg-area'
|
||
Control how to store function arguments in stack frames.
|
||
`-moptimize-arg-area' saves space, but was ruled illegal by 88open.
|
||
`-mno-optimize-arg-area' conforms to the 88open standards. By
|
||
default GNU CC does not optimize the argument area.
|
||
|
||
`-mshort-data-NUM'
|
||
Generate smaller data references by making them relative to `r0',
|
||
which allows loading a value using a single instruction (rather
|
||
than the usual two). You control which data references are
|
||
affected by specifying NUM with this option. For example, if you
|
||
specify `-mshort-data-512', then the data references affected are
|
||
those involving displacements of less than 512 bytes.
|
||
`-mshort-data-NUM' is not effective for NUM greater than 64K.
|
||
|
||
`-msvr4'
|
||
`-msvr3'
|
||
Turn on (`-msvr4') or off (`-msvr3') compiler extensions related
|
||
to System V release 4 (SVr4). This controls the following:
|
||
|
||
1. Which variant of the assembler syntax to emit (which you can
|
||
select independently using `-mversion-03.00').
|
||
|
||
2. `-msvr4' makes the C preprocessor recognize `#pragma weak'
|
||
that is used on System V release 4.
|
||
|
||
3. `-msvr4' makes GNU CC issue additional declaration directives
|
||
used in SVr4.
|
||
|
||
`-msvr3' is the default for all m88K configurations except the
|
||
SVr4 configuration.
|
||
|
||
`-mversion-03.00'
|
||
In the DG/UX configuration, there are two flavors of SVr4. This
|
||
option modifies `-msvr4' to select whether the hybrid-COFF or
|
||
real-ELF flavor is used. All other configurations ignore this
|
||
option.
|
||
|
||
`-mno-check-zero-division'
|
||
`-mcheck-zero-division'
|
||
Early models of the 88K architecture had problems with division by
|
||
zero; in particular, many of them didn't trap. Use these options
|
||
to avoid including (or to include explicitly) additional code to
|
||
detect division by zero and signal an exception. All GNU CC
|
||
configurations for the 88K use `-mcheck-zero-division' by default.
|
||
|
||
`-muse-div-instruction'
|
||
Do not emit code to check both the divisor and dividend when doing
|
||
signed integer division to see if either is negative, and adjust
|
||
the signs so the divide is done using non-negative numbers.
|
||
Instead, rely on the operating system to calculate the correct
|
||
value when the `div' instruction traps. This results in different
|
||
behavior when the most negative number is divided by -1, but is
|
||
useful when most or all signed integer divisions are done with
|
||
positive numbers.
|
||
|
||
`-mtrap-large-shift'
|
||
`-mhandle-large-shift'
|
||
Include code to detect bit-shifts of more than 31 bits;
|
||
respectively, trap such shifts or emit code to handle them
|
||
properly. By default GNU CC makes no special provision for large
|
||
bit shifts.
|
||
|
||
`-mwarn-passed-structs'
|
||
Warn when a function passes a struct as an argument or result.
|
||
Structure-passing conventions have changed during the evolution of
|
||
the C language, and are often the source of portability problems.
|
||
By default, GNU CC issues no such warning.
|
||
|
||
|
||
File: gcc.info, Node: RS/6000 Options, Next: RT Options, Prev: M88K Options, Up: Submodel Options
|
||
|
||
IBM RS/6000 Options
|
||
-------------------
|
||
|
||
Only one pair of `-m' options is defined for the IBM RS/6000:
|
||
|
||
`-mfp-in-toc'
|
||
`-mno-fp-in-toc'
|
||
Control whether or not floating-point constants go in the Table of
|
||
Contents (TOC), a table of all global variable and function
|
||
addresses. By default GNU CC puts floating-point constants there;
|
||
if the TOC overflows, `-mno-fp-in-toc' will reduce the size of the
|
||
TOC, which may avoid the overflow.
|
||
|
||
|
||
File: gcc.info, Node: RT Options, Next: MIPS Options, Prev: RS/6000 Options, Up: Submodel Options
|
||
|
||
IBM RT Options
|
||
--------------
|
||
|
||
These `-m' options are defined for the IBM RT PC:
|
||
|
||
`-min-line-mul'
|
||
Use an in-line code sequence for integer multiplies. This is the
|
||
default.
|
||
|
||
`-mcall-lib-mul'
|
||
Call `lmul$$' for integer multiples.
|
||
|
||
`-mfull-fp-blocks'
|
||
Generate full-size floating point data blocks, including the
|
||
minimum amount of scratch space recommended by IBM. This is the
|
||
default.
|
||
|
||
`-mminimum-fp-blocks'
|
||
Do not include extra scratch space in floating point data blocks.
|
||
This results in smaller code, but slower execution, since scratch
|
||
space must be allocated dynamically.
|
||
|
||
`-mfp-arg-in-fpregs'
|
||
Use a calling sequence incompatible with the IBM calling
|
||
convention in which floating point arguments are passed in
|
||
floating point registers. Note that `varargs.h' and `stdargs.h'
|
||
will not work with floating point operands if this option is
|
||
specified.
|
||
|
||
`-mfp-arg-in-gregs'
|
||
Use the normal calling convention for floating point arguments.
|
||
This is the default.
|
||
|
||
`-mhc-struct-return'
|
||
Return structures of more than one word in memory, rather than in a
|
||
register. This provides compatibility with the MetaWare HighC (hc)
|
||
compiler. Use `-fpcc-struct-return' for compatibility with the
|
||
Portable C Compiler (pcc).
|
||
|
||
`-mnohc-struct-return'
|
||
Return some structures of more than one word in registers, when
|
||
convenient. This is the default. For compatibility with the
|
||
IBM-supplied compilers, use either `-fpcc-struct-return' or
|
||
`-mhc-struct-return'.
|
||
|
||
|
||
File: gcc.info, Node: MIPS Options, Next: i386 Options, Prev: RT Options, Up: Submodel Options
|
||
|
||
MIPS Options
|
||
------------
|
||
|
||
These `-m' options are defined for the MIPS family of computers:
|
||
|
||
`-mcpu=CPU TYPE'
|
||
Assume the defaults for the machine type CPU TYPE when scheduling
|
||
instructions. The default CPU TYPE is `default', which picks the
|
||
longest cycles times for any of the machines, in order that the
|
||
code run at reasonable rates on all MIPS cpu's. Other choices for
|
||
CPU TYPE are `r2000', `r3000', `r4000', and `r6000'. While
|
||
picking a specific CPU TYPE will schedule things appropriately for
|
||
that particular chip, the compiler will not generate any code that
|
||
does not meet level 1 of the MIPS ISA (instruction set
|
||
architecture) without the `-mips2' or `-mips3' switches being used.
|
||
|
||
`-mips2'
|
||
Issue instructions from level 2 of the MIPS ISA (branch likely,
|
||
square root instructions). The `-mcpu=r4000' or `-mcpu=r6000'
|
||
switch must be used in conjunction with `-mips2'.
|
||
|
||
`-mips3'
|
||
Issue instructions from level 3 of the MIPS ISA (64 bit
|
||
instructions). You must use the `-mcpu=r4000' switch along with
|
||
`-mips3'.
|
||
|
||
`-mint64'
|
||
`-mlong64'
|
||
`-mlonglong128'
|
||
These options don't work at present.
|
||
|
||
`-mmips-as'
|
||
Generate code for the MIPS assembler, and invoke `mips-tfile' to
|
||
add normal debug information. This is the default for all
|
||
platforms except for the OSF/1 reference platform, using the
|
||
OSF/rose object format. If the either of the `-gstabs' or
|
||
`-gstabs+' switches are used, the `mips-tfile' program will
|
||
encapsulate the stabs within MIPS ECOFF.
|
||
|
||
`-mgas'
|
||
Generate code for the GNU assembler. This is the default on the
|
||
OSF/1 reference platform, using the OSF/rose object format.
|
||
|
||
`-mrnames'
|
||
`-mno-rnames'
|
||
The `-mrnames' switch says to output code using the MIPS software
|
||
names for the registers, instead of the hardware names (ie, A0
|
||
instead of $4). The GNU assembler does not support the `-mrnames'
|
||
switch, and the MIPS assembler will be instructed to run the MIPS
|
||
C preprocessor over the source file. The `-mno-rnames' switch is
|
||
default.
|
||
|
||
`-mgpopt'
|
||
`-mno-gpopt'
|
||
The `-mgpopt' switch says to write all of the data declarations
|
||
before the instructions in the text section, this allows the MIPS
|
||
assembler to generate one word memory references instead of using
|
||
two words for short global or static data items. This is on by
|
||
default if optimization is selected.
|
||
|
||
`-mstats'
|
||
`-mno-stats'
|
||
For each non-inline function processed, the `-mstats' switch
|
||
causes the compiler to emit one line to the standard error file to
|
||
print statistics about the program (number of registers saved,
|
||
stack size, etc.).
|
||
|
||
`-mmemcpy'
|
||
`-mno-memcpy'
|
||
The `-mmemcpy' switch makes all block moves call the appropriate
|
||
string function (`memcpy' or `bcopy') instead of possibly
|
||
generating inline code.
|
||
|
||
`-mmips-tfile'
|
||
`-mno-mips-tfile'
|
||
The `-mno-mips-tfile' switch causes the compiler not postprocess
|
||
the object file with the `mips-tfile' program, after the MIPS
|
||
assembler has generated it to add debug support. If `mips-tfile'
|
||
is not run, then no local variables will be available to the
|
||
debugger. In addition, `stage2' and `stage3' objects will have
|
||
the temporary file names passed to the assembler embedded in the
|
||
object file, which means the objects will not compare the same.
|
||
The `-mno-mips-tfile' switch should only be used when there are
|
||
bugs in the `mips-tfile' program that prevents compilation.
|
||
|
||
`-msoft-float'
|
||
Generate output containing library calls for floating point.
|
||
*Warning:* the requisite libraries are not part of GNU CC.
|
||
Normally the facilities of the machine's usual C compiler are
|
||
used, but this can't be done directly in cross-compilation. You
|
||
must make your own arrangements to provide suitable library
|
||
functions for cross-compilation.
|
||
|
||
`-mhard-float'
|
||
Generate output containing floating point instructions. This is
|
||
the default if you use the unmodified sources.
|
||
|
||
`-mfp64'
|
||
Assume that the FR bit in the status word is on, and that there
|
||
are 32 64-bit floating point registers, instead of 32 32-bit
|
||
floating point registers. You must also specify the `-mcpu=r4000'
|
||
and `-mips3' switches.
|
||
|
||
`-mfp32'
|
||
Assume that there are 32 32-bit floating point registers. This is
|
||
the default.
|
||
|
||
`-mabicalls'
|
||
`-mno-abicalls'
|
||
Emit the `.abicalls', `.cpload', and `.cprestore' pseudo
|
||
operations that some System V.4 ports use for position independent
|
||
code.
|
||
|
||
`-mhalf-pic'
|
||
`-mno-half-pic'
|
||
Put pointers to extern references into the data section and load
|
||
them up, rather than put the references in the text section.
|
||
These options do not work at present.
|
||
|
||
`-G NUM'
|
||
Put global and static items less than or equal to NUM bytes into
|
||
the small data or bss sections instead of the normal data or bss
|
||
section. This allows the assembler to emit one word memory
|
||
reference instructions based on the global pointer (GP or $28),
|
||
instead of the normal two words used. By default, NUM is 8 when
|
||
the MIPS assembler is used, and 0 when the GNU assembler is used.
|
||
The `-G NUM' switch is also passed to the assembler and linker.
|
||
All modules should be compiled with the same `-G NUM' value.
|
||
|
||
`-nocpp'
|
||
Tell the MIPS assembler to not run it's preprocessor over user
|
||
assembler files (with a `.s' suffix) when assembling them.
|
||
|
||
These options are defined by the macro `TARGET_SWITCHES' in the
|
||
machine description. The default for the options is also defined by
|
||
that macro, which enables you to change the defaults.
|
||
|
||
|
||
File: gcc.info, Node: i386 Options, Prev: MIPS Options, Up: Submodel Options
|
||
|
||
Intel 386 Options
|
||
-----------------
|
||
|
||
These `-m' options are defined for the i386 family of computers:
|
||
|
||
`-m486'
|
||
`-mno486'
|
||
Control whether or not code is optimized for a 486 instead of an
|
||
386. Code generated for an 486 will run on a 386 and vice versa.
|
||
|
||
`-msoft-float'
|
||
Generate output containing library calls for floating point.
|
||
*Warning:* the requisite libraries are not part of GNU CC.
|
||
Normally the facilities of the machine's usual C compiler are
|
||
used, but this can't be done directly in cross-compilation. You
|
||
must make your own arrangements to provide suitable library
|
||
functions for cross-compilation.
|
||
|
||
On machines where a function returnings float point results in the
|
||
80387 register stack, some floating point opcodes may be emitted
|
||
even if `-msoft-float' is used.
|
||
|
||
|
||
File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC
|
||
|
||
Options for Code Generation Conventions
|
||
=======================================
|
||
|
||
These machine-independent options control the interface conventions
|
||
used in code generation.
|
||
|
||
Most of them have both positive and negative forms; the negative form
|
||
of `-ffoo' would be `-fno-foo'. In the table below, only one of the
|
||
forms is listed--the one which is not the default. You can figure out
|
||
the other form by either removing `no-' or adding it.
|
||
|
||
`-fpcc-struct-return'
|
||
Use the same convention for returning `struct' and `union' values
|
||
that is used by the usual C compiler on your system. This
|
||
convention is less efficient for small structures, and on many
|
||
machines it fails to be reentrant; but it has the advantage of
|
||
allowing intercallability between GNU CC-compiled code and
|
||
PCC-compiled code.
|
||
|
||
`-fshort-enums'
|
||
Allocate to an `enum' type only as many bytes as it needs for the
|
||
declared range of possible values. Specifically, the `enum' type
|
||
will be equivalent to the smallest integer type which has enough
|
||
room.
|
||
|
||
`-fshort-double'
|
||
Use the same size for `double' as for `float'.
|
||
|
||
`-fshared-data'
|
||
Requests that the data and non-`const' variables of this
|
||
compilation be shared data rather than private data. The
|
||
distinction makes sense only on certain operating systems, where
|
||
shared data is shared between processes running the same program,
|
||
while private data exists in one copy per process.
|
||
|
||
`-fno-common'
|
||
Allocate even uninitialized global variables in the bss section of
|
||
the object file, rather than generating them as common blocks.
|
||
This has the effect that if the same variable is declared (without
|
||
`extern') in two different compilations, you will get an error
|
||
when you link them. The only reason this might be useful is if you
|
||
wish to verify that the program will work on other systems which
|
||
always work this way.
|
||
|
||
`-fno-ident'
|
||
Ignore the `#ident' directive.
|
||
|
||
`-fno-gnu-linker'
|
||
Don't output global initializations such as C++ constructors and
|
||
destructors in the form used by the GNU linker (on systems where
|
||
the GNU linker is the standard method of handling them). Use this
|
||
option when you want to use a "collect" program and a non-GNU
|
||
linker.
|
||
|
||
`-finhibit-size-directive'
|
||
Don't output a `.size' assembler directive, or anything else that
|
||
would cause trouble if the function is split in the middle, and the
|
||
two halves are placed at locations far apart in memory. This
|
||
option is used when compiling `crtstuff.c'; you should not need to
|
||
use it for anything else.
|
||
|
||
`-fverbose-asm'
|
||
Put extra commentary information in the generated assembly code to
|
||
make it more readable. This option is generally only of use to
|
||
those who actually need to read the generated assembly code
|
||
(perhaps while debugging the compiler itself).
|
||
|
||
`-fvolatile'
|
||
Consider all memory references through pointers to be volatile.
|
||
|
||
`-fpic'
|
||
If supported for the target machines, generate position-independent
|
||
code, suitable for use in a shared library. All addresses will be
|
||
accessed through a global offset table (GOT). If the GOT size for
|
||
the linked executable exceeds a machine-specific maximum size, you
|
||
will get an error message from the linker indicating that `-fpic'
|
||
does not work; recompile with `-fPIC' instead. (These maximums
|
||
are 16k on the m88k, 8k on the Sparc, and 32k on the m68k and
|
||
RS/6000. The 386 has no such limit.)
|
||
|
||
Position-independent code requires special support, and therefore
|
||
works only on certain machines. Code generated for the IBM
|
||
RS/6000 is always position-independent.
|
||
|
||
The GNU assembler does not fully support PIC. Currently, you must
|
||
use some other assembler in order for PIC to work. We would
|
||
welcome volunteers to upgrade GAS to handle this; the first part
|
||
of the job is to figure out what the assembler must do differently.
|
||
|
||
`-fPIC'
|
||
If supported for the target machine, emit position-independent
|
||
code, suitable for dynamic linking and avoiding any limit on the
|
||
size of the global offset table. This option makes a difference
|
||
on the m68k, m88k and the Sparc.
|
||
|
||
Position-independent code requires special support, and therefore
|
||
works only on certain machines.
|
||
|
||
`-ffixed-REG'
|
||
Treat the register named REG as a fixed register; generated code
|
||
should never refer to it (except perhaps as a stack pointer, frame
|
||
pointer or in some other fixed role).
|
||
|
||
REG must be the name of a register. The register names accepted
|
||
are machine-specific and are defined in the `REGISTER_NAMES' macro
|
||
in the machine description macro file.
|
||
|
||
This flag does not have a negative form, because it specifies a
|
||
three-way choice.
|
||
|
||
`-fcall-used-REG'
|
||
Treat the register named REG as an allocatable register that is
|
||
clobbered by function calls. It may be allocated for temporaries
|
||
or variables that do not live across a call. Functions compiled
|
||
this way will not save and restore the register REG.
|
||
|
||
Use of this flag for a register that has a fixed pervasive role in
|
||
the machine's execution model, such as the stack pointer or frame
|
||
pointer, will produce disastrous results.
|
||
|
||
This flag does not have a negative form, because it specifies a
|
||
three-way choice.
|
||
|
||
`-fcall-saved-REG'
|
||
Treat the register named REG as an allocatable register saved by
|
||
functions. It may be allocated even for temporaries or variables
|
||
that live across a call. Functions compiled this way will save
|
||
and restore the register REG if they use it.
|
||
|
||
Use of this flag for a register that has a fixed pervasive role in
|
||
the machine's execution model, such as the stack pointer or frame
|
||
pointer, will produce disastrous results.
|
||
|
||
A different sort of disaster will result from the use of this flag
|
||
for a register in which function values may be returned.
|
||
|
||
This flag does not have a negative form, because it specifies a
|
||
three-way choice.
|
||
|
||
|
||
File: gcc.info, Node: Environment Variables, Prev: Code Gen Options, Up: Invoking GCC
|
||
|
||
Environment Variables Affecting GNU CC
|
||
======================================
|
||
|
||
This section describes several environment variables that affect how
|
||
GNU CC operates. They work by specifying directories or prefixes to use
|
||
when searching for various kinds of files.
|
||
|
||
Note that you can also specify places to search using options such as
|
||
`-B', `-I' and `-L' (*note Directory Options::.). These take
|
||
precedence over places specified using environment variables, which in
|
||
turn take precedence over those specified by the configuration of GNU
|
||
CC. *Note Driver::.
|
||
|
||
`TMPDIR'
|
||
If `TMPDIR' is set, it specifies the directory to use for temporary
|
||
files. GNU CC uses temporary files to hold the output of one
|
||
stage of compilation which is to be used as input to the next
|
||
stage: for example, the output of the preprocessor, which is the
|
||
input to the compiler proper.
|
||
|
||
`GCC_EXEC_PREFIX'
|
||
If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
|
||
names of the subprograms executed by the compiler. No slash is
|
||
added when this prefix is combined with the name of a subprogram,
|
||
but you can specify a prefix that ends with a slash if you wish.
|
||
|
||
If GNU CC cannot find the subprogram using the specified prefix, it
|
||
tries looking in the usual places for the subprogram.
|
||
|
||
Other prefixes specified with `-B' take precedence over this
|
||
prefix.
|
||
|
||
This prefix is also used for finding files such as `crt0.o' that
|
||
are used for linking.
|
||
|
||
In addition, the prefix is used in an unusual way in finding the
|
||
directories to search for header files. For each of the standard
|
||
directories whose name normally begins with
|
||
`/usr/local/lib/gcc-lib' (more precisely, with the value of
|
||
`GCC_INCLUDE_DIR'), GNU CC tries replacing that beginning with the
|
||
specified prefix to produce an alternate directory name. Thus,
|
||
with `-Bfoo/', GNU CC will search `foo/bar' where it would
|
||
normally search `/usr/local/lib/bar'. These alternate directories
|
||
are searched first; the standard directories come next.
|
||
|
||
`COMPILER_PATH'
|
||
The value of `COMPILER_PATH' is a colon-separated list of
|
||
directories, much like `PATH'. GNU CC tries the directories thus
|
||
specified when searching for subprograms, if it can't find the
|
||
subprograms using `GCC_EXEC_PREFIX'.
|
||
|
||
`LIBRARY_PATH'
|
||
The value of `LIBRARY_PATH' is a colon-separated list of
|
||
directories, much like `PATH'. GNU CC tries the directories thus
|
||
specified when searching for special linker files, if it can't
|
||
find them using `GCC_EXEC_PREFIX'. Linking using GNU CC also uses
|
||
these directories when searching for ordinary libraries for the
|
||
`-l' option (but directories specified with `-L' come first).
|
||
|
||
`C_INCLUDE_PATH'
|
||
`CPLUS_INCLUDE_PATH'
|
||
`OBJC_INCLUDE_PATH'
|
||
These environment variables pertain to particular languages. Each
|
||
variable's value is a colon-separated list of directories, much
|
||
like `PATH'. When GNU CC searches for header files, it tries the
|
||
directories listed in the variable for the language you are using,
|
||
after the directories specified with `-I' but before the standard
|
||
header file directories.
|
||
|
||
`DEPENDENCIES_OUTPUT'
|
||
If this variable is set, its value specifies how to output
|
||
dependencies for Make based on the header files processed by the
|
||
compiler. This output looks much like the output from the `-M'
|
||
option (*note Preprocessor Options::.), but it goes to a separate
|
||
file, and is in addition to the usual results of compilation.
|
||
|
||
The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
|
||
which case the Make rules are written to that file, guessing the
|
||
target name from the source file name. Or the value can have the
|
||
form `FILE TARGET', in which case the rules are written to file
|
||
FILE using TARGET as the target name.
|
||
|
||
|
||
File: gcc.info, Node: Installation, Next: Extensions, Prev: Invoking GCC, Up: Top
|
||
|
||
Installing GNU CC
|
||
*****************
|
||
|
||
Here is the procedure for installing GNU CC on a Unix system.
|
||
|
||
* Menu:
|
||
|
||
* Other Dir:: Compiling in a separate directory (not where the source is).
|
||
* Cross-Compiler:: Building and installing a cross-compiler.
|
||
* PA Install:: See below for installation on the HP Precision Architecture.
|
||
* Sun Install:: See below for installation on the Sun.
|
||
* 3b1 Install:: See below for installation on the 3b1.
|
||
* Unos Install:: See below for installation on Unos (from CRDS).
|
||
* VMS Install:: See below for installation on VMS.
|
||
|
||
1. If you have built GNU CC previously in the same directory for a
|
||
different target machine, do `make distclean' to delete all files
|
||
that might be invalid.
|
||
|
||
2. On a System V release 4 system, make sure `/usr/bin' precedes
|
||
`/usr/ucb' in `PATH'. The `cc' command in `/usr/ucb' uses
|
||
libraries which have bugs.
|
||
|
||
3. Specify the host and target machine configurations. You do this by
|
||
running the file `configure' with appropriate arguments.
|
||
|
||
If you are building a compiler to produce code for the machine it
|
||
runs on, specify just one machine type. Use the `--target'
|
||
option; the host type will default to be the same as the target.
|
||
(For information on building a cross-compiler, see *Note
|
||
Cross-Compiler::.) The command looks like this:
|
||
|
||
configure --target=sparc-sun-sunos4.1
|
||
|
||
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: `CPU-COMPANY-SYSTEM'. (The three parts
|
||
may themselves contain dashes; `configure' can figure out which
|
||
dashes serve which purpose.) For example, `m68k-sun-sunos4.1'
|
||
specifies a Sun 3.
|
||
|
||
You can also replace parts of the configuration by nicknames or
|
||
aliases. For example, `sun3' stands for `m68k-sun', so
|
||
`sun3-sunos4.1' is another way to specify a Sun 3. You can also
|
||
use simply `sun3-sunos', since the version of SunOS is assumed by
|
||
default to be version 4. `sun3-bsd' also works, since `configure'
|
||
knows that the only BSD variant on a Sun 3 is SunOS.
|
||
|
||
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.
|
||
|
||
Here are the possible CPU types:
|
||
|
||
a29k, arm, cN, hppa1.0, hppa1.1, i386, i860, i960, m68000,
|
||
m68k, m88k, mips, ns32k, romp, rs6000, sparc, vax, we32k.
|
||
|
||
Here are the recognized company names. As you can see, customary
|
||
abbreviations are used rather than the longer official names.
|
||
|
||
alliant, altos, apollo, att, convergent, convex, crds, dec,
|
||
dg, encore, harris, hp, ibm, mips, motorola, ncr, next, ns,
|
||
omron, sequent, sgi, sony, sun, tti, unicom.
|
||
|
||
The company name is meaningful only to disambiguate when the rest
|
||
of the information supplied is insufficient. You can omit it,
|
||
writing just `CPU-SYSTEM', if it is not needed. For example,
|
||
`vax-ultrix4.2' is equivalent to `vax-dec-ultrix4.2'.
|
||
|
||
Here is a list of system types:
|
||
|
||
bsd, sysv, mach, minix, genix, ultrix, vms, sco, isc, aix,
|
||
sunos, hpux, unos, luna, dgux, newsos, osfrose, osf, dynix,
|
||
aos, ctix.
|
||
|
||
You can omit the system type; then `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 `bsd4.3' or
|
||
`bsd4.4' to distinguish versions of BSD. In practice, the version
|
||
number is most needed for `sysv3' and `sysv4', which are often
|
||
treated differently.
|
||
|
||
If you specify an impossible combination such as `i860-dg-vms',
|
||
then you may get an error message from `configure', or it may
|
||
ignore part of the information and do the best it can with the
|
||
rest. `configure' always prints the canonical name for the
|
||
alternative that it used.
|
||
|
||
Often a particular model of machine has a name. Many machine
|
||
names are recognized as aliases for CPU/company combinations.
|
||
Thus, the machine name `sun3', mentioned above, is an alias for
|
||
`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:
|
||
|
||
3300, 3b1, 3bN, 7300, altos3068, altos, apollo68, att-7300,
|
||
balance, convex-cN, crds, decstation-3100, decstation, delta,
|
||
encore, fx2800, gmicro, hp7NN, hp8NN, hp9k2NN, hp9k3NN,
|
||
hp9k7NN, hp9k8NN, iris4d, iris, isi68, m3230, magnum, merlin,
|
||
miniframe, mmax, news-3600, news800, news, next, pbd, pc532,
|
||
pmax, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3,
|
||
sun4, symmetry, tower-32, tower.
|
||
|
||
Remember that a machine name specifies both the cpu type and the
|
||
company name.
|
||
|
||
There are three additional options you can specify independently to
|
||
describe variant hardware and software configurations. These are
|
||
`--with-gnu-as', `--with-gnu-ld', and `--nfp'.
|
||
|
||
`--with-gnu-as'
|
||
On certain systems, you must specify whether you want GNU CC
|
||
to work with the usual compilation tools or with the GNU
|
||
compilation tools (including GAS). Use the `--with-gnu-as'
|
||
argument when you run `configure', if you want to use the GNU
|
||
tools. (Specify `--with-gnu-ld' as well, since on these
|
||
systems GAS works only with the GNU linker.) The systems
|
||
were this makes a difference are `i386-ANYTHING-sysv',
|
||
`i860-ANYTHING-bsd', `m68k-hp-hpux', `m68k-sony-bsd',
|
||
`m68k-altos-sysv', `m68000-hp-hpux', and `m68000-att-sysv'.
|
||
On any other system, `--with-gnu-as' has no effect.
|
||
|
||
`--with-gnu-ld'
|
||
Specify the option `--with-gnu-ld' if you plan to use the GNU
|
||
linker. This inhibits the installation of `collect2', a
|
||
program which otherwise serves as a front-end for the
|
||
system's linker on most configurations.
|
||
|
||
`--nfp'
|
||
On certain systems, you must specify whether the machine has
|
||
a floating point unit. These systems are `m68k-sun-sunosN'
|
||
and `m68k-isi-bsd'. On any other system, `--nfp' currently
|
||
has no effect, though perhaps there are other systems where
|
||
it could usefully make a difference.
|
||
|
||
If you want to install your own homemade configuration files, you
|
||
can use `local' as the company name to access them. If you use
|
||
configuration `CPU-local', the entire configuration name is used
|
||
to form the configuration file names.
|
||
|
||
Thus, if you specify `m68k-local', then the files used are
|
||
`m68k-local.md', `m68k-local.h', `m68k-local.c',
|
||
`xm-m68k-local.h', `t-m68k-local', and `x-m68k-local'.
|
||
|
||
Here is a list of configurations that have special treatment or
|
||
special things you must know:
|
||
|
||
`i386-*-sco'
|
||
Compilation with RCC is recommended, but it produces lots of
|
||
spurious warnings. They do not necessarily indicate that
|
||
anything is wrong.
|
||
|
||
`i386-sequent'
|
||
Go to the Berkeley universe before compiling. In addition,
|
||
you probably need to create a file named `string.h'
|
||
containing just one line: `#include <strings.h>'.
|
||
|
||
`m68000-att'
|
||
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. *Note 3b1 Install::. You can
|
||
bootstrap it more easily with previous versions of GNU CC if
|
||
you have them.
|
||
|
||
`m68000-hp-bsd'
|
||
HP 9000 series 200 running BSD. Note that the C compiler
|
||
that comes with this system cannot compile GNU CC; contact
|
||
`law@cs.utah.edu' to get binaries of GNU CC for bootstrapping.
|
||
|
||
`m68k-altos'
|
||
Altos 3068. You must use the GNU assembler, linker and
|
||
debugger, with COFF-encapsulation. Also, you must fix a
|
||
kernel bug. Details in the file `README.ALTOS'.
|
||
|
||
`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_0800 from HP.
|
||
|
||
In addition, `--gas' does not currently work with this
|
||
configuration. Changes in HP-UX have broken the library
|
||
conversion tool and the linker.
|
||
|
||
`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.
|
||
|
||
`m88k-svr3'
|
||
Motorola m88k running the AT&T/Unisoft/Motorla 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
|
||
a problem with the standard C compiler. It is best, however,
|
||
to use an older version of GNU CC for bootstrapping.
|
||
|
||
`m88k-dgux'
|
||
Motorola m88k running DG/UX. To build native or cross
|
||
compilers on DG/UX, you must first change to the 88open BCS
|
||
software development environment. This is done by issuing
|
||
this command:
|
||
|
||
eval `sde-target m88kbcs`
|
||
|
||
`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 `memcpy', `memcmp', and `memset'. If your system
|
||
lacks these, you must remove or undo the definition of
|
||
`TARGET_MEM_FUNCTIONS' in `mips-bsd.h'.
|
||
|
||
`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.
|
||
|
||
`ns32k-encore'
|
||
Encore ns32000 system. Encore systems are supported only
|
||
under BSD.
|
||
|
||
`ns32k-*-genix'
|
||
National Semiconductor ns32000 system. Genix has bugs in
|
||
`alloca' and `malloc'; you must get the compiled versions of
|
||
these from GNU Emacs.
|
||
|
||
`ns32k-sequent'
|
||
Go to the Berkeley universe before compiling. In addition,
|
||
you probably need to create a file named `string.h'
|
||
containing just one line: `#include <strings.h>'.
|
||
|
||
`ns32k-utek'
|
||
UTEK ns32000 system ("merlin"). The C compiler that comes
|
||
with this system cannot compile GNU CC; contact
|
||
`tektronix!reed!mason' to get binaries of GNU CC for
|
||
bootstrapping.
|
||
|
||
`romp-*-aos'
|
||
`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.
|
||
|
||
`rs6000-*-aix'
|
||
Read the file `README.RS6000' for information on how to get a
|
||
fix for a problem in the IBM assembler that prevents use of
|
||
GNU CC.
|
||
|
||
`vax-dec-ultrix'
|
||
Don't try compiling with Vax C (`vcc'). It produces
|
||
incorrect code in some cases (for example, when `alloca' is
|
||
used).
|
||
|
||
Meanwhile, compiling `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.
|
||
|
||
`we32k-att-sysv'
|
||
Don't use `-g' when compiling GNU CC. The system's linker
|
||
seems to be unable to handle such a large program with
|
||
debugging information.
|
||
|
||
Here we spell out what files will be set up by `configure'.
|
||
Normally you need not be concerned with these files.
|
||
|
||
* A symbolic link named `config.h' is made to the top-level
|
||
config file for the machine you will run the compiler on
|
||
(*note Config::.). This file is responsible for defining
|
||
information about the host machine. It includes `tm.h'.
|
||
|
||
The top-level config file is located in the subdirectory
|
||
`config'. Its name is always `xm-SOMETHING.h'; usually
|
||
`xm-MACHINE.h', but there are some exceptions.
|
||
|
||
If your system does not support symbolic links, you might
|
||
want to set up `config.h' to contain a `#include' command
|
||
which refers to the appropriate file.
|
||
|
||
* A symbolic link named `tconfig.h' is made to the top-level
|
||
config file for your target machine. This is used for
|
||
compiling certain programs to run on that machine.
|
||
|
||
* A symbolic link named `tm.h' is made to the
|
||
machine-description macro file for your target machine. It
|
||
should be in the subdirectory `config' and its name is often
|
||
`MACHINE.h'.
|
||
|
||
* A symbolic link named `md' will be made to the machine
|
||
description pattern file. It should be in the `config'
|
||
subdirectory and its name should be `MACHINE.md'; but MACHINE
|
||
is often not the same as the name used in the `tm.h' file
|
||
because the `md' files are more general.
|
||
|
||
* A symbolic link named `aux-output.c' will be made to the
|
||
output subroutine file for your machine. It should be in the
|
||
`config' subdirectory and its name should be `MACHINE.c'.
|
||
|
||
* The command file `configure' also constructs `Makefile' by
|
||
adding some text to the template file `Makefile.in'. The
|
||
additional text comes from files in the `config' directory,
|
||
named `t-TARGET' and `h-HOST'. If these files do not exist,
|
||
it means nothing needs to be added for a given target or host.
|
||
|
||
4. Make sure the Bison parser generator is installed. (This is
|
||
unnecessary if the Bison output files `c-parse.c' and `cexp.c' are
|
||
more recent than `c-parse.y' and `cexp.y' and you do not plan to
|
||
change the `.y' files.)
|
||
|
||
Bison versions older than Sept 8, 1988 will produce incorrect
|
||
output for `c-parse.c'.
|
||
|
||
5. Build the compiler. Just type `make LANGUAGES=c' in the compiler
|
||
directory.
|
||
|
||
`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 `LANGUAGES="LIST"', where LIST is one or more words from
|
||
the list `c', `c++', and `objective-c'.
|
||
|
||
Ignore any warnings you may see about "statement not reached" in
|
||
`insn-emit.c'; they are normal. Any other compilation errors may
|
||
represent bugs in the port to your machine or operating system, and
|
||
should be investigated and reported (*note Bugs::.).
|
||
|
||
Some commercial compilers fail to compile GNU CC because they have
|
||
bugs or limitations. For example, the Microsoft compiler is said
|
||
to run out of macro space. Some Ultrix compilers run out of
|
||
expression space; then you need to break up the statement where
|
||
the problem happens.
|
||
|
||
If you are building with a previous GNU C compiler, do not use
|
||
`CC=gcc' on the make command or by editing the Makefile. Instead,
|
||
use a full pathname to specify the compiler, such as
|
||
`CC=/usr/local/bin/gcc'. This is because make might execute the
|
||
`gcc' in the current directory before all of the compiler
|
||
components have been built.
|
||
|
||
6. If you are using COFF-encapsulation, you must convert `libgcc.a' to
|
||
a GNU-format library at this point. See the file `README.ENCAP'
|
||
in the directory containing the GNU binary file utilities, for
|
||
directions.
|
||
|
||
7. If you are building a cross-compiler, stop here. *Note
|
||
Cross-Compiler::.
|
||
|
||
8. Move the first-stage object files and executables into a
|
||
subdirectory with this command:
|
||
|
||
make stage1
|
||
|
||
The files are moved into a subdirectory named `stage1'. Once
|
||
installation is complete, you may wish to delete these files with
|
||
`rm -r stage1'.
|
||
|
||
9. Recompile the compiler with itself, with this command:
|
||
|
||
make CC="stage1/gcc -Bstage1/" CFLAGS="-g -O"
|
||
|
||
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 `LANGUAGES="LIST"'. LIST
|
||
should contain one or more words from the list `c', `c++',
|
||
`objective-c', and `proto'. Separate the words with spaces.
|
||
`proto' stands for the programs `protoize' and `unprotoize'; they
|
||
are not a separate language, but you use `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 `stage1'.
|
||
|
||
On a 68000 or 68020 system lacking floating point hardware, unless
|
||
you have selected a `tm.h' file that expects by default that there
|
||
is no such hardware, do this instead:
|
||
|
||
make CC="stage1/gcc -Bstage1/" CFLAGS="-g -O -msoft-float"
|
||
|
||
10. If you wish to test the compiler by compiling it with itself one
|
||
more time, do this:
|
||
|
||
make stage2
|
||
make CC="stage2/gcc -Bstage2/" CFLAGS="-g -O"
|
||
|
||
This is called making the stage 3 compiler. Aside from the `-B'
|
||
option, the options should be the same as when you made 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 `LANGUAGES="LIST"', as
|
||
described above.
|
||
|
||
Then compare the latest object files with the stage 2 object
|
||
files--they ought to be identical, unless they contain time stamps.
|
||
You can compare the files, disregarding the time stamps if any,
|
||
like this:
|
||
|
||
make compare
|
||
|
||
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 serious bug which you should investigate
|
||
and report (*note Bugs::.).
|
||
|
||
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):
|
||
|
||
for file in *.o; do
|
||
cmp $file stage2/$file
|
||
done
|
||
|
||
If you have built the compiler with the `-mno-mips-tfile' option on
|
||
MIPS machines, you will not be able to compare the files.
|
||
|
||
11. Install the compiler driver, the compiler's passes and run-time
|
||
support. You can use the following command:
|
||
|
||
make CC="stage2/gcc -Bstage2/" CFLAGS="-g -O" install LANGUAGES="LIST"
|
||
|
||
(Use the same value for `CC', `CFLAGS' and `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.
|
||
|
||
This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1',
|
||
`cpp' and `libgcc.a' in directory
|
||
`/usr/local/lib/gcc-lib/TARGET/VERSION', which is where the
|
||
compiler driver program looks for them. Here TARGET is the target
|
||
machine type specified when you ran `configure', and VERSION is
|
||
the version number of GNU CC. This naming scheme permits various
|
||
versions and/or cross-compilers to coexist.
|
||
|
||
It also copies the driver program `gcc' into the directory
|
||
`/usr/local/bin', so that it appears in typical execution search
|
||
paths.
|
||
|
||
On some systems, this command will cause recompilation of some
|
||
files. This is usually due to bugs in `make'. You should either
|
||
ignore this problem, or use GNU Make.
|
||
|
||
*Warning: there is a bug in `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 `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.)
|
||
|
||
12. Correct errors in the header files on your machine.
|
||
|
||
Various system header files often contain constructs which are
|
||
incompatible with ANSI C, and they will not work when you compile
|
||
programs with GNU CC. This behavior consists of substituting for
|
||
macro argument names when they appear inside of character
|
||
constants. The most common offender is `ioctl.h'.
|
||
|
||
You can overcome this problem when you compile by specifying the
|
||
`-traditional' option.
|
||
|
||
Alternatively, on Sun systems and 4.3BSD at least, you can correct
|
||
the include files by running the shell script `fixincludes'. This
|
||
installs modified, corrected copies of the files `ioctl.h',
|
||
`ttychars.h' and many others, in a special directory where only
|
||
GNU CC will normally look for them. This script will work on
|
||
various systems because it chooses the files by searching all the
|
||
system headers for the problem cases that we know about.
|
||
|
||
Use the following command to do this:
|
||
|
||
make install-fixincludes
|
||
|
||
If you selected a different directory for GNU CC installation when
|
||
you installed it, by specifying the Make variable `prefix' or
|
||
`libdir', specify it the same way in this command.
|
||
|
||
Note that some systems are starting to come with ANSI C system
|
||
header files. On these systems, don't run `fixincludes'; it may
|
||
not work, and is certainly not necessary.
|
||
|
||
If you cannot install the compiler's passes and run-time support in
|
||
`/usr/local/lib', you can alternatively use the `-B' option to specify
|
||
a prefix by which they may be found. The compiler concatenates the
|
||
prefix with the names `cpp', `cc1' and `libgcc.a'. Thus, you can put
|
||
the files in a directory `/usr/foo/gcc' and specify `-B/usr/foo/gcc/'
|
||
when you run GNU CC.
|
||
|
||
Also, you can specify an alternative default directory for these
|
||
files by setting the Make variable `libdir' when you make GNU CC.
|
||
|
||
|
||
File: gcc.info, Node: Other Dir, Next: Cross-Compiler, Up: Installation
|
||
|
||
Compilation in a Separate Directory
|
||
===================================
|
||
|
||
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:
|
||
|
||
1. Make sure you have a version of Make that supports the `VPATH'
|
||
feature. (GNU Make supports it, as do Make versions on most BSD
|
||
systems.)
|
||
|
||
2. If you have ever run `configure' in the source directory, you must
|
||
undo the configuration. Do this by running:
|
||
|
||
make distclean
|
||
|
||
3. Go to the directory in which you want to build the compiler before
|
||
running `configure':
|
||
|
||
mkdir gcc-sun3
|
||
cd gcc-sun3
|
||
|
||
On systems that do not support symbolic links, this directory must
|
||
be on the same file system as the source code directory.
|
||
|
||
4. Specify where to find `configure' when you run it:
|
||
|
||
../gcc/configure ...
|
||
|
||
This also tells `configure' where to find the compiler sources;
|
||
`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 `--srcdir' option, like this:
|
||
|
||
../gcc/configure --srcdir=../gcc sun3
|
||
|
||
The directory you specify with `--srcdir' need not be the same as
|
||
the one that `configure' is found in.
|
||
|
||
Now, you can run `make' in that directory. You need not repeat the
|
||
configuration steps shown above, when ordinary source files change. You
|
||
must, however, run `configure' again when the configuration files
|
||
change, if your system does not support symbolic links.
|
||
|
||
|