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