Annotation of gcc/INSTALL, revision 1.1.1.6

1.1.1.5   root        1: This file documents the installation of the GNU compiler.  Copyright
                      2: (C) 1988, 1989, 1992 Free Software Foundation, Inc.  You may copy,
1.1.1.3   root        3: distribute, and modify it freely as long as you preserve this copyright
                      4: notice and permission notice.
1.1       root        5: 
                      6: Installing GNU CC
1.1.1.5   root        7: *****************
1.1       root        8: 
                      9:    Here is the procedure for installing GNU CC on a Unix system.
                     10: 
1.1.1.6 ! root       11:    You cannot install GNU C by itself on MSDOS; it will not compile
        !            12: under any MSDOS compiler except itself.  You need to get the complete
        !            13: compilation package DJGPP, which includes binaries as well as sources,
        !            14: and includes all the necessary compilation tools and libraries.
        !            15: 
1.1       root       16:   1. If you have built GNU CC previously in the same directory for a
1.1.1.2   root       17:      different target machine, do `make distclean' to delete all files
1.1.1.4   root       18:      that might be invalid.  One of the files this deletes is
                     19:      `Makefile'; if `make distclean' complains that `Makefile' does not
                     20:      exist, it probably means that the directory is already suitably
                     21:      clean.
1.1       root       22: 
1.1.1.3   root       23:   2. On a System V release 4 system, make sure `/usr/bin' precedes
1.1       root       24:      `/usr/ucb' in `PATH'.  The `cc' command in `/usr/ucb' uses
                     25:      libraries which have bugs.
                     26: 
1.1.1.3   root       27:   3. Specify the host and target machine configurations.  You do this by
                     28:      running the file `configure' with appropriate arguments.
1.1       root       29: 
1.1.1.3   root       30:      If you are building a compiler to produce code for the machine it
1.1.1.6 ! root       31:      runs on, specify just one machine type, with the `--target'
1.1.1.5   root       32:      option; the host type will default to be the same as the target.
1.1.1.3   root       33:      (For information on building a cross-compiler, see *Note
1.1.1.6 ! root       34:      Cross-Compiler::.)  Here is an example:
1.1       root       35: 
1.1.1.3   root       36:           configure --target=sparc-sun-sunos4.1
1.1       root       37: 
1.1.1.6 ! root       38:      If you run `configure' without specifying configuration arguments,
        !            39:      `configure' tries to guess the type of host you are on, and uses
        !            40:      that configuration type for both host and target.  So you don't
        !            41:      need to specify a configuration, for building a native compiler,
        !            42:      unless `configure' cannot figure out what your configuration is.
        !            43: 
1.1.1.3   root       44:      A configuration name may be canonical or it may be more or less
1.1       root       45:      abbreviated.
                     46: 
1.1.1.3   root       47:      A canonical configuration name has three parts, separated by
1.1.1.5   root       48:      dashes.  It looks like this: `CPU-COMPANY-SYSTEM'.  (The three
                     49:      parts may themselves contain dashes; `configure' can figure out
                     50:      which dashes serve which purpose.)  For example,
                     51:      `m68k-sun-sunos4.1' specifies a Sun 3.
1.1       root       52: 
1.1.1.3   root       53:      You can also replace parts of the configuration by nicknames or
1.1.1.5   root       54:      aliases.  For example, `sun3' stands for `m68k-sun', so
1.1       root       55:      `sun3-sunos4.1' is another way to specify a Sun 3.  You can also
1.1.1.2   root       56:      use simply `sun3-sunos', since the version of SunOS is assumed by
1.1.1.3   root       57:      default to be version 4.  `sun3-bsd' also works, since `configure'
                     58:      knows that the only BSD variant on a Sun 3 is SunOS.
                     59: 
                     60:      You can specify a version number after any of the system types,
                     61:      and some of the CPU types.  In most cases, the version is
                     62:      irrelevant, and will be ignored.  So you might as well specify the
                     63:      version if you know it.
1.1       root       64: 
1.1.1.3   root       65:      Here are the possible CPU types:
                     66: 
1.1.1.5   root       67:           a29k, alpha, arm, cN, clipper, elxsi, h8300, hppa1.0, hppa1.1,
1.1.1.6 ! root       68:           i370, i386, i486, i860, i960, m68000, m68k, m88k, mips,
        !            69:           ns32k, pyramid, romp, rs6000, sh, sparc, sparclite, vax,
        !            70:           we32k.
1.1.1.3   root       71: 
                     72:      Here are the recognized company names.  As you can see, customary
                     73:      abbreviations are used rather than the longer official names.
1.1       root       74: 
1.1.1.5   root       75:           alliant, altos, apollo, att, bull, cbm, convergent, convex,
                     76:           crds, dec, dg, dolphin, elxsi, encore, harris, hitachi, hp,
                     77:           ibm, intergraph, isi, mips, motorola, ncr, next, ns, omron,
                     78:           plexus, sequent, sgi, sony, sun, tti, unicom.
1.1       root       79: 
1.1.1.3   root       80:      The company name is meaningful only to disambiguate when the rest
                     81:      of the information supplied is insufficient.  You can omit it,
                     82:      writing just `CPU-SYSTEM', if it is not needed.  For example,
1.1       root       83:      `vax-ultrix4.2' is equivalent to `vax-dec-ultrix4.2'.
                     84: 
1.1.1.3   root       85:      Here is a list of system types:
1.1       root       86: 
1.1.1.5   root       87:           aix, acis, aos, bsd, clix, ctix, dgux, dynix, genix, hpux,
1.1.1.6 ! root       88:           isc, linux, luna, lynxos, mach, minix, newsos, osf, osfrose,
        !            89:           riscos, sco, solaris, sunos, sysv, ultrix, unos, vms.
1.1       root       90: 
                     91:      You can omit the system type; then `configure' guesses the
                     92:      operating system from the CPU and company.
                     93: 
1.1.1.3   root       94:      You can add a version number to the system type; this may or may
                     95:      not make a difference.  For example, you can write `bsd4.3' or
1.1.1.2   root       96:      `bsd4.4' to distinguish versions of BSD.  In practice, the version
                     97:      number is most needed for `sysv3' and `sysv4', which are often
                     98:      treated differently.
                     99: 
1.1.1.3   root      100:      If you specify an impossible combination such as `i860-dg-vms',
1.1.1.2   root      101:      then you may get an error message from `configure', or it may
                    102:      ignore part of the information and do the best it can with the
1.1.1.5   root      103:      rest.  `configure' always prints the canonical name for the
1.1.1.2   root      104:      alternative that it used.
                    105: 
1.1.1.3   root      106:      Often a particular model of machine has a name.  Many machine
1.1.1.5   root      107:      names are recognized as aliases for CPU/company combinations.
1.1.1.2   root      108:      Thus, the machine name `sun3', mentioned above, is an alias for
1.1.1.5   root      109:      `m68k-sun'.  Sometimes we accept a company name as a machine name,
1.1.1.3   root      110:      when the name is popularly used for a particular machine.  Here is
                    111:      a table of the known machine names:
                    112: 
                    113:           3300, 3b1, 3bN, 7300, altos3068, altos, apollo68, att-7300,
                    114:           balance, convex-cN, crds, decstation-3100, decstation, delta,
                    115:           encore, fx2800, gmicro, hp7NN, hp8NN, hp9k2NN, hp9k3NN,
                    116:           hp9k7NN, hp9k8NN, iris4d, iris, isi68, m3230, magnum, merlin,
                    117:           miniframe, mmax, news-3600, news800, news, next, pbd, pc532,
                    118:           pmax, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3,
                    119:           sun4, symmetry, tower-32, tower.
1.1       root      120: 
1.1.1.2   root      121:      Remember that a machine name specifies both the cpu type and the
                    122:      company name.
1.1       root      123: 
1.1.1.4   root      124:      There are four additional options you can specify independently to
1.1.1.3   root      125:      describe variant hardware and software configurations.  These are
1.1.1.4   root      126:      `--with-gnu-as', `--with-gnu-ld', `--with-stabs' and `--nfp'.
1.1.1.3   root      127: 
                    128:     `--with-gnu-as'
1.1.1.5   root      129:           If you will use GNU CC with the GNU assembler (GAS), you
                    130:           should declare this by using the `--with-gnu-as' option when
                    131:           you run `configure'.
                    132: 
                    133:           Using this option does not install GAS.  It only modifies the
                    134:           output of GNU CC to work with GAS.  Building and installing
                    135:           GAS is up to you.
                    136: 
1.1.1.6 ! root      137:           Conversely, if you *do not* wish to use GAS and do not specify
        !           138:           `--with-gnu-as' when building GNU CC, it is up to you to make
        !           139:           sure that GAS is not installed.  GNU CC searches for a
        !           140:           program named `as' in various directories; if the program it
        !           141:           finds is GAS, then it runs GAS.  If you are not sure where
        !           142:           GNU CC finds the assembler it is using, try specifying `-v'
        !           143:           when you run it.
1.1.1.5   root      144: 
1.1.1.6 ! root      145:           The systems where it makes a difference whether you use GAS
        !           146:           are
        !           147:           `hppa1.0-ANY-ANY', `hppa1.1-ANY-ANY', `i386-ANY-sysv',
        !           148:           `i386-ANY-isc',
        !           149:           `i860-ANY-bsd', `m68k-bull-sysv', `m68k-hp-hpux',
        !           150:           `m68k-sony-bsd',
        !           151:           `m68k-altos-sysv', `m68000-hp-hpux', `m68000-att-sysv', and
        !           152:           `mips-ANY').  On any other system, `--with-gnu-as' has no
        !           153:           effect.
        !           154: 
        !           155:           On the systems listed above (except for the HP-PA and for ISC
        !           156:           on the 386), if you use GAS, you should also use the GNU
        !           157:           linker (and specify `--with-gnu-ld').
1.1.1.3   root      158: 
                    159:     `--with-gnu-ld'
                    160:           Specify the option `--with-gnu-ld' if you plan to use the GNU
1.1.1.5   root      161:           linker with GNU CC.
                    162: 
                    163:           This option does not cause the GNU linker to be installed; it
                    164:           just modifies the behavior of GNU CC to work with the GNU
                    165:           linker.  Specifically, it inhibits the installation of
                    166:           `collect2', a program which otherwise serves as a front-end
                    167:           for the system's linker on most configurations.
1.1.1.3   root      168: 
1.1.1.4   root      169:     `--with-stabs'
1.1.1.6 ! root      170:           On MIPS based systems and on Alphas, you must specify whether
        !           171:           you want GNU CC to create the normal ECOFF debugging format,
        !           172:           or to use BSD-style stabs passed through the ECOFF symbol
        !           173:           table.  The normal ECOFF debug format cannot fully handle
        !           174:           languages other than C.  BSD stabs format can handle other
        !           175:           languages, but it only works with the GNU debugger GDB.
1.1.1.4   root      176: 
                    177:           Normally, GNU CC uses the ECOFF debugging format by default;
                    178:           if you prefer BSD stabs, specify `--with-stabs' when you
                    179:           configure GNU CC.
                    180: 
                    181:           No matter which default you choose when you configure GNU CC,
                    182:           the user can use the `-gcoff' and `-gstabs+' options to
                    183:           specify explicitly the debug format for a particular
                    184:           compilation.
                    185: 
1.1.1.6 ! root      186:           `--with-stabs' is meaningful on the ISC system on the 386,
        !           187:           also, if `--with-gas' is used.  It selects use of stabs
        !           188:           debugging information embedded in COFF output.  This kind of
        !           189:           debugging information supports C++ well; ordinary COFF
        !           190:           debugging information does not.
        !           191: 
1.1.1.3   root      192:     `--nfp'
                    193:           On certain systems, you must specify whether the machine has
1.1.1.5   root      194:           a floating point unit.  These systems include
                    195:           `m68k-sun-sunosN' and `m68k-isi-bsd'.  On any other system,
                    196:           `--nfp' currently has no effect, though perhaps there are
                    197:           other systems where it could usefully make a difference.
1.1.1.3   root      198: 
                    199:      If you want to install your own homemade configuration files, you
                    200:      can use `local' as the company name to access them.  If you use
1.1.1.5   root      201:      configuration `CPU-local', the configuration name without the cpu
                    202:      prefix is used to form the configuration file names.
1.1       root      203: 
1.1.1.5   root      204:      Thus, if you specify `m68k-local', configuration uses files
                    205:      `local.md', `local.h', `local.c', `xm-local.h', `t-local', and
                    206:      `x-local', all in the directory `config/m68k'.
1.1       root      207: 
1.1.1.3   root      208:      Here is a list of configurations that have special treatment or
                    209:      special things you must know:
1.1.1.2   root      210: 
1.1.1.4   root      211:     `alpha-*-osf1'
                    212:           Systems using processors that implement the DEC Alpha
1.1.1.5   root      213:           architecture and are running the OSF/1 operating system, for
                    214:           example the DEC Alpha AXP systems.  (VMS on the Alpha is not
                    215:           currently supported by GNU CC.)
                    216: 
1.1.1.6 ! root      217:           Objective C and C++ do not yet work on the Alpha.  We hope to
        !           218:           support C++ in version 2.6.
        !           219: 
1.1.1.5   root      220:           GNU CC writes a `.verstamp' directive to the assembler output
                    221:           file unless it is built as a cross-compiler.  It gets the
                    222:           version to use from the system header file
                    223:           `/usr/include/stamp.h'.  If you install a new version of
                    224:           OSF/1, you should rebuild GCC to pick up the new version
                    225:           stamp.
1.1.1.4   root      226: 
                    227:           Note that since the Alpha is a 64-bit architecture,
                    228:           cross-compilers from 32-bit machines will not generate as
                    229:           efficient code as that generated when the compiler is running
                    230:           on a 64-bit machine because many optimizations that depend on
                    231:           being able to represent a word on the target in an integral
1.1.1.5   root      232:           value on the host cannot be performed.  Building
1.1.1.6 ! root      233:           cross-compilers on the Alpha for 32-bit machines has only
        !           234:           been tested in a few cases and may not work properly.
        !           235: 
        !           236:           `make compare' may fail on some versions of OSF/1 unless you
        !           237:           add `-save-temps' to `CFLAGS'.  The same problem occurs on
        !           238:           Irix version 5.1.1.  On these systems, the name of the
        !           239:           assembler input file is stored in the object file, and that
        !           240:           makes comparison fail if it differs between the `stage1' and
        !           241:           `stage2' compilations.  The option `-save-temps' forces a
        !           242:           fixed name to be used for the assembler input file, instead
        !           243:           of a randomly chosen name in `/tmp'.
        !           244: 
        !           245:           GNU CC now supports both the native (ECOFF) debugging format
        !           246:           used by DBX and GDB and an encapsulated STABS format for use
        !           247:           only with GDB.  See the discussion of the `--with-stabs'
        !           248:           option of `configure' above for more information on these
        !           249:           formats and how to select them.
        !           250: 
        !           251:           There is a bug in DEC's assembler that produces incorrect
        !           252:           line numbers for ECOFF format when the `.align' directive is
        !           253:           used.  To work around this problem, GNU CC will not emit such
        !           254:           alignment directives even if optimization is being performed
        !           255:           if it is writing ECOFF format debugging information.
        !           256:           Unfortunately, this has the very undesirable side-effect that
        !           257:           code addresses when `-O' is specified are different depending
        !           258:           on whether or not `-g' is also specified.
        !           259: 
        !           260:           To avoid this behavior, specify `-gstabs+' and use GDB
        !           261:           instead of DBX.  DEC is now aware of this problem with the
        !           262:           assembler and hopes to provide a fix shortly.
1.1.1.4   root      263: 
                    264:     `a29k'
1.1.1.5   root      265:           AMD Am29k-family processors.  These are normally used in
1.1.1.4   root      266:           embedded applications.  There are no standard Unix
1.1.1.5   root      267:           configurations.  This configuration corresponds to AMD's
1.1.1.4   root      268:           standard calling sequence and binary interface and is
1.1.1.5   root      269:           compatible with other 29k tools.
1.1.1.4   root      270: 
                    271:           You may need to make a variant of the file `a29k.h' for your
                    272:           particular configuration.
                    273: 
                    274:     `a29k-*-bsd'
                    275:           AMD Am29050 used in a system running a variant of BSD Unix.
                    276: 
                    277:     `elxsi-elxsi-bsd'
                    278:           The Elxsi's C compiler has known limitations that prevent it
                    279:           from compiling GNU C.  Please contact `[email protected]' for
                    280:           more details.
                    281: 
1.1.1.6 ! root      282:     `hppa*-*-*'
        !           283:           Using GAS is highly recommended for all HP-PA configurations.
        !           284:           See *Note PA Install:: for the special procedures needed to
        !           285:           compile GNU CC for the HP-PA.
        !           286: 
1.1.1.2   root      287:     `i386-*-sco'
1.1.1.5   root      288:           Compilation with RCC is recommended.  Also, it may be a good
                    289:           idea to link with GNU malloc instead of the malloc that comes
                    290:           with the system.
                    291: 
1.1.1.6 ! root      292:     `i386-*-sco3.2.4'
        !           293:           Use this configuration for SCO release 3.2 version 4.
        !           294: 
1.1.1.5   root      295:     `i386-*-isc'
                    296:           It may be good idea to link with GNU malloc instead of the
                    297:           malloc that comes with the system.
                    298: 
                    299:     `i386-*-esix'
                    300:           It may be good idea to link with GNU malloc instead of the
                    301:           malloc that comes with the system.
1.1.1.4   root      302: 
                    303:     `i386-ibm-aix'
1.1.1.5   root      304:           You need to use GAS version 2.1 or later, and and LD from GNU
                    305:           binutils version 2.2 or later.
1.1       root      306: 
1.1.1.3   root      307:     `i386-sequent'
                    308:           Go to the Berkeley universe before compiling.  In addition,
                    309:           you probably need to create a file named `string.h'
                    310:           containing just one line: `#include <strings.h>'.
                    311: 
1.1.1.4   root      312:     `i386-sun-sunos4'
                    313:           You may find that you need another version of GNU CC to begin
                    314:           bootstrapping with, since the current version when built with
                    315:           the system's own compiler seems to get an infinite loop
                    316:           compiling part of `libgcc2.c'.  GNU CC version 2 compiled
                    317:           with GNU CC (any version) seems not to have this problem.
                    318: 
1.1.1.6 ! root      319:     `i860-intel-osf1'
        !           320:           This is the Paragon.  If you have version 1.0 of the
        !           321:           operating system, you need to take special steps to build GNU
        !           322:           CC due to peculiarities of the system.  Newer system versions
        !           323:           have no problem.  See the section `Installation Problems' in
        !           324:           the GNU CC Manual.
        !           325: 
1.1       root      326:     `m68000-att'
                    327:           AT&T 3b1, a.k.a. 7300 PC.  Special procedures are needed to
                    328:           compile GNU CC with this machine's standard C compiler, due
                    329:           to bugs in that compiler.  *Note 3b1 Install::.  You can
                    330:           bootstrap it more easily with previous versions of GNU CC if
                    331:           you have them.
                    332: 
                    333:     `m68000-hp-bsd'
                    334:           HP 9000 series 200 running BSD.  Note that the C compiler
                    335:           that comes with this system cannot compile GNU CC; contact
1.1.1.3   root      336:           `[email protected]' to get binaries of GNU CC for bootstrapping.
1.1       root      337: 
                    338:     `m68k-altos'
                    339:           Altos 3068.  You must use the GNU assembler, linker and
1.1.1.5   root      340:           debugger.  Also, you must fix a kernel bug.  Details in the
                    341:           file `README.ALTOS'.
1.1       root      342: 
1.1.1.6 ! root      343:     `m68k-bull-sysv'
        !           344:           Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to
        !           345:           BOS-2.01. GNU CC works either with native assembler or GNU
        !           346:           assembler. You can use GNU assembler with native coff
        !           347:           generation by providing `--gas' to the configure script or
        !           348:           use GNU assembler with dbx-in-coff encapsulation by providing
        !           349:           `--gas --stabs'. For any problem with native assembler or for
        !           350:           availability of the DPX/2 port of GAS, contact
        !           351:           `[email protected]'.
        !           352: 
1.1       root      353:     `m68k-hp-hpux'
1.1.1.2   root      354:           HP 9000 series 300 or 400 running HP-UX.  HP-UX version 8.0
                    355:           has a bug in the assembler that prevents compilation of GNU
                    356:           CC.  To fix it, get patch PHCO_0800 from HP.
                    357: 
                    358:           In addition, `--gas' does not currently work with this
                    359:           configuration.  Changes in HP-UX have broken the library
                    360:           conversion tool and the linker.
1.1       root      361: 
                    362:     `m68k-sun'
1.1.1.3   root      363:           Sun 3.  We do not provide a configuration file to use the Sun
                    364:           FPA by default, because programs that establish signal
                    365:           handlers for floating point traps inherently cannot work with
                    366:           the FPA.
                    367: 
1.1.1.5   root      368:     `m88k-*-svr3'
1.1.1.4   root      369:           Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference
1.1.1.5   root      370:           port.  These systems tend to use the Green Hills C, revision
1.1.1.3   root      371:           1.8.5, as the standard C compiler.  There are apparently bugs
                    372:           in this compiler that result in object files differences
                    373:           between stage 2 and stage 3.  If this happens, make the stage
                    374:           4 compiler and compare it to the stage 3 compiler.  If the
                    375:           stage 3 and stage 4 object files are identical, this suggests
1.1.1.5   root      376:           you encountered a problem with the standard C compiler; the
                    377:           stage 3 and 4 compilers may be usable.
                    378: 
                    379:           It is best, however, to use an older version of GNU CC for
                    380:           bootstrapping if you have one.
1.1       root      381: 
1.1.1.5   root      382:     `m88k-*-dgux'
1.1       root      383:           Motorola m88k running DG/UX.  To build native or cross
                    384:           compilers on DG/UX, you must first change to the 88open BCS
                    385:           software development environment.  This is done by issuing
                    386:           this command:
                    387: 
                    388:                eval `sde-target m88kbcs`
                    389: 
1.1.1.5   root      390:     `m88k-tektronix-sysv3'
                    391:           Tektronix XD88 running UTekV 3.2e.  Do not turn on
                    392:           optimization while building stage1 if you bootstrap with the
                    393:           buggy Green Hills compiler.  Also, The bundled LAI System V
                    394:           NFS is buggy so if you build in an NFS mounted directory,
                    395:           start from a fresh reboot, or avoid NFS all together.
                    396:           Otherwise you may have trouble getting clean comparisons
                    397:           between stages.
                    398: 
1.1.1.2   root      399:     `mips-mips-bsd'
1.1.1.5   root      400:           MIPS machines running the MIPS operating system in BSD mode.
1.1.1.3   root      401:           It's possible that some old versions of the system lack the
1.1.1.2   root      402:           functions `memcpy', `memcmp', and `memset'.  If your system
                    403:           lacks these, you must remove or undo the definition of
                    404:           `TARGET_MEM_FUNCTIONS' in `mips-bsd.h'.
                    405: 
1.1.1.5   root      406:     `mips-sgi-*'
                    407:           Silicon Graphics MIPS machines running IRIX.  In order to
                    408:           compile GCC on an SGI the "c.hdr.lib" option must be
                    409:           installed from the CD-ROM supplied from Silicon Graphics.
                    410:           This is found on the 2nd CD in release 4.0.1.
                    411: 
1.1.1.3   root      412:     `mips-sony-sysv'
                    413:           Sony MIPS NEWS.  This works in NEWSOS 5.0.1, but not in 5.0.2
                    414:           (which uses ELF instead of COFF).  Support for 5.0.2 will
1.1.1.5   root      415:           probably be provided soon by volunteers.  In particular, the
                    416:           linker does not like the code generated by GCC when shared
                    417:           libraries are linked in.
1.1.1.3   root      418: 
1.1       root      419:     `ns32k-encore'
                    420:           Encore ns32000 system.  Encore systems are supported only
                    421:           under BSD.
                    422: 
                    423:     `ns32k-*-genix'
                    424:           National Semiconductor ns32000 system.  Genix has bugs in
                    425:           `alloca' and `malloc'; you must get the compiled versions of
                    426:           these from GNU Emacs.
                    427: 
1.1.1.3   root      428:     `ns32k-sequent'
                    429:           Go to the Berkeley universe before compiling.  In addition,
                    430:           you probably need to create a file named `string.h'
                    431:           containing just one line: `#include <strings.h>'.
                    432: 
1.1       root      433:     `ns32k-utek'
                    434:           UTEK ns32000 system ("merlin").  The C compiler that comes
                    435:           with this system cannot compile GNU CC; contact
                    436:           `tektronix!reed!mason' to get binaries of GNU CC for
                    437:           bootstrapping.
                    438: 
1.1.1.3   root      439:     `romp-*-aos'
                    440:     `romp-*-mach'
                    441:           The only operating systems supported for the IBM RT PC are
                    442:           AOS and MACH.  GNU CC does not support AIX running on the RT.
1.1.1.5   root      443:           We recommend you compile GNU CC with an earlier version of
1.1.1.4   root      444:           itself; if you compile GNU CC with `hc', the Metaware
                    445:           compiler, it will work, but you will get mismatches between
1.1.1.5   root      446:           the stage 2 and stage 3 compilers in various files.  These
1.1.1.4   root      447:           errors are minor differences in some floating-point constants
                    448:           and can be safely ignored; the stage 3 compiler is correct.
1.1.1.3   root      449: 
                    450:     `rs6000-*-aix'
1.1.1.4   root      451:           *Read the file `README.RS6000' for information on how to get
1.1.1.5   root      452:           a fix for problems in the IBM assembler that interfere with
1.1.1.4   root      453:           GNU CC.* You must either obtain the new assembler or avoid
                    454:           using the `-g' switch.  Note that `Makefile.in' uses `-g' by
                    455:           default when compiling `libgcc2.c'.
1.1       root      456: 
1.1.1.6 ! root      457:           The PowerPC and POWER2 architectures are now supported, but
        !           458:           have not been extensively tested due to lack of appropriate
        !           459:           systems.  Only AIX is supported on the PowerPC.
        !           460: 
        !           461:           Objective C does not work on this architecture.
        !           462: 
        !           463:           XLC version 1.3.0.0 will miscompile `jump.c'.  XLC version
        !           464:           1.3.0.1 or later fixes this problem.  We do not yet have a
        !           465:           PTF number for this fix.
        !           466: 
1.1       root      467:     `vax-dec-ultrix'
                    468:           Don't try compiling with Vax C (`vcc').  It produces
                    469:           incorrect code in some cases (for example, when `alloca' is
                    470:           used).
                    471: 
                    472:           Meanwhile, compiling `cp-parse.c' with pcc does not work
                    473:           because of an internal table size limitation in that
                    474:           compiler.  To avoid this problem, compile just the GNU C
                    475:           compiler first, and use it to recompile building all the
                    476:           languages that you want to run.
                    477: 
1.1.1.5   root      478:      Here we spell out what files will be set up by `configure'.
1.1       root      479:      Normally you need not be concerned with these files.
                    480: 
                    481:         * A symbolic link named `config.h' is made to the top-level
1.1.1.3   root      482:           config file for the machine you plan to run the compiler on
                    483:           (*note The Configuration File: (gcc.info)Config.).  This file
                    484:           is responsible for defining information about the host
                    485:           machine.  It includes `tm.h'.
1.1       root      486: 
                    487:           The top-level config file is located in the subdirectory
1.1.1.5   root      488:           `config'.  Its name is always `xm-SOMETHING.h'; usually
1.1       root      489:           `xm-MACHINE.h', but there are some exceptions.
                    490: 
                    491:           If your system does not support symbolic links, you might
                    492:           want to set up `config.h' to contain a `#include' command
                    493:           which refers to the appropriate file.
                    494: 
                    495:         * A symbolic link named `tconfig.h' is made to the top-level
                    496:           config file for your target machine.  This is used for
                    497:           compiling certain programs to run on that machine.
                    498: 
                    499:         * A symbolic link named `tm.h' is made to the
                    500:           machine-description macro file for your target machine.  It
                    501:           should be in the subdirectory `config' and its name is often
                    502:           `MACHINE.h'.
                    503: 
                    504:         * A symbolic link named `md' will be made to the machine
                    505:           description pattern file.  It should be in the `config'
1.1.1.3   root      506:           subdirectory and its name should be `MACHINE.md'; but MACHINE
                    507:           is often not the same as the name used in the `tm.h' file
                    508:           because the `md' files are more general.
1.1       root      509: 
                    510:         * A symbolic link named `aux-output.c' will be made to the
1.1.1.3   root      511:           output subroutine file for your machine.  It should be in the
                    512:           `config' subdirectory and its name should be `MACHINE.c'.
1.1       root      513: 
1.1.1.5   root      514:         * The command file `configure' also constructs the file
                    515:           `Makefile' by adding some text to the template file
                    516:           `Makefile.in'.  The additional text comes from files in the
                    517:           `config' directory, named `t-TARGET' and `x-HOST'.  If these
                    518:           files do not exist, it means nothing needs to be added for a
                    519:           given target or host.
                    520: 
                    521:   4. The standard directory for installing GNU CC is `/usr/local/lib'.
                    522:      If you want to install its files somewhere else, specify
                    523:      `--prefix=DIR' when you run `configure'.  Here DIR is a directory
                    524:      name to use instead of `/usr/local' for all purposes with one
                    525:      exception: the directory `/usr/local/include' is searched for
                    526:      header files no matter where you install the compiler.
                    527: 
                    528:   5. Specify `--local-prefix=DIR' if you want the compiler to search
                    529:      directory `DIR/include' for header files *instead* of
                    530:      `/usr/local/include'.  (This is for systems that have different
                    531:      conventions for where to put site-specific things.)
1.1       root      532: 
1.1.1.6 ! root      533:      Unless you have a convention other than `/usr/local' for
        !           534:      site-specific files, it is a bad idea to specify `--local-prefix'.
        !           535: 
1.1.1.5   root      536:   6. Make sure the Bison parser generator is installed.  (This is
1.1.1.3   root      537:      unnecessary if the Bison output files `c-parse.c' and `cexp.c' are
                    538:      more recent than `c-parse.y' and `cexp.y' and you do not plan to
                    539:      change the `.y' files.)
1.1       root      540: 
1.1.1.3   root      541:      Bison versions older than Sept 8, 1988 will produce incorrect
1.1       root      542:      output for `c-parse.c'.
                    543: 
1.1.1.6 ! root      544:   7. If you have chosen a configuration for GNU CC which requires other
        !           545:      GNU tools (such as GAS or the GNU linker) instead of the standard
        !           546:      system tools, install the required tools in the build directory
        !           547:      under the names `as', `ld' or whatever is appropriate.  This will
        !           548:      enable the compiler to find the proper tools for compilation of
        !           549:      the program `enquire'.
        !           550: 
        !           551:      Alternatively, you can do subsequent compilation using a value of
        !           552:      the `PATH' environment variable such that the necessary GNU tools
        !           553:      come before the standard system tools.
        !           554: 
        !           555:   8. Build the compiler.  Just type `make LANGUAGES=c' in the compiler
1.1       root      556:      directory.
                    557: 
1.1.1.3   root      558:      `LANGUAGES=c' specifies that only the C compiler should be
1.1       root      559:      compiled.  The makefile normally builds compilers for all the
                    560:      supported languages; currently, C, C++ and Objective C.  However,
                    561:      C is the only language that is sure to work when you build with
                    562:      other non-GNU C compilers.  In addition, building anything but C
                    563:      at this stage is a waste of time.
                    564: 
1.1.1.3   root      565:      In general, you can specify the languages to build by typing the
                    566:      argument `LANGUAGES="LIST"', where LIST is one or more words from
                    567:      the list `c', `c++', and `objective-c'.
                    568: 
                    569:      Ignore any warnings you may see about "statement not reached" in
1.1.1.5   root      570:      `insn-emit.c'; they are normal.  Also, warnings about "unknown
                    571:      escape sequence" are normal in `genopinit.c' and perhaps some
                    572:      other files.  Any other compilation errors may represent bugs in
                    573:      the port to your machine or operating system, and should be
                    574:      investigated and reported.
1.1.1.3   root      575: 
                    576:      Some commercial compilers fail to compile GNU CC because they have
                    577:      bugs or limitations.  For example, the Microsoft compiler is said
                    578:      to run out of macro space.  Some Ultrix compilers run out of
1.1       root      579:      expression space; then you need to break up the statement where
                    580:      the problem happens.
                    581: 
1.1.1.3   root      582:      If you are building with a previous GNU C compiler, do not use
1.1.1.5   root      583:      `CC=gcc' on the make command or by editing the Makefile.  Instead,
1.1.1.3   root      584:      use a full pathname to specify the compiler, such as
                    585:      `CC=/usr/local/bin/gcc'.  This is because make might execute the
                    586:      `gcc' in the current directory before all of the compiler
                    587:      components have been built.
                    588: 
1.1.1.6 ! root      589:   9. If you are building a cross-compiler, stop here.  *Note
1.1.1.3   root      590:      Cross-Compiler::.
1.1       root      591: 
1.1.1.6 ! root      592:  10. Move the first-stage object files and executables into a
1.1       root      593:      subdirectory with this command:
                    594: 
                    595:           make stage1
                    596: 
1.1.1.5   root      597:      The files are moved into a subdirectory named `stage1'.  Once
1.1       root      598:      installation is complete, you may wish to delete these files with
                    599:      `rm -r stage1'.
                    600: 
1.1.1.6 ! root      601:  11. If you have chosen a configuration for GNU CC which requires other
1.1.1.5   root      602:      GNU tools (such as GAS or the GNU linker) instead of the standard
                    603:      system tools, install the required tools in the `stage1'
                    604:      subdirectory under the names `as', `ld' or whatever is
                    605:      appropriate.  This will enable the stage 1 compiler to find the
                    606:      proper tools in the following stage.
                    607: 
                    608:      Alternatively, you can do subsequent compilation using a value of
                    609:      the `PATH' environment variable such that the necessary GNU tools
                    610:      come before the standard system tools.
                    611: 
1.1.1.6 ! root      612:  12. Recompile the compiler with itself, with this command:
1.1       root      613: 
1.1.1.4   root      614:           make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O"
1.1       root      615: 
1.1.1.3   root      616:      This is called making the stage 2 compiler.
1.1       root      617: 
1.1.1.3   root      618:      The command shown above builds compilers for all the supported
1.1       root      619:      languages.  If you don't want them all, you can specify the
1.1.1.3   root      620:      languages to build by typing the argument `LANGUAGES="LIST"'.  LIST
                    621:      should contain one or more words from the list `c', `c++',
                    622:      `objective-c', and `proto'.  Separate the words with spaces.
                    623:      `proto' stands for the programs `protoize' and `unprotoize'; they
                    624:      are not a separate language, but you use `LANGUAGES' to enable or
                    625:      disable their installation.
                    626: 
                    627:      If you are going to build the stage 3 compiler, then you might
                    628:      want to build only the C language in stage 2.
                    629: 
                    630:      Once you have built the stage 2 compiler, if you are short of disk
                    631:      space, you can delete the subdirectory `stage1'.
                    632: 
                    633:      On a 68000 or 68020 system lacking floating point hardware, unless
                    634:      you have selected a `tm.h' file that expects by default that there
                    635:      is no such hardware, do this instead:
1.1       root      636: 
1.1.1.4   root      637:           make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O -msoft-float"
1.1       root      638: 
1.1.1.6 ! root      639:  13. If you wish to test the compiler by compiling it with itself one
1.1.1.5   root      640:      more time, install any other necessary GNU tools (such as GAS or
                    641:      the GNU linker) in the `stage2' subdirectory as you did in the
                    642:      `stage1' subdirectory, then do this:
1.1       root      643: 
                    644:           make stage2
1.1.1.4   root      645:           make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O"
1.1       root      646: 
                    647:      This is called making the stage 3 compiler.  Aside from the `-B'
1.1.1.4   root      648:      option, the compiler options should be the same as when you made
                    649:      the stage 2 compiler.  But the `LANGUAGES' option need not be the
                    650:      same.  The command shown above builds compilers for all the
                    651:      supported languages; if you don't want them all, you can specify
                    652:      the languages to build by typing the argument `LANGUAGES="LIST"',
                    653:      as described above.
1.1       root      654: 
1.1.1.3   root      655:      Then compare the latest object files with the stage 2 object
1.1.1.6 ! root      656:      files--they ought to be identical, aside from time stamps (if any).
        !           657: 
        !           658:      On some systems, meaningful comparison of object files is
        !           659:      impossible; they always appear "different."  This is currently
        !           660:      true on Solaris and probably on all systems that use ELF object
        !           661:      file format.  Some other systems where this is so are listed below.
        !           662: 
        !           663:      Use this command to compare the files:
1.1.1.3   root      664: 
                    665:           make compare
                    666: 
                    667:      This will mention any object files that differ between stage 2 and
                    668:      stage 3.  Any difference, no matter how innocuous, indicates that
                    669:      the stage 2 compiler has compiled GNU CC incorrectly, and is
1.1       root      670:      therefore a potentially serious bug which you should investigate
1.1.1.3   root      671:      and report.
1.1       root      672: 
1.1.1.3   root      673:      If your system does not put time stamps in the object files, then
                    674:      this is a faster way to compare them (using the Bourne shell):
1.1       root      675: 
                    676:           for file in *.o; do
1.1.1.3   root      677:           cmp $file stage2/$file
1.1       root      678:           done
                    679: 
1.1.1.3   root      680:      If you have built the compiler with the `-mno-mips-tfile' option on
                    681:      MIPS machines, you will not be able to compare the files.
1.1       root      682: 
1.1.1.6 ! root      683:      The Alpha stores file names of internal temporary files in the
        !           684:      object files and `make compare' does not know how to ignore them,
        !           685:      so normally you cannot compare on the Alpha.  However, if you use
        !           686:      the `-save-temps' option when compiling *both* stage 2 and stage
        !           687:      3, this causes the same file names to be used in both stages; then
        !           688:      you can do the comparison.
        !           689: 
        !           690:  14. Build the Objective C library (if you have built the Objective C
        !           691:      compiler).  Here is the command to do this:
        !           692: 
        !           693:           make objc-runtime CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O"
1.1.1.5   root      694: 
1.1.1.6 ! root      695:  15. Install the compiler driver, the compiler's passes and run-time
1.1.1.5   root      696:      support with `make install'.  Use the same value for `CC',
                    697:      `CFLAGS' and `LANGUAGES' that you used when compiling the files
                    698:      that are being installed.  One reason this is necessary is that
                    699:      some versions of Make have bugs and recompile files gratuitously
                    700:      when you do this step.  If you use the same variable values, those
                    701:      files will be recompiled properly.
1.1       root      702: 
1.1.1.5   root      703:      For example, if you have built the stage 2 compiler, you can use
                    704:      the following command:
1.1       root      705: 
1.1.1.5   root      706:           make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="LIST"
1.1       root      707: 
1.1.1.3   root      708:      This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1',
1.1.1.5   root      709:      `cpp' and `libgcc.a' in the directory
1.1.1.2   root      710:      `/usr/local/lib/gcc-lib/TARGET/VERSION', which is where the
                    711:      compiler driver program looks for them.  Here TARGET is the target
                    712:      machine type specified when you ran `configure', and VERSION is
                    713:      the version number of GNU CC.  This naming scheme permits various
1.1       root      714:      versions and/or cross-compilers to coexist.
                    715: 
1.1.1.5   root      716:      This also copies the driver program `xgcc' into
                    717:      `/usr/local/bin/gcc', so that it appears in typical execution
                    718:      search paths.
                    719: 
                    720:      On some systems, this command causes recompilation of some files.
                    721:      This is usually due to bugs in `make'.  You should either ignore
                    722:      this problem, or use GNU Make.
1.1.1.3   root      723: 
                    724:      *Warning: there is a bug in `alloca' in the Sun library.  To avoid
                    725:      this bug, be sure to install the executables of GNU CC that were
                    726:      compiled by GNU CC.  (That is, the executables from stage 2 or 3,
                    727:      not stage 1.)  They use `alloca' as a built-in function and never
                    728:      the one in the library.*
1.1.1.2   root      729: 
1.1.1.3   root      730:      (It is usually better to install GNU CC executables from stage 2
                    731:      or 3, since they usually run faster than the ones compiled with
1.1.1.2   root      732:      some other compiler.)
1.1       root      733: 
1.1.1.6 ! root      734:  16. Install the Objective C library (if you are installing the
        !           735:      Objective C compiler).  Here is the command to do this:
1.1.1.4   root      736: 
                    737:           make install-libobjc CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O"
                    738: 
1.1.1.6 ! root      739:  17. If you're going to use C++, it's likely that you need to also
1.1.1.5   root      740:      install the libg++ distribution.  It should be available from the
                    741:      same place where you got the GNU C distribution.  Just as GNU C
1.1.1.4   root      742:      does not distribute a C runtime library, it also does not include
                    743:      a C++ run-time library.  All I/O functionality, special class
1.1.1.5   root      744:      libraries, etc., are available in the libg++ distribution.
1.1       root      745: 
                    746: Compilation in a Separate Directory
1.1.1.5   root      747: ===================================
1.1       root      748: 
                    749:    If you wish to build the object files and executables in a directory
                    750: other than the one containing the source files, here is what you must
                    751: do differently:
                    752: 
                    753:   1. Make sure you have a version of Make that supports the `VPATH'
                    754:      feature.  (GNU Make supports it, as do Make versions on most BSD
                    755:      systems.)
                    756: 
1.1.1.3   root      757:   2. If you have ever run `configure' in the source directory, you must
                    758:      undo the configuration.  Do this by running:
1.1.1.2   root      759: 
1.1.1.3   root      760:           make distclean
1.1.1.2   root      761: 
                    762:   3. Go to the directory in which you want to build the compiler before
                    763:      running `configure':
1.1       root      764: 
                    765:           mkdir gcc-sun3
                    766:           cd gcc-sun3
                    767: 
1.1.1.3   root      768:      On systems that do not support symbolic links, this directory must
                    769:      be on the same file system as the source code directory.
1.1       root      770: 
1.1.1.2   root      771:   4. Specify where to find `configure' when you run it:
1.1       root      772: 
1.1.1.3   root      773:           ../gcc/configure ...
1.1       root      774: 
1.1.1.3   root      775:      This also tells `configure' where to find the compiler sources;
                    776:      `configure' takes the directory from the file name that was used to
                    777:      invoke it.  But if you want to be sure, you can specify the source
                    778:      directory with the `--srcdir' option, like this:
1.1       root      779: 
1.1.1.3   root      780:           ../gcc/configure --srcdir=../gcc sun3
1.1       root      781: 
1.1.1.3   root      782:      The directory you specify with `--srcdir' need not be the same as
                    783:      the one that `configure' is found in.
1.1       root      784: 
                    785:    Now, you can run `make' in that directory.  You need not repeat the
1.1.1.3   root      786: configuration steps shown above, when ordinary source files change.  You
                    787: must, however, run `configure' again when the configuration files
1.1       root      788: change, if your system does not support symbolic links.
                    789: 
1.1.1.3   root      790: Building and Installing a Cross-Compiler
1.1.1.5   root      791: ========================================
1.1.1.3   root      792: 
                    793:    GNU CC can function as a cross-compiler for many machines, but not
                    794: all.
                    795: 
1.1.1.6 ! root      796:    * Cross-compilers for the Mips as target using the Mips assembler
        !           797:      currently do not work, because the auxiliary programs
        !           798:      `mips-tdump.c' and `mips-tfile.c' can't be compiled on anything
        !           799:      but a Mips.  It does work to cross compile for a Mips if you use
        !           800:      the GNU assembler and linker.
        !           801: 
        !           802:    * Cross-compilers between machines with different floating point
        !           803:      formats have not all been made to work.  GNU CC now has a floating
        !           804:      point emulator with which these can work, but each target machine
        !           805:      description needs to be updated to take advantage of it.
        !           806: 
        !           807:    * Cross-compilation between machines of different word sizes has not
        !           808:      really been addressed yet.
1.1.1.3   root      809: 
                    810:    Since GNU CC generates assembler code, you probably need a
                    811: cross-assembler that GNU CC can run, in order to produce object files.
                    812: If you want to link on other than the target machine, you need a
                    813: cross-linker as well.  You also need header files and libraries suitable
                    814: for the target machine that you can install on the host machine.
                    815: 
1.1.1.6 ! root      816: Steps of Cross-Compilation
        !           817: --------------------------
        !           818: 
        !           819:    To compile and run a program using a cross-compiler involves several
        !           820: steps:
        !           821: 
        !           822:    * Run the cross-compiler on the host machine to produce assembler
        !           823:      files for the target machine.  This requires header files for the
        !           824:      target machine.
        !           825: 
        !           826:    * Assemble the files produced by the cross-compiler.  You can do this
        !           827:      either with an assembler on the target machine, or with a
        !           828:      cross-assembler on the host machine.
        !           829: 
        !           830:    * Link those files to make an executable.  You can do this either
        !           831:      with a linker on the target machine, or with a cross-linker on the
        !           832:      host machine.  Whichever machine you use, you need libraries and
        !           833:      certain startup files (typically `crt....o') for the target
        !           834:      machine.
        !           835: 
        !           836:    It is most convenient to do all of these steps on the same host
        !           837: machine, since then you can do it all with a single invocation of GNU
        !           838: CC.  This requires a suitable cross-assembler and cross-linker.  For
        !           839: some targets, the GNU assembler and linker are available.
        !           840: 
        !           841: Configuring a Cross-Compiler
        !           842: ----------------------------
        !           843: 
1.1.1.3   root      844:    To build GNU CC as a cross-compiler, you start out by running
1.1.1.4   root      845: `configure'.  You must specify two different configurations, the host
1.1.1.3   root      846: and the target.  Use the `--host=HOST' option for the host and
                    847: `--target=TARGET' to specify the target type.  For example, here is how
                    848: to configure for a cross-compiler that runs on a hypothetical Intel 386
                    849: system and produces code for an HP 68030 system running BSD:
                    850: 
                    851:      configure --target=m68k-hp-bsd4.3 --host=i386-bozotheclone-bsd4.3
                    852: 
1.1.1.6 ! root      853: Tools and Libraries for a Cross-Compiler
        !           854: ----------------------------------------
        !           855: 
        !           856:    If you have a cross-assembler and cross-linker available, you should
        !           857: install them now.  Put them in the directory `/usr/local/TARGET/bin'.
        !           858: Here is a table of the tools you should put in this directory:
        !           859: 
        !           860: `as'
        !           861:      This should be the cross-assembler.
        !           862: 
        !           863: `ld'
        !           864:      This should be the cross-linker.
        !           865: 
        !           866: `ar'
        !           867:      This should be the cross-archiver: a program which can manipulate
        !           868:      archive files (linker libraries) in the target machine's format.
        !           869: 
        !           870: `ranlib'
        !           871:      This should be a program to construct a symbol table in an archive
        !           872:      file.
        !           873: 
        !           874:    The installation of GNU CC will find these programs in that
        !           875: directory, and copy or link them to the proper place to for the
        !           876: cross-compiler to find them when run later.
        !           877: 
        !           878:    The easiest way to provide these files is to build the Binutils
        !           879: package and GAS.  Configure them with the same `--host' and `--target'
        !           880: options that you use for configuring GNU CC, then build and install
        !           881: them.  They install their executables automatically into the proper
        !           882: directory.  Alas, they do not support all the targets that GNU CC
        !           883: supports.
        !           884: 
        !           885:    If you want to install libraries to use with the cross-compiler,
        !           886: such as a standard C library, put them in the directory
        !           887: `/usr/local/TARGET/lib'; installation of GNU CC copies all all the
        !           888: files in that subdirectory into the proper place for GNU CC to find
        !           889: them and link with them.  Here's an example of copying some libraries
        !           890: from a target machine:
        !           891: 
        !           892:      ftp TARGET-MACHINE
        !           893:      lcd /usr/local/TARGET/lib
        !           894:      cd /lib
        !           895:      get libc.a
        !           896:      cd /usr/lib
        !           897:      get libg.a
        !           898:      get libm.a
        !           899:      quit
        !           900: 
        !           901: The precise set of libraries you'll need, and their locations on the
        !           902: target machine, vary depending on its operating system.
        !           903: 
        !           904:    Many targets require "start files" such as `crt0.o' and `crtn.o'
        !           905: which are linked into each executable; these too should be placed in
        !           906: `/usr/local/TARGET/lib'.  There may be several alternatives for
        !           907: `crt0.o', for use with profiling or other compilation options.  Check
        !           908: your target's definition of `STARTFILE_SPEC' to find out what start
        !           909: files it uses.  Here's an example of copying these files from a target
        !           910: machine:
        !           911: 
        !           912:      ftp TARGET-MACHINE
        !           913:      lcd /usr/local/TARGET/lib
        !           914:      prompt
        !           915:      cd /lib
        !           916:      mget *crt*.o
        !           917:      cd /usr/lib
        !           918:      mget *crt*.o
        !           919:      quit
        !           920: 
        !           921: `libgcc.a' and Cross-Compilers
        !           922: ------------------------------
        !           923: 
        !           924:    Code compiled by GNU CC uses certain runtime support functions
        !           925: implicitly.  Some of these functions can be compiled successfully with
        !           926: GNU CC itself, but a few cannot be.  These problem functions are in the
        !           927: source file `libgcc1.c'; the library made from them is called
        !           928: `libgcc1.a'.
        !           929: 
        !           930:    When you build a native compiler, these functions are compiled with
        !           931: some other compiler-the one that you use for bootstrapping GNU CC.
        !           932: Presumably it knows how to open code these operations, or else knows how
        !           933: to call the run-time emulation facilities that the machine comes with.
        !           934: But this approach doesn't work for building a cross-compiler.  The
        !           935: compiler that you use for building knows about the host system, not the
        !           936: target system.
        !           937: 
        !           938:    So, when you build a cross-compiler you have to supply a suitable
        !           939: library `libgcc1.a' that does the job it is expected to do.
        !           940: 
        !           941:    To compile `libgcc1.c' with the cross-compiler itself does not work.
        !           942: The functions in this file are supposed to implement arithmetic
        !           943: operations that GNU CC does not know how to open code, for your target
        !           944: machine.  If these functions are compiled with GNU CC itself, they will
        !           945: compile into infinite recursion.
        !           946: 
        !           947:    On any given target, most of these functions are not needed.  If GNU
        !           948: CC can open code an arithmetic operation, it will not call these
        !           949: functions to perform the operation.  It is possible that on your target
        !           950: machine, none of these functions is needed.  If so, you can supply an
        !           951: empty library as `libgcc1.a'.
        !           952: 
        !           953:    Many targets need library support only for multiplication and
        !           954: division.  If you are linking with a library that contains functions for
        !           955: multiplication and division, you can tell GNU CC to call them directly
        !           956: by defining the macros `MULSI3_LIBCALL', and the like.  These macros
        !           957: need to be defined in the target description macro file.  For some
        !           958: targets, they are defined already.  This may be sufficient to avoid the
        !           959: need for libgcc1.a; if so, you can supply an empty library.
        !           960: 
        !           961:    Some targets do not have floating point instructions; they need other
        !           962: functions in `libgcc1.a', which do floating arithmetic.  Recent
        !           963: versions of GNU CC have a file which emulates floating point.  With a
        !           964: certain amount of work, you should be able to construct a floating
        !           965: point emulator that can be used as `libgcc1.a'.  Perhaps future
        !           966: versions will contain code to do this automatically and conveniently.
        !           967: That depends on whether someone wants to implement it.
        !           968: 
        !           969:    If your target system has another C compiler, you can configure GNU
        !           970: CC as a native compiler on that machine, build just `libgcc1.a' with
        !           971: `make libgcc1.a' on that machine, and use the resulting file with the
        !           972: cross-compiler.  To do this, execute the following on the target
        !           973: machine:
        !           974: 
        !           975:      cd TARGET-BUILD-DIR
        !           976:      configure --host=sparc --target=sun3
        !           977:      make libgcc1.a
        !           978: 
        !           979: And then this on the host machine:
        !           980: 
        !           981:      ftp TARGET-MACHINE
        !           982:      binary
        !           983:      cd TARGET-BUILD-DIR
        !           984:      get libgcc1.a
        !           985:      quit
        !           986: 
        !           987:    Another way to provide the functions you need in `libgcc1.a' is to
        !           988: define the appropriate `perform_...' macros for those functions.  If
        !           989: these definitions do not use the C arithmetic operators that they are
        !           990: meant to implement, you should be able to compile them with the
        !           991: cross-compiler you are building.  (If these definitions already exist
        !           992: for your target file, then you are all set.)
        !           993: 
        !           994:    To build `libgcc1.a' using the perform macros, use
        !           995: `LIBGCC1=libgcc1.a OLDCC=./xgcc' when building the compiler.
        !           996: Otherwise, you should place your replacement library under the name
        !           997: `libgcc1.a' in the directory in which you will build the
        !           998: cross-compiler, before you run `make'.
        !           999: 
        !          1000: Cross-Compilers and Header Files
        !          1001: --------------------------------
        !          1002: 
        !          1003:    If you are cross-compiling a standalone program or a program for an
        !          1004: embedded system, then you may not need any header files except the few
        !          1005: that are part of GNU CC (and those of your program).  However, if you
        !          1006: intend to link your program with a standard C library such as `libc.a',
        !          1007: then you probably need to compile with the header files that go with
        !          1008: the library you use.
        !          1009: 
        !          1010:    The GNU C compiler does not come with these files, because (1) they
        !          1011: are system-specific, and (2) they belong in a C library, not in a
1.1.1.4   root     1012: compiler.
                   1013: 
1.1.1.6 ! root     1014:    If the GNU C library supports your target machine, then you can get
        !          1015: the header files from there (assuming you actually use the GNU library
        !          1016: when you link your program).
        !          1017: 
        !          1018:    If your target machine comes with a C compiler, it probably comes
        !          1019: with suitable header files also.  If you make these files accessible
        !          1020: from the host machine, the cross-compiler can use them also.
        !          1021: 
        !          1022:    Otherwise, you're on your own in finding header files to use when
        !          1023: cross-compiling.
        !          1024: 
        !          1025:    When you have found suitable header files, put them in
        !          1026: `/usr/local/TARGET/include', before building the cross compiler.  Then
        !          1027: installation will run fixincludes properly and install the corrected
        !          1028: versions of the header files where the compiler will use them.
        !          1029: 
        !          1030:    Provide the header files before you build the cross-compiler, because
        !          1031: the build stage actually runs the cross-compiler to produce parts of
        !          1032: `libgcc.a'.  (These are the parts that *can* be compiled with GNU CC.)
        !          1033: Some of them need suitable header files.
        !          1034: 
        !          1035:    Here's an example showing how to copy the header files from a target
        !          1036: machine.  On the target machine, do this:
        !          1037: 
        !          1038:      (cd /usr/include; tar cf - .) > tarfile
        !          1039: 
        !          1040:    Then, on the host machine, do this:
        !          1041: 
        !          1042:      ftp TARGET-MACHINE
        !          1043:      lcd /usr/local/TARGET/include
        !          1044:      get tarfile
        !          1045:      quit
        !          1046:      tar xf tarfile
        !          1047: 
        !          1048: Actually Building the Cross-Compiler
        !          1049: ------------------------------------
        !          1050: 
1.1.1.4   root     1051:    Now you can proceed just as for compiling a single-machine compiler
                   1052: through the step of building stage 1.  If you have not provided some
                   1053: sort of `libgcc1.a', then compilation will give up at the point where
                   1054: it needs that file, printing a suitable error message.  If you do
                   1055: provide `libgcc1.a', then building the compiler will automatically
                   1056: compile and link a test program called `cross-test'; if you get errors
                   1057: in the linking, it means that not all of the necessary routines in
                   1058: `libgcc1.a' are available.
                   1059: 
1.1.1.6 ! root     1060:    If you are making a cross-compiler for an embedded system, and there
        !          1061: is no `stdio.h' header for it, then the compilation of `enquire' will
        !          1062: probably fail.  The job of `enquire' is to run on the target machine
        !          1063: and figure out by experiment the nature of its floating point
        !          1064: representation.  `enquire' records its findings in the header file
        !          1065: `float.h'.  If you can't produce this file by running `enquire' on the
        !          1066: target machine, then you will need to come up with a suitable `float.h'
        !          1067: in some other way (or else, avoid using it in your programs).
1.1.1.3   root     1068: 
                   1069:    Do not try to build stage 2 for a cross-compiler.  It doesn't work to
                   1070: rebuild GNU CC as a cross-compiler using the cross-compiler, because
                   1071: that would produce a program that runs on the target machine, not on the
                   1072: host.  For example, if you compile a 386-to-68030 cross-compiler with
                   1073: itself, the result will not be right either for the 386 (because it was
                   1074: compiled into 68030 code) or for the 68030 (because it was configured
                   1075: for a 386 as the host).  If you want to compile GNU CC into 68030 code,
                   1076: whether you compile it on a 68030 or with a cross-compiler on a 386, you
                   1077: must specify a 68030 as the host when you configure it.
                   1078: 
1.1.1.6 ! root     1079:    To install the cross-compiler, use `make install', as usual.
        !          1080: 
1.1.1.5   root     1081: Installing on the HP Precision Architecture
                   1082: ===========================================
1.1.1.3   root     1083: 
                   1084:    There are two variants of this CPU, called 1.0 and 1.1, which have
                   1085: different machine descriptions.  You must use the right one for your
                   1086: machine.  All 7NN machines and 8N7 machines use 1.1, while all other
                   1087: 8NN machines use 1.0.
                   1088: 
                   1089:    The easiest way to handle this problem is to use `configure hpNNN'
                   1090: or `configure hpNNN-hpux', where NNN is the model number of the
                   1091: machine.  Then `configure' will figure out if the machine is a 1.0 or
                   1092: 1.1.  Use `uname -a' to find out the model number of your machine.
                   1093: 
                   1094:    `-g' does not work on HP-UX, since that system uses a peculiar
1.1.1.4   root     1095: debugging format which GNU CC does not know about.  There are
                   1096: preliminary versions of GAS and GDB for the HP-PA which do work with
                   1097: GNU CC for debugging.  You can get them by anonymous ftp from
                   1098: `jaguar.cs.utah.edu' `dist' subdirectory.  You would need to install
                   1099: GAS in the file
1.1.1.3   root     1100: 
                   1101:      /usr/local/lib/gcc-lib/CONFIGURATION/GCCVERSION/as
                   1102: 
                   1103: where CONFIGURATION is the configuration name (perhaps `hpNNN-hpux')
1.1.1.4   root     1104: and GCCVERSION is the GNU CC version number.  Do this *before* starting
                   1105: the build process, otherwise you will get errors from the HPUX
                   1106: assembler while building `libgcc2.a'.  The command
1.1.1.3   root     1107: 
1.1.1.4   root     1108:      make install-dir
1.1.1.3   root     1109: 
1.1.1.4   root     1110: will create the necessary directory hierarchy so you can install GAS
                   1111: before building GCC.
1.1.1.3   root     1112: 
1.1.1.4   root     1113:    If you obtained GAS before October 6, 1992 it is highly recommended
                   1114: you get a new one to avoid several bugs which have been discovered
                   1115: recently.
                   1116: 
                   1117:    To enable debugging, configure GNU CC with the `--gas' option before
                   1118: building.
1.1.1.3   root     1119: 
1.1.1.5   root     1120:    It has been reported that GNU CC produces invalid assembly code for
                   1121: 1.1 machines running HP-UX 8.02 when using the HP assembler.  Typically
                   1122: the errors look like this:
                   1123:      as: bug.s @line#15 [err#1060]
                   1124:        Argument 0 or 2 in FARG upper
                   1125:               - lookahead = ARGW1=FR,RTNVAL=GR
                   1126:      as: foo.s @line#28 [err#1060]
                   1127:        Argument 0 or 2 in FARG upper
                   1128:               - lookahead = ARGW1=FR
                   1129: 
                   1130:    You can check the version of HP-UX you are running by executing the
1.1.1.6 ! root     1131: command `uname -r'.   If you are indeed running HP-UX 8.02 on a PA and
        !          1132: using the HP assembler then configure GCC with "hpNNN-hpux8.02".
1.1.1.3   root     1133: 
1.1       root     1134: Installing GNU CC on the Sun
1.1.1.5   root     1135: ============================
                   1136: 
                   1137:    On Solaris (version 2.1), do not use the linker or other tools in
                   1138: `/usr/ucb' to build GNU CC.  Use `/usr/ccs/bin'.
1.1       root     1139: 
                   1140:    Make sure the environment variable `FLOAT_OPTION' is not set when
                   1141: you compile `libgcc.a'.  If this option were set to `f68881' when
                   1142: `libgcc.a' is compiled, the resulting code would demand to be linked
1.1.1.3   root     1143: with a special startup file and would not link properly without special
                   1144: pains.
1.1       root     1145: 
1.1.1.6 ! root     1146:    The GNU compiler does not really support the Super SPARC processor
        !          1147: that is used in SPARC Station 10 and similar class machines.  You can
        !          1148: get code that runs by specifying `sparc' as the cpu type; however, its
        !          1149: performance is not very good, and may vary widely according to the
        !          1150: compiler version and optimization options used.  This is because the
        !          1151: instruction scheduling parameters designed for the Sparc are not correct
        !          1152: for the Super SPARC.  Implementing scheduling parameters for the Super
        !          1153: SPARC might be a good project for someone who is willing to learn a
        !          1154: great deal about instruction scheduling in GNU CC.
        !          1155: 
1.1.1.3   root     1156:    There is a bug in `alloca' in certain versions of the Sun library.
1.1       root     1157: To avoid this bug, install the binaries of GNU CC that were compiled by
                   1158: GNU CC.  They use `alloca' as a built-in function and never the one in
                   1159: the library.
                   1160: 
                   1161:    Some versions of the Sun compiler crash when compiling GNU CC.  The
1.1.1.3   root     1162: problem is a segmentation fault in cpp.  This problem seems to be due to
                   1163: the bulk of data in the environment variables.  You may be able to avoid
                   1164: it by using the following command to compile GNU CC with Sun CC:
1.1       root     1165: 
                   1166:      make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"
                   1167: 
                   1168: Installing GNU CC on the 3b1
1.1.1.5   root     1169: ============================
1.1       root     1170: 
                   1171:    Installing GNU CC on the 3b1 is difficult if you do not already have
                   1172: GNU CC running, due to bugs in the installed C compiler.  However, the
                   1173: following procedure might work.  We are unable to test it.
                   1174: 
                   1175:   1. Comment out the `#include "config.h"' line on line 37 of `cccp.c'
                   1176:      and do `make cpp'.  This makes a preliminary version of GNU cpp.
                   1177: 
                   1178:   2. Save the old `/lib/cpp' and copy the preliminary GNU cpp to that
                   1179:      file name.
                   1180: 
                   1181:   3. Undo your change in `cccp.c', or reinstall the original version,
                   1182:      and do `make cpp' again.
                   1183: 
                   1184:   4. Copy this final version of GNU cpp into `/lib/cpp'.
                   1185: 
                   1186:   5. Replace every occurrence of `obstack_free' in the file `tree.c'
                   1187:      with `_obstack_free'.
                   1188: 
                   1189:   6. Run `make' to get the first-stage GNU CC.
                   1190: 
                   1191:   7. Reinstall the original version of `/lib/cpp'.
                   1192: 
1.1.1.3   root     1193:   8. Now you can compile GNU CC with itself and install it in the normal
                   1194:      fashion.
1.1       root     1195: 
                   1196: Installing GNU CC on Unos
1.1.1.5   root     1197: =========================
1.1       root     1198: 
                   1199:    Use `configure unos' for building on Unos.
                   1200: 
                   1201:    The Unos assembler is named `casm' instead of `as'.  For some
                   1202: strange reason linking `/bin/as' to `/bin/casm' changes the behavior,
                   1203: and does not work.  So, when installing GNU CC, you should install the
                   1204: following script as `as' in the subdirectory where the passes of GCC
                   1205: are installed:
                   1206: 
                   1207:      #!/bin/sh
                   1208:      casm $*
                   1209: 
1.1.1.5   root     1210:    The default Unos library is named `libunos.a' instead of `libc.a'.
1.1       root     1211: To allow GNU CC to function, either change all references to `-lc' in
                   1212: `gcc.c' to `-lunos' or link `/lib/libc.a' to `/lib/libunos.a'.
                   1213: 
1.1.1.3   root     1214:    When compiling GNU CC with the standard compiler, to overcome bugs in
1.1.1.5   root     1215: the support of `alloca', do not use `-O' when making stage 2.  Then use
1.1.1.3   root     1216: the stage 2 compiler with `-O' to make the stage 3 compiler.  This
1.1       root     1217: compiler will have the same characteristics as the usual stage 2
                   1218: compiler on other systems.  Use it to make a stage 4 compiler and
                   1219: compare that with stage 3 to verify proper compilation.
                   1220: 
1.1.1.3   root     1221:    (Perhaps simply defining `ALLOCA' in `x-crds' as described in the
                   1222: comments there will make the above paragraph superfluous.  Please
                   1223: inform us of whether this works.)
                   1224: 
1.1       root     1225:    Unos uses memory segmentation instead of demand paging, so you will
                   1226: need a lot of memory.  5 Mb is barely enough if no other tasks are
1.1.1.5   root     1227: running.  If linking `cc1' fails, try putting the object files into a
1.1       root     1228: library and linking from that library.
                   1229: 
                   1230: Installing GNU CC on VMS
1.1.1.5   root     1231: ========================
1.1       root     1232: 
                   1233:    The VMS version of GNU CC is distributed in a backup saveset
                   1234: containing both source code and precompiled binaries.
                   1235: 
                   1236:    To install the `gcc' command so you can use the compiler easily, in
1.1.1.3   root     1237: the same manner as you use the VMS C compiler, you must install the VMS
                   1238: CLD file for GNU CC as follows:
1.1       root     1239: 
                   1240:   1. Define the VMS logical names `GNU_CC' and `GNU_CC_INCLUDE' to
1.1.1.4   root     1241:      point to the directories where the GNU CC executables
                   1242:      (`gcc-cpp.exe', `gcc-cc1.exe', etc.) and the C include files are
                   1243:      kept respectively.  This should be done with the commands:
1.1       root     1244: 
1.1.1.2   root     1245:           $ assign /system /translation=concealed -
                   1246:             disk:[gcc.] gnu_cc
                   1247:           $ assign /system /translation=concealed -
                   1248:             disk:[gcc.include.] gnu_cc_include
1.1       root     1249: 
1.1.1.3   root     1250:      with the appropriate disk and directory names.  These commands can
                   1251:      be placed in your system startup file so they will be executed
                   1252:      whenever the machine is rebooted.  You may, if you choose, do this
                   1253:      via the `GCC_INSTALL.COM' script in the `[GCC]' directory.
1.1       root     1254: 
                   1255:   2. Install the `GCC' command with the command line:
                   1256: 
1.1.1.2   root     1257:           $ set command /table=sys$common:[syslib]dcltables -
                   1258:             /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
                   1259:           $ install replace sys$common:[syslib]dcltables
1.1       root     1260: 
                   1261:   3. To install the help file, do the following:
                   1262: 
1.1.1.4   root     1263:           $ library/help sys$library:helplib.hlb gcc.hlp
1.1       root     1264: 
                   1265:      Now you can invoke the compiler with a command like `gcc /verbose
                   1266:      file.c', which is equivalent to the command `gcc -v -c file.c' in
                   1267:      Unix.
                   1268: 
                   1269:    If you wish to use GNU C++ you must first install GNU CC, and then
                   1270: perform the following steps:
                   1271: 
                   1272:   1. Define the VMS logical name `GNU_GXX_INCLUDE' to point to the
                   1273:      directory where the preprocessor will search for the C++ header
1.1.1.5   root     1274:      files.  This can be done with the command:
1.1       root     1275: 
1.1.1.2   root     1276:           $ assign /system /translation=concealed -
                   1277:             disk:[gcc.gxx_include.] gnu_gxx_include
1.1       root     1278: 
1.1.1.3   root     1279:      with the appropriate disk and directory name.  If you are going to
                   1280:      be using libg++, this is where the libg++ install procedure will
                   1281:      install the libg++ header files.
1.1       root     1282: 
                   1283:   2. Obtain the file `gcc-cc1plus.exe', and place this in the same
                   1284:      directory that `gcc-cc1.exe' is kept.
                   1285: 
1.1.1.3   root     1286:      The GNU C++ compiler can be invoked with a command like `gcc /plus
                   1287:      /verbose file.cc', which is equivalent to the command `g++ -v -c
                   1288:      file.cc' in Unix.
1.1       root     1289: 
                   1290:    We try to put corresponding binaries and sources on the VMS
                   1291: distribution tape.  But sometimes the binaries will be from an older
1.1.1.4   root     1292: version than the sources, because we don't always have time to update
1.1       root     1293: them.  (Use the `/version' option to determine the version number of
                   1294: the binaries and compare it with the source file `version.c' to tell
1.1.1.3   root     1295: whether this is so.)  In this case, you should use the binaries you get
                   1296: to recompile the sources.  If you must recompile, here is how:
1.1       root     1297: 
1.1.1.5   root     1298:   1. Execute the command procedure `vmsconfig.com' to set up the files
                   1299:      `tm.h', `config.h', `aux-output.c', and `md.', and to create files
                   1300:      `tconfig.h' and `hconfig.h'.  This procedure also creates several
                   1301:      linker option files used by `make-cc1.com' and a data file used by
                   1302:      `make-l2.com'.
1.1.1.4   root     1303: 
                   1304:           $ @vmsconfig.com
1.1       root     1305: 
                   1306:   2. Setup the logical names and command tables as defined above.  In
                   1307:      addition, define the VMS logical name `GNU_BISON' to point at the
                   1308:      to the directories where the Bison executable is kept.  This
                   1309:      should be done with the command:
                   1310: 
1.1.1.2   root     1311:           $ assign /system /translation=concealed -
                   1312:             disk:[bison.] gnu_bison
1.1       root     1313: 
1.1.1.3   root     1314:      You may, if you choose, use the `INSTALL_BISON.COM' script in the
                   1315:      `[BISON]' directory.
1.1       root     1316: 
                   1317:   3. Install the `BISON' command with the command line:
                   1318: 
1.1.1.2   root     1319:           $ set command /table=sys$common:[syslib]dcltables -
                   1320:             /output=sys$common:[syslib]dcltables -
                   1321:             gnu_bison:[000000]bison
                   1322:           $ install replace sys$common:[syslib]dcltables
1.1       root     1323: 
1.1.1.5   root     1324:   4. Type `@make-gcc' to recompile everything (alternatively, submit
                   1325:      the file `make-gcc.com' to a batch queue).  If you wish to build
                   1326:      the GNU C++ compiler as well as the GNU CC compiler, you must
1.1.1.3   root     1327:      first edit `make-gcc.com' and follow the instructions that appear
                   1328:      in the comments.
1.1       root     1329: 
1.1.1.2   root     1330:   5. In order to use GCC, you need a library of functions which GCC
                   1331:      compiled code will call to perform certain tasks, and these
                   1332:      functions are defined in the file `libgcc2.c'.  To compile this
                   1333:      you should use the command procedure `make-l2.com', which will
1.1.1.5   root     1334:      generate the library `libgcc2.olb'.  `libgcc2.olb' should be built
1.1.1.3   root     1335:      using the compiler built from the same distribution that
1.1.1.2   root     1336:      `libgcc2.c' came from, and `make-gcc.com' will automatically do
                   1337:      all of this for you.
                   1338: 
1.1.1.3   root     1339:      To install the library, use the following commands:
1.1.1.2   root     1340: 
1.1.1.4   root     1341:           $ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
1.1.1.5   root     1342:           $ library gnu_cc:[000000]gcclib/delete=L_*
1.1.1.4   root     1343:           $ library libgcc2/extract=*/output=libgcc2.obj
                   1344:           $ library gnu_cc:[000000]gcclib libgcc2.obj
1.1.1.2   root     1345: 
1.1.1.3   root     1346:      The first command simply removes old modules that will be replaced
1.1.1.5   root     1347:      with modules from `libgcc2' under different module names.  The
                   1348:      modules `new' and `eprintf' may not actually be present in your
                   1349:      `gcclib.olb'--if the VMS librarian complains about those modules
                   1350:      not being present, simply ignore the message and continue on with
                   1351:      the next command.  The second command removes the modules that
                   1352:      came from the previous version of the library `libgcc2.c'.
1.1.1.3   root     1353: 
                   1354:      Whenever you update the compiler on your system, you should also
                   1355:      update the library with the above procedure.
                   1356: 
1.1.1.4   root     1357:   6. You may wish to build GCC in such a way that no files are written
1.1.1.3   root     1358:      to the directory where the source files reside.  An example would
                   1359:      be the when the source files are on a read-only disk.  In these
                   1360:      cases, execute the following DCL commands (substituting your
                   1361:      actual path names):
                   1362: 
1.1.1.4   root     1363:           $ assign dua0:[gcc.build_dir.]/translation=concealed, -
                   1364:                    dua1:[gcc.source_dir.]/translation=concealed  gcc_build
1.1.1.3   root     1365:           $ set default gcc_build:[000000]
                   1366: 
1.1.1.5   root     1367:      where the directory `dua1:[gcc.source_dir]' contains the source
                   1368:      code, and the directory `dua0:[gcc.build_dir]' is meant to contain
                   1369:      all of the generated object files and executables.  Once you have
                   1370:      done this, you can proceed building GCC as described above.  (Keep
                   1371:      in mind that `gcc_build' is a rooted logical name, and thus the
                   1372:      device names in each element of the search list must be an actual
                   1373:      physical device name rather than another rooted logical name).
1.1.1.3   root     1374: 
1.1.1.4   root     1375:   7. *If you are building GNU CC with a previous version of GNU CC, you
1.1.1.3   root     1376:      also should check to see that you have the newest version of the
                   1377:      assembler*.  In particular, GNU CC version 2 treats global constant
                   1378:      variables slightly differently from GNU CC version 1, and GAS
                   1379:      version 1.38.1 does not have the patches required to work with GCC
1.1.1.5   root     1380:      version 2.  If you use GAS 1.38.1, then `extern const' variables
1.1.1.3   root     1381:      will not have the read-only bit set, and the linker will generate
                   1382:      warning messages about mismatched psect attributes for these
                   1383:      variables.  These warning messages are merely a nuisance, and can
                   1384:      safely be ignored.
1.1       root     1385: 
1.1.1.3   root     1386:      If you are compiling with a version of GNU CC older than 1.33,
1.1       root     1387:      specify `/DEFINE=("inline=")' as an option in all the
                   1388:      compilations.  This requires editing all the `gcc' commands in
1.1.1.5   root     1389:      `make-cc1.com'.  (The older versions had problems supporting
1.1       root     1390:      `inline'.)  Once you have a working 1.33 or newer GNU CC, you can
                   1391:      change this file back.
                   1392: 
1.1.1.4   root     1393:   8. If you want to build GNU CC with the VAX C compiler, you will need
                   1394:      to make minor changes in `make-cccp.com' and `make-cc1.com' to
                   1395:      choose alternate definitions of `CC', `CFLAGS', and `LIBS'.  See
                   1396:      comments in those files.  However, you must also have a working
                   1397:      version of the GNU assembler (GNU as, aka GAS) as it is used as
                   1398:      the back-end for GNU CC to produce binary object modules and is
                   1399:      not included in the GNU CC sources.  GAS is also needed to compile
                   1400:      `libgcc2' in order to build `gcclib' (see above); `make-l2.com'
                   1401:      expects to be able to find it operational in
                   1402:      `gnu_cc:[000000]gnu-as.exe'.
                   1403: 
                   1404:      To use GNU CC on VMS, you need the VMS driver programs `gcc.exe',
                   1405:      `gcc.com', and `gcc.cld'.  They are distributed with the VMS
                   1406:      binaries (`gcc-vms') rather than the GNU CC sources.  GAS is also
                   1407:      included in `gcc-vms', as is Bison.
                   1408: 
                   1409:      Once you have successfully built GNU CC with VAX C, you should use
                   1410:      the resulting compiler to rebuild itself.  Before doing this, be
                   1411:      sure to restore the `CC', `CFLAGS', and `LIBS' definitions in
                   1412:      `make-cccp.com' and `make-cc1.com'.  The second generation
                   1413:      compiler will be able to take advantage of many optimizations that
                   1414:      must be suppressed when building with other compilers.
                   1415: 
1.1       root     1416:    Under previous versions of GNU CC, the generated code would
1.1.1.4   root     1417: occasionally give strange results when linked with the sharable
1.1.1.5   root     1418: `VAXCRTL' library.  Now this should work.
1.1       root     1419: 
                   1420:    Even with this version, however, GNU CC itself should not be linked
1.1.1.4   root     1421: with the sharable `VAXCRTL'.  The version of `qsort' in `VAXCRTL' has a
                   1422: bug (known to be present in VMS versions V4.6 through V5.5) which
                   1423: causes the compiler to fail.
1.1       root     1424: 
1.1.1.5   root     1425:    The executables are generated by `make-cc1.com' and `make-cccp.com'
                   1426: use the object library version of `VAXCRTL' in order to make use of the
                   1427: `qsort' routine in `gcclib.olb'.  If you wish to link the compiler
                   1428: executables with the shareable image version of `VAXCRTL', you should
                   1429: edit the file `tm.h' (created by `vmsconfig.com') to define the macro
                   1430: `QSORT_WORKAROUND'.
1.1.1.4   root     1431: 
                   1432:    `QSORT_WORKAROUND' is always defined when GNU CC is compiled with
                   1433: VAX C, to avoid a problem in case `gcclib.olb' is not yet available.
                   1434: 
                   1435: Installing GNU CC on the WE32K
1.1.1.5   root     1436: ==============================
1.1.1.4   root     1437: 
                   1438:    These computers are also known as the 3b2, 3b5, 3b20 and other
                   1439: similar names.  (However, the 3b1 is actually a 68000; see *Note 3b1
                   1440: Install::.)
                   1441: 
                   1442:    Don't use `-g' when compiling with the system's compiler.  The
                   1443: system's linker seems to be unable to handle such a large program with
                   1444: debugging information.
                   1445: 
                   1446:    The system's compiler runs out of capacity when compiling `stmt.c'
                   1447: in GNU CC.  You can work around this by building `cpp' in GNU CC first,
                   1448: then use that instead of the system's preprocessor with the system's C
                   1449: compiler to compile `stmt.c'.  Here is how:
                   1450: 
                   1451:      mv /lib/cpp /lib/cpp.att
                   1452:      cp cpp /lib/cpp.gnu
1.1.1.6 ! root     1453:      echo '/lib/cpp.gnu -traditional ${1+"$@"}' > /lib/cpp
1.1.1.4   root     1454:      chmod +x /lib/cpp
                   1455: 
                   1456:    The system's compiler produces bad code for some of the GNU CC
                   1457: optimization files.  So you must build the stage 2 compiler without
1.1.1.5   root     1458: optimization.  Then build a stage 3 compiler with optimization.  That
1.1.1.4   root     1459: executable should work.  Here are the necessary commands:
                   1460: 
                   1461:      make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
                   1462:      make stage2
                   1463:      make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
                   1464: 
                   1465:    You may need to raise the ULIMIT setting to build a C++ compiler, as
                   1466: the file `cc1plus' is larger than one megabyte.
                   1467: 
                   1468: Installing GNU CC on the MIPS
1.1.1.5   root     1469: =============================
1.1.1.4   root     1470: 
1.1.1.5   root     1471:    See *Note Installation:: about whether to use either of the options
                   1472: `--with-stabs' or `--with-gnu-as'.
1.1.1.4   root     1473: 
                   1474:    The MIPS C compiler needs to be told to increase its table size for
                   1475: switch statements with the `-Wf,-XNg1500' option in order to compile
                   1476: `cp-parse.c'.  If you use the `-O2' optimization option, you also need
1.1.1.5   root     1477: to use `-Olimit 3000'.  Both of these options are automatically
1.1.1.4   root     1478: generated in the `Makefile' that the shell script `configure' builds.
                   1479: If you override the `CC' make variable and use the MIPS compilers, you
                   1480: may need to add `-Wf,-XNg1500 -Olimit 3000'.
                   1481: 
                   1482:    MIPS computers running RISC-OS can support four different
                   1483: personalities: default, BSD 4.3, System V.3, and System V.4 (older
                   1484: versions of RISC-OS don't support V.4).  To configure GCC for these
                   1485: platforms use the following configurations:
                   1486: 
                   1487: `mips-mips-riscos`rev''
                   1488:      Default configuration for RISC-OS, revision `rev'.
                   1489: 
                   1490: `mips-mips-riscos`rev'bsd'
                   1491:      BSD 4.3 configuration for RISC-OS, revision `rev'.
                   1492: 
                   1493: `mips-mips-riscos`rev'sysv4'
                   1494:      System V.4 configuration for RISC-OS, revision `rev'.
                   1495: 
                   1496: `mips-mips-riscos`rev'sysv'
                   1497:      System V.3 configuration for RISC-OS, revision `rev'.
                   1498: 
                   1499:    The revision `rev' mentioned above is the revision of RISC-OS to
                   1500: use.  You must reconfigure GCC when going from a RISC-OS revision 4 to
                   1501: RISC-OS revision 5.  This has the effect of avoiding a linker bug.
                   1502: 
                   1503:    DECstations can support three different personalities: Ultrix, DEC
                   1504: OSF/1, and OSF/rose.  To configure GCC for these platforms use the
                   1505: following configurations:
                   1506: 
                   1507: `decstation-ultrix'
                   1508:      Ultrix configuration.
                   1509: 
                   1510: `decstation-osf1'
                   1511:      Dec's version of OSF/1.
                   1512: 
                   1513: `decstation-osfrose'
                   1514:      Open Software Foundation reference port of OSF/1 which uses the
                   1515:      OSF/rose object file format instead of ECOFF.  Normally, you would
                   1516:      not select this configuration.
1.1.1.2   root     1517: 
1.1.1.5   root     1518:    On Irix version 4.0.5F, and perhaps on some other versions as well,
                   1519: there is an assembler bug that reorders instructions incorrectly.  To
                   1520: work around it, specify the target configuration `mips-sgi-irix4loser'.
                   1521: This configuration inhibits assembler optimization.
                   1522: 
                   1523:    You can turn off assembler optimization in a compiler configured with
                   1524: target `mips-sgi-irix4' using the `-noasmopt' option.  This compiler
                   1525: option passes the option `-O0' to the assembler, to inhibit reordering.
                   1526: 
                   1527:    The `-noasmopt' option can be useful for testing whether a problem
                   1528: is due to erroneous assembler reordering.  Even if a problem does not go
                   1529: away with `-noasmopt', it may still be due to assembler
                   1530: reordering--perhaps GNU CC itself was miscompiled as a result.
                   1531: 
                   1532:    We know this is inconvenient, but it's the best that can be done at
                   1533: the last minute.
                   1534: 
                   1535: `collect2'
                   1536: ==========
                   1537: 
                   1538:    Many target systems do not have support in the assembler and linker
                   1539: for "constructors"--initialization functions to be called before the
                   1540: official "start" of `main'.  On such systems, GNU CC uses a utility
                   1541: called `collect2' to arrange to call these functions at start time.
                   1542: 
                   1543:    The program `collect2' works by linking the program once and looking
                   1544: through the linker output file for symbols with particular names
                   1545: indicating they are constructor functions.  If it finds any, it creates
                   1546: a new temporary `.c' file containing a table of them, compiles it, and
                   1547: links the program a second time including that file.
                   1548: 
                   1549:    The actual calls to the constructors are carried out by a subroutine
                   1550: called `__main', which is called (automatically) at the beginning of
                   1551: the body of `main' (provided `main' was compiled with GNU CC).
                   1552: 
                   1553:    The program `collect2' is installed as `ld' in the directory where
                   1554: the passes of the compiler are installed.  When `collect2' needs to
                   1555: find the *real* `ld', it tries the following file names:
                   1556: 
                   1557:    * `gld' in the directories listed in the compiler's search
                   1558:      directories.
                   1559: 
                   1560:    * `gld' in the directories listed in the environment variable `PATH'.
                   1561: 
                   1562:    * `real-ld' in the compiler's search directories.
                   1563: 
                   1564:    * `real-ld' in `PATH'.
                   1565: 
                   1566:    * `ld' in `PATH'.
                   1567: 
                   1568:    "The compiler's search directories" means all the directories where
                   1569: `gcc' searches for passes of the compiler.  This includes directories
                   1570: that you specify with `-B'.
                   1571: 
1.1.1.6 ! root     1572:    Cross-compilers search a little differently:
1.1.1.5   root     1573: 
                   1574:    * `gld' in the compiler's search directories.
                   1575: 
                   1576:    * `TARGET-gld' in `PATH'.
                   1577: 
                   1578:    * `real-ld' in the compiler's search directories.
                   1579: 
                   1580:    * `TARGET-real-ld' in `PATH'.
                   1581: 
                   1582:    * `TARGET-ld' in `PATH'.
                   1583: 
                   1584:    `collect2' does not search for `ld' using the compiler's search
                   1585: directories, because if it did, it would find itself--not the real
                   1586: `ld'--and this could lead to infinite recursion.  However, the
                   1587: directory where `collect2' is installed might happen to be in `PATH'.
                   1588: That could lead `collect2' to invoke itself anyway.  when looking for
                   1589: `ld'.
                   1590: 
                   1591:    To prevent this, `collect2' explicitly avoids running `ld' using the
                   1592: file name under which `collect2' itself was invoked.  In fact, it
                   1593: remembers up to two such names--in case one copy of `collect2' finds
                   1594: another copy (or version) of `collect2' installed as `ld' in a second
                   1595: place in the search path.
                   1596: 
                   1597:    If two file names to avoid are not sufficient, you may still
                   1598: encounter an infinite recursion of `collect2' processes.  When this
                   1599: happens.  check all the files installed as `ld' in any of the
                   1600: directories searched, and straighten out the situation.
                   1601: 
                   1602:    (In a future version, we will probably change `collect2' to avoid
                   1603: any reinvocation of a file from which any parent `collect2' was run.)
                   1604: 
1.1.1.6 ! root     1605: Standard Header File Directories
        !          1606: ================================
        !          1607: 
        !          1608:    `GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
        !          1609: where GNU CC stores its private include files, and also where GNU CC
        !          1610: stores the fixed include files.  A cross compiled GNU CC runs
        !          1611: `fixincludes' on the header files in `$(tooldir)/include'.  (If the
        !          1612: cross compilation header files need to be fixed, they must be installed
        !          1613: before GNU CC is built.  If the cross compilation header files are
        !          1614: already suitable for ANSI C and GNU CC, nothing special need be done).
        !          1615: 
        !          1616:    `GPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
        !          1617: is where `g++' looks first for header files.  `libg++' installs only
        !          1618: target independent header files in that directory.
        !          1619: 
        !          1620:    `LOCAL_INCLUDE_DIR' is used only for a native compiler.  It is
        !          1621: normally `/usr/local/include'.  GNU CC searches this directory so that
        !          1622: users can install header files in `/usr/local/include'.
        !          1623: 
        !          1624:    `CROSS_INCLUDE_DIR' is used only for a cross compiler.  GNU CC
        !          1625: doesn't install anything there.
        !          1626: 
        !          1627:    `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It
        !          1628: is the place for other packages to install header files that GNU CC will
        !          1629: use.  For a cross-compiler, this is the equivalent of `/usr/include'.
        !          1630: When you build a cross-compiler, `fixincludes' processes any header
        !          1631: files in this directory.
        !          1632: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.