--- gcc/INSTALL 2018/04/24 17:55:42 1.1.1.3 +++ gcc/INSTALL 2018/04/24 18:36:48 1.1.1.10 @@ -1,47 +1,69 @@ -This is Info file INSTALL, produced by Makeinfo-1.47 from the input -file install1.texi. - - 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. - +This file documents the installation of the GNU compiler. Copyright +(C) 1988, 1989, 1992, 1994, 1995 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. + Here is the procedure for installing GNU CC on a Unix system. See +*Note VMS Install::, for VMS systems. In this section we assume you +compile in the same directory that contains the source files; see *Note +Other Dir::, to find out how to compile in a separate directory on Unix +systems. + + You cannot install GNU C by itself on MSDOS; it will not compile +under any MSDOS compiler except itself. You need to get the complete +compilation package DJGPP, which includes binaries as well as sources, +and includes all the necessary compilation tools and libraries. 1. If you have built GNU CC previously in the same directory for a different target machine, do `make distclean' to delete all files - that might be invalid. + 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 System V release 4 system, make sure `/usr/bin' precedes `/usr/ucb' in `PATH'. The `cc' command in `/usr/ucb' uses libraries which have bugs. - 3. Specify the host and target machine configurations. You do this by - running the file `configure' with appropriate arguments. + 3. Specify the host, build and target machine configurations. You do + this by running the file `configure'. + + The "build" machine is the system which you are using, the "host" + machine is the system where you want to run the resulting compiler + (normally the build machine), and the "target" machine is the + system for which you want the compiler to generate code. If you are building a compiler to produce code for the machine it - runs on, 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: + runs on (a native compiler), you normally do not need to specify + any operands to `configure'; it will try to guess the type of + machine you are on and use that as the build, host and target + machines. So you don't need to specify a configuration when + building a native compiler unless `configure' cannot figure out + what your configuration is or guesses wrong. + + In those cases, specify the build machine's "configuration name" + with the `--build' option; the host and target will default to be + the same as the build machine. (If you are building a + cross-compiler, see *Note Cross-Compiler::.) + + Here is an example: - configure --target=sparc-sun-sunos4.1 + ./configure --build=sparc-sun-sunos4.1 A configuration name may be canonical or it may be more or less abbreviated. A canonical configuration name has three parts, separated by - dashes. It looks like this: `CPU-COMPANY-SYSTEM'. (The three parts - may themselves contain dashes; `configure' can figure out which - dashes serve which purpose.) For example, `m68k-sun-sunos4.1' - specifies a Sun 3. + 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 + 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' @@ -52,265 +74,157 @@ Installing GNU CC irrelevant, and will be ignored. So you might as well specify the version if you know it. - Here are the possible CPU types: - - a29k, arm, cN, hppa1.0, hppa1.1, i386, i860, i960, m68000, - m68k, m88k, mips, ns32k, romp, rs6000, sparc, vax, we32k. - - Here are the recognized company names. As you can see, customary - abbreviations are used rather than the longer official names. - - alliant, altos, apollo, att, convergent, convex, crds, dec, - dg, encore, harris, hp, ibm, mips, motorola, ncr, next, ns, - omron, sequent, sgi, sony, sun, tti, unicom. - - The company name is meaningful only to disambiguate when the rest - of the information supplied is insufficient. You can omit it, - writing just `CPU-SYSTEM', if it is not needed. For example, - `vax-ultrix4.2' is equivalent to `vax-dec-ultrix4.2'. - - Here is a list of system types: - - bsd, sysv, mach, minix, genix, ultrix, vms, sco, isc, aix, - sunos, hpux, unos, luna, dgux, newsos, osfrose, osf, dynix, - aos, ctix. - - You can omit the system type; then `configure' guesses the - operating system from the CPU and company. - - You can add a version number to the system type; this may or may - not make a difference. For example, you can write `bsd4.3' or - `bsd4.4' to distinguish versions of BSD. In practice, the version - number is most needed for `sysv3' and `sysv4', which are often - treated differently. - - If you specify an impossible combination such as `i860-dg-vms', - then you may get an error message from `configure', or it may - ignore part of the information and do the best it can with the - rest. `configure' always prints the canonical name for the - alternative that it used. - - Often a particular model of machine has a name. Many machine - names are recognized as aliases for CPU/company combinations. - Thus, the machine name `sun3', mentioned above, is an alias for - `m68k-sun'. Sometimes we accept a company name as a machine name, - when the name is popularly used for a particular machine. Here is - a table of the known machine names: - - 3300, 3b1, 3bN, 7300, altos3068, altos, apollo68, att-7300, - balance, convex-cN, crds, decstation-3100, decstation, delta, - encore, fx2800, gmicro, hp7NN, hp8NN, hp9k2NN, hp9k3NN, - hp9k7NN, hp9k8NN, iris4d, iris, isi68, m3230, magnum, merlin, - miniframe, mmax, news-3600, news800, news, next, pbd, pc532, - pmax, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3, - sun4, symmetry, tower-32, tower. - - Remember that a machine name specifies both the cpu type and the - company name. + See *Note Configurations::, for a list of supported configuration + names and notes on many of the configurations. You should check + the notes in that section before proceeding any further with the + installation of GNU CC. - There are three additional options you can specify independently to + There are four additional options you can specify independently to describe variant hardware and software configurations. These are - `--with-gnu-as', `--with-gnu-ld', and `--nfp'. + `--with-gnu-as', `--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 - were this makes a difference are `i386-ANYTHING-sysv', - `i860-ANYTHING-bsd', `m68k-hp-hpux', `m68k-sony-bsd', - `m68k-altos-sysv', `m68000-hp-hpux', and `m68000-att-sysv'. - On any other system, `--with-gnu-as' has no effect. + If you will use GNU CC with the GNU assembler (GAS), you + should declare this by using the `--with-gnu-as' option when + you run `configure'. + + Using this option does not install GAS. It only modifies the + output of GNU CC to work with GAS. Building and installing + GAS is up to you. + + Conversely, if you *do not* wish to use GAS and do not specify + `--with-gnu-as' when building GNU CC, it is up to you to make + sure that GAS is not installed. GNU CC searches for a + program named `as' in various directories; if the program it + finds is GAS, then it runs GAS. If you are not sure where + GNU CC finds the assembler it is using, try specifying `-v' + when you run it. + + The systems where it makes a difference whether you use GAS + are + `hppa1.0-ANY-ANY', `hppa1.1-ANY-ANY', `i386-ANY-sysv', + `i386-ANY-isc', + `i860-ANY-bsd', `m68k-bull-sysv', `m68k-hp-hpux', + `m68k-sony-bsd', + `m68k-altos-sysv', `m68000-hp-hpux', `m68000-att-sysv', + `ANY-lynx-lynxos', and `mips-ANY'). On any other system, + `--with-gnu-as' has no effect. + + On the systems listed above (except for the HP-PA, for ISC on + the 386, and for `mips-sgi-irix5.*'), if you use GAS, you + should also use the GNU linker (and specify `--with-gnu-ld'). `--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. + linker with GNU CC. + + This option does not cause the GNU linker to be installed; it + just modifies the behavior of GNU CC to work with the GNU + linker. Specifically, it 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 and on Alphas, you must specify whether + you want GNU CC to create the normal ECOFF debugging format, + or to use BSD-style stabs passed through the ECOFF symbol + table. The normal ECOFF debug format cannot fully handle + languages other than C. BSD stabs format can handle other + languages, but it only works with the GNU debugger GDB. + + Normally, GNU CC uses the ECOFF debugging format by default; + if you prefer BSD stabs, specify `--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. + + `--with-stabs' is meaningful on the ISC system on the 386, + also, if `--with-gas' is used. It selects use of stabs + debugging information embedded in COFF output. This kind of + debugging information supports C++ well; ordinary COFF + debugging information does not. + + `--with-stabs' is also meaningful on 386 systems running + SVR4. It selects use of stabs debugging information embedded + in ELF output. The C++ compiler currently (2.6.0) does not + support the DWARF debugging information normally used on 386 + SVR4 platforms; stabs provide a workable alternative. This + requires gas and gdb, as the normal SVR4 tools can not + generate or interpret stabs. `--nfp' On certain systems, you must specify whether the machine has - a floating point unit. These systems are `m68k-sun-sunosN' - and `m68k-isi-bsd'. On any other system, `--nfp' currently - has no effect, though perhaps there are other systems where - it could usefully make a difference. - - If you want to install your own homemade configuration files, you - can use `local' as the company name to access them. If you use - configuration `CPU-local', the entire configuration name is used - to form the configuration file names. - - Thus, if you specify `m68k-local', then the files used are - `m68k-local.md', `m68k-local.h', `m68k-local.c', - `xm-m68k-local.h', `t-m68k-local', and `x-m68k-local'. - - Here is a list of configurations that have special treatment or - special things you must know: - - `i386-*-sco' - Compilation with RCC is recommended, but it produces lots of - spurious warnings. They do not necessarily indicate that - anything is wrong. - - `i386-sequent' - Go to the Berkeley universe before compiling. In addition, - you probably need to create a file named `string.h' - containing just one line: `#include '. - - `m68000-att' - AT&T 3b1, a.k.a. 7300 PC. Special procedures are needed to - compile GNU CC with this machine's standard C compiler, due - to bugs in that compiler. *Note 3b1 Install::. You can - bootstrap it more easily with previous versions of GNU CC if - you have them. - - `m68000-hp-bsd' - HP 9000 series 200 running BSD. Note that the C compiler - that comes with this system cannot compile GNU CC; contact - `law@cs.utah.edu' to get binaries of GNU CC for bootstrapping. - - `m68k-altos' - Altos 3068. You must use the GNU assembler, linker and - debugger, with COFF-encapsulation. Also, you must fix a - kernel bug. Details in the file `README.ALTOS'. - - `m68k-hp-hpux' - HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 - has a bug in the assembler that prevents compilation of GNU - CC. To fix it, get patch PHCO_0800 from HP. - - In addition, `--gas' does not currently work with this - configuration. Changes in HP-UX have broken the library - conversion tool and the linker. - - `m68k-sun' - Sun 3. We do not provide a configuration file to use the Sun - FPA by default, because programs that establish signal - handlers for floating point traps inherently cannot work with - the FPA. - - `m88k-svr3' - Motorola m88k running the AT&T/Unisoft/Motorla V.3 reference - port. These systems tend to use the Green Hills C, revision - 1.8.5, as the standard C compiler. There are apparently bugs - in this compiler that result in object files differences - between stage 2 and stage 3. If this happens, make the stage - 4 compiler and compare it to the stage 3 compiler. If the - stage 3 and stage 4 object files are identical, this suggests - a problem with the standard C compiler. It is best, however, - to use an older version of GNU CC for bootstrapping. - - `m88k-dgux' - Motorola m88k running DG/UX. To build native or cross - compilers on DG/UX, you must first change to the 88open BCS - software development environment. This is done by issuing - this command: - - eval `sde-target m88kbcs` - - `mips-mips-bsd' - MIPS machines running the MIPS operating system in BSD mode. - It's possible that some old versions of the system lack the - functions `memcpy', `memcmp', and `memset'. If your system - lacks these, you must remove or undo the definition of - `TARGET_MEM_FUNCTIONS' in `mips-bsd.h'. - - `mips-sony-sysv' - Sony MIPS NEWS. This works in NEWSOS 5.0.1, but not in 5.0.2 - (which uses ELF instead of COFF). Support for 5.0.2 will - probably be provided soon by volunteers. - - `ns32k-encore' - Encore ns32000 system. Encore systems are supported only - under BSD. - - `ns32k-*-genix' - National Semiconductor ns32000 system. Genix has bugs in - `alloca' and `malloc'; you must get the compiled versions of - these from GNU Emacs. - - `ns32k-sequent' - Go to the Berkeley universe before compiling. In addition, - you probably need to create a file named `string.h' - containing just one line: `#include '. - - `ns32k-utek' - UTEK ns32000 system ("merlin"). The C compiler that comes - with this system cannot compile GNU CC; contact - `tektronix!reed!mason' to get binaries of GNU CC for - bootstrapping. - - `romp-*-aos' - `romp-*-mach' - The only operating systems supported for the IBM RT PC are - AOS and MACH. GNU CC does not support AIX running on the RT. - - `rs6000-*-aix' - Read the file `README.RS6000' for information on how to get a - fix for a problem in the IBM assembler that prevents use of - GNU CC. - - `vax-dec-ultrix' - Don't try compiling with Vax C (`vcc'). It produces - incorrect code in some cases (for example, when `alloca' is - used). - - Meanwhile, compiling `cp-parse.c' with pcc does not work - because of an internal table size limitation in that - compiler. To avoid this problem, compile just the GNU C - compiler first, and use it to recompile building all the - languages that you want to run. - - `we32k-att-sysv' - Don't use `-g' when compiling GNU CC. The system's linker - seems to be unable to handle such a large program with - debugging information. + a floating point unit. These systems include + `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. + + The `configure' script searches subdirectories of the source + directory for other compilers that are to be integrated into GNU + CC. The GNU compiler for C++, called G++ is in a subdirectory + named `cp'. `configure' inserts rules into `Makefile' to build + all of those compilers. - 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 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'. + * A file named `config.h' is created that contains a `#include' + of the top-level config file for the machine you will 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 want to set up `config.h' to contain a `#include' command which refers to the appropriate file. - * A symbolic link named `tconfig.h' is made to the top-level - config file for your target machine. This is used for - compiling certain programs to run on that machine. + * A file named `tconfig.h' is created which includes the + top-level config file for your target machine. This is used + for compiling certain programs to run on that machine. - * A symbolic link named `tm.h' is made to the + * A file named `tm.h' is created which includes the machine-description macro file for your target machine. It should be in the subdirectory `config' and its name is often `MACHINE.h'. - * A symbolic link named `md' will be made to the machine - description pattern file. It should be in the `config' - subdirectory and its name should be `MACHINE.md'; but MACHINE - is often not the same as the name used in the `tm.h' file - because the `md' files are more general. - - * A symbolic link named `aux-output.c' will be made to the - output subroutine file for your machine. It should be in the - `config' subdirectory and its name should be `MACHINE.c'. - - * The command file `configure' also constructs `Makefile' by - adding some text to the template file `Makefile.in'. The - additional text comes from files in the `config' directory, - named `t-TARGET' and `h-HOST'. If these files do not exist, - it means nothing needs to be added for a given target or host. + * The command file `configure' also constructs the file + `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 `x-HOST'. If these + files do not exist, it means nothing needs to be added for a + given target or host. + + 4. The standard directory for installing GNU CC is `/usr/local/lib'. + If you want to install its files somewhere else, specify + `--prefix=DIR' when you run `configure'. Here DIR is a directory + name to use instead of `/usr/local' for all purposes with one + exception: the directory `/usr/local/include' is searched for + header files no matter where you install the compiler. To override + this name, use the `--local-prefix' option below. + + 5. Specify `--local-prefix=DIR' if you want the compiler to search + directory `DIR/include' for locally installed header files + *instead* of `/usr/local/include'. + + You should specify `--local-prefix' *only* if your site has a + different convention (not `/usr/local') for where to put + site-specific files. + + *Do not* specify `/usr' as the `--local-prefix'! The directory + you use for `--local-prefix' *must not* contain any of the + system's standard header files. If it did contain them, certain + programs would be miscompiled (including GNU Emacs, on certain + targets), because this would override and nullify the header file + corrections made by the `fixincludes' script. - 4. Make sure the Bison parser generator is installed. (This is + 6. 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.) @@ -318,7 +232,18 @@ Installing GNU CC Bison versions older than Sept 8, 1988 will produce incorrect output for `c-parse.c'. - 5. Build the compiler. Just type `make LANGUAGES=c' in the compiler + 7. If you have chosen a configuration for GNU CC which requires other + GNU tools (such as GAS or the GNU linker) instead of the standard + system tools, install the required tools in the build directory + under the names `as', `ld' or whatever is appropriate. This will + enable the compiler to find the proper tools for compilation of + the program `enquire'. + + Alternatively, you can do subsequent compilation using a value of + the `PATH' environment variable such that the necessary GNU tools + come before the standard system tools. + + 8. Build the compiler. Just type `make LANGUAGES=c' in the compiler directory. `LANGUAGES=c' specifies that only the C compiler should be @@ -330,12 +255,19 @@ Installing GNU CC 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'. + the list `c', `c++', and `objective-c'. If you have any + additional GNU compilers as subdirectories of the GNU CC source + directory, you may also specify their names in this list. Ignore any warnings you may see about "statement not reached" in - `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. + `insn-emit.c'; they are normal. Also, warnings about "unknown + escape sequence" are normal in `genopinit.c' and perhaps some + other files. Likewise, you should ignore warnings about "constant + is so large that it is unsigned" in `insn-emit.c' and + `insn-recog.c' and a warning about a comparison always being zero + in `enquire.o'. 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 @@ -343,33 +275,32 @@ Installing GNU CC expression space; then you need to break up the statement where the problem happens. - If you are building with a previous GNU C compiler, do not use - `CC=gcc' on the make command or by editing the Makefile. Instead, - use a full pathname to specify the compiler, such as - `CC=/usr/local/bin/gcc'. This is because make might execute the - `gcc' in the current directory before all of the compiler - components have been built. - - 6. If you are using COFF-encapsulation, you must convert `libgcc.a' to - a GNU-format library at this point. See the file `README.ENCAP' - in the directory containing the GNU binary file utilities, for - directions. - - 7. If you are building a cross-compiler, stop here. *Note + 9. If you are building a cross-compiler, stop here. *Note Cross-Compiler::. - 8. Move the first-stage object files and executables into a + 10. 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: + 11. If you have chosen a configuration for GNU CC which requires other + GNU tools (such as GAS or the GNU linker) instead of the standard + system tools, install the required tools in the `stage1' + subdirectory under the names `as', `ld' or whatever is + appropriate. This will enable the stage 1 compiler to find the + proper tools in the following stage. + + Alternatively, you can do subsequent compilation using a value of + the `PATH' environment variable such that the necessary GNU tools + come before the standard system tools. + + 12. Recompile the compiler with itself, with this command: - make CC="stage1/gcc -Bstage1/" CFLAGS="-g -O" + make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2" This is called making the stage 2 compiler. @@ -392,27 +323,45 @@ Installing GNU CC you have selected a `tm.h' file that expects by default that there is no such hardware, do this instead: - make CC="stage1/gcc -Bstage1/" CFLAGS="-g -O -msoft-float" + make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2 -msoft-float" - 10. If you wish to test the compiler by compiling it with itself one - more time, do this: + 13. If you wish to test the compiler by compiling it with itself one + more time, install any other necessary GNU tools (such as GAS or + the GNU linker) in the `stage2' subdirectory as you did in the + `stage1' subdirectory, then do this: make stage2 - make CC="stage2/gcc -Bstage2/" CFLAGS="-g -O" + make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2" This is called making the stage 3 compiler. Aside from the `-B' - option, the options should be the same as when you made the stage 2 - compiler. - - The command shown above builds compilers for all the supported - languages. If you don't want them all, you can specify the - languages to build by typing the argument `LANGUAGES="LIST"', as - described above. + 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. + + If you do not have to install any additional GNU tools, you may + use the command + + make bootstrap LANGUAGES=LANGUAGE-LIST BOOT_CFLAGS=OPTION-LIST + + instead of making `stage1', `stage2', and performing the two + compiler builds. + + 14. Then compare the latest object files with the stage 2 object + files--they ought to be identical, aside from time stamps (if any). + + On some systems, meaningful comparison of object files is + impossible; they always appear "different." This is currently + true on Solaris and some systems that use ELF object file format. + On some versions of Irix on SGI machines and DEC Unix (OSF/1) on + Alpha systems, you will not be able to compare the files without + specifying `-save-temps'; see the description of individual + systems above to see if you get comparison failures. You may have + similar problems on other systems. - 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: + Use this command to compare the files: make compare @@ -432,33 +381,34 @@ Installing GNU CC 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: + 15. Install the compiler driver, the compiler's passes and run-time + support with `make install'. 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. - make CC="stage2/gcc -Bstage2/" CFLAGS="-g -O" install LANGUAGES="LIST" + For example, if you have built the stage 2 compiler, you can use + the following command: - (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. + make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="LIST" This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1', - `cpp' and `libgcc.a' in directory + `cpp' and `libgcc.a' in the directory `/usr/local/lib/gcc-lib/TARGET/VERSION', which is where the compiler driver program looks for them. Here TARGET is the target machine type specified when you ran `configure', and VERSION is the version number of GNU CC. This naming scheme permits various versions and/or cross-compilers to coexist. - It also copies the driver program `gcc' into the directory - `/usr/local/bin', so that it appears in typical execution search - paths. - - On some systems, this command will cause recompilation of some - files. This is usually due to bugs in `make'. You should either - ignore this problem, or use GNU Make. + This also copies the driver program `xgcc' into + `/usr/local/bin/gcc', so that it appears in typical execution + search paths. + + On some systems, this command causes 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 @@ -470,50 +420,803 @@ Installing GNU CC or 3, since they usually run faster than the ones compiled with some other compiler.) - 12. Correct errors in the header files on your machine. + 16. 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 GNU C distribution. Just as GNU C + 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. + +Configurations Supported by GNU CC +================================== + + Here are the possible CPU types: + + 1750a, a29k, alpha, arm, cN, clipper, dsp16xx, elxsi, h8300, + hppa1.0, hppa1.1, i370, i386, i486, i586, i860, i960, m68000, m68k, + m88k, mips, mipsel, mips64, mips64el, ns32k, powerpc, powerpcle, + pyramid, romp, rs6000, sh, sparc, sparclite, sparc64, vax, we32k. + + Here are the recognized company names. As you can see, customary +abbreviations are used rather than the longer official names. + + acorn, alliant, altos, apollo, att, bull, cbm, convergent, convex, + crds, dec, dg, dolphin, elxsi, encore, harris, hitachi, hp, ibm, + intergraph, isi, mips, motorola, ncr, next, ns, omron, plexus, + sequent, sgi, sony, sun, tti, unicom, wrs. + + The company name is meaningful only to disambiguate when the rest of +the information supplied is insufficient. You can omit it, writing +just `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: + + 386bsd, aix, acis, amigados, aos, aout, bosx, bsd, clix, coff, + ctix, cxux, dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, + genix, gnu, gnu/linux, hiux, hpux, iris, irix, isc, luna, lynxos, + mach, minix, msdos, mvs, netbsd, newsos, nindy, ns, osf, osfrose, + ptx, riscix, riscos, rtu, sco, sim, solaris, sunos, sym, sysv, + udi, ultrix, unicos, uniplus, unos, vms, vsta, vxworks, winnt, + xenix. + +You can omit the system type; then `configure' guesses the operating +system from the CPU and company. + + You can add a version number to the system type; this may or may not +make a difference. For example, you can write `bsd4.3' or `bsd4.4' to +distinguish versions of BSD. In practice, the version number is most +needed for `sysv3' and `sysv4', which are often treated differently. + + If you specify an impossible combination such as `i860-dg-vms', then +you may get an error message from `configure', or it may ignore part of +the information and do the best it can with the rest. `configure' +always prints the canonical name for the alternative that it used. GNU +CC does not support all possible alternatives. + + Often a particular model of machine has a name. Many machine names +are recognized as aliases for CPU/company combinations. Thus, the +machine name `sun3', mentioned above, is an alias for `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, powerpc, + powerpcle, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3, + sun4, symmetry, tower-32, tower. + +Remember that a machine name specifies both the cpu type and the company +name. If you want to install your own homemade configuration files, +you can use `local' as the company name to access them. If you use +configuration `CPU-local', the configuration name without the cpu prefix +is used to form the configuration file names. + + Thus, if you specify `m68k-local', configuration uses files +`m68k.md', `local.h', `m68k.c', `xm-local.h', `t-local', and `x-local', +all in the directory `config/m68k'. + + Here is a list of configurations that have special treatment or +special things you must know: + +`1750a-*-*' + MIL-STD-1750A processors. + + Starting with GCC 2.6.1, the MIL-STD-1750A cross configuration no + longer supports the Tektronix Assembler, but instead produces + output for `as1750', an assembler/linker available under the GNU + Public License for the 1750A. Contact *kellogg@space.otn.dasa.de* + for more details on obtaining `as1750'. A similarly licensed + simulator for the 1750A is available from same address. + + You should ignore a fatal error during the building of libgcc + (libgcc is not yet implemented for the 1750A.) + + The `as1750' assembler requires the file `ms1750.inc', which is + found in the directory `config/1750a'. + + GNU CC produced the same sections as the Fairchild F9450 C + Compiler, namely: + + `Normal' + The program code section. + + `Static' + The read/write (RAM) data section. + + `Konst' + The read-only (ROM) constants section. + + `Init' + Initialization section (code to copy KREL to SREL). + + The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16). + This means that type `char' is represented with a 16-bit word per + character. The 1750A's "Load/Store Upper/Lower Byte" instructions + are not used by GNU CC. + +`alpha-*-osf1' + Systems using processors that implement the DEC Alpha architecture + and are running the DEC Unix (OSF/1) operating system, for example + the DEC Alpha AXP systems. (VMS on the Alpha is not currently + supported by GNU CC.) + + GNU CC writes a `.verstamp' directive to the assembler output file + unless it is built as a cross-compiler. It gets the version to + use from the system header file `/usr/include/stamp.h'. If you + install a new version of DEC Unix, you should rebuild GCC to pick + up the new version stamp. + + Note that since the Alpha is a 64-bit architecture, + cross-compilers from 32-bit machines will not generate code as + efficient as that generated when the compiler is running on a + 64-bit machine because many optimizations that depend on being + able to represent a word on the target in an integral value on the + host cannot be performed. Building cross-compilers on the Alpha + for 32-bit machines has only been tested in a few cases and may + not work properly. + + `make compare' may fail on old versions of DEC Unix unless you add + `-save-temps' to `CFLAGS'. On these systems, the name of the + assembler input file is stored in the object file, and that makes + comparison fail if it differs between the `stage1' and `stage2' + compilations. The option `-save-temps' forces a fixed name to be + used for the assembler input file, instead of a randomly chosen + name in `/tmp'. Do not add `-save-temps' unless the comparisons + fail without that option. If you add `-save-temps', you will have + to manually delete the `.i' and `.s' files after each series of + compilations. + + GNU CC now supports both the native (ECOFF) debugging format used + by DBX and GDB and an encapsulated STABS format for use only with + GDB. See the discussion of the `--with-stabs' option of + `configure' above for more information on these formats and how to + select them. + + There is a bug in DEC's assembler that produces incorrect line + numbers for ECOFF format when the `.align' directive is used. To + work around this problem, GNU CC will not emit such alignment + directives while writing ECOFF format debugging information even + if optimization is being performed. Unfortunately, this has the + very undesirable side-effect that code addresses when `-O' is + specified are different depending on whether or not `-g' is also + specified. + + To avoid this behavior, specify `-gstabs+' and use GDB instead of + DBX. DEC is now aware of this problem with the assembler and + hopes to provide a fix shortly. + +`arm' + Advanced RISC Machines ARM-family processors. These are often + used in embedded applications. There are no standard Unix + configurations. This configuration corresponds to the basic + instruction sequences and will produce a.out format object modules. + + You may need to make a variant of the file `arm.h' for your + particular configuration. + +`arm-*-riscix' + The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD + Unix. If you are running a version of RISC iX prior to 1.2 then + you must specify the version number during configuration. Note + that the assembler shipped with RISC iX does not support stabs + debugging information; a new version of the assembler, with stabs + support included, is now available from Acorn. + +`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. + +`decstation-*' + 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. + + 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'. + +`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. + +`dsp16xx' + A port to the AT&T DSP1610 family of processors. + +`h8300-*-*' + The calling convention and structure layout has changed in release + 2.6. All code must be recompiled. The calling convention now + passes the first three arguments in function calls in registers. + Structures are no longer a multiple of 2 bytes. + +`hppa*-*-*' + There are several variants of the HP-PA processor which run a + variety of operating systems. GNU CC must be configured to use + the correct processor type and operating system, or GNU CC will + not function correctly. The easiest way to handle this problem is + to *not* specify a target when configuring GNU CC, the `configure' + script will try to automatically determine the right processor + type and operating system. + + `-g' does not work on HP-UX, since that system uses a peculiar + debugging format which GNU CC does not know about. However, `-g' + will work if you also use GAS and GDB in conjunction with GCC. We + highly recommend using GAS for all HP-PA configurations. + + You should be using GAS-2.6 (or later) along with GDB-4.16 (or + later). These can be retrieved from all the traditional GNU ftp + archive sites. + + GAS will need to be installed into a directory before `/bin', + `/usr/bin', and `/usr/ccs/bin' in your search path. You should + install GAS before you build GNU CC. + + To enable debugging, you must configure GNU CC with the + `--with-gnu-as' option before building. + +`i370-*-*' + This port is very preliminary and has many known bugs. We hope to + have a higher-quality port for this machine soon. + +`i386-*-linuxoldld' + Use this configuration to generate a.out binaries on Linux-based + GNU systems, if you do not have gas/binutils version 2.5.2 or later + installed. This is an obsolete configuration. + +`i386-*-linuxaout' + Use this configuration to generate a.out binaries on Linux-based + GNU systems. This configuration is being superseded. You must use + gas/binutils version 2.5.2 or later. + +`i386-*-linuxlibc1' + Use this configuration to generate ELF binaries on Linux-based GNU + systems using GNU libc version 1 (Linux libc version 5). You must + use gas/binutils version 2.5.2 or later. + +`i386-*-linux' + Use this configuration to generate ELF binaries on Linux-based GNU + systems. You must use gas/binutils version 2.5.2 or later. + +`i386-*-sco' + Compilation with RCC is recommended. Also, it may be a good idea + to link with GNU malloc instead of the malloc that comes with the + system. + +`i386-*-sco3.2v4' + Use this configuration for SCO release 3.2 version 4. + +`i386-*-isc' + It may be a good idea to link with GNU malloc instead of the + malloc that comes with the system. + + In ISC version 4.1, `sed' core dumps when building `deduced.h'. + Use the version of `sed' from version 4.0. + +`i386-*-esix' + It may be good idea to link with GNU malloc instead of the malloc + that comes with the system. + +`i386-ibm-aix' + You need to use GAS version 2.1 or later, and and LD from GNU + binutils version 2.2 or later. + +`i386-sequent-bsd' + 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-sequent-ptx1*' + Sequent DYNIX/ptx 1.x. + +`i386-sequent-ptx2*' + Sequent DYNIX/ptx 2.x. + +`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. + + See *Note Sun Install::, for information on installing GNU CC on + Sun systems. + +`i[345]86-*-winnt3.5' + This version requires a GAS that has not let been released. Until + it is, you can get a prebuilt binary version via anonymous ftp from + `cs.washington.edu:pub/gnat' or `cs.nyu.edu:pub/gnat'. You must + also use the Microsoft header files from the Windows NT 3.5 SDK. + Find these on the CDROM in the `/mstools/h' directory dated + 9/4/94. You must use a fixed version of Microsoft linker made + especially for NT 3.5, which is also is available on the NT 3.5 + SDK CDROM. If you do not have this linker, can you also use the + linker from Visual C/C++ 1.0 or 2.0. + + Installing GNU CC for NT builds a wrapper linker, called `ld.exe', + which mimics the behaviour of Unix `ld' in the specification of + libraries (`-L' and `-l'). `ld.exe' looks for both Unix and + Microsoft named libraries. For example, if you specify `-lfoo', + `ld.exe' will look first for `libfoo.a' and then for `foo.lib'. + + You may install GNU CC for Windows NT in one of two ways, + depending on whether or not you have a Unix-like shell and various + Unix-like utilities. + + 1. If you do not have a Unix-like shell and few Unix-like + utilities, you will use a DOS style batch script called + `configure.bat'. Invoke it as `configure winnt' from an + MSDOS console window or from the program manager dialog box. + `configure.bat' assumes you have already installed and have + in your path a Unix-like `sed' program which is used to + create a working `Makefile' from `Makefile.in'. + + `Makefile' uses the Microsoft Nmake program maintenance + utility and the Visual C/C++ V8.00 compiler to build GNU CC. + You need only have the utilities `sed' and `touch' to use + this installation method, which only automatically builds the + compiler itself. You must then examine what `fixinc.winnt' + does, edit the header files by hand and build `libgcc.a' + manually. + + 2. The second type of installation assumes you are running a + Unix-like shell, have a complete suite of Unix-like utilities + in your path, and have a previous version of GNU CC already + installed, either through building it via the above + installation method or acquiring a pre-built binary. In this + case, use the `configure' script in the normal fashion. + +`i860-intel-osf1' + This is the Paragon. If you have version 1.0 of the operating + system, you need to take special steps to build GNU CC due to + peculiarities of the system. Newer system versions have no + problem. See the section `Installation Problems' in the GNU CC + Manual. + +`*-lynx-lynxos' + LynxOS 2.2 and earlier comes with GNU CC 1.x already installed as + `/bin/gcc'. You should compile with this instead of `/bin/cc'. + You can tell GNU CC to use the GNU assembler and linker, by + specifying `--with-gnu-as --with-gnu-ld' when configuring. These + will produce COFF format object files and executables; otherwise + GNU CC will use the installed tools, which produce a.out format + executables. + +`m68000-hp-bsd' + HP 9000 series 200 running BSD. Note that the C compiler that + comes with this system cannot compile GNU CC; contact + `law@cs.utah.edu' to get binaries of GNU CC for bootstrapping. + +`m68k-altos' + Altos 3068. You must use the GNU assembler, linker and debugger. + Also, you must fix a kernel bug. Details in the file + `README.ALTOS'. + +`m68k-att-sysv' + AT&T 3b1, a.k.a. 7300 PC. Special procedures are needed to + compile GNU CC with this machine's standard C compiler, due to + bugs in that compiler. You can bootstrap it more easily with + previous versions of GNU CC if you have them. + + Installing GNU CC on the 3b1 is difficult if you do not already + have GNU CC running, due to bugs in the installed C compiler. + However, the following procedure might work. We are unable to + test it. + + 1. Comment out the `#include "config.h"' line on line 37 of + `cccp.c' and do `make cpp'. This makes a preliminary version + of GNU cpp. + + 2. Save the old `/lib/cpp' and copy the preliminary GNU cpp to + that file name. + + 3. Undo your change in `cccp.c', or reinstall the original + version, and do `make cpp' again. + + 4. Copy this final version of GNU cpp into `/lib/cpp'. + + 5. Replace every occurrence of `obstack_free' in the file + `tree.c' with `_obstack_free'. + + 6. Run `make' to get the first-stage GNU CC. + + 7. Reinstall the original version of `/lib/cpp'. + + 8. Now you can compile GNU CC with itself and install it in the + normal fashion. + +`m68k-bull-sysv' + Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GNU + CC works either with native assembler or GNU assembler. You can use + GNU assembler with native coff generation by providing + `--with-gnu-as' to the configure script or use GNU assembler with + dbx-in-coff encapsulation by providing `--with-gnu-as --stabs'. + For any problem with native assembler or for availability of the + DPX/2 port of GAS, contact `F.Pierresteguy@frcl.bull.fr'. + +`m68k-crds-unox' + Use `configure unos' for building on Unos. + + The Unos assembler is named `casm' instead of `as'. For some + strange reason linking `/bin/as' to `/bin/casm' changes the + behavior, and does not work. So, when installing GNU CC, you + should install the following script as `as' in the subdirectory + where the passes of GCC are installed: + + #!/bin/sh + casm $* + + The default Unos library is named `libunos.a' instead of `libc.a'. + 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 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 library and linking from that library. + +`m68k-hp-hpux' + HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a + bug in the assembler that prevents compilation of GNU CC. To fix + it, get patch PHCO_4484 from HP. + + In addition, if you wish to use gas `--with-gnu-as' you must use + gas version 2.1 or later, and you must use the GNU linker version + 2.1 or later. Earlier versions of gas relied upon a program which + converted the gas output into the native HP/UX format, but that + program has not been kept up to date. gdb does not understand + that native HP/UX format, so you must use gas if you wish to use + gdb. + +`m68k-sun' + Sun 3. We do not provide a configuration file to use the Sun FPA + by default, because programs that establish signal handlers for + floating point traps inherently cannot work with the FPA. + + See *Note Sun Install::, for information on installing GNU CC on + Sun systems. + +`m88k-*-svr3' + Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. + These systems tend to use the Green Hills C, revision 1.8.5, as the + standard C compiler. There are apparently bugs in this compiler + that result in object files differences between stage 2 and stage + 3. If this happens, make the stage 4 compiler and compare it to + the stage 3 compiler. If the stage 3 and stage 4 object files are + identical, this suggests you encountered a problem with the + standard C compiler; the stage 3 and 4 compilers may be usable. + + It is best, however, to use an older version of GNU CC for + bootstrapping if you have one. + +`m88k-*-dgux' + Motorola m88k running DG/UX. To build 88open BCS native or cross + compilers on DG/UX, specify the configuration name as + `m88k-*-dguxbcs' and build in the 88open BCS software development + environment. To build ELF native or cross compilers on DG/UX, + specify `m88k-*-dgux' and build in the DG/UX ELF development + environment. You set the software development environment by + issuing `sde-target' command and specifying either `m88kbcs' or + `m88kdguxelf' as the operand. + + If you do not specify a configuration name, `configure' guesses the + configuration based on the current software development + environment. + +`m88k-tektronix-sysv3' + Tektronix XD88 running UTekV 3.2e. Do not turn on optimization + while building stage1 if you bootstrap with the buggy Green Hills + compiler. Also, The bundled LAI System V NFS is buggy so if you + build in an NFS mounted directory, start from a fresh reboot, or + avoid NFS all together. Otherwise you may have trouble getting + clean comparisons between stages. + +`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'. + + 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-mips-riscos*' + 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. + +`mips-sgi-*' + In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib" + option must be installed from the CD-ROM supplied from Silicon + Graphics. This is found on the 2nd CD in release 4.0.1. + + In order to compile GCC on an SGI running IRIX 5, the + "compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM + supplied by Silicon Graphics. + + `make compare' may fail on version 5 of IRIX unless you add + `-save-temps' to `CFLAGS'. On these systems, the name of the + assembler input file is stored in the object file, and that makes + comparison fail if it differs between the `stage1' and `stage2' + compilations. The option `-save-temps' forces a fixed name to be + used for the assembler input file, instead of a randomly chosen + name in `/tmp'. Do not add `-save-temps' unless the comparisons + fail without that option. If you do you `-save-temps', you will + have to manually delete the `.i' and `.s' files after each series + of compilations. + + The MIPS C compiler needs to be told to increase its table size + for switch statements with the `-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'. + + On Irix version 4.0.5F, and perhaps on some other versions as well, + there is an assembler bug that reorders instructions incorrectly. + To work around it, specify the target configuration + `mips-sgi-irix4loser'. This configuration inhibits assembler + optimization. + + In a compiler configured with target `mips-sgi-irix4', you can turn + off assembler optimization by using the `-noasmopt' option. This + compiler option passes the option `-O0' to the assembler, to + inhibit reordering. + + The `-noasmopt' option can be useful for testing whether a problem + is due to erroneous assembler reordering. Even if a problem does + not go away with `-noasmopt', it may still be due to assembler + reordering--perhaps GNU CC itself was miscompiled as a result. + + To enable debugging under Irix 5, you must use GNU as 2.5 or later, + and use the `--with-gnu-as' configure option when configuring gcc. + GNU as is distributed as part of the binutils package. + +`mips-sony-sysv' + Sony MIPS NEWS. This works in NEWSOS 5.0.1, but not in 5.0.2 + (which uses ELF instead of COFF). Support for 5.0.2 will probably + be provided soon by volunteers. In particular, the linker does + not like the code generated by GCC when shared libraries are + linked in. + +`ns32k-encore' + Encore ns32000 system. Encore systems are supported only under + BSD. + +`ns32k-*-genix' + National Semiconductor ns32000 system. Genix has bugs in `alloca' + and `malloc'; you must get the compiled versions of these from GNU + Emacs. + +`ns32k-sequent' + Go to the Berkeley universe before compiling. In addition, you + probably need to create a file named `string.h' containing just + one line: `#include '. + +`ns32k-utek' + UTEK ns32000 system ("merlin"). The C compiler that comes with + this system cannot compile GNU CC; contact `tektronix!reed!mason' + to get binaries of GNU CC for bootstrapping. + +`romp-*-aos' +`romp-*-mach' + The only operating systems supported for the IBM RT PC are AOS and + MACH. GNU CC does not support AIX running on the RT. 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' +`powerpc-*-aix' + Various early versions of each release of the IBM XLC compiler + will not bootstrap GNU CC. Symptoms include differences between + the stage2 and stage3 object files, and errors when compiling + `libgcc.a' or `enquire'. Known problematic releases include: + xlc-1.2.1.8, xlc-1.3.0.0 (distributed with AIX 3.2.5), and + xlc-1.3.0.19. Both xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are + known to produce working versions of GNU CC, but most other recent + releases correctly bootstrap GNU CC. Also, releases of AIX prior + to AIX 3.2.4 include a version of the IBM assembler which does not + accept debugging directives: assembler updates are available as + PTFs. Also, if you are using AIX 3.2.5 or greater and the GNU + assembler, you must have a version modified after October 16th, + 1995 in order for the GNU C compiler to build. See the file + `README.RS6000' for more details on of these problems. + + GNU CC does not yet support the 64-bit PowerPC instructions. + + Objective C does not work on this architecture because it makes + assumptions that are incompatible with the calling conventions. + + AIX on the RS/6000 provides support (NLS) for environments outside + of the United States. Compilers and assemblers use NLS to support + locale-specific representations of various objects including + floating-point numbers ("." vs "," for separating decimal + fractions). There have been problems reported where the library + linked with GNU CC does not produce the same floating-point + formats that the assembler accepts. If you have this problem, set + the LANG environment variable to "C" or "En_US". + + Due to changes in the way that GNU CC invokes the binder (linker) + for AIX 4.1, you may now receive warnings of duplicate symbols + from the link step that were not reported before. The assembly + files generated by GNU CC for AIX have always included multiple + symbol definitions for certain global variable and function + declarations in the original program. The warnings should not + prevent the linker from producing a correct library or runnable + executable. + +`powerpc-*-elf' +`powerpc-*-sysv4' + PowerPC system in big endian mode, running System V.4. + + This configuration is currently under development. + +`powerpc-*-eabiaix' + Embedded PowerPC system in big endian mode with -mcall-aix + selected as the default. This system is currently under + development. + +`powerpc-*-eabisim' + Embedded PowerPC system in big endian mode for use in running + under the PSIM simulator. This system is currently under + development. + +`powerpc-*-eabi' + Embedded PowerPC system in big endian mode. + + This configuration is currently under development. + +`powerpcle-*-elf' +`powerpcle-*-sysv4' + PowerPC system in little endian mode, running System V.4. + + This configuration is currently under development. + +`powerpcle-*-sysv4' + Embedded PowerPC system in little endian mode. + + This system is currently under development. + +`powerpcle-*-eabisim' + Embedded PowerPC system in little endian mode for use in running + under the PSIM simulator. + + This system is currently under development. + +`powerpcle-*-eabi' + Embedded PowerPC system in little endian mode. + + This configuration is currently under development. + +`vax-dec-ultrix' + Don't try compiling with Vax C (`vcc'). It produces incorrect code + in some cases (for example, when `alloca' is used). + + Meanwhile, compiling `cp/parse.c' with pcc does not work because of + an internal table size limitation in that compiler. To avoid this + problem, compile just the GNU C compiler first, and use it to + recompile building all the languages that you want to run. + +`sparc-sun-*' + See *Note Sun Install::, for information on installing GNU CC on + Sun systems. + +`vax-dec-vms' + See *Note VMS Install::, for details on how to install GNU CC on + VMS. + +`we32k-*-*' + These computers are also known as the 3b2, 3b5, 3b20 and other + similar names. (However, the 3b1 is actually a 68000; see *Note + Configurations::.) + + 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 ${1+"$@"}' > /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: - Various system header files often contain constructs which are - incompatible with ANSI C, and they will not work when you compile - programs with GNU CC. This behavior consists of substituting for - macro argument names when they appear inside of character - constants. The most common offender is `ioctl.h'. - - You can overcome this problem when you compile by specifying the - `-traditional' option. - - Alternatively, on Sun systems and 4.3BSD at least, you can correct - the include files by running the shell script `fixincludes'. This - installs modified, corrected copies of the files `ioctl.h', - `ttychars.h' and many others, in a special directory where only - GNU CC will normally look for them. This script will work on - various systems because it chooses the files by searching all the - system headers for the problem cases that we know about. - - Use the following command to do this: - - make install-fixincludes - - If you selected a different directory for GNU CC installation when - you installed it, by specifying the Make variable `prefix' or - `libdir', specify it the same way in this command. - - Note that some systems are starting to come with ANSI C system - header files. On these systems, don't run `fixincludes'; it may - not work, and is certainly not necessary. - - If you cannot install the compiler's passes and run-time support in -`/usr/local/lib', you can alternatively use the `-B' option to specify -a prefix by which they may be found. The compiler concatenates the -prefix with the names `cpp', `cc1' and `libgcc.a'. Thus, you can put -the files in a directory `/usr/foo/gcc' and specify `-B/usr/foo/gcc/' -when you run GNU CC. - - Also, you can specify an alternative default directory for these -files by setting the Make variable `libdir' when you make GNU CC. + 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. 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 @@ -546,7 +1249,7 @@ do differently: invoke it. But if you want to be sure, you can specify the source directory with the `--srcdir' option, like this: - ../gcc/configure --srcdir=../gcc sun3 + ../gcc/configure --srcdir=../gcc OTHER OPTIONS The directory you specify with `--srcdir' need not be the same as the one that `configure' is found in. @@ -556,20 +1259,25 @@ configuration steps shown above, when or 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). + * Cross-compilers for the Mips as target using the Mips assembler + currently do not work, because the auxiliary programs + `mips-tdump.c' and `mips-tfile.c' can't be compiled on anything + but a Mips. It does work to cross compile for a Mips if you use + the GNU assembler and linker. + + * Cross-compilers between machines with different floating point + formats have not all been made to work. GNU CC now has a floating + point emulator with which these can work, but each target machine + description needs to be updated to take advantage of it. + + * Cross-compilation between machines of different word sizes is + somewhat problematic and sometimes does not work. Since GNU CC generates assembler code, you probably need a cross-assembler that GNU CC can run, in order to produce object files. @@ -577,52 +1285,264 @@ If you want to link on other than the ta cross-linker as well. You also need header files and libraries suitable for the target machine that you can install on the host machine. +Steps of Cross-Compilation +-------------------------- + + To compile and run a program using a cross-compiler involves several +steps: + + * Run the cross-compiler on the host machine to produce assembler + files for the target machine. This requires header files for the + target machine. + + * Assemble the files produced by the cross-compiler. You can do this + either with an assembler on the target machine, or with a + cross-assembler on the host machine. + + * Link those files to make an executable. You can do this either + with a linker on the target machine, or with a cross-linker on the + host machine. Whichever machine you use, you need libraries and + certain startup files (typically `crt....o') for the target + machine. + + It is most convenient to do all of these steps on the same host +machine, since then you can do it all with a single invocation of GNU +CC. This requires a suitable cross-assembler and cross-linker. For +some targets, the GNU assembler and linker are available. + +Configuring a Cross-Compiler +---------------------------- + To build GNU CC as a cross-compiler, you start out by running -`configure'. You must specify two different configureations, 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'. -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'. - - Then you can proceed just as for compiling a single-machine compiler -through the step of building stage 1. - - 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'. - - You will find it necessary to 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 have just built. +`configure'. Use the `--target=TARGET' to specify the target type. If +`configure' was unable to correctly identify the system you are running +on, also specify the `--build=BUILD' option. For example, here is how +to configure for a cross-compiler that produces code for an HP 68030 +system running BSD on a system that `configure' can correctly identify: + + ./configure --target=m68k-hp-bsd4.3 + +Tools and Libraries for a Cross-Compiler +---------------------------------------- + + If you have a cross-assembler and cross-linker available, you should +install them now. Put them in the directory `/usr/local/TARGET/bin'. +Here is a table of the tools you should put in this directory: + +`as' + This should be the cross-assembler. + +`ld' + This should be the cross-linker. + +`ar' + This should be the cross-archiver: a program which can manipulate + archive files (linker libraries) in the target machine's format. + +`ranlib' + This should be a program to construct a symbol table in an archive + file. + + The installation of GNU CC will find these programs in that +directory, and copy or link them to the proper place to for the +cross-compiler to find them when run later. + + The easiest way to provide these files is to build the Binutils +package and GAS. Configure them with the same `--host' and `--target' +options that you use for configuring GNU CC, then build and install +them. They install their executables automatically into the proper +directory. Alas, they do not support all the targets that GNU CC +supports. + + If you want to install libraries to use with the cross-compiler, +such as a standard C library, put them in the directory +`/usr/local/TARGET/lib'; installation of GNU CC copies all all the +files in that subdirectory into the proper place for GNU CC to find +them and link with them. Here's an example of copying some libraries +from a target machine: + + ftp TARGET-MACHINE + lcd /usr/local/TARGET/lib + cd /lib + get libc.a + cd /usr/lib + get libg.a + get libm.a + quit + +The precise set of libraries you'll need, and their locations on the +target machine, vary depending on its operating system. + + Many targets require "start files" such as `crt0.o' and `crtn.o' +which are linked into each executable; these too should be placed in +`/usr/local/TARGET/lib'. There may be several alternatives for +`crt0.o', for use with profiling or other compilation options. Check +your target's definition of `STARTFILE_SPEC' to find out what start +files it uses. Here's an example of copying these files from a target +machine: + + ftp TARGET-MACHINE + lcd /usr/local/TARGET/lib + prompt + cd /lib + mget *crt*.o + cd /usr/lib + mget *crt*.o + quit + +`libgcc.a' and Cross-Compilers +------------------------------ + + Code compiled by GNU CC uses certain runtime support functions +implicitly. Some of these functions can be compiled successfully with +GNU CC itself, but a few cannot be. These problem functions are in the +source file `libgcc1.c'; the library made from them is called +`libgcc1.a'. + + When you build a native compiler, these functions are compiled with +some other compiler-the one that you use for bootstrapping GNU CC. +Presumably it knows how to open code these operations, or else knows how +to call the run-time emulation facilities that the machine comes with. +But this approach doesn't work for building a cross-compiler. The +compiler that you use for building knows about the host system, not the +target system. + + So, when you build a cross-compiler you have to supply a suitable +library `libgcc1.a' that does the job it is expected to do. + + To compile `libgcc1.c' with the cross-compiler itself does not work. +The functions in this file are supposed to implement arithmetic +operations that GNU CC does not know how to open code for your target +machine. If these functions are compiled with GNU CC itself, they will +compile into infinite recursion. + + On any given target, most of these functions are not needed. If GNU +CC can open code an arithmetic operation, it will not call these +functions to perform the operation. It is possible that on your target +machine, none of these functions is needed. If so, you can supply an +empty library as `libgcc1.a'. + + Many targets need library support only for multiplication and +division. If you are linking with a library that contains functions for +multiplication and division, you can tell GNU CC to call them directly +by defining the macros `MULSI3_LIBCALL', and the like. These macros +need to be defined in the target description macro file. For some +targets, they are defined already. This may be sufficient to avoid the +need for libgcc1.a; if so, you can supply an empty library. + + Some targets do not have floating point instructions; they need other +functions in `libgcc1.a', which do floating arithmetic. Recent +versions of GNU CC have a file which emulates floating point. With a +certain amount of work, you should be able to construct a floating +point emulator that can be used as `libgcc1.a'. Perhaps future +versions will contain code to do this automatically and conveniently. +That depends on whether someone wants to implement it. + + Some embedded targets come with all the necessary `libgcc1.a' +routines written in C or assembler. These targets build `libgcc1.a' +automatically and you do not need to do anything special for them. +Other embedded targets do not need any `libgcc1.a' routines since all +the necessary operations are supported by the hardware. + + If your target system has another C compiler, you can configure GNU +CC as a native compiler on that machine, build just `libgcc1.a' with +`make libgcc1.a' on that machine, and use the resulting file with the +cross-compiler. To do this, execute the following on the target +machine: + + cd TARGET-BUILD-DIR + ./configure --host=sparc --target=sun3 + make libgcc1.a + +And then this on the host machine: + + ftp TARGET-MACHINE + binary + cd TARGET-BUILD-DIR + get libgcc1.a + quit + + Another way to provide the functions you need in `libgcc1.a' is to +define the appropriate `perform_...' macros for those functions. If +these definitions do not use the C arithmetic operators that they are +meant to implement, you should be able to compile them with the +cross-compiler you are building. (If these definitions already exist +for your target file, then you are all set.) + + To build `libgcc1.a' using the perform macros, use +`LIBGCC1=libgcc1.a OLDCC=./xgcc' when building the compiler. +Otherwise, you should place your replacement library under the name +`libgcc1.a' in the directory in which you will build the +cross-compiler, before you run `make'. + +Cross-Compilers and Header Files +-------------------------------- + + If you are cross-compiling a standalone program or a program for an +embedded system, then you may not need any header files except the few +that are part of GNU CC (and those of your program). However, if you +intend to link your program with a standard C library such as `libc.a', +then you probably need to compile with the header files that go with +the library you use. + + The GNU C compiler does not come with these files, because (1) they +are system-specific, and (2) they belong in a C library, not in a +compiler. + + If the GNU C library supports your target machine, then you can get +the header files from there (assuming you actually use the GNU library +when you link your program). + + If your target machine comes with a C compiler, it probably comes +with suitable header files also. If you make these files accessible +from the host machine, the cross-compiler can use them also. + + Otherwise, you're on your own in finding header files to use when +cross-compiling. + + When you have found suitable header files, put them in +`/usr/local/TARGET/include', before building the cross compiler. Then +installation will run fixincludes properly and install the corrected +versions of the header files where the compiler will use them. + + Provide the header files before you build the cross-compiler, because +the build stage actually runs the cross-compiler to produce parts of +`libgcc.a'. (These are the parts that *can* be compiled with GNU CC.) +Some of them need suitable header files. + + Here's an example showing how to copy the header files from a target +machine. On the target machine, do this: + + (cd /usr/include; tar cf - .) > tarfile + + Then, on the host machine, do this: + + ftp TARGET-MACHINE + lcd /usr/local/TARGET/include + get tarfile + quit + tar xf tarfile + +Actually Building the Cross-Compiler +------------------------------------ + + Now you can proceed just as for compiling a single-machine compiler +through the step of building stage 1. If you have not provided some +sort of `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 `libgcc1-test'; if you get +errors in the linking, it means that not all of the necessary routines +in `libgcc1.a' are available. + + You must provide the header file `float.h'. One way to do this is +to compile `enquire' and run it on your target machine. The job of +`enquire' is to run on the target machine and figure out by experiment +the nature of its floating point representation. `enquire' records its +findings in the header file `float.h'. If you can't produce this file +by running `enquire' on the target machine, then you will need to come +up with a suitable `float.h' in some other way (or else, avoid using it +in your programs). Do not try to build stage 2 for a cross-compiler. It doesn't work to rebuild GNU CC as a cross-compiler using the cross-compiler, because @@ -634,42 +1554,13 @@ for a 386 as the host). If you want to 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 is a -preliminary version available of some modified GNU tools including the -GDB debugger which do work with GNU CC for debugging. You can get them -by anonymous ftp from `mancos.cs.utah.edu' in the `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. - - If you do this, delete the line - - #undef DBX_DEBUGGING_INFO - -from `tm.h' before you build GNU CC, to enable generation of debugging -information. - + To install the cross-compiler, use `make install', as usual. Installing GNU CC on the Sun -============================= +============================ + + On Solaris (version 2.1), do not use the linker or other tools in +`/usr/ucb' to build GNU CC. Use `/usr/ccs/bin'. Make sure the environment variable `FLOAT_OPTION' is not set when you compile `libgcc.a'. If this option were set to `f68881' when @@ -689,73 +1580,8 @@ it by using the following command to com 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 -following procedure might work. We are unable to test it. - - 1. Comment out the `#include "config.h"' line on line 37 of `cccp.c' - and do `make cpp'. This makes a preliminary version of GNU cpp. - - 2. Save the old `/lib/cpp' and copy the preliminary GNU cpp to that - file name. - - 3. Undo your change in `cccp.c', or reinstall the original version, - and do `make cpp' again. - - 4. Copy this final version of GNU cpp into `/lib/cpp'. - - 5. Replace every occurrence of `obstack_free' in the file `tree.c' - with `_obstack_free'. - - 6. Run `make' to get the first-stage GNU CC. - - 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 Unos -========================== - - Use `configure unos' for building on Unos. - - The Unos assembler is named `casm' instead of `as'. For some -strange reason linking `/bin/as' to `/bin/casm' changes the behavior, -and does not work. So, when installing GNU CC, you should install the -following script as `as' in the subdirectory where the passes of GCC -are installed: - - #!/bin/sh - casm $* - - The default Unos library is named `libunos.a' instead of `libc.a'. -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 -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 -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. @@ -765,9 +1591,9 @@ the same manner as you use the VMS C com 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: + 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 @@ -787,7 +1613,7 @@ CLD file for GNU CC as follows: 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 @@ -798,7 +1624,7 @@ 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 /system /translation=concealed - disk:[gcc.gxx_include.] gnu_gxx_include @@ -816,18 +1642,19 @@ perform the following steps: 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: - 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. + 1. Execute the command procedure `vmsconfig.com' to set up the files + `tm.h', `config.h', `aux-output.c', and `md.', 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'. + + $ @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 @@ -847,9 +1674,9 @@ to recompile the sources. If you must r 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 + 4. Type `@make-gcc' to recompile everything (alternatively, 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. @@ -857,49 +1684,53 @@ to recompile the sources. If you must r 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 + 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: - $ lib gnu_cc:[000000]gcclib/delete=(new,eprintf) - $ lib libgcc2/extract=*/output=libgcc2.obj - $ lib gnu_cc:[000000]gcclib libgcc2.obj + $ library gnu_cc:[000000]gcclib/delete=(new,eprintf) + $ library gnu_cc:[000000]gcclib/delete=L_* + $ library libgcc2/extract=*/output=libgcc2.obj + $ library gnu_cc:[000000]gcclib libgcc2.obj 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. + with modules from `libgcc2' under different module names. The + modules `new' and `eprintf' may not actually be present in your + `gcclib.olb'--if the VMS librarian complains about those modules + not being present, simply ignore the message and continue on with + the next command. The second command removes the modules that + came from the previous version of the library `libgcc2.c'. Whenever you update the compiler on your system, you should also update the library with the above procedure. - You may wish to build GCC in such a way that no files are written + 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.]tran=conc, - - dua1:[gcc.source_dir.]/tran=conc gcc_build + $ 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). + where the directory `dua1:[gcc.source_dir]' contains the source + code, and the directory `dua0:[gcc.build_dir]' is meant to contain + all of the generated object files and executables. Once you have + done this, you can proceed building GCC as described above. (Keep + in mind that `gcc_build' is a rooted logical name, and thus the + device names in each element of the search list must be an actual + physical device name rather than another rooted logical name). - *If you are building GNU CC with a previous version of GNU CC, you + 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 + 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 @@ -908,33 +1739,144 @@ to recompile the sources. If you must r 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. - - 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'). +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 are generated by `make-cc1.com' and `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. + +`collect2' +========== + + Many target systems do not have support in the assembler and linker +for "constructors"--initialization functions to be called before the +official "start" of `main'. On such systems, GNU CC uses a utility +called `collect2' to arrange to call these functions at start time. + + The program `collect2' works by linking the program once and looking +through the linker output file for symbols with particular names +indicating they are constructor functions. If it finds any, it creates +a new temporary `.c' file containing a table of them, compiles it, and +links the program a second time including that file. + + The actual calls to the constructors are carried out by a subroutine +called `__main', which is called (automatically) at the beginning of +the body of `main' (provided `main' was compiled with GNU CC). Calling +`__main' is necessary, even when compiling C code, to allow linking C +and C++ object code together. (If you use `-nostdlib', you get an +unresolved reference to `__main', since it's defined in the standard +GCC library. Include `-lgcc' at the end of your compiler command line +to resolve this reference.) + + The program `collect2' is installed as `ld' in the directory where +the passes of the compiler are installed. When `collect2' needs to +find the *real* `ld', it tries the following file names: + + * `real-ld' in the directories listed in the compiler's search + directories. + + * `real-ld' in the directories listed in the environment variable + `PATH'. + + * The file specified in the `REAL_LD_FILE_NAME' configuration macro, + if specified. + + * `ld' in the compiler's search directories, except that `collect2' + will not execute itself recursively. + + * `ld' in `PATH'. + + "The compiler's search directories" means all the directories where +`gcc' searches for passes of the compiler. This includes directories +that you specify with `-B'. + + Cross-compilers search a little differently: + + * `real-ld' in the compiler's search directories. + + * `TARGET-real-ld' in `PATH'. + + * The file specified in the `REAL_LD_FILE_NAME' configuration macro, + if specified. + + * `ld' in the compiler's search directories. + + * `TARGET-ld' in `PATH'. + + `collect2' explicitly avoids running `ld' using the file name under +which `collect2' itself was invoked. In fact, it remembers up a list +of such names--in case one copy of `collect2' finds another copy (or +version) of `collect2' installed as `ld' in a second place in the +search path. + + `collect2' searches for the utilities `nm' and `strip' using the +same algorithm as above for `ld'. + +Standard Header File Directories +================================ + + `GCC_INCLUDE_DIR' means the same thing for native and cross. It is +where GNU CC stores its private include files, and also where GNU CC +stores the fixed include files. A cross compiled GNU CC runs +`fixincludes' on the header files in `$(tooldir)/include'. (If the +cross compilation header files need to be fixed, they must be installed +before GNU CC is built. If the cross compilation header files are +already suitable for ANSI C and GNU CC, nothing special need be done). + + `GPLUS_INCLUDE_DIR' means the same thing for native and cross. It +is where `g++' looks first for header files. `libg++' installs only +target independent header files in that directory. + + `LOCAL_INCLUDE_DIR' is used only for a native compiler. It is +normally `/usr/local/include'. GNU CC searches this directory so that +users can install header files in `/usr/local/include'. + + `CROSS_INCLUDE_DIR' is used only for a cross compiler. GNU CC +doesn't install anything there. + + `TOOL_INCLUDE_DIR' is used for both native and cross compilers. It +is the place for other packages to install header files that GNU CC will +use. For a cross-compiler, this is the equivalent of `/usr/include'. +When you build a cross-compiler, `fixincludes' processes any header +files in this directory.