Note most of this information is out of date and superseded by the previous chapters of this manual. It is provided for historical reference only, because of a lack of volunteers to merge it into the main manual.
Here is the procedure for installing GNU CC on a GNU or Unix system. See VMS Install, for VMS systems.
ldor whatever is appropriate.
Alternatively, you can do subsequent compilation using a value of the
PATH environment variable such that the necessary GNU tools come
before the standard system tools.
The build machine is the system which you are using, the host machine is the system where you want to run the resulting compiler (normally the build machine), and the 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
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
configure cannot figure out what your configuration is or guesses
In those cases, specify the build machine's configuration name
--host option; the host and target will default to be
the same as the host machine. (If you are building a cross-compiler, see Cross-Compiler.)
Here is an example:
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:
(The three parts may themselves contain dashes;
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.
sun3 stands for
sun3-sunos4.1 is another way to specify a Sun 3.
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 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.
Here are the possible CPU types:
1750a, a29k, alpha, arm, avr, cn, clipper, dsp16xx, elxsi, fr30, h8300, hppa1.0, hppa1.1, i370, i386, i486, i586, i686, i786, i860, i960, ip2k, m32r, m68000, m68k, m6811, m6812, m88k, mcore, mips, mipsel, mips64, mips64el, mn10200, mn10300, ns32k, pdp11, powerpc, powerpcle, romp, rs6000, sh, sparc, sparclite, sparc64, v850, vax, we32k.
Here are the recognized company names. As you can see, customary abbreviations are used rather than the longer official names.
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.
The company name is meaningful only to disambiguate when the rest of the
information supplied is insufficient. You can omit it, writing just
, if it
is not needed. For example,
vax-ultrix4.2 is equivalent to
Here is a list of system types:
386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux, dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux, 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.
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.4 to distinguish versions of BSD. In practice, the version
number is most needed for
sysv4, which are
often treated differently.
linux-gnu is the canonical name for the GNU/Linux target;
however GNU CC will also accept
linux. The version of the kernel in
use is not relevant on these systems. A suffix such as
aout distinguishes major versions of the C library; all of the
suffixed versions are obsolete.
If you specify an impossible combination such as
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. 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
sun3, mentioned above, is an alias for
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, powerpc, powerpcle, 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. 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
-local, the configuration name without
the cpu prefix is used to form the configuration file names.
Thus, if you specify
m68k-local, configuration uses files
x-local, all in
Here is a list of configurations that have special treatment or special things you must know:
GNU CC can function as a cross-compiler for many machines, but not all.
mips-tfile.ccan'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.
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.
To compile and run a program using a cross-compiler involves several steps:
crt....o) for the target machine.
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.
To build GNU CC as a cross-compiler, you start out by running
configure. Use the
to specify the target type.
configure was unable to correctly identify the system you are
running on, also specify the
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
can correctly identify:
If you have a cross-assembler and cross-linker available, you should install
them now. Put them in the directory
/bin. Here is a table of
the tools you should put in this directory:
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
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
/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
ftp target-machine lcd /usr/local/target/lib cd /lib get libc.a cd /usr/lib get libg.a get libm.a quit
The precise set of libraries you'll need, and their locations on the target machine, vary depending on its operating system.
Many targets require "start files" such as
crtn.o which are linked into each executable; these too should be
/lib. There may
be several alternatives for
crt0.o, for use with profiling or other
compilation options. Check your target's definition of
STARTFILE_SPEC to find out what start files it uses. Here's an
example of copying these files from a target machine:
ftp target-machine lcd /usr/local/target/lib prompt cd /lib mget *crt*.o cd /usr/lib mget *crt*.o quit
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
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, you should put them in the
building the cross compiler. Then installation will run fixincludes properly and
install the corrected versions of the header files where the compiler will use
Provide the header files before you build the cross-compiler, because the
build stage actually runs the cross-compiler to produce parts of
libgcc.a. (These are the parts that 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:
(cd /usr/include; tar cf - .) > tarfile
Then, on the host machine, do this:
ftp target-machine lcd /usr/local/target/include get tarfile quit tar xf tarfile
Now you can proceed just as for compiling a single-machine compiler through the step of building stage 1.
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
make install, as usual.
The VMS version of GNU CC is distributed in a backup saveset containing both source code and precompiled binaries.
To install the
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:
GNU_CC_INCLUDEto point to the directories where the GNU CC executables (
gcc-cc1.exe, etc.) and the C include files are kept respectively. This should be done with the commands:
$ assign /system /translation=concealed - disk:[gcc.] gnu_cc $ assign /system /translation=concealed - disk:[gcc.include.] gnu_cc_include
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
script in the
GCCcommand with the command line:
$ set command /table=sys$common:[syslib]dcltables - /output=sys$common:[syslib]dcltables gnu_cc:gcc $ install replace sys$common:[syslib]dcltables
$ library/help sys$library:helplib.hlb gcc.hlp
Now you can invoke the compiler with a command like
file.c, which is equivalent to the command
gcc -v -c
file.c in Unix.
If you wish to use GNU C++ you must first install GNU CC, and then perform the following steps:
GNU_GXX_INCLUDEto point to the directory where the preprocessor will search for the C++ header files. This can be done with the command:
$ assign /system /translation=concealed - disk:[gcc.gxx_include.] gnu_gxx_include
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.
gcc-cc1plus.exe, and place this in the same directory that
The GNU C++ compiler can be invoked with a command like
/verbose file.cc, which is equivalent to the command
g++ -v -c
file.cc in Unix.
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
option to determine the version number of the binaries and compare it with the
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:
vmsconfig.comto set up the files
md., and to create files
bconfig.h. This procedure also creates several linker option files used by
make-cc1.comand a data file used by
GNU_BISONto point at the to the directories where the Bison executable is kept. This should be done with the command:
$ assign /system /translation=concealed - disk:[bison.] gnu_bison
You may, if you choose, use the
INSTALL_BISON.COM script in
BISONcommand with the command line:
$ set command /table=sys$common:[syslib]dcltables - /output=sys$common:[syslib]dcltables - gnu_bison:bison $ install replace sys$common:[syslib]dcltables
@make-gccto recompile everything, or submit the file
make-gcc.comto a batch queue. If you wish to build the GNU C++ compiler as well as the GNU CC compiler, you must first edit
make-gcc.comand follow the instructions that appear in the comments.
libgcc2.c. To compile this you should use the command procedure
make-l2.com, which will generate the library
libgcc2.olbshould be built using the compiler built from the same distribution that
libgcc2.ccame from, and
make-gcc.comwill automatically do all of this for you.
To install the library, use the following commands:
$ library gnu_cc:gcclib/delete=(new,eprintf) $ library gnu_cc:gcclib/delete=L_* $ library libgcc2/extract=*/output=libgcc2.obj $ library gnu_cc:gcclib libgcc2.obj
The first command simply removes old modules that will be replaced with
libgcc2 under different module names. The modules
eprintf may not actually be present in your
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
Whenever you update the compiler on your system, you should also update the library with the above procedure.
$ assign dua0:[gcc.build_dir.]/translation=concealed, - dua1:[gcc.source_dir.]/translation=concealed gcc_build $ set default gcc_build:
where the directory
dua1:[gcc.source_dir] contains the source
code, and the directory
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
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).
extern constvariables 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.
make-cc1.comto choose alternate definitions of
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
libgcc2in order to build
make-l2.comexpects to be able to find it operational in
To use GNU CC on VMS, you need the VMS driver programs
gcc.cld. They are
distributed with the VMS binaries (
gcc-vms) rather than the GNU
CC sources. GAS is also included in
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
LIBS definitions in
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.
Under previous versions of GNU CC, the generated code would occasionally give
strange results when linked with the sharable
VAXCRTL library. Now
this should work.
Even with this version, however, GNU CC itself should not be linked with the
VAXCRTL. The version of
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
make-cccp.com use the object library version of
VAXCRTL in order to make use of the
qsort routine in
gcclib.olb. If you wish to link the compiler executables with the
shareable image version of
VAXCRTL, you should edit the file
tm.h (created by
vmsconfig.com) to define the macro
QSORT_WORKAROUND is always defined when GNU CC is compiled with
VAX C, to avoid a problem in case
gcclib.olb is not yet available.
Return to the GCC Installation page
Please send FSF & GNU inquiries & questions to firstname.lastname@example.org. There are also other ways to contact the FSF.
These pages are maintained by The GCC team.Please send comments on these web pages and GCC to our public mailing list at email@example.com or firstname.lastname@example.org, send other questions to email@example.com.
Copyright (C) Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
|Last modified 2003-02-21|