--- gcc/INSTALL 2018/04/24 18:06:46 1.1.1.5 +++ gcc/INSTALL 2018/04/24 18:10:47 1.1.1.6 @@ -8,6 +8,11 @@ Installing GNU CC Here is the procedure for installing GNU CC on a Unix system. + 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. One of the files this deletes is @@ -23,13 +28,19 @@ Installing GNU CC running the file `configure' with appropriate arguments. If you are building a compiler to produce code for the machine it - runs on, specify just one machine type. Use the `--target' + runs on, specify just one machine type, with 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: + Cross-Compiler::.) Here is an example: configure --target=sparc-sun-sunos4.1 + If you run `configure' without specifying configuration arguments, + `configure' tries to guess the type of host you are on, and uses + that configuration type for both host and target. So you don't + need to specify a configuration, for building a native compiler, + unless `configure' cannot figure out what your configuration is. + A configuration name may be canonical or it may be more or less abbreviated. @@ -54,8 +65,9 @@ Installing GNU CC Here are the possible CPU types: a29k, alpha, arm, cN, clipper, elxsi, h8300, hppa1.0, hppa1.1, - i386, i860, i960, m68000, m68k, m88k, mips, ns32k, pyramid, - romp, rs6000, sh, sparc, sparclite, vax, we32k. + i370, i386, i486, i860, i960, m68000, m68k, m88k, mips, + ns32k, pyramid, romp, rs6000, sh, sparc, sparclite, vax, + we32k. Here are the recognized company names. As you can see, customary abbreviations are used rather than the longer official names. @@ -73,8 +85,8 @@ Installing GNU CC Here is a list of system types: aix, acis, aos, bsd, clix, ctix, dgux, dynix, genix, hpux, - isc, linux, luna, mach, minix, newsos, osf, osfrose, riscos, - sco, solaris, sunos, sysv, ultrix, unos, vms. + isc, linux, luna, lynxos, mach, minix, newsos, osf, osfrose, + riscos, sco, solaris, sunos, sysv, ultrix, unos, vms. You can omit the system type; then `configure' guesses the operating system from the CPU and company. @@ -122,14 +134,27 @@ Installing GNU CC output of GNU CC to work with GAS. Building and installing GAS is up to you. - The systems where it makes a difference whether you use GAS - are `i386-ANYTHING-sysv', `i860-ANYTHING-bsd', - `m68k-hp-hpux', `m68k-sony-bsd', `m68k-altos-sysv', - `m68000-hp-hpux', `m68000-att-sysv', and `mips-ANY'). On any - other system, `--with-gnu-as' has no effect. + 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. - On the systems listed above, if you use GAS, you should also - use the GNU linker (and specify `--with-gnu-ld'). + 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', and + `mips-ANY'). On any other system, `--with-gnu-as' has no + effect. + + On the systems listed above (except for the HP-PA and for ISC + on the 386), 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 @@ -142,12 +167,12 @@ Installing GNU CC for the system's linker on most configurations. `--with-stabs' - On MIPS based systems, you must specify whether you want GNU - CC to create the normal ECOFF debugging format, or to use - BSD-style stabs passed through the ECOFF symbol table. The - normal ECOFF debug format cannot fully handle languages other - than C. BSD stabs format can handle other languages, but it - only works with the GNU debugger GDB. + 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 @@ -158,6 +183,12 @@ Installing GNU CC 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. + `--nfp' On certain systems, you must specify whether the machine has a floating point unit. These systems include @@ -183,6 +214,9 @@ Installing GNU CC example the DEC Alpha AXP systems. (VMS on the Alpha is not currently supported by GNU CC.) + Objective C and C++ do not yet work on the Alpha. We hope to + support C++ in version 2.6. + 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 @@ -196,8 +230,36 @@ Installing GNU CC 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 for 32-bit machines that run on the Alpha has - not been tested and may not work properly. + 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 some versions of OSF/1 unless you + add `-save-temps' to `CFLAGS'. The same problem occurs on + Irix version 5.1.1. 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'. + + 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 even if optimization is being performed + if it is writing ECOFF format debugging information. + 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. `a29k' AMD Am29k-family processors. These are normally used in @@ -217,11 +279,19 @@ Installing GNU CC from compiling GNU C. Please contact `mrs@cygnus.com' for more details. + `hppa*-*-*' + Using GAS is highly recommended for all HP-PA configurations. + See *Note PA Install:: for the special procedures needed to + compile GNU CC for the HP-PA. + `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.2.4' + Use this configuration for SCO release 3.2 version 4. + `i386-*-isc' It may be good idea to link with GNU malloc instead of the malloc that comes with the system. @@ -246,6 +316,13 @@ Installing GNU CC compiling part of `libgcc2.c'. GNU CC version 2 compiled with GNU CC (any version) seems not to have this problem. + `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. + `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 @@ -263,6 +340,16 @@ Installing GNU CC debugger. Also, you must fix a kernel bug. Details in the file `README.ALTOS'. + `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 `--gas' to the configure script or + use GNU assembler with dbx-in-coff encapsulation by providing + `--gas --stabs'. For any problem with native assembler or for + availability of the DPX/2 port of GAS, contact + `F.Pierresteguy@frcl.bull.fr'. + `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 @@ -367,6 +454,16 @@ Installing GNU CC using the `-g' switch. Note that `Makefile.in' uses `-g' by default when compiling `libgcc2.c'. + The PowerPC and POWER2 architectures are now supported, but + have not been extensively tested due to lack of appropriate + systems. Only AIX is supported on the PowerPC. + + Objective C does not work on this architecture. + + XLC version 1.3.0.0 will miscompile `jump.c'. XLC version + 1.3.0.1 or later fixes this problem. We do not yet have a + PTF number for this fix. + `vax-dec-ultrix' Don't try compiling with Vax C (`vcc'). It produces incorrect code in some cases (for example, when `alloca' is @@ -433,6 +530,9 @@ Installing GNU CC `/usr/local/include'. (This is for systems that have different conventions for where to put site-specific things.) + Unless you have a convention other than `/usr/local' for + site-specific files, it is a bad idea to specify `--local-prefix'. + 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 @@ -441,7 +541,18 @@ Installing GNU CC Bison versions older than Sept 8, 1988 will produce incorrect output for `c-parse.c'. - 7. 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 @@ -475,10 +586,10 @@ Installing GNU CC `gcc' in the current directory before all of the compiler components have been built. - 8. If you are building a cross-compiler, stop here. *Note + 9. If you are building a cross-compiler, stop here. *Note Cross-Compiler::. - 9. 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 @@ -487,7 +598,7 @@ Installing GNU CC installation is complete, you may wish to delete these files with `rm -r stage1'. - 10. If you have chosen a configuration for GNU CC which requires other + 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 @@ -498,7 +609,7 @@ Installing GNU CC the `PATH' environment variable such that the necessary GNU tools come before the standard system tools. - 11. Recompile the compiler with itself, with this command: + 12. Recompile the compiler with itself, with this command: make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O" @@ -525,7 +636,7 @@ Installing GNU CC make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O -msoft-float" - 12. If you wish to test the compiler by compiling it with itself one + 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: @@ -542,9 +653,14 @@ Installing GNU CC as described above. Then compare the latest object files with the stage 2 object - files--they ought to be identical, unless they contain time stamps. - You can compare the files, disregarding the time stamps if any, - like this: + 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 probably on all systems that use ELF object + file format. Some other systems where this is so are listed below. + + Use this command to compare the files: make compare @@ -564,13 +680,19 @@ 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. - The Alpha stores file names in the object files and `make compare' - does not know how to ignore them, so normally you cannot compare - on the Alpha. However, if you use the `-save-temps' option when - compiling *both* stage 2 and stage 3, this causes the same file - names to be used in both stages; then you can do the comparison. + The Alpha stores file names of internal temporary files in the + object files and `make compare' does not know how to ignore them, + so normally you cannot compare on the Alpha. However, if you use + the `-save-temps' option when compiling *both* stage 2 and stage + 3, this causes the same file names to be used in both stages; then + you can do the comparison. + + 14. Build the Objective C library (if you have built the Objective C + compiler). Here is the command to do this: + + make objc-runtime CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" - 13. Install the compiler driver, the compiler's passes and run-time + 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 @@ -609,12 +731,12 @@ Installing GNU CC or 3, since they usually run faster than the ones compiled with some other compiler.) - 14. Install the Objective C library (if you have built the Objective C - compiler). Here is the command to do this: + 16. Install the Objective C library (if you are installing the + Objective C compiler). Here is the command to do this: make install-libobjc CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" - 15. If you're going to use C++, it's likely that you need to also + 17. 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 @@ -671,13 +793,19 @@ 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 currently 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 has not + really been addressed yet. Since GNU CC generates assembler code, you probably need a cross-assembler that GNU CC can run, in order to produce object files. @@ -685,6 +813,34 @@ 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 configurations, the host and the target. Use the `--host=HOST' option for the host and @@ -694,35 +850,204 @@ system and produces code for an HP 68030 configure --target=m68k-hp-bsd4.3 --host=i386-bozotheclone-bsd4.3 - Next you should install the cross-assembler and cross-linker (and -`ar' and `ranlib'). Put them in the directory `/usr/local/TARGET/bin'. -The installation of GNU CC will find them there and copy or link them -to the proper place to find them when you run the cross-compiler later. - - If you want to install any additional libraries to use with the -cross-compiler, put them in the directory `/usr/local/TARGET/lib'; all -files in that subdirectory will be installed in the proper place when -you install the cross-compiler. Likewise, put the header files for the -target machine in `/usr/local/TARGET/include'. - - You must now produce a substitute for `libgcc1.a'. Normally this -file is compiled with the "native compiler" for the target machine; -compiling it with GNU CC does not work. But compiling it with the host -machine's compiler also doesn't work--that produces a file that would -run on the host, and you need it to run on the target. - - We can't give you any automatic way to produce this substitute. For -some targets, the subroutines in `libgcc1.c' are not actually used. -You need not provide the ones that won't be used. The ones that most -commonly are used are the multiplication, division and remainder -routines--many RISC machines rely on the library for this. One way to -make them work is to define the appropriate `perform_...' macros for -the subroutines that you need. If these definitions do not use the C -arithmetic operators that they are meant to implement, you might be -able to compile them with the cross-compiler you are building. To do -this, specify `LIBGCC1=libgcc1.a OLDCC=./xgcc' when building the +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. + + 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 @@ -732,13 +1057,14 @@ compile and link a test program called ` in the linking, it means that not all of the necessary routines in `libgcc1.a' are available. - When you are using a cross-compiler configuration, building stage 1 -does not compile all of GNU CC. This is because one part of building, -the compilation of `libgcc2.c', requires use of the cross-compiler. - - However, when you type `make install' to install the bulk of the -cross-compiler, that will also compile `libgcc2.c' and install the -resulting `libgcc.a'. + If you are making a cross-compiler for an embedded system, and there +is no `stdio.h' header for it, then the compilation of `enquire' will +probably fail. 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 @@ -750,6 +1076,8 @@ 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. + To install the cross-compiler, use `make install', as usual. + Installing on the HP Precision Architecture =========================================== @@ -800,9 +1128,8 @@ the errors look like this: - lookahead = ARGW1=FR You can check the version of HP-UX you are running by executing the -command `uname -r'. If you are indeed running HP-UX 8.02 on a 1.1 -machine and using the HP assembler then configure GCC with -"hp700-hpux8.02". +command `uname -r'. If you are indeed running HP-UX 8.02 on a PA and +using the HP assembler then configure GCC with "hpNNN-hpux8.02". Installing GNU CC on the Sun ============================ @@ -816,6 +1143,16 @@ you compile `libgcc.a'. If this option with a special startup file and would not link properly without special pains. + The GNU compiler does not really support the Super SPARC processor +that is used in SPARC Station 10 and similar class machines. You can +get code that runs by specifying `sparc' as the cpu type; however, its +performance is not very good, and may vary widely according to the +compiler version and optimization options used. This is because the +instruction scheduling parameters designed for the Sparc are not correct +for the Super SPARC. Implementing scheduling parameters for the Super +SPARC might be a good project for someone who is willing to learn a +great deal about instruction scheduling in GNU CC. + There is a bug in `alloca' in certain versions of the Sun library. To avoid this bug, install the binaries of GNU CC that were compiled by GNU CC. They use `alloca' as a built-in function and never the one in @@ -1113,7 +1450,7 @@ compiler to compile `stmt.c'. Here is h mv /lib/cpp /lib/cpp.att cp cpp /lib/cpp.gnu - echo "/lib/cpp.gnu -traditional $*" > /lib/cpp + 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 @@ -1232,7 +1569,7 @@ find the *real* `ld', it tries the follo `gcc' searches for passes of the compiler. This includes directories that you specify with `-B'. - Cross compilers search a little differently: + Cross-compilers search a little differently: * `gld' in the compiler's search directories. @@ -1265,3 +1602,31 @@ directories searched, and straighten out (In a future version, we will probably change `collect2' to avoid any reinvocation of a file from which any parent `collect2' was run.) +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. +