--- gcc/INSTALL 2018/04/24 17:51:21 1.1.1.1 +++ gcc/INSTALL 2018/04/24 18:00:44 1.1.1.4 @@ -1,136 +1,239 @@ -This is a copy of one chapter from the Info file gcc.info*. -For full information on installing and porting GCC, refer to the -GCC manual: - - Info file gcc.info - TeX output gcc.dvi - TeX source gcc.texinfo +This file documents the installation of the GNU compiler. Copyright (C) +1988, 1989, 1992 Free Software Foundation, Inc. You may copy, +distribute, and modify it freely as long as you preserve this copyright +notice and permission notice. Installing GNU CC -***************** +****************** Here is the procedure for installing GNU CC on a Unix system. 1. If you have built GNU CC previously in the same directory for a - different target machine, do `make cleanconfig' to delete all - files that might be invalid. + different target machine, do `make distclean' to delete all files + that might be invalid. One of the files this deletes is + `Makefile'; if `make distclean' complains that `Makefile' does not + exist, it probably means that the directory is already suitably + clean. - 2. On a Sequent system, go to the Berkeley universe. - - 3. On a System V release 4 system, make sure `/usr/bin' precedes + 2. On a System V release 4 system, make sure `/usr/bin' precedes `/usr/ucb' in `PATH'. The `cc' command in `/usr/ucb' uses libraries which have bugs. - 4. Specify the host and target machine configurations. You do this - by running the file `configure' with appropriate arguments. + 3. Specify the host and target machine configurations. You do this by + running the file `configure' with appropriate arguments. - If you are building a compiler to produce code for the machine - it runs on, specify just one machine type. To build a - cross-compiler, specify two configurations, one for the "host - machine" (which the compiler runs on), and one for the "target - machine" (which the compiler produces code for). The command - looks like this: + If you are building a compiler to produce code for the machine it + runs on, specify just one machine type. Use the `--target' + option; the host type will default to be the same as the target. + (For information on building a cross-compiler, see *Note + Cross-Compiler::.) The command looks like this: - configure --host=sun3-sunos3 --target=sparc-sun-sunos4.1 + configure --target=sparc-sun-sunos4.1 - A configuration name may be canonical or it may be more or less + A configuration name may be canonical or it may be more or less abbreviated. - A canonical configuration name has three parts, separated by - dashes. It looks like this: `CPU-COMPANY-SYSTEM'. (The three - parts may themselves contain dashes; `configure' can figure out - which dashes serve which purpose.) For example, - `m68k-sun-sunos4.1' specifies a Sun 3. + A canonical configuration name has three parts, separated by + dashes. It looks like this: `CPU-COMPANY-SYSTEM'. (The three parts + may themselves contain dashes; `configure' can figure out which + dashes serve which purpose.) For example, `m68k-sun-sunos4.1' + specifies a Sun 3. - You can also replace parts of the configuration by nicknames - or aliases. For example, `sun3' stands for `m68k-sun', so + You can also replace parts of the configuration by nicknames or + aliases. For example, `sun3' stands for `m68k-sun', so `sun3-sunos4.1' is another way to specify a Sun 3. You can also - use simply `sun3-sunos', since the version of Sunos is assumed by - default to be version 4. `sun3-bsd' also works, since - `configure' knows that the only BSD variant on a Sun 3 is Sunos. - - You can specify a version number after any of the system - types, and some of the CPU types. In most cases, the version is - irrelevant, and will be ignored. So you might as well specify - the version if you know it. - - Here are the possible CPU types: - - a29k, arm, cN, hppa, i386, i860, m68000, m68k, m88k, mips, - ns32k, romp, rs6000, sparc, vax. - - Note that the type hppa currently works only with Berkeley - systems, not with HP/UX. - - Here are the recognized company names. As you can see, - customary abbreviations are used rather than the longer official - names. - - alliant, altos, apollo, att, convergent, convex, crds, dec, - dg, encore, harris, hp, ibm, mips, motorola, ncr, next, ns, - omron, sequent, sgi, sony, sun, tti, unicom. - - The company name is meaningful only to disambiguate when the - rest of the information supplied is insufficient. You can omit - it, writing just `CPU-SYSTEM', if it is not needed. For example, + use simply `sun3-sunos', since the version of SunOS is assumed by + default to be version 4. `sun3-bsd' also works, since `configure' + knows that the only BSD variant on a Sun 3 is SunOS. + + You can specify a version number after any of the system types, + and some of the CPU types. In most cases, the version is + irrelevant, and will be ignored. So you might as well specify the + version if you know it. + + Here are the possible CPU types: + + a29k, alpha, arm, cN, elxsi, hppa1.0, hppa1.1, i386, i860, + i960, m68000, m68k, m88k, mips, ns32k, pyramid, romp, rs6000, + sparc, vax, we32k. + + Here are the recognized company names. As you can see, customary + abbreviations are used rather than the longer official names. + + alliant, altos, apollo, att, cbm, convergent, convex, crds, + dec, dg, encore, harris, hp, ibm, mips, motorola, ncr, next, + ns, omron, sequent, sgi, sony, sun, tti, unicom. + + The company name is meaningful only to disambiguate when the rest + of the information supplied is insufficient. You can omit it, + writing just `CPU-SYSTEM', if it is not needed. For example, `vax-ultrix4.2' is equivalent to `vax-dec-ultrix4.2'. - Here is a list of system types: + Here is a list of system types: - bsd, sysv, mach, minix, genix, ultrix, vms, sco, esix, isc, - aix, sunos, hpux, unos, luna, dgux, newsos, osfrose, osf, - dynix, aos, ctix. + aix, aos, bsd, ctix, dgux, dynix, genix, hpux, isc, linux, + luna, mach, minix, newsos, osf, osfrose, riscos, sco, sunos, + sysv, ultrix, unos, vms. You can omit the system type; then `configure' guesses the operating system from the CPU and company. - Often a particular model of machine has a name. Many of these - names are recognized as an alias for a CPU/company combination. - The alias `sun3', mentioned above, is an example of this: it - stands for `m68k-sun'. Sometimes we accept a company name as a - machine name, when the name is popularly used for a particular - machine. Here is a table of the known machine names: - - 3300, 3b1, 7300, altos3068, altos, apollo68, att-7300, - balance, convex-cN, crds, decstation-3100, decstation-dec, - decstation, delta, encore, gmicro, hp7NN, hp8NN, hp9k2NN, - hp9k3NN, hp9k7NN, hp9k8NN, iris4d, iris, isi68, m3230, - magnum, merlin, miniframe, mmax, news-3600, news800, news, - next, pbd, pc532, pmax, ps2, risc-news, rtpc, sun2, sun386i, - sun386, sun3, sun4, symmetry, tower-32, tower. + You can add a version number to the system type; this may or may + not make a difference. For example, you can write `bsd4.3' or + `bsd4.4' to distinguish versions of BSD. In practice, the version + number is most needed for `sysv3' and `sysv4', which are often + treated differently. - If you specify an impossible combination such as `i860-dg-vms', + If you specify an impossible combination such as `i860-dg-vms', then you may get an error message from `configure', or it may ignore part of the information and do the best it can with the - rest. `configure' always prints the canonical name for the + rest. `configure' always prints the canonical name for the alternative that it used. - On certain systems, you must specify whether you want GNU CC - to work with the usual compilation tools or with the GNU - compilation tools (including GAS). Use the `--gas' argument when - you run `configure', if you want to use the GNU tools. The - systems were this makes a difference are `i386-ANYTHING-sysv', - `i860-ANYTHING-bsd', `m68k-hp-hpux', `m68k-sony-bsd', - `m68k-altos-sysv', `m68000-hp-hpux', and `m68000-att-sysv'. On - any other system, `--gas' has no effect. - - On certain systems, you must specify whether the machine has a - floating point unit. These systems are `m68k-sun-sunosN' and - `m68k-isi-bsd'. On any other system, `--nfp' currently has no - effect, though perhaps there are other systems where it could - usefully make a difference. - - If you want to install your own homemade configuration files, - you can use `local' as the company name to access them. If you - use configuration `CPU-local', the entire configuration name is - used to form the configuration file names. + Often a particular model of machine has a name. Many machine + names are recognized as aliases for CPU/company combinations. + Thus, the machine name `sun3', mentioned above, is an alias for + `m68k-sun'. Sometimes we accept a company name as a machine name, + when the name is popularly used for a particular machine. Here is + a table of the known machine names: + + 3300, 3b1, 3bN, 7300, altos3068, altos, apollo68, att-7300, + balance, convex-cN, crds, decstation-3100, decstation, delta, + encore, fx2800, gmicro, hp7NN, hp8NN, hp9k2NN, hp9k3NN, + hp9k7NN, hp9k8NN, iris4d, iris, isi68, m3230, magnum, merlin, + miniframe, mmax, news-3600, news800, news, next, pbd, pc532, + pmax, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3, + sun4, symmetry, tower-32, tower. + + Remember that a machine name specifies both the cpu type and the + company name. + + There are four additional options you can specify independently to + describe variant hardware and software configurations. These are + `--with-gnu-as', `--with-gnu-ld', `--with-stabs' and `--nfp'. + + `--with-gnu-as' + On certain systems, you must specify whether you want GNU CC + to work with the usual compilation tools or with the GNU + compilation tools (including GAS). Use the `--with-gnu-as' + argument when you run `configure', if you want to use the GNU + tools. (Specify `--with-gnu-ld' as well, since on these + systems GAS works only with the GNU linker.) The systems + where this makes a difference are `i386-ANYTHING-sysv', + `i860-ANYTHING-bsd', `m68k-hp-hpux', `m68k-sony-bsd', + `m68k-altos-sysv', `m68000-hp-hpux', and `m68000-att-sysv'. + On any other system, `--with-gnu-as' has no effect. + + `--with-gnu-ld' + Specify the option `--with-gnu-ld' if you plan to use the GNU + linker. This inhibits the installation of `collect2', a + program which otherwise serves as a front-end for the + system's linker on most configurations. + + `--with-stabs' + On MIPS based systems, you must specify whether you want GNU + CC to create the normal ECOFF debugging format, or to use + BSD-style stabs passed through the ECOFF symbol table. The + normal ECOFF debug format cannot fully handle languages other + than C. BSD stabs format can handle other languages, but it + only works with the GNU debugger GDB. + + Normally, GNU CC uses the ECOFF debugging format by default; + if you prefer BSD stabs, specify `--with-stabs' when you + configure GNU CC. + + No matter which default you choose when you configure GNU CC, + the user can use the `-gcoff' and `-gstabs+' options to + specify explicitly the debug format for a particular + compilation. + + `--nfp' + On certain systems, you must specify whether the machine has + a floating point unit. These systems are `m68k-sun-sunosN' + and `m68k-isi-bsd'. On any other system, `--nfp' currently + has no effect, though perhaps there are other systems where + it could usefully make a difference. + + If you want to install your own homemade configuration files, you + can use `local' as the company name to access them. If you use + configuration `CPU-local', the entire configuration name is used + to form the configuration file names. - Thus, if you specify `m68k-local', then the files used are + Thus, if you specify `m68k-local', then the files used are `m68k-local.md', `m68k-local.h', `m68k-local.c', `xm-m68k-local.h', `t-m68k-local', and `x-m68k-local'. - Here is a list of configurations that have special treatment: + Here is a list of configurations that have special treatment or + special things you must know: + + `alpha-*-osf1' + Systems using processors that implement the DEC Alpha + architecture and are running the OSF/1 operating system. (VMS + on the Alpha is not currently supported by GNU CC.) As of + this writing, the only Alpha-based product currently + available from DEC is the 21064 (EV4) processor chip; no + system-level products can be ordered. This port is provided + for those developers who might have early Alpha hardware from + DEC or other vendors and run the OSF/1 operating system. It + has not been extensively tested and both the C++ and + Objective-C languages may not work, except in a + cross-compilation environment. + + The `ASSEMBLE_FILE_START' macro writes a `.verstamp' directive + containing the version of the calling sequence. Currently, + we use `9 0', which we believe will work until the official + release by DEC of their system, at which point `3 11' is the + correct value. If you get a mismatch error from the + assembler on a `.verstamp' line, consult the file + `/usr/include/stamp.h' for the present value. GNU C on the + Alpha does not support versions of DEC's OSF/1 earlier than + BL9; if you are running an older version, we suggest you ask + your DEC contact for an update. + + Note that since the Alpha is a 64-bit architecture, + cross-compilers from 32-bit machines will not generate as + efficient code as that generated when the compiler is running + on a 64-bit machine because many optimizations that depend on + being able to represent a word on the target in an integral + value on the host cannot be performed. + + `a29k' + AMD Am29K-family processors. These are normally used in + embedded applications. There are no standard Unix + configurations. This configuration corresponds to AMD's + standard calling sequence and binary interface and is + compatible with other 29K tools. + + You may need to make a variant of the file `a29k.h' for your + particular configuration. + + `a29k-*-bsd' + AMD Am29050 used in a system running a variant of BSD Unix. + + `elxsi-elxsi-bsd' + The Elxsi's C compiler has known limitations that prevent it + from compiling GNU C. Please contact `mrs@cygnus.com' for + more details. + + `i386-*-sco' + Compilation with RCC is recommended. + + `i386-ibm-aix' + You need a version of GAS that you can get from + `tranle@intellicorp.com'. + + `i386-sequent' + Go to the Berkeley universe before compiling. In addition, + you probably need to create a file named `string.h' + containing just one line: `#include '. + + `i386-sun-sunos4' + You may find that you need another version of GNU CC to begin + bootstrapping with, since the current version when built with + the system's own compiler seems to get an infinite loop + compiling part of `libgcc2.c'. GNU CC version 2 compiled + with GNU CC (any version) seems not to have this problem. `m68000-att' AT&T 3b1, a.k.a. 7300 PC. Special procedures are needed to @@ -142,25 +245,38 @@ Installing GNU CC `m68000-hp-bsd' HP 9000 series 200 running BSD. Note that the C compiler that comes with this system cannot compile GNU CC; contact - `law@super.org' to get binaries of GNU CC for bootstrapping. + `law@cs.utah.edu' to get binaries of GNU CC for bootstrapping. `m68k-altos' Altos 3068. You must use the GNU assembler, linker and debugger, with COFF-encapsulation. Also, you must fix a - kernel bug. Details in the file `ALTOS-README'. + kernel bug. Details in the file `README.ALTOS'. `m68k-hp-hpux' - HP 9000 series 200 or 300 running HPUX. GNU CC does not - support the special symbol table used by HP's debugger, but - you can debug programs with GDB if you specify `--gas' to - use the GNU tools instead. In order to use the GNU tools, - you must install a library conversion program called `hpxt'. + HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 + has a bug in the assembler that prevents compilation of GNU + CC. To fix it, get patch PHCO_0800 from HP. + + In addition, `--gas' does not currently work with this + configuration. Changes in HP-UX have broken the library + conversion tool and the linker. `m68k-sun' - Sun 3. We do not provide a configuration file to use the - Sun FPA by default, because programs that establish signal - handlers for floating point traps inherently cannot work - with the FPA. + Sun 3. We do not provide a configuration file to use the Sun + FPA by default, because programs that establish signal + handlers for floating point traps inherently cannot work with + the FPA. + + `m88k-svr3' + Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference + port. These systems tend to use the Green Hills C, revision + 1.8.5, as the standard C compiler. There are apparently bugs + in this compiler that result in object files differences + between stage 2 and stage 3. If this happens, make the stage + 4 compiler and compare it to the stage 3 compiler. If the + stage 3 and stage 4 object files are identical, this suggests + a problem with the standard C compiler. It is best, however, + to use an older version of GNU CC for bootstrapping. `m88k-dgux' Motorola m88k running DG/UX. To build native or cross @@ -170,6 +286,18 @@ Installing GNU CC eval `sde-target m88kbcs` + `mips-mips-bsd' + MIPS machines running the MIPS operating system in BSD mode. + It's possible that some old versions of the system lack the + functions `memcpy', `memcmp', and `memset'. If your system + lacks these, you must remove or undo the definition of + `TARGET_MEM_FUNCTIONS' in `mips-bsd.h'. + + `mips-sony-sysv' + Sony MIPS NEWS. This works in NEWSOS 5.0.1, but not in 5.0.2 + (which uses ELF instead of COFF). Support for 5.0.2 will + probably be provided soon by volunteers. + `ns32k-encore' Encore ns32000 system. Encore systems are supported only under BSD. @@ -179,16 +307,34 @@ Installing GNU CC `alloca' and `malloc'; you must get the compiled versions of these from GNU Emacs. + `ns32k-sequent' + Go to the Berkeley universe before compiling. In addition, + you probably need to create a file named `string.h' + containing just one line: `#include '. + `ns32k-utek' UTEK ns32000 system ("merlin"). The C compiler that comes with this system cannot compile GNU CC; contact `tektronix!reed!mason' to get binaries of GNU CC for bootstrapping. - `rs6000-ibm' - IBM PowerStation/6000 machines. Due to the nonstandard - debugging information required for this machine, `-g' is not - available in this configuration. + `romp-*-aos' + `romp-*-mach' + The only operating systems supported for the IBM RT PC are + AOS and MACH. GNU CC does not support AIX running on the RT. + We recommend you compile GNU CC with an earlier version of + itself; if you compile GNU CC with `hc', the Metaware + compiler, it will work, but you will get mismatches between + the stage 2 and stage 3 compilers in various files. These + errors are minor differences in some floating-point constants + and can be safely ignored; the stage 3 compiler is correct. + + `rs6000-*-aix' + *Read the file `README.RS6000' for information on how to get + a fix for a problem in the IBM assembler that prevents use of + GNU CC.* You must either obtain the new assembler or avoid + using the `-g' switch. Note that `Makefile.in' uses `-g' by + default when compiling `libgcc2.c'. `vax-dec-ultrix' Don't try compiling with Vax C (`vcc'). It produces @@ -201,16 +347,17 @@ Installing GNU CC compiler first, and use it to recompile building all the languages that you want to run. - Here we spell out what files will be set up by `configure'. + Here we spell out what files will be set up by `configure'. Normally you need not be concerned with these files. * A symbolic link named `config.h' is made to the top-level - config file for the machine you will run the compiler on - (*note Config::.). This file is responsible for defining - information about the host machine. It includes `tm.h'. + config file for the machine you plan to run the compiler on + (*note The Configuration File: (gcc.info)Config.). This file + is responsible for defining information about the host + machine. It includes `tm.h'. The top-level config file is located in the subdirectory - `config'. Its name is always `xm-SOMETHING.h'; usually + `config'. Its name is always `xm-SOMETHING.h'; usually `xm-MACHINE.h', but there are some exceptions. If your system does not support symbolic links, you might @@ -228,211 +375,232 @@ Installing GNU CC * A symbolic link named `md' will be made to the machine description pattern file. It should be in the `config' - subdirectory and its name should be `MACHINE.md'; but - MACHINE is often not the same as the name used in the `tm.h' - file because the `md' files are more general. + subdirectory and its name should be `MACHINE.md'; but MACHINE + is often not the same as the name used in the `tm.h' file + because the `md' files are more general. * A symbolic link named `aux-output.c' will be made to the - output subroutine file for your machine. It should be in - the `config' subdirectory and its name should be `MACHINE.c'. + output subroutine file for your machine. It should be in the + `config' subdirectory and its name should be `MACHINE.c'. * The command file `configure' also constructs `Makefile' by adding some text to the template file `Makefile.in'. The additional text comes from files in the `config' directory, named `t-TARGET' and `h-HOST'. If these files do not exist, - it means nothing needs to be added for a given target or - host. + it means nothing needs to be added for a given target or host. - 5. Make sure the Bison parser generator is installed. (This is - unnecessary if the Bison output files `c-parse.c' and `cexp.c' - are more recent than `c-parse.y' and `cexp.y' and you do not plan - to change the `.y' files.) + 4. Make sure the Bison parser generator is installed. (This is + unnecessary if the Bison output files `c-parse.c' and `cexp.c' are + more recent than `c-parse.y' and `cexp.y' and you do not plan to + change the `.y' files.) - Bison versions older than Sept 8, 1988 will produce incorrect + Bison versions older than Sept 8, 1988 will produce incorrect output for `c-parse.c'. - 6. Build the compiler. Just type `make LANGUAGES=c' in the compiler + 5. Build the compiler. Just type `make LANGUAGES=c' in the compiler directory. - `LANGUAGES=c' specifies that only the C compiler should be + `LANGUAGES=c' specifies that only the C compiler should be compiled. The makefile normally builds compilers for all the supported languages; currently, C, C++ and Objective C. However, C is the only language that is sure to work when you build with other non-GNU C compilers. In addition, building anything but C at this stage is a waste of time. - In general, you can specify the languages to build by typing - the argument `LANGUAGES="LIST"', where LIST is one or more words - from the list `c', `c++', and `objective-c'. - - Ignore any warnings you may see about "statement not reached" - in `insn-emit.c'; they are normal. Any other compilation errors - may represent bugs in the port to your machine or operating - system, and should be investigated and reported (*note Bugs::.). - - Some commercial compilers fail to compile GNU CC because they - have bugs or limitations. For example, the Microsoft compiler is - said to run out of macro space. Some Ultrix compilers run out of + In general, you can specify the languages to build by typing the + argument `LANGUAGES="LIST"', where LIST is one or more words from + the list `c', `c++', and `objective-c'. + + Ignore any warnings you may see about "statement not reached" in + `insn-emit.c'; they are normal. Any other compilation errors may + represent bugs in the port to your machine or operating system, and + should be investigated and reported. + + Some commercial compilers fail to compile GNU CC because they have + bugs or limitations. For example, the Microsoft compiler is said + to run out of macro space. Some Ultrix compilers run out of expression space; then you need to break up the statement where the problem happens. - 7. If you are using COFF-encapsulation, you must convert `libgcc.a' - to a GNU-format library at this point. See the file - `README-ENCAP' in the directory containing the GNU binary file - utilities, for directions. + If you are building with a previous GNU C compiler, do not use + `CC=gcc' on the make command or by editing the Makefile. Instead, + use a full pathname to specify the compiler, such as + `CC=/usr/local/bin/gcc'. This is because make might execute the + `gcc' in the current directory before all of the compiler + components have been built. + + 6. If you are using COFF-encapsulation, you must convert `libgcc.a' to + a GNU-format library at this point. See the file `README.ENCAP' + in the directory containing the GNU binary file utilities, for + directions. + + 7. If you are building a cross-compiler, stop here. *Note + Cross-Compiler::. 8. Move the first-stage object files and executables into a subdirectory with this command: make stage1 - The files are moved into a subdirectory named `stage1'. Once + The files are moved into a subdirectory named `stage1'. Once installation is complete, you may wish to delete these files with `rm -r stage1'. 9. Recompile the compiler with itself, with this command: - make CC=stage1/gcc CFLAGS="-g -O -Bstage1/" + make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O" - This is called making the stage 2 compiler. + This is called making the stage 2 compiler. - The command shown above builds compilers for all the supported + The command shown above builds compilers for all the supported languages. If you don't want them all, you can specify the - languages to build by typing the argument `LANGUAGES="LIST"'. - LIST should contain one or more words from the list `c', `c++', - and `objective-c', separated by spaces. - - On a 68000 or 68020 system lacking floating point hardware, - unless you have selected a `tm.h' file that expects by default - that there is no such hardware, do this instead: + languages to build by typing the argument `LANGUAGES="LIST"'. LIST + should contain one or more words from the list `c', `c++', + `objective-c', and `proto'. Separate the words with spaces. + `proto' stands for the programs `protoize' and `unprotoize'; they + are not a separate language, but you use `LANGUAGES' to enable or + disable their installation. + + If you are going to build the stage 3 compiler, then you might + want to build only the C language in stage 2. + + Once you have built the stage 2 compiler, if you are short of disk + space, you can delete the subdirectory `stage1'. + + On a 68000 or 68020 system lacking floating point hardware, unless + you have selected a `tm.h' file that expects by default that there + is no such hardware, do this instead: - make CC=stage1/gcc CFLAGS="-g -O -Bstage1/ -msoft-float" + make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O -msoft-float" 10. If you wish to test the compiler by compiling it with itself one more time, do this: make stage2 - make CC=stage2/gcc CFLAGS="-g -O -Bstage2/" + make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" This is called making the stage 3 compiler. Aside from the `-B' - option, the options should be the same as when you made the stage - 2 compiler. - - Then compare the latest object files with the stage 2 object - files--they ought to be identical, unless they contain time - stamps. On systems where object files do not contain time - stamps, you can do this (in Bourne shell): - - for file in *.o; do - cmp $file stage2/$file - done - - This will mention any object files that differ between stage 2 - and stage 3. Any difference, no matter how innocuous, indicates - that the stage 2 compiler has compiled GNU CC incorrectly, and is + option, the compiler options should be the same as when you made + the stage 2 compiler. But the `LANGUAGES' option need not be the + same. The command shown above builds compilers for all the + supported languages; if you don't want them all, you can specify + the languages to build by typing the argument `LANGUAGES="LIST"', + as described above. + + Then compare the latest object files with the stage 2 object + files--they ought to be identical, unless they contain time stamps. + You can compare the files, disregarding the time stamps if any, + like this: + + make compare + + This will mention any object files that differ between stage 2 and + stage 3. Any difference, no matter how innocuous, indicates that + the stage 2 compiler has compiled GNU CC incorrectly, and is therefore a potentially serious bug which you should investigate - and report (*note Bugs::.). + and report. - On systems that use COFF object files, bytes 5 to 8 will - always be different, since it is a timestamp. On these systems, - you can do the comparison as follows (in Bourne shell): + If your system does not put time stamps in the object files, then + this is a faster way to compare them (using the Bourne shell): for file in *.o; do - tail +10c $file > foo1 - tail +10c stage2/$file > foo2 - cmp foo1 foo2 || echo $file + cmp $file stage2/$file done - On MIPS machines, you need to use the shell script `ecoff-cmp' - to compare two object files if you have built the compiler with - the `-mno-mips-tfile' option. Thus, do this: - - for file in *.o; do - ecoff-cmp $file stage2/$file - done + If you have built the compiler with the `-mno-mips-tfile' option on + MIPS machines, you will not be able to compare the files. 11. Install the compiler driver, the compiler's passes and run-time - support. You can use the following command: + support. You can use the following command: - make CC=stage2/gcc install + make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="LIST" - (Use the same value for `CC' that you used when compiling the - files that are being installed.) - - This copies the files `cc1', `cpp' and `libgcc.a' to files - `cc1', `cpp' and `libgcc.a' in directory - `/usr/local/lib/gcc/TARGET/VERSION', which is where the compiler - driver program looks for them. Here TARGET is the target machine - type specified when you ran `configure', and VERSION is the - version number of GNU CC. This naming scheme permits various + (Use the same value for `CC', `CFLAGS' and `LANGUAGES' that you + used when compiling the files that are being installed. One + reason this is necessary is that some versions of Make have bugs + and recompile files gratuitously when you do this step. If you + use the same variable values, those files will be recompiled + properly. + + This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1', + `cpp' and `libgcc.a' in directory + `/usr/local/lib/gcc-lib/TARGET/VERSION', which is where the + compiler driver program looks for them. Here TARGET is the target + machine type specified when you ran `configure', and VERSION is + the version number of GNU CC. This naming scheme permits various versions and/or cross-compilers to coexist. - It also copies the driver program `gcc' into the directory + It also copies the driver program `gcc' into the directory `/usr/local/bin', so that it appears in typical execution search paths. - *Warning: there is a bug in `alloca' in the Sun library. To - avoid this bug, install the binaries of GNU CC that were compiled - by GNU CC. They use `alloca' as a built-in function and never + On some systems, this command will cause recompilation of some + files. This is usually due to bugs in `make'. You should either + ignore this problem, or use GNU Make. + + *Warning: there is a bug in `alloca' in the Sun library. To avoid + this bug, be sure to install the executables of GNU CC that were + compiled by GNU CC. (That is, the executables from stage 2 or 3, + not stage 1.) They use `alloca' as a built-in function and never the one in the library.* - 12. If you will be using C++ or Objective C, and your operating - system does not handle constructors, then you must build and - install the program `collect2'. Do this with the following - command: - - make CC="stage2/gcc -O" install-collect2 - - The systems that *do* handle constructors on their own include - system V release 4, and system V release 3 on the Intel 386. - - Berkeley systems that use the "a.out" object file format handle - constructors without `collect2' if you use the GNU linker. But if - you don't use the GNU linker, then you need `collect2' on these - systems. + (It is usually better to install GNU CC executables from stage 2 + or 3, since they usually run faster than the ones compiled with + some other compiler.) + + 12. Install the Objective C library (if you have built the Objective C + compiler). Here is the command to do this: + + make install-libobjc CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" + + 13. Correct errors in the header files on your machine. + + Various system header files often contain constructs which are + erroneous, incompatible with ANSI C or otherwise unsuitable, and + they will not work when you compile programs with GNU CC. + + The most common erroneous construct is found in `ioctl.h', where a + macro expects argument values to be substituted for argument names + inside of character constants--something not done in ANSI C. This + particular problem can be prevented by using `-traditional'. Other + problems are not so easy to work around. + + GNU CC comes with shell scripts to fix known header file problems. + They install corrected copies of various header files in a + special directory where only GNU CC will normally look for them. + The scripts adapt to various systems by searching all the system + header files for the problem cases that we know about. - 13. Build and install `protoize' if you want it. Type - - make CC="stage2/gcc -O" install-proto - - There is as yet no documentation for `protoize'. Sorry. - - 14. Correct errors in the header files on your machine. - - Various system header files often contain constructs which are - incompatible with ANSI C, and they will not work when you compile - programs with GNU CC. This behavior consists of substituting for - macro argument names when they appear inside of character - constants. The most common offender is `ioctl.h'. - - You can overcome this problem when you compile by specifying - the `-traditional' option. - - Alternatively, on Sun systems and 4.3BSD at least, you can - correct the include files by running the shell script - `fixincludes'. This installs modified, corrected copies of the - files `ioctl.h', `ttychars.h' and many others, in a special - directory where only GNU CC will normally look for them. This - script will work on various systems because it chooses the files - by searching all the system headers for the problem cases that we - know about. - - Use the following command to do this: + Use the following command to do this: make install-fixincludes - If you selected a different directory for GNU CC installation - when you installed it, by specifying the Make variable `prefix' or + If you selected a different directory for GNU CC installation when + you installed it, by specifying the Make variable `prefix' or `libdir', specify it the same way in this command. - Note that some systems are starting to come with ANSI C system - header files. On these systems, don't run `fixincludes'; it may - not work, and is certainly not necessary. + Note that some systems are starting to come with ANSI C system + header files. On these systems, don't run `install-fixincludes'; + it may not work, and is certainly not necessary. One exception: + there are is a special script for System V release 4, which you + should run. + + It is not the purpose of `install-fixincludes' to add prototypes to + the system header files. We support headers with ANSI C + prototypes in the GNU C Library, and we have no time to support + adding them to other systems' header files. + + 14. If you're going to use C++, it's likely that you need to also + install the `libg++' distribution. It should be available from + the same place where you got the GCC distribution. Just as GCC + does not distribute a C runtime library, it also does not include + a C++ run-time library. All I/O functionality, special class + libraries, etc., are available in the `libg++' distribution. If you cannot install the compiler's passes and run-time support in `/usr/local/lib', you can alternatively use the `-B' option to specify a prefix by which they may be found. The compiler concatenates the -prefix with the names `cpp', `cc1' and `libgcc.a'. Thus, you can put +prefix with the names `cpp', `cc1' and `libgcc.a'. Thus, you can put the files in a directory `/usr/foo/gcc' and specify `-B/usr/foo/gcc/' when you run GNU CC. @@ -441,7 +609,7 @@ files by setting the Make variable `libd Compilation in a Separate Directory -=================================== +==================================== If you wish to build the object files and executables in a directory other than the one containing the source files, here is what you must @@ -451,58 +619,190 @@ do differently: feature. (GNU Make supports it, as do Make versions on most BSD systems.) - 2. Go to that directory before running `configure': + 2. If you have ever run `configure' in the source directory, you must + undo the configuration. Do this by running: + + make distclean + + 3. Go to the directory in which you want to build the compiler before + running `configure': mkdir gcc-sun3 cd gcc-sun3 - On systems that do not support symbolic links, this directory - must be on the same file system as the source code directory. + On systems that do not support symbolic links, this directory must + be on the same file system as the source code directory. - 3. Specify where to find `configure' when you run it: + 4. Specify where to find `configure' when you run it: - ../gcc-2.00/configure ... + ../gcc/configure ... - This also tells `configure' where to find the compiler sources; - `configure' takes the directory from the file name that was used - to invoke it. But if you want to be sure, you can specify the - source directory with the `--srcdir' option, like this: + This also tells `configure' where to find the compiler sources; + `configure' takes the directory from the file name that was used to + invoke it. But if you want to be sure, you can specify the source + directory with the `--srcdir' option, like this: - ../gcc-2.00/configure --srcdir=../gcc-2.00 sun3 + ../gcc/configure --srcdir=../gcc sun3 - The directory you specify with `--srcdir' need not be the same - as the one that `configure' is found in. + The directory you specify with `--srcdir' need not be the same as + the one that `configure' is found in. Now, you can run `make' in that directory. You need not repeat the -configuration steps shown above, when ordinary source files change. -You must, however, run `configure' again when the configuration files +configuration steps shown above, when ordinary source files change. You +must, however, run `configure' again when the configuration files change, if your system does not support symbolic links. +Building and Installing a Cross-Compiler +========================================= + + GNU CC can function as a cross-compiler for many machines, but not +all. + + * Cross-compilers for the Mips as target do not work because the + auxiliary programs `mips-tdump.c' and `mips-tfile.c' can't be + compiled on anything but a Mips. + + * Cross-compilers to or from the Vax probably don't work completely + because the Vax uses an incompatible floating point format (not + IEEE format). + + Since GNU CC generates assembler code, you probably need a +cross-assembler that GNU CC can run, in order to produce object files. +If you want to link on other than the target machine, you need a +cross-linker as well. You also need header files and libraries suitable +for the target machine that you can install on the host machine. + + To build GNU CC as a cross-compiler, you start out by running +`configure'. You must specify two different configurations, the host +and the target. Use the `--host=HOST' option for the host and +`--target=TARGET' to specify the target type. For example, here is how +to configure for a cross-compiler that runs on a hypothetical Intel 386 +system and produces code for an HP 68030 system running BSD: + + configure --target=m68k-hp-bsd4.3 --host=i386-bozotheclone-bsd4.3 + + Next you should install the cross-assembler and cross-linker (and +`ar' and `ranlib'). Put them in the directory `/usr/local/TARGET/bin'. + The installation of GNU CC will find them there and copy or link them +to the proper place to find them when you run the cross-compiler later. + + If you want to install any additional libraries to use with the +cross-compiler, put them in the directory `/usr/local/TARGET/lib'; all +files in that subdirectory will be installed in the proper place when +you install the cross-compiler. Likewise, put the header files for the +target machine in `/usr/local/TARGET/include'. + + You must now produce a substitute for `libgcc1.a'. Normally this +file is compiled with the "native compiler" for the target machine; +compiling it with GNU CC does not work. But compiling it with the host +machine's compiler also doesn't work--that produces a file that would +run on the host, and you need it to run on the target. + + We can't give you any automatic way to produce this substitute. For +some targets, the subroutines in `libgcc1.c' are not actually used. You +need not provide the ones that won't be used. The ones that most +commonly are used are the multiplication, division and remainder +routines--many RISC machines rely on the library for this. One way to +make them work is to define the appropriate `perform_...' macros for +the subroutines that you need. If these definitions do not use the C +arithmetic operators that they are meant to implement, you might be +able to compile them with the cross-compiler you are building. To do +this, specify `LIBGCC1=libgcc1.a OLDCC=./xgcc' when building the +compiler. + + Now you can proceed just as for compiling a single-machine compiler +through the step of building stage 1. If you have not provided some +sort of `libgcc1.a', then compilation will give up at the point where +it needs that file, printing a suitable error message. If you do +provide `libgcc1.a', then building the compiler will automatically +compile and link a test program called `cross-test'; if you get errors +in the linking, it means that not all of the necessary routines in +`libgcc1.a' are available. + + When you are using a cross-compiler configuration, building stage 1 +does not compile all of GNU CC. This is because one part of building, +the compilation of `libgcc2.c', requires use of the cross-compiler. + + However, when you type `make install' to install the bulk of the +cross-compiler, that will also compile `libgcc2.c' and install the +resulting `libgcc.a'. + + Do not try to build stage 2 for a cross-compiler. It doesn't work to +rebuild GNU CC as a cross-compiler using the cross-compiler, because +that would produce a program that runs on the target machine, not on the +host. For example, if you compile a 386-to-68030 cross-compiler with +itself, the result will not be right either for the 386 (because it was +compiled into 68030 code) or for the 68030 (because it was configured +for a 386 as the host). If you want to compile GNU CC into 68030 code, +whether you compile it on a 68030 or with a cross-compiler on a 386, you +must specify a 68030 as the host when you configure it. + + +Installing GNU CC on the HP Precision Architecture +=================================================== + + There are two variants of this CPU, called 1.0 and 1.1, which have +different machine descriptions. You must use the right one for your +machine. All 7NN machines and 8N7 machines use 1.1, while all other +8NN machines use 1.0. + + The easiest way to handle this problem is to use `configure hpNNN' +or `configure hpNNN-hpux', where NNN is the model number of the +machine. Then `configure' will figure out if the machine is a 1.0 or +1.1. Use `uname -a' to find out the model number of your machine. + + `-g' does not work on HP-UX, since that system uses a peculiar +debugging format which GNU CC does not know about. There are +preliminary versions of GAS and GDB for the HP-PA which do work with +GNU CC for debugging. You can get them by anonymous ftp from +`jaguar.cs.utah.edu' `dist' subdirectory. You would need to install +GAS in the file + + /usr/local/lib/gcc-lib/CONFIGURATION/GCCVERSION/as + +where CONFIGURATION is the configuration name (perhaps `hpNNN-hpux') +and GCCVERSION is the GNU CC version number. Do this *before* starting +the build process, otherwise you will get errors from the HPUX +assembler while building `libgcc2.a'. The command + + make install-dir + +will create the necessary directory hierarchy so you can install GAS +before building GCC. + + If you obtained GAS before October 6, 1992 it is highly recommended +you get a new one to avoid several bugs which have been discovered +recently. + + To enable debugging, configure GNU CC with the `--gas' option before +building. + + Installing GNU CC on the Sun -============================ +============================= Make sure the environment variable `FLOAT_OPTION' is not set when you compile `libgcc.a'. If this option were set to `f68881' when `libgcc.a' is compiled, the resulting code would demand to be linked -with a special startup file and would not link properly without -special pains. +with a special startup file and would not link properly without special +pains. - There is a bug in `alloca' in certain versions of the Sun library. + There is a bug in `alloca' in certain versions of the Sun library. To avoid this bug, install the binaries of GNU CC that were compiled by GNU CC. They use `alloca' as a built-in function and never the one in the library. Some versions of the Sun compiler crash when compiling GNU CC. The -problem is a segmentation fault in cpp. This problem seems to be due -to the bulk of data in the environment variables. You may be able to -avoid it by using the following command to compile GNU CC with Sun CC: +problem is a segmentation fault in cpp. This problem seems to be due to +the bulk of data in the environment variables. You may be able to avoid +it by using the following command to compile GNU CC with Sun CC: make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc" Installing GNU CC on the 3b1 -============================ +============================= Installing GNU CC on the 3b1 is difficult if you do not already have GNU CC running, due to bugs in the installed C compiler. However, the @@ -526,39 +826,12 @@ following procedure might work. We are 7. Reinstall the original version of `/lib/cpp'. - 8. Now you can compile GNU CC with itself and install it in the - normal fashion. - - -Installing GNU CC on SCO System V 3.2 -===================================== - - The compiler that comes with this system does not work properly with -`-O'. Therefore, you should redefine the Make variable `CCLIBFLAGS' -not to use `-O'. - - In addition, the compiler produces incorrect output when compiling -parts of GNU CC; the resulting executable `cc1' does not work properly -when it is used with `-O'. - - Therefore, what you must do after building the first stage is use -GNU CC to compile itself without optimization. Here is how: - - make -k cc1 CC="./gcc -B./" - - You can think of this as "stage 1.1" of the installation process. -However, using this command has the effect of discarding the faulty -stage 1 executable for `cc1' and replacing it with stage 1.1. You can -then proceed with `make stage1' and the rest of installation. - - On Xenix, the same thing is necessary; in addition, you may have to -remove `-g' from the options used with `cc', and you may have to -simplify complicated statements in the sources of GNU CC to get them -to compile. + 8. Now you can compile GNU CC with itself and install it in the normal + fashion. Installing GNU CC on Unos -========================= +========================== Use `configure unos' for building on Unos. @@ -575,50 +848,57 @@ are installed: To allow GNU CC to function, either change all references to `-lc' in `gcc.c' to `-lunos' or link `/lib/libc.a' to `/lib/libunos.a'. - When compiling GNU CC with the standard compiler, to overcome bugs -in the support of `alloca', do not use `-O' when making stage 2. Then -use the stage 2 compiler with `-O' to make the stage 3 compiler. This + When compiling GNU CC with the standard compiler, to overcome bugs in +the support of `alloca', do not use `-O' when making stage 2. Then use +the stage 2 compiler with `-O' to make the stage 3 compiler. This compiler will have the same characteristics as the usual stage 2 compiler on other systems. Use it to make a stage 4 compiler and compare that with stage 3 to verify proper compilation. + (Perhaps simply defining `ALLOCA' in `x-crds' as described in the +comments there will make the above paragraph superfluous. Please +inform us of whether this works.) + Unos uses memory segmentation instead of demand paging, so you will need a lot of memory. 5 Mb is barely enough if no other tasks are -running. If linking `cc1' fails, try putting the object files into a +running. If linking `cc1' fails, try putting the object files into a library and linking from that library. Installing GNU CC on VMS -======================== +========================= The VMS version of GNU CC is distributed in a backup saveset containing both source code and precompiled binaries. To install the `gcc' command so you can use the compiler easily, in -the same manner as you use the VMS C compiler, you must install the -VMS CLD file for GNU CC as follows: +the same manner as you use the VMS C compiler, you must install the VMS +CLD file for GNU CC as follows: 1. Define the VMS logical names `GNU_CC' and `GNU_CC_INCLUDE' to - point to the directories where the GNU CC executables (`gcc-cpp', - `gcc-cc1', etc.) and the C include files are kept. This should - be done with the commands: - - $ assign /super /system disk:[gcc.] gnu_cc - $ assign /super /system disk:[gcc.include.] gnu_cc_include - - with the appropriate disk and directory names. These commands - can be placed in your system startup file so they will be - executed whenever the machine is rebooted. You may, if you - choose, do this via the `GCC_INSTALL.COM' script in the `[GCC]' - directory. + point to the directories where the GNU CC executables + (`gcc-cpp.exe', `gcc-cc1.exe', etc.) and the C include files are + kept respectively. This should be done with the commands: + + $ assign /system /translation=concealed - + disk:[gcc.] gnu_cc + $ assign /system /translation=concealed - + disk:[gcc.include.] gnu_cc_include + + with the appropriate disk and directory names. These commands can + be placed in your system startup file so they will be executed + whenever the machine is rebooted. You may, if you choose, do this + via the `GCC_INSTALL.COM' script in the `[GCC]' directory. 2. Install the `GCC' command with the command line: - $ set command /table=sys$library:dcltables gnu_cc:[000000]gcc + $ set command /table=sys$common:[syslib]dcltables - + /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc + $ install replace sys$common:[syslib]dcltables 3. To install the help file, do the following: - $ lib/help sys$library:helplib.hlb gcc.hlp + $ library/help sys$library:helplib.hlb gcc.hlp Now you can invoke the compiler with a command like `gcc /verbose file.c', which is equivalent to the command `gcc -v -c file.c' in @@ -629,106 +909,245 @@ perform the following steps: 1. Define the VMS logical name `GNU_GXX_INCLUDE' to point to the directory where the preprocessor will search for the C++ header - files. This can be done with the command: + files. This can be done with the command: - $ assign /super /system disk:[gcc.gxx_include.] gnu_gxx_include + $ assign /system /translation=concealed - + disk:[gcc.gxx_include.] gnu_gxx_include - with the appropriate disk and directory name. If you are going - to be using libg++, you should place the libg++ header files in - the directory that this logical name points to. + with the appropriate disk and directory name. If you are going to + be using libg++, this is where the libg++ install procedure will + install the libg++ header files. 2. Obtain the file `gcc-cc1plus.exe', and place this in the same directory that `gcc-cc1.exe' is kept. - 3. You will need several library functions which are used to call the - constructors and destructors for global objects. These functions - are part of the libg++ distribution, and you will automatically - get them if you install libg++. - - If you are not planning to install libg++, you will need to - obtain the files `gxx-startup-1.mar' and `gstart.cc' from the - libg++ distribution, compile them, and supply them to the linker - whenever you link a C++ program. - - The GNU C++ compiler can be invoked with a command like `gcc - /plus /verbose file.cc', which is equivalent to the command `g++ - -v -c file.cc' in Unix. + The GNU C++ compiler can be invoked with a command like `gcc /plus + /verbose file.cc', which is equivalent to the command `g++ -v -c + file.cc' in Unix. We try to put corresponding binaries and sources on the VMS distribution tape. But sometimes the binaries will be from an older -version that the sources, because we don't always have time to update +version than the sources, because we don't always have time to update them. (Use the `/version' option to determine the version number of the binaries and compare it with the source file `version.c' to tell -whether this is so.) In this case, you should use the binaries you -get to recompile the sources. If you must recompile, here is how: +whether this is so.) In this case, you should use the binaries you get +to recompile the sources. If you must recompile, here is how: + + 1. Execute the command procedure `vmsconfig.com' to copy files + `vax-vms.h', `xm-vax-vms.h', `vax.c' and `vax.md' to `tm.h', + `config.h', `aux-output.c', and `md.' respectively, and to create + files `tconfig.h' and `hconfig.h'. This procedure also creates + several linker option files used by `make-cc1.com' and a data file + used by `make-l2.com'. - 1. Copy the file `vms.h' to `tm.h', `xm-vms.h' to `config.h', - `vax.md' to `md.' and `vax.c' to `aux-output.c'. The files to be - copied are found in the subdirectory named `config'; they should - be copied to the main directory of GNU CC. If you wish, you may - use the command file `config-gcc.com' to perform these steps for - you. + $ @vmsconfig.com 2. Setup the logical names and command tables as defined above. In addition, define the VMS logical name `GNU_BISON' to point at the to the directories where the Bison executable is kept. This should be done with the command: - $ assign /super /system disk:[bison.] gnu_bison + $ assign /system /translation=concealed - + disk:[bison.] gnu_bison - You may, if you choose, use the `INSTALL_BISON.COM' script in - the `[BISON]' directory. + You may, if you choose, use the `INSTALL_BISON.COM' script in the + `[BISON]' directory. 3. Install the `BISON' command with the command line: - $ set command /table=sys$library:dcltables gnu_bison:[000000]bison + $ set command /table=sys$common:[syslib]dcltables - + /output=sys$common:[syslib]dcltables - + gnu_bison:[000000]bison + $ install replace sys$common:[syslib]dcltables 4. Type `@make-gcc' to recompile everything (alternatively, you may submit the file `make-gcc.com' to a batch queue). If you wish to - build the GNU C++ compiler as well as the GNU CC compiler, you - must first edit `make-gcc.com' and follow the instructions that - appear in the comments. - - *If you are building GNU CC with a previous version of GNU CC, - you also should check to see that you have the newest version of - the assembler*. In particular, GNU CC version 2 treats global - constant variables slightly differently from GNU CC version 1, - and GAS version 1.38.1 does not have the patches required to work - with GCC version 2. If you use GAS 1.38.1, then `extern const' - variables will not have the read-only bit set, and the linker - will generate warning messages about mismatched psect attributes - for these variables. These warning messages are merely a - nuisance, and can safely be ignored. + build the GNU C++ compiler as well as the GNU CC compiler, you must + first edit `make-gcc.com' and follow the instructions that appear + in the comments. + + 5. In order to use GCC, you need a library of functions which GCC + compiled code will call to perform certain tasks, and these + functions are defined in the file `libgcc2.c'. To compile this + you should use the command procedure `make-l2.com', which will + generate the library `libgcc2.olb'. `libgcc2.olb' should be built + using the compiler built from the same distribution that + `libgcc2.c' came from, and `make-gcc.com' will automatically do + all of this for you. + + To install the library, use the following commands: + + $ library gnu_cc:[000000]gcclib/delete=(new,eprintf) + $ library libgcc2/extract=*/output=libgcc2.obj + $ library gnu_cc:[000000]gcclib libgcc2.obj + + The first command simply removes old modules that will be replaced + with modules from libgcc2. If the VMS librarian complains about + those modules not being present, simply ignore the message and + continue on with the next command. + + Whenever you update the compiler on your system, you should also + update the library with the above procedure. + + 6. You may wish to build GCC in such a way that no files are written + to the directory where the source files reside. An example would + be the when the source files are on a read-only disk. In these + cases, execute the following DCL commands (substituting your + actual path names): + + $ assign dua0:[gcc.build_dir.]/translation=concealed, - + dua1:[gcc.source_dir.]/translation=concealed gcc_build + $ set default gcc_build:[000000] + + where `dua1:[gcc.source_dir]' contains the source code, and + `dua0:[gcc.build_dir]' is meant to contain all of the generated + object files and executables. Once you have done this, you can + proceed building GCC as described above. (Keep in mind that + `gcc_build' is a rooted logical name, and thus the device names in + each element of the search list must be an actual physical device + name rather than another rooted logical name). + + 7. *If you are building GNU CC with a previous version of GNU CC, you + also should check to see that you have the newest version of the + assembler*. In particular, GNU CC version 2 treats global constant + variables slightly differently from GNU CC version 1, and GAS + version 1.38.1 does not have the patches required to work with GCC + version 2. If you use GAS 1.38.1, then `extern const' variables + will not have the read-only bit set, and the linker will generate + warning messages about mismatched psect attributes for these + variables. These warning messages are merely a nuisance, and can + safely be ignored. - If you are compiling with a version of GNU CC older than 1.33, + If you are compiling with a version of GNU CC older than 1.33, specify `/DEFINE=("inline=")' as an option in all the compilations. This requires editing all the `gcc' commands in - `make-cc1.com'. (The older versions had problems supporting + `make-cc1.com'. (The older versions had problems supporting `inline'.) Once you have a working 1.33 or newer GNU CC, you can change this file back. + 8. If you want to build GNU CC with the VAX C compiler, you will need + to make minor changes in `make-cccp.com' and `make-cc1.com' to + choose alternate definitions of `CC', `CFLAGS', and `LIBS'. See + comments in those files. However, you must also have a working + version of the GNU assembler (GNU as, aka GAS) as it is used as + the back-end for GNU CC to produce binary object modules and is + not included in the GNU CC sources. GAS is also needed to compile + `libgcc2' in order to build `gcclib' (see above); `make-l2.com' + expects to be able to find it operational in + `gnu_cc:[000000]gnu-as.exe'. + + To use GNU CC on VMS, you need the VMS driver programs `gcc.exe', + `gcc.com', and `gcc.cld'. They are distributed with the VMS + binaries (`gcc-vms') rather than the GNU CC sources. GAS is also + included in `gcc-vms', as is Bison. + + Once you have successfully built GNU CC with VAX C, you should use + the resulting compiler to rebuild itself. Before doing this, be + sure to restore the `CC', `CFLAGS', and `LIBS' definitions in + `make-cccp.com' and `make-cc1.com'. The second generation + compiler will be able to take advantage of many optimizations that + must be suppressed when building with other compilers. + Under previous versions of GNU CC, the generated code would -occasionally give strange results when linked to the sharable -`VAXCRTL' library. Now this should work. +occasionally give strange results when linked with the sharable +`VAXCRTL' library. Now this should work. Even with this version, however, GNU CC itself should not be linked -to the sharable `VAXCRTL'. The `qsort' routine supplied with -`VAXCRTL' has a bug which can cause a compiler crash. - - Similarly, the preprocessor should not be linked to the sharable -`VAXCRTL'. The `strncat' routine supplied with `VAXCRTL' has a bug -which can cause the preprocessor to go into an infinite loop. - - If you attempt to link to the sharable `VAXCRTL', the VMS linker -will strongly resist any effort to force it to use the `qsort' and -`strncat' routines from `gcclib'. Until the bugs in `VAXCRTL' have -been fixed, linking any of the compiler components to the sharable -VAXCRTL is not recommended. (These routines can be bypassed by -placing duplicate copies of `qsort' and `strncat' in `gcclib' under -different names, and patching the compiler sources to use these -routines). Both of the bugs in `VAXCRTL' are still present in VMS -version 5.4-1, which is the most recent version as of this writing. +with the sharable `VAXCRTL'. The version of `qsort' in `VAXCRTL' has a +bug (known to be present in VMS versions V4.6 through V5.5) which +causes the compiler to fail. The executables that are generated by `make-cc1.com' and -`make-cccp.com' use the nonshared version of `VAXCRTL' (and thus use -the `qsort' and `strncat' routines from `gcclib.olb'). +`make-cccp.com' use the object library version of `VAXCRTL' in order to +make use of the `qsort' routine in `gcclib.olb'. If you wish to link +the compiler executables with the shareable image version of `VAXCRTL', +you should edit the file `tm.h' (created by `vmsconfig.com') to define +the macro `QSORT_WORKAROUND'. + + `QSORT_WORKAROUND' is always defined when GNU CC is compiled with +VAX C, to avoid a problem in case `gcclib.olb' is not yet available. + + +Installing GNU CC on the WE32K +=============================== + + These computers are also known as the 3b2, 3b5, 3b20 and other +similar names. (However, the 3b1 is actually a 68000; see *Note 3b1 +Install::.) + + Don't use `-g' when compiling with the system's compiler. The +system's linker seems to be unable to handle such a large program with +debugging information. + + The system's compiler runs out of capacity when compiling `stmt.c' +in GNU CC. You can work around this by building `cpp' in GNU CC first, +then use that instead of the system's preprocessor with the system's C +compiler to compile `stmt.c'. Here is how: + + mv /lib/cpp /lib/cpp.att + cp cpp /lib/cpp.gnu + echo "/lib/cpp.gnu -traditional $*" > /lib/cpp + chmod +x /lib/cpp + + The system's compiler produces bad code for some of the GNU CC +optimization files. So you must build the stage 2 compiler without +optimization. Then build a stage 3 compiler with optimization. That +executable should work. Here are the necessary commands: + + make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g" + make stage2 + make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O" + + You may need to raise the ULIMIT setting to build a C++ compiler, as +the file `cc1plus' is larger than one megabyte. + + +Installing GNU CC on the MIPS +============================== + + See *Note Installation:: about whether to use `--with-stabs' or not. + + The MIPS C compiler needs to be told to increase its table size for +switch statements with the `-Wf,-XNg1500' option in order to compile +`cp-parse.c'. If you use the `-O2' optimization option, you also need +to use `-Olimit 3000'. Both of these options are automatically +generated in the `Makefile' that the shell script `configure' builds. +If you override the `CC' make variable and use the MIPS compilers, you +may need to add `-Wf,-XNg1500 -Olimit 3000'. + + MIPS computers running RISC-OS can support four different +personalities: default, BSD 4.3, System V.3, and System V.4 (older +versions of RISC-OS don't support V.4). To configure GCC for these +platforms use the following configurations: + +`mips-mips-riscos`rev'' + Default configuration for RISC-OS, revision `rev'. + +`mips-mips-riscos`rev'bsd' + BSD 4.3 configuration for RISC-OS, revision `rev'. + +`mips-mips-riscos`rev'sysv4' + System V.4 configuration for RISC-OS, revision `rev'. + +`mips-mips-riscos`rev'sysv' + System V.3 configuration for RISC-OS, revision `rev'. + + The revision `rev' mentioned above is the revision of RISC-OS to +use. You must reconfigure GCC when going from a RISC-OS revision 4 to +RISC-OS revision 5. This has the effect of avoiding a linker bug. + + DECstations can support three different personalities: Ultrix, DEC +OSF/1, and OSF/rose. To configure GCC for these platforms use the +following configurations: + +`decstation-ultrix' + Ultrix configuration. + +`decstation-osf1' + Dec's version of OSF/1. + +`decstation-osfrose' + Open Software Foundation reference port of OSF/1 which uses the + OSF/rose object file format instead of ECOFF. Normally, you would + not select this configuration. +