[8833] | 1 | @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. |
---|
| 2 | @c This is part of the GCC manual. |
---|
| 3 | @c For copying conditions, see the file gcc.texi. |
---|
| 4 | |
---|
| 5 | @c The text of this file appears in the file INSTALL |
---|
| 6 | @c in the GCC distribution, as well as in the GCC manual. |
---|
| 7 | |
---|
| 8 | @ifclear INSTALLONLY |
---|
| 9 | @node Installation |
---|
| 10 | @chapter Installing GNU CC |
---|
| 11 | @end ifclear |
---|
| 12 | @cindex installing GNU CC |
---|
| 13 | |
---|
| 14 | @menu |
---|
| 15 | * Configurations:: Configurations Supported by GNU CC. |
---|
| 16 | * Other Dir:: Compiling in a separate directory (not where the source is). |
---|
| 17 | * Cross-Compiler:: Building and installing a cross-compiler. |
---|
| 18 | * Sun Install:: See below for installation on the Sun. |
---|
| 19 | * VMS Install:: See below for installation on VMS. |
---|
| 20 | * Collect2:: How @code{collect2} works; how it finds @code{ld}. |
---|
| 21 | * Header Dirs:: Understanding the standard header file directories. |
---|
| 22 | @end menu |
---|
| 23 | |
---|
| 24 | Here is the procedure for installing GNU CC on a Unix system. See |
---|
| 25 | @ref{VMS Install}, for VMS systems. In this section we assume you |
---|
| 26 | compile in the same directory that contains the source files; see |
---|
| 27 | @ref{Other Dir}, to find out how to compile in a separate directory on Unix |
---|
| 28 | systems. |
---|
| 29 | |
---|
| 30 | You cannot install GNU C by itself on MSDOS; it will not compile under |
---|
| 31 | any MSDOS compiler except itself. You need to get the complete |
---|
| 32 | compilation package DJGPP, which includes binaries as well as sources, |
---|
| 33 | and includes all the necessary compilation tools and libraries. |
---|
| 34 | |
---|
| 35 | @enumerate |
---|
| 36 | @item |
---|
| 37 | If you have built GNU CC previously in the same directory for a |
---|
| 38 | different target machine, do @samp{make distclean} to delete all files |
---|
| 39 | that might be invalid. One of the files this deletes is |
---|
| 40 | @file{Makefile}; if @samp{make distclean} complains that @file{Makefile} |
---|
| 41 | does not exist, it probably means that the directory is already suitably |
---|
| 42 | clean. |
---|
| 43 | |
---|
| 44 | @item |
---|
| 45 | On a System V release 4 system, make sure @file{/usr/bin} precedes |
---|
| 46 | @file{/usr/ucb} in @code{PATH}. The @code{cc} command in |
---|
| 47 | @file{/usr/ucb} uses libraries which have bugs. |
---|
| 48 | |
---|
| 49 | @item |
---|
| 50 | Specify the host, build and target machine configurations. You do this |
---|
| 51 | by running the file @file{configure}. |
---|
| 52 | |
---|
| 53 | The @dfn{build} machine is the system which you are using, the |
---|
| 54 | @dfn{host} machine is the system where you want to run the resulting |
---|
| 55 | compiler (normally the build machine), and the @dfn{target} machine is |
---|
| 56 | the system for which you want the compiler to generate code. |
---|
| 57 | |
---|
| 58 | If you are building a compiler to produce code for the machine it runs |
---|
| 59 | on (a native compiler), you normally do not need to specify any operands |
---|
| 60 | to @file{configure}; it will try to guess the type of machine you are on |
---|
| 61 | and use that as the build, host and target machines. So you don't need |
---|
| 62 | to specify a configuration when building a native compiler unless |
---|
| 63 | @file{configure} cannot figure out what your configuration is or guesses |
---|
| 64 | wrong. |
---|
| 65 | |
---|
| 66 | In those cases, specify the build machine's @dfn{configuration name} |
---|
| 67 | with the @samp{--build} option; the host and target will default to be |
---|
| 68 | the same as the build machine. (If you are building a cross-compiler, |
---|
| 69 | see @ref{Cross-Compiler}.) |
---|
| 70 | |
---|
| 71 | Here is an example: |
---|
| 72 | |
---|
| 73 | @smallexample |
---|
| 74 | ./configure --build=sparc-sun-sunos4.1 |
---|
| 75 | @end smallexample |
---|
| 76 | |
---|
| 77 | A configuration name may be canonical or it may be more or less |
---|
| 78 | abbreviated. |
---|
| 79 | |
---|
| 80 | A canonical configuration name has three parts, separated by dashes. |
---|
| 81 | It looks like this: @samp{@var{cpu}-@var{company}-@var{system}}. |
---|
| 82 | (The three parts may themselves contain dashes; @file{configure} |
---|
| 83 | can figure out which dashes serve which purpose.) For example, |
---|
| 84 | @samp{m68k-sun-sunos4.1} specifies a Sun 3. |
---|
| 85 | |
---|
| 86 | You can also replace parts of the configuration by nicknames or aliases. |
---|
| 87 | For example, @samp{sun3} stands for @samp{m68k-sun}, so |
---|
| 88 | @samp{sun3-sunos4.1} is another way to specify a Sun 3. You can also |
---|
| 89 | use simply @samp{sun3-sunos}, since the version of SunOS is assumed by |
---|
| 90 | default to be version 4. @samp{sun3-bsd} also works, since |
---|
| 91 | @file{configure} knows that the only BSD variant on a Sun 3 is SunOS. |
---|
| 92 | |
---|
| 93 | You can specify a version number after any of the system types, and some |
---|
| 94 | of the CPU types. In most cases, the version is irrelevant, and will be |
---|
| 95 | ignored. So you might as well specify the version if you know it. |
---|
| 96 | |
---|
| 97 | See @ref{Configurations}, for a list of supported configuration names and |
---|
| 98 | notes on many of the configurations. You should check the notes in that |
---|
| 99 | section before proceeding any further with the installation of GNU CC. |
---|
| 100 | |
---|
| 101 | There are four additional options you can specify independently to |
---|
| 102 | describe variant hardware and software configurations. These are |
---|
| 103 | @samp{--with-gnu-as}, @samp{--with-gnu-ld}, @samp{--with-stabs} and |
---|
| 104 | @samp{--nfp}. |
---|
| 105 | |
---|
| 106 | @table @samp |
---|
| 107 | @item --with-gnu-as |
---|
| 108 | If you will use GNU CC with the GNU assembler (GAS), you should declare |
---|
| 109 | this by using the @samp{--with-gnu-as} option when you run |
---|
| 110 | @file{configure}. |
---|
| 111 | |
---|
| 112 | Using this option does not install GAS. It only modifies the output of |
---|
| 113 | GNU CC to work with GAS. Building and installing GAS is up to you. |
---|
| 114 | |
---|
| 115 | Conversely, if you @emph{do not} wish to use GAS and do not specify |
---|
| 116 | @samp{--with-gnu-as} when building GNU CC, it is up to you to make sure |
---|
| 117 | that GAS is not installed. GNU CC searches for a program named |
---|
| 118 | @code{as} in various directories; if the program it finds is GAS, then |
---|
| 119 | it runs GAS. If you are not sure where GNU CC finds the assembler it is |
---|
| 120 | using, try specifying @samp{-v} when you run it. |
---|
| 121 | |
---|
| 122 | The systems where it makes a difference whether you use GAS are@* |
---|
| 123 | @samp{hppa1.0-@var{any}-@var{any}}, @samp{hppa1.1-@var{any}-@var{any}}, |
---|
| 124 | @samp{i386-@var{any}-sysv}, @samp{i386-@var{any}-isc},@* |
---|
| 125 | @samp{i860-@var{any}-bsd}, @samp{m68k-bull-sysv}, @samp{m68k-hp-hpux}, |
---|
| 126 | @samp{m68k-sony-bsd},@* |
---|
| 127 | @samp{m68k-altos-sysv}, @samp{m68000-hp-hpux}, @samp{m68000-att-sysv}, |
---|
| 128 | @samp{@var{any}-lynx-lynxos}, and @samp{mips-@var{any}}). |
---|
| 129 | On any other system, @samp{--with-gnu-as} has no effect. |
---|
| 130 | |
---|
| 131 | On the systems listed above (except for the HP-PA, for ISC on the |
---|
| 132 | 386, and for @samp{mips-sgi-irix5.*}), if you use GAS, you should also |
---|
| 133 | use the GNU linker (and specify @samp{--with-gnu-ld}). |
---|
| 134 | |
---|
| 135 | @item --with-gnu-ld |
---|
| 136 | Specify the option @samp{--with-gnu-ld} if you plan to use the GNU |
---|
| 137 | linker with GNU CC. |
---|
| 138 | |
---|
| 139 | This option does not cause the GNU linker to be installed; it just |
---|
| 140 | modifies the behavior of GNU CC to work with the GNU linker. |
---|
| 141 | Specifically, it inhibits the installation of @code{collect2}, a program |
---|
| 142 | which otherwise serves as a front-end for the system's linker on most |
---|
| 143 | configurations. |
---|
| 144 | |
---|
| 145 | @item --with-stabs |
---|
| 146 | On MIPS based systems and on Alphas, you must specify whether you want |
---|
| 147 | GNU CC to create the normal ECOFF debugging format, or to use BSD-style |
---|
| 148 | stabs passed through the ECOFF symbol table. The normal ECOFF debug |
---|
| 149 | format cannot fully handle languages other than C. BSD stabs format can |
---|
| 150 | handle other languages, but it only works with the GNU debugger GDB. |
---|
| 151 | |
---|
| 152 | Normally, GNU CC uses the ECOFF debugging format by default; if you |
---|
| 153 | prefer BSD stabs, specify @samp{--with-stabs} when you configure GNU |
---|
| 154 | CC. |
---|
| 155 | |
---|
| 156 | No matter which default you choose when you configure GNU CC, the user |
---|
| 157 | can use the @samp{-gcoff} and @samp{-gstabs+} options to specify explicitly |
---|
| 158 | the debug format for a particular compilation. |
---|
| 159 | |
---|
| 160 | @samp{--with-stabs} is meaningful on the ISC system on the 386, also, if |
---|
| 161 | @samp{--with-gas} is used. It selects use of stabs debugging |
---|
| 162 | information embedded in COFF output. This kind of debugging information |
---|
| 163 | supports C++ well; ordinary COFF debugging information does not. |
---|
| 164 | |
---|
| 165 | @samp{--with-stabs} is also meaningful on 386 systems running SVR4. It |
---|
| 166 | selects use of stabs debugging information embedded in ELF output. The |
---|
| 167 | C++ compiler currently (2.6.0) does not support the DWARF debugging |
---|
| 168 | information normally used on 386 SVR4 platforms; stabs provide a |
---|
| 169 | workable alternative. This requires gas and gdb, as the normal SVR4 |
---|
| 170 | tools can not generate or interpret stabs. |
---|
| 171 | |
---|
| 172 | @item --nfp |
---|
| 173 | On certain systems, you must specify whether the machine has a floating |
---|
| 174 | point unit. These systems include @samp{m68k-sun-sunos@var{n}} and |
---|
| 175 | @samp{m68k-isi-bsd}. On any other system, @samp{--nfp} currently has no |
---|
| 176 | effect, though perhaps there are other systems where it could usefully |
---|
| 177 | make a difference. |
---|
| 178 | @end table |
---|
| 179 | |
---|
| 180 | The @file{configure} script searches subdirectories of the source |
---|
| 181 | directory for other compilers that are to be integrated into GNU CC. |
---|
| 182 | The GNU compiler for C++, called G++ is in a subdirectory named |
---|
| 183 | @file{cp}. @file{configure} inserts rules into @file{Makefile} to build |
---|
| 184 | all of those compilers. |
---|
| 185 | |
---|
| 186 | Here we spell out what files will be set up by @code{configure}. Normally |
---|
| 187 | you need not be concerned with these files. |
---|
| 188 | |
---|
| 189 | @itemize @bullet |
---|
| 190 | @item |
---|
| 191 | @ifset INTERNALS |
---|
| 192 | A file named @file{config.h} is created that contains a @samp{#include} |
---|
| 193 | of the top-level config file for the machine you will run the compiler |
---|
| 194 | on (@pxref{Config}). This file is responsible for defining information |
---|
| 195 | about the host machine. It includes @file{tm.h}. |
---|
| 196 | @end ifset |
---|
| 197 | @ifclear INTERNALS |
---|
| 198 | A file named @file{config.h} is created that contains a @samp{#include} |
---|
| 199 | of the top-level config file for the machine you will run the compiler |
---|
| 200 | on (@pxref{Config,,The Configuration File, gcc.info, Using and Porting |
---|
| 201 | GCC}). This file is responsible for defining information about the host |
---|
| 202 | machine. It includes @file{tm.h}. |
---|
| 203 | @end ifclear |
---|
| 204 | |
---|
| 205 | The top-level config file is located in the subdirectory @file{config}. |
---|
| 206 | Its name is always @file{xm-@var{something}.h}; usually |
---|
| 207 | @file{xm-@var{machine}.h}, but there are some exceptions. |
---|
| 208 | |
---|
| 209 | If your system does not support symbolic links, you might want to |
---|
| 210 | set up @file{config.h} to contain a @samp{#include} command which |
---|
| 211 | refers to the appropriate file. |
---|
| 212 | |
---|
| 213 | @item |
---|
| 214 | A file named @file{tconfig.h} is created which includes the top-level config |
---|
| 215 | file for your target machine. This is used for compiling certain |
---|
| 216 | programs to run on that machine. |
---|
| 217 | |
---|
| 218 | @item |
---|
| 219 | A file named @file{tm.h} is created which includes the |
---|
| 220 | machine-description macro file for your target machine. It should be in |
---|
| 221 | the subdirectory @file{config} and its name is often |
---|
| 222 | @file{@var{machine}.h}. |
---|
| 223 | |
---|
| 224 | @item |
---|
| 225 | The command file @file{configure} also constructs the file |
---|
| 226 | @file{Makefile} by adding some text to the template file |
---|
| 227 | @file{Makefile.in}. The additional text comes from files in the |
---|
| 228 | @file{config} directory, named @file{t-@var{target}} and |
---|
| 229 | @file{x-@var{host}}. If these files do not exist, it means nothing |
---|
| 230 | needs to be added for a given target or host. |
---|
| 231 | @end itemize |
---|
| 232 | |
---|
| 233 | @item |
---|
| 234 | The standard directory for installing GNU CC is @file{/usr/local/lib}. |
---|
| 235 | If you want to install its files somewhere else, specify |
---|
| 236 | @samp{--prefix=@var{dir}} when you run @file{configure}. Here @var{dir} |
---|
| 237 | is a directory name to use instead of @file{/usr/local} for all purposes |
---|
| 238 | with one exception: the directory @file{/usr/local/include} is searched |
---|
| 239 | for header files no matter where you install the compiler. To override |
---|
| 240 | this name, use the @code{--local-prefix} option below. |
---|
| 241 | |
---|
| 242 | @item |
---|
| 243 | Specify @samp{--local-prefix=@var{dir}} if you want the compiler to |
---|
| 244 | search directory @file{@var{dir}/include} for locally installed header |
---|
| 245 | files @emph{instead} of @file{/usr/local/include}. |
---|
| 246 | |
---|
| 247 | You should specify @samp{--local-prefix} @strong{only} if your site has |
---|
| 248 | a different convention (not @file{/usr/local}) for where to put |
---|
| 249 | site-specific files. |
---|
| 250 | |
---|
| 251 | @strong{Do not} specify @file{/usr} as the @samp{--local-prefix}! The |
---|
| 252 | directory you use for @samp{--local-prefix} @strong{must not} contain |
---|
| 253 | any of the system's standard header files. If it did contain them, |
---|
| 254 | certain programs would be miscompiled (including GNU Emacs, on certain |
---|
| 255 | targets), because this would override and nullify the header file |
---|
| 256 | corrections made by the @code{fixincludes} script. |
---|
| 257 | |
---|
| 258 | @cindex Bison parser generator |
---|
| 259 | @cindex parser generator, Bison |
---|
| 260 | @item |
---|
| 261 | Make sure the Bison parser generator is installed. (This is |
---|
| 262 | unnecessary if the Bison output files @file{c-parse.c} and |
---|
| 263 | @file{cexp.c} are more recent than @file{c-parse.y} and @file{cexp.y} |
---|
| 264 | and you do not plan to change the @samp{.y} files.) |
---|
| 265 | |
---|
| 266 | Bison versions older than Sept 8, 1988 will produce incorrect output |
---|
| 267 | for @file{c-parse.c}. |
---|
| 268 | |
---|
| 269 | @item |
---|
| 270 | If you have chosen a configuration for GNU CC which requires other GNU |
---|
| 271 | tools (such as GAS or the GNU linker) instead of the standard system |
---|
| 272 | tools, install the required tools in the build directory under the names |
---|
| 273 | @file{as}, @file{ld} or whatever is appropriate. This will enable the |
---|
| 274 | compiler to find the proper tools for compilation of the program |
---|
| 275 | @file{enquire}. |
---|
| 276 | |
---|
| 277 | Alternatively, you can do subsequent compilation using a value of the |
---|
| 278 | @code{PATH} environment variable such that the necessary GNU tools come |
---|
| 279 | before the standard system tools. |
---|
| 280 | |
---|
| 281 | @item |
---|
| 282 | Build the compiler. Just type @samp{make LANGUAGES=c} in the compiler |
---|
| 283 | directory. |
---|
| 284 | |
---|
| 285 | @samp{LANGUAGES=c} specifies that only the C compiler should be |
---|
| 286 | compiled. The makefile normally builds compilers for all the supported |
---|
| 287 | languages; currently, C, C++ and Objective C. However, C is the only |
---|
| 288 | language that is sure to work when you build with other non-GNU C |
---|
| 289 | compilers. In addition, building anything but C at this stage is a |
---|
| 290 | waste of time. |
---|
| 291 | |
---|
| 292 | In general, you can specify the languages to build by typing the |
---|
| 293 | argument @samp{LANGUAGES="@var{list}"}, where @var{list} is one or more |
---|
| 294 | words from the list @samp{c}, @samp{c++}, and @samp{objective-c}. If |
---|
| 295 | you have any additional GNU compilers as subdirectories of the GNU CC |
---|
| 296 | source directory, you may also specify their names in this list. |
---|
| 297 | |
---|
| 298 | Ignore any warnings you may see about ``statement not reached'' in |
---|
| 299 | @file{insn-emit.c}; they are normal. Also, warnings about ``unknown |
---|
| 300 | escape sequence'' are normal in @file{genopinit.c} and perhaps some |
---|
| 301 | other files. Likewise, you should ignore warnings about ``constant is |
---|
| 302 | so large that it is unsigned'' in @file{insn-emit.c} and |
---|
| 303 | @file{insn-recog.c} and a warning about a comparison always being zero |
---|
| 304 | in @file{enquire.o}. Any other compilation errors may represent bugs in |
---|
| 305 | the port to your machine or operating system, and |
---|
| 306 | @ifclear INSTALLONLY |
---|
| 307 | should be investigated and reported (@pxref{Bugs}). |
---|
| 308 | @end ifclear |
---|
| 309 | @ifset INSTALLONLY |
---|
| 310 | should be investigated and reported. |
---|
| 311 | @end ifset |
---|
| 312 | |
---|
| 313 | Some commercial compilers fail to compile GNU CC because they have bugs |
---|
| 314 | or limitations. For example, the Microsoft compiler is said to run out |
---|
| 315 | of macro space. Some Ultrix compilers run out of expression space; then |
---|
| 316 | you need to break up the statement where the problem happens. |
---|
| 317 | |
---|
| 318 | @item |
---|
| 319 | If you are building a cross-compiler, stop here. @xref{Cross-Compiler}. |
---|
| 320 | |
---|
| 321 | @cindex stage1 |
---|
| 322 | @item |
---|
| 323 | Move the first-stage object files and executables into a subdirectory |
---|
| 324 | with this command: |
---|
| 325 | |
---|
| 326 | @smallexample |
---|
| 327 | make stage1 |
---|
| 328 | @end smallexample |
---|
| 329 | |
---|
| 330 | The files are moved into a subdirectory named @file{stage1}. |
---|
| 331 | Once installation is complete, you may wish to delete these files |
---|
| 332 | with @code{rm -r stage1}. |
---|
| 333 | |
---|
| 334 | @item |
---|
| 335 | If you have chosen a configuration for GNU CC which requires other GNU |
---|
| 336 | tools (such as GAS or the GNU linker) instead of the standard system |
---|
| 337 | tools, install the required tools in the @file{stage1} subdirectory |
---|
| 338 | under the names @file{as}, @file{ld} or whatever is appropriate. This |
---|
| 339 | will enable the stage 1 compiler to find the proper tools in the |
---|
| 340 | following stage. |
---|
| 341 | |
---|
| 342 | Alternatively, you can do subsequent compilation using a value of the |
---|
| 343 | @code{PATH} environment variable such that the necessary GNU tools come |
---|
| 344 | before the standard system tools. |
---|
| 345 | |
---|
| 346 | @item |
---|
| 347 | Recompile the compiler with itself, with this command: |
---|
| 348 | |
---|
| 349 | @smallexample |
---|
| 350 | make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2" |
---|
| 351 | @end smallexample |
---|
| 352 | |
---|
| 353 | This is called making the stage 2 compiler. |
---|
| 354 | |
---|
| 355 | The command shown above builds compilers for all the supported |
---|
| 356 | languages. If you don't want them all, you can specify the languages to |
---|
| 357 | build by typing the argument @samp{LANGUAGES="@var{list}"}. @var{list} |
---|
| 358 | should contain one or more words from the list @samp{c}, @samp{c++}, |
---|
| 359 | @samp{objective-c}, and @samp{proto}. Separate the words with spaces. |
---|
| 360 | @samp{proto} stands for the programs @code{protoize} and |
---|
| 361 | @code{unprotoize}; they are not a separate language, but you use |
---|
| 362 | @code{LANGUAGES} to enable or disable their installation. |
---|
| 363 | |
---|
| 364 | If you are going to build the stage 3 compiler, then you might want to |
---|
| 365 | build only the C language in stage 2. |
---|
| 366 | |
---|
| 367 | Once you have built the stage 2 compiler, if you are short of disk |
---|
| 368 | space, you can delete the subdirectory @file{stage1}. |
---|
| 369 | |
---|
| 370 | On a 68000 or 68020 system lacking floating point hardware, |
---|
| 371 | unless you have selected a @file{tm.h} file that expects by default |
---|
| 372 | that there is no such hardware, do this instead: |
---|
| 373 | |
---|
| 374 | @smallexample |
---|
| 375 | make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2 -msoft-float" |
---|
| 376 | @end smallexample |
---|
| 377 | |
---|
| 378 | @item |
---|
| 379 | If you wish to test the compiler by compiling it with itself one more |
---|
| 380 | time, install any other necessary GNU tools (such as GAS or the GNU |
---|
| 381 | linker) in the @file{stage2} subdirectory as you did in the |
---|
| 382 | @file{stage1} subdirectory, then do this: |
---|
| 383 | |
---|
| 384 | @smallexample |
---|
| 385 | make stage2 |
---|
| 386 | make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2" |
---|
| 387 | @end smallexample |
---|
| 388 | |
---|
| 389 | @noindent |
---|
| 390 | This is called making the stage 3 compiler. Aside from the @samp{-B} |
---|
| 391 | option, the compiler options should be the same as when you made the |
---|
| 392 | stage 2 compiler. But the @code{LANGUAGES} option need not be the |
---|
| 393 | same. The command shown above builds compilers for all the supported |
---|
| 394 | languages; if you don't want them all, you can specify the languages to |
---|
| 395 | build by typing the argument @samp{LANGUAGES="@var{list}"}, as described |
---|
| 396 | above. |
---|
| 397 | |
---|
| 398 | If you do not have to install any additional GNU tools, you may use the |
---|
| 399 | command |
---|
| 400 | |
---|
| 401 | @smallexample |
---|
| 402 | make bootstrap LANGUAGES=@var{language-list} BOOT_CFLAGS=@var{option-list} |
---|
| 403 | @end smallexample |
---|
| 404 | |
---|
| 405 | @noindent |
---|
| 406 | instead of making @file{stage1}, @file{stage2}, and performing |
---|
| 407 | the two compiler builds. |
---|
| 408 | |
---|
| 409 | @item |
---|
| 410 | Then compare the latest object files with the stage 2 object |
---|
| 411 | files---they ought to be identical, aside from time stamps (if any). |
---|
| 412 | |
---|
| 413 | On some systems, meaningful comparison of object files is impossible; |
---|
| 414 | they always appear ``different.'' This is currently true on Solaris and |
---|
| 415 | some systems that use ELF object file format. On some versions of Irix |
---|
| 416 | on SGI machines and DEC Unix (OSF/1) on Alpha systems, you will not be |
---|
| 417 | able to compare the files without specifying @file{-save-temps}; see the |
---|
| 418 | description of individual systems above to see if you get comparison |
---|
| 419 | failures. You may have similar problems on other systems. |
---|
| 420 | |
---|
| 421 | Use this command to compare the files: |
---|
| 422 | |
---|
| 423 | @smallexample |
---|
| 424 | make compare |
---|
| 425 | @end smallexample |
---|
| 426 | |
---|
| 427 | This will mention any object files that differ between stage 2 and stage |
---|
| 428 | 3. Any difference, no matter how innocuous, indicates that the stage 2 |
---|
| 429 | compiler has compiled GNU CC incorrectly, and is therefore a potentially |
---|
| 430 | @ifclear INSTALLONLY |
---|
| 431 | serious bug which you should investigate and report (@pxref{Bugs}). |
---|
| 432 | @end ifclear |
---|
| 433 | @ifset INSTALLONLY |
---|
| 434 | serious bug which you should investigate and report. |
---|
| 435 | @end ifset |
---|
| 436 | |
---|
| 437 | If your system does not put time stamps in the object files, then this |
---|
| 438 | is a faster way to compare them (using the Bourne shell): |
---|
| 439 | |
---|
| 440 | @smallexample |
---|
| 441 | for file in *.o; do |
---|
| 442 | cmp $file stage2/$file |
---|
| 443 | done |
---|
| 444 | @end smallexample |
---|
| 445 | |
---|
| 446 | If you have built the compiler with the @samp{-mno-mips-tfile} option on |
---|
| 447 | MIPS machines, you will not be able to compare the files. |
---|
| 448 | |
---|
| 449 | @item |
---|
| 450 | Install the compiler driver, the compiler's passes and run-time support |
---|
| 451 | with @samp{make install}. Use the same value for @code{CC}, |
---|
| 452 | @code{CFLAGS} and @code{LANGUAGES} that you used when compiling the |
---|
| 453 | files that are being installed. One reason this is necessary is that |
---|
| 454 | some versions of Make have bugs and recompile files gratuitously when |
---|
| 455 | you do this step. If you use the same variable values, those files will |
---|
| 456 | be recompiled properly. |
---|
| 457 | |
---|
| 458 | For example, if you have built the stage 2 compiler, you can use the |
---|
| 459 | following command: |
---|
| 460 | |
---|
| 461 | @smallexample |
---|
| 462 | make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="@var{list}" |
---|
| 463 | @end smallexample |
---|
| 464 | |
---|
| 465 | @noindent |
---|
| 466 | This copies the files @file{cc1}, @file{cpp} and @file{libgcc.a} to |
---|
| 467 | files @file{cc1}, @file{cpp} and @file{libgcc.a} in the directory |
---|
| 468 | @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}, which is where |
---|
| 469 | the compiler driver program looks for them. Here @var{target} is the |
---|
| 470 | target machine type specified when you ran @file{configure}, and |
---|
| 471 | @var{version} is the version number of GNU CC. This naming scheme |
---|
| 472 | permits various versions and/or cross-compilers to coexist. |
---|
| 473 | |
---|
| 474 | This also copies the driver program @file{xgcc} into |
---|
| 475 | @file{/usr/local/bin/gcc}, so that it appears in typical execution |
---|
| 476 | search paths. |
---|
| 477 | |
---|
| 478 | On some systems, this command causes recompilation of some files. This |
---|
| 479 | is usually due to bugs in @code{make}. You should either ignore this |
---|
| 480 | problem, or use GNU Make. |
---|
| 481 | |
---|
| 482 | @cindex @code{alloca} and SunOs |
---|
| 483 | @strong{Warning: there is a bug in @code{alloca} in the Sun library. To |
---|
| 484 | avoid this bug, be sure to install the executables of GNU CC that were |
---|
| 485 | compiled by GNU CC. (That is, the executables from stage 2 or 3, not |
---|
| 486 | stage 1.) They use @code{alloca} as a built-in function and never the |
---|
| 487 | one in the library.} |
---|
| 488 | |
---|
| 489 | (It is usually better to install GNU CC executables from stage 2 or 3, |
---|
| 490 | since they usually run faster than the ones compiled with some other |
---|
| 491 | compiler.) |
---|
| 492 | |
---|
| 493 | @item |
---|
| 494 | If you're going to use C++, it's likely that you need to also install |
---|
| 495 | the libg++ distribution. It should be available from the same |
---|
| 496 | place where you got the GNU C distribution. Just as GNU C does not |
---|
| 497 | distribute a C runtime library, it also does not include a C++ run-time |
---|
| 498 | library. All I/O functionality, special class libraries, etc., are |
---|
| 499 | available in the libg++ distribution. |
---|
| 500 | @end enumerate |
---|
| 501 | |
---|
| 502 | @node Configurations |
---|
| 503 | @section Configurations Supported by GNU CC |
---|
| 504 | @cindex configurations supported by GNU CC |
---|
| 505 | |
---|
| 506 | Here are the possible CPU types: |
---|
| 507 | |
---|
| 508 | @quotation |
---|
| 509 | @c gmicro, alliant, spur and tahoe omitted since they don't work. |
---|
| 510 | 1750a, a29k, alpha, arm, c@var{n}, clipper, dsp16xx, elxsi, h8300, |
---|
| 511 | hppa1.0, hppa1.1, i370, i386, i486, i586, i860, i960, m68000, m68k, |
---|
| 512 | m88k, mips, mipsel, mips64, mips64el, ns32k, powerpc, powerpcle, |
---|
| 513 | pyramid, romp, rs6000, sh, sparc, sparclite, sparc64, vax, we32k. |
---|
| 514 | @end quotation |
---|
| 515 | |
---|
| 516 | Here are the recognized company names. As you can see, customary |
---|
| 517 | abbreviations are used rather than the longer official names. |
---|
| 518 | |
---|
| 519 | @c What should be done about merlin, tek*, dolphin? |
---|
| 520 | @quotation |
---|
| 521 | acorn, alliant, altos, apollo, att, bull, |
---|
| 522 | cbm, convergent, convex, crds, dec, dg, dolphin, |
---|
| 523 | elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi, |
---|
| 524 | mips, motorola, ncr, next, ns, omron, plexus, |
---|
| 525 | sequent, sgi, sony, sun, tti, unicom, wrs. |
---|
| 526 | @end quotation |
---|
| 527 | |
---|
| 528 | The company name is meaningful only to disambiguate when the rest of |
---|
| 529 | the information supplied is insufficient. You can omit it, writing |
---|
| 530 | just @samp{@var{cpu}-@var{system}}, if it is not needed. For example, |
---|
| 531 | @samp{vax-ultrix4.2} is equivalent to @samp{vax-dec-ultrix4.2}. |
---|
| 532 | |
---|
| 533 | Here is a list of system types: |
---|
| 534 | |
---|
| 535 | @quotation |
---|
| 536 | 386bsd, aix, acis, amigados, aos, aout, bosx, bsd, clix, coff, ctix, cxux, |
---|
| 537 | dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, gnu/linux, |
---|
| 538 | hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs, |
---|
| 539 | netbsd, newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco, sim, |
---|
| 540 | solaris, sunos, sym, sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta, |
---|
| 541 | vxworks, winnt, xenix. |
---|
| 542 | @end quotation |
---|
| 543 | |
---|
| 544 | @noindent |
---|
| 545 | You can omit the system type; then @file{configure} guesses the |
---|
| 546 | operating system from the CPU and company. |
---|
| 547 | |
---|
| 548 | You can add a version number to the system type; this may or may not |
---|
| 549 | make a difference. For example, you can write @samp{bsd4.3} or |
---|
| 550 | @samp{bsd4.4} to distinguish versions of BSD. In practice, the version |
---|
| 551 | number is most needed for @samp{sysv3} and @samp{sysv4}, which are often |
---|
| 552 | treated differently. |
---|
| 553 | |
---|
| 554 | If you specify an impossible combination such as @samp{i860-dg-vms}, |
---|
| 555 | then you may get an error message from @file{configure}, or it may |
---|
| 556 | ignore part of the information and do the best it can with the rest. |
---|
| 557 | @file{configure} always prints the canonical name for the alternative |
---|
| 558 | that it used. GNU CC does not support all possible alternatives. |
---|
| 559 | |
---|
| 560 | Often a particular model of machine has a name. Many machine names are |
---|
| 561 | recognized as aliases for CPU/company combinations. Thus, the machine |
---|
| 562 | name @samp{sun3}, mentioned above, is an alias for @samp{m68k-sun}. |
---|
| 563 | Sometimes we accept a company name as a machine name, when the name is |
---|
| 564 | popularly used for a particular machine. Here is a table of the known |
---|
| 565 | machine names: |
---|
| 566 | |
---|
| 567 | @quotation |
---|
| 568 | 3300, 3b1, 3b@var{n}, 7300, altos3068, altos, |
---|
| 569 | apollo68, att-7300, balance, |
---|
| 570 | convex-c@var{n}, crds, decstation-3100, |
---|
| 571 | decstation, delta, encore, |
---|
| 572 | fx2800, gmicro, hp7@var{nn}, hp8@var{nn}, |
---|
| 573 | hp9k2@var{nn}, hp9k3@var{nn}, hp9k7@var{nn}, |
---|
| 574 | hp9k8@var{nn}, iris4d, iris, isi68, |
---|
| 575 | m3230, magnum, merlin, miniframe, |
---|
| 576 | mmax, news-3600, news800, news, next, |
---|
| 577 | pbd, pc532, pmax, powerpc, powerpcle, ps2, risc-news, |
---|
| 578 | rtpc, sun2, sun386i, sun386, sun3, |
---|
| 579 | sun4, symmetry, tower-32, tower. |
---|
| 580 | @end quotation |
---|
| 581 | |
---|
| 582 | @noindent |
---|
| 583 | Remember that a machine name specifies both the cpu type and the company |
---|
| 584 | name. |
---|
| 585 | If you want to install your own homemade configuration files, you can |
---|
| 586 | use @samp{local} as the company name to access them. If you use |
---|
| 587 | configuration @samp{@var{cpu}-local}, the configuration name |
---|
| 588 | without the cpu prefix |
---|
| 589 | is used to form the configuration file names. |
---|
| 590 | |
---|
| 591 | Thus, if you specify @samp{m68k-local}, configuration uses |
---|
| 592 | files @file{m68k.md}, @file{local.h}, @file{m68k.c}, |
---|
| 593 | @file{xm-local.h}, @file{t-local}, and @file{x-local}, all in the |
---|
| 594 | directory @file{config/m68k}. |
---|
| 595 | |
---|
| 596 | Here is a list of configurations that have special treatment or special |
---|
| 597 | things you must know: |
---|
| 598 | |
---|
| 599 | @table @samp |
---|
| 600 | @item 1750a-*-* |
---|
| 601 | MIL-STD-1750A processors. |
---|
| 602 | |
---|
| 603 | Starting with GCC 2.6.1, the MIL-STD-1750A cross configuration no longer |
---|
| 604 | supports the Tektronix Assembler, but instead produces output for |
---|
| 605 | @code{as1750}, an assembler/linker available under the GNU Public |
---|
| 606 | License for the 1750A. Contact @emph{kellogg@@space.otn.dasa.de} for more |
---|
| 607 | details on obtaining @samp{as1750}. A similarly licensed simulator for |
---|
| 608 | the 1750A is available from same address. |
---|
| 609 | |
---|
| 610 | You should ignore a fatal error during the building of libgcc (libgcc is |
---|
| 611 | not yet implemented for the 1750A.) |
---|
| 612 | |
---|
| 613 | The @code{as1750} assembler requires the file @file{ms1750.inc}, which is |
---|
| 614 | found in the directory @file{config/1750a}. |
---|
| 615 | |
---|
| 616 | GNU CC produced the same sections as the Fairchild F9450 C Compiler, |
---|
| 617 | namely: |
---|
| 618 | |
---|
| 619 | @table @code |
---|
| 620 | @item Normal |
---|
| 621 | The program code section. |
---|
| 622 | |
---|
| 623 | @item Static |
---|
| 624 | The read/write (RAM) data section. |
---|
| 625 | |
---|
| 626 | @item Konst |
---|
| 627 | The read-only (ROM) constants section. |
---|
| 628 | |
---|
| 629 | @item Init |
---|
| 630 | Initialization section (code to copy KREL to SREL). |
---|
| 631 | @end table |
---|
| 632 | |
---|
| 633 | The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16). This |
---|
| 634 | means that type `char' is represented with a 16-bit word per character. |
---|
| 635 | The 1750A's "Load/Store Upper/Lower Byte" instructions are not used by |
---|
| 636 | GNU CC. |
---|
| 637 | |
---|
| 638 | @item alpha-*-osf1 |
---|
| 639 | Systems using processors that implement the DEC Alpha architecture and |
---|
| 640 | are running the DEC Unix (OSF/1) operating system, for example the DEC |
---|
| 641 | Alpha AXP systems. (VMS on the Alpha is not currently supported by GNU |
---|
| 642 | CC.) |
---|
| 643 | |
---|
| 644 | GNU CC writes a @samp{.verstamp} directive to the assembler output file |
---|
| 645 | unless it is built as a cross-compiler. It gets the version to use from |
---|
| 646 | the system header file @file{/usr/include/stamp.h}. If you install a |
---|
| 647 | new version of DEC Unix, you should rebuild GCC to pick up the new version |
---|
| 648 | stamp. |
---|
| 649 | |
---|
| 650 | Note that since the Alpha is a 64-bit architecture, cross-compilers from |
---|
| 651 | 32-bit machines will not generate code as efficient as that generated |
---|
| 652 | when the compiler is running on a 64-bit machine because many |
---|
| 653 | optimizations that depend on being able to represent a word on the |
---|
| 654 | target in an integral value on the host cannot be performed. Building |
---|
| 655 | cross-compilers on the Alpha for 32-bit machines has only been tested in |
---|
| 656 | a few cases and may not work properly. |
---|
| 657 | |
---|
| 658 | @code{make compare} may fail on old versions of DEC Unix unless you add |
---|
| 659 | @samp{-save-temps} to @code{CFLAGS}. On these systems, the name of the |
---|
| 660 | assembler input file is stored in the object file, and that makes |
---|
| 661 | comparison fail if it differs between the @code{stage1} and |
---|
| 662 | @code{stage2} compilations. The option @samp{-save-temps} forces a |
---|
| 663 | fixed name to be used for the assembler input file, instead of a |
---|
| 664 | randomly chosen name in @file{/tmp}. Do not add @samp{-save-temps} |
---|
| 665 | unless the comparisons fail without that option. If you add |
---|
| 666 | @samp{-save-temps}, you will have to manually delete the @samp{.i} and |
---|
| 667 | @samp{.s} files after each series of compilations. |
---|
| 668 | |
---|
| 669 | GNU CC now supports both the native (ECOFF) debugging format used by DBX |
---|
| 670 | and GDB and an encapsulated STABS format for use only with GDB. See the |
---|
| 671 | discussion of the @samp{--with-stabs} option of @file{configure} above |
---|
| 672 | for more information on these formats and how to select them. |
---|
| 673 | |
---|
| 674 | There is a bug in DEC's assembler that produces incorrect line numbers |
---|
| 675 | for ECOFF format when the @samp{.align} directive is used. To work |
---|
| 676 | around this problem, GNU CC will not emit such alignment directives |
---|
| 677 | while writing ECOFF format debugging information even if optimization is |
---|
| 678 | being performed. Unfortunately, this has the very undesirable |
---|
| 679 | side-effect that code addresses when @samp{-O} is specified are |
---|
| 680 | different depending on whether or not @samp{-g} is also specified. |
---|
| 681 | |
---|
| 682 | To avoid this behavior, specify @samp{-gstabs+} and use GDB instead of |
---|
| 683 | DBX. DEC is now aware of this problem with the assembler and hopes to |
---|
| 684 | provide a fix shortly. |
---|
| 685 | |
---|
| 686 | @item arm |
---|
| 687 | Advanced RISC Machines ARM-family processors. These are often used in |
---|
| 688 | embedded applications. There are no standard Unix configurations. |
---|
| 689 | This configuration corresponds to the basic instruction sequences and will |
---|
| 690 | produce a.out format object modules. |
---|
| 691 | |
---|
| 692 | You may need to make a variant of the file @file{arm.h} for your particular |
---|
| 693 | configuration. |
---|
| 694 | |
---|
| 695 | @item arm-*-riscix |
---|
| 696 | The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix. If |
---|
| 697 | you are running a version of RISC iX prior to 1.2 then you must specify |
---|
| 698 | the version number during configuration. Note that the assembler |
---|
| 699 | shipped with RISC iX does not support stabs debugging information; a |
---|
| 700 | new version of the assembler, with stabs support included, is now |
---|
| 701 | available from Acorn. |
---|
| 702 | |
---|
| 703 | @item a29k |
---|
| 704 | AMD Am29k-family processors. These are normally used in embedded |
---|
| 705 | applications. There are no standard Unix configurations. |
---|
| 706 | This configuration |
---|
| 707 | corresponds to AMD's standard calling sequence and binary interface |
---|
| 708 | and is compatible with other 29k tools. |
---|
| 709 | |
---|
| 710 | You may need to make a variant of the file @file{a29k.h} for your |
---|
| 711 | particular configuration. |
---|
| 712 | |
---|
| 713 | @item a29k-*-bsd |
---|
| 714 | AMD Am29050 used in a system running a variant of BSD Unix. |
---|
| 715 | |
---|
| 716 | @item decstation-* |
---|
| 717 | DECstations can support three different personalities: Ultrix, |
---|
| 718 | DEC OSF/1, and OSF/rose. To configure GCC for these platforms |
---|
| 719 | use the following configurations: |
---|
| 720 | |
---|
| 721 | @table @samp |
---|
| 722 | @item decstation-ultrix |
---|
| 723 | Ultrix configuration. |
---|
| 724 | |
---|
| 725 | @item decstation-osf1 |
---|
| 726 | Dec's version of OSF/1. |
---|
| 727 | |
---|
| 728 | @item decstation-osfrose |
---|
| 729 | Open Software Foundation reference port of OSF/1 which uses the |
---|
| 730 | OSF/rose object file format instead of ECOFF. Normally, you |
---|
| 731 | would not select this configuration. |
---|
| 732 | @end table |
---|
| 733 | |
---|
| 734 | The MIPS C compiler needs to be told to increase its table size |
---|
| 735 | for switch statements with the @samp{-Wf,-XNg1500} option in |
---|
| 736 | order to compile @file{cp/parse.c}. If you use the @samp{-O2} |
---|
| 737 | optimization option, you also need to use @samp{-Olimit 3000}. |
---|
| 738 | Both of these options are automatically generated in the |
---|
| 739 | @file{Makefile} that the shell script @file{configure} builds. |
---|
| 740 | If you override the @code{CC} make variable and use the MIPS |
---|
| 741 | compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}. |
---|
| 742 | |
---|
| 743 | @item elxsi-elxsi-bsd |
---|
| 744 | The Elxsi's C compiler has known limitations that prevent it from |
---|
| 745 | compiling GNU C. Please contact @code{mrs@@cygnus.com} for more details. |
---|
| 746 | |
---|
| 747 | @item dsp16xx |
---|
| 748 | A port to the AT&T DSP1610 family of processors. |
---|
| 749 | |
---|
| 750 | @ignore |
---|
| 751 | @item fx80 |
---|
| 752 | Alliant FX/8 computer. Note that the standard installed C compiler in |
---|
| 753 | Concentrix 5.0 has a bug which prevent it from compiling GNU CC |
---|
| 754 | correctly. You can patch the compiler bug as follows: |
---|
| 755 | |
---|
| 756 | @smallexample |
---|
| 757 | cp /bin/pcc ./pcc |
---|
| 758 | adb -w ./pcc - << EOF |
---|
| 759 | 15f6?w 6610 |
---|
| 760 | EOF |
---|
| 761 | @end smallexample |
---|
| 762 | |
---|
| 763 | Then you must use the @samp{-ip12} option when compiling GNU CC |
---|
| 764 | with the patched compiler, as shown here: |
---|
| 765 | |
---|
| 766 | @smallexample |
---|
| 767 | make CC="./pcc -ip12" CFLAGS=-w |
---|
| 768 | @end smallexample |
---|
| 769 | |
---|
| 770 | Note also that Alliant's version of DBX does not manage to work with the |
---|
| 771 | output from GNU CC. |
---|
| 772 | @end ignore |
---|
| 773 | |
---|
| 774 | @item h8300-*-* |
---|
| 775 | The calling convention and structure layout has changed in release 2.6. |
---|
| 776 | All code must be recompiled. The calling convention now passes the |
---|
| 777 | first three arguments in function calls in registers. Structures are no |
---|
| 778 | longer a multiple of 2 bytes. |
---|
| 779 | |
---|
| 780 | @item hppa*-*-* |
---|
| 781 | There are several variants of the HP-PA processor which run a variety |
---|
| 782 | of operating systems. GNU CC must be configured to use the correct |
---|
| 783 | processor type and operating system, or GNU CC will not function correctly. |
---|
| 784 | The easiest way to handle this problem is to @emph{not} specify a target |
---|
| 785 | when configuring GNU CC, the @file{configure} script will try to automatically |
---|
| 786 | determine the right processor type and operating system. |
---|
| 787 | |
---|
| 788 | @samp{-g} does not work on HP-UX, since that system uses a peculiar |
---|
| 789 | debugging format which GNU CC does not know about. However, @samp{-g} |
---|
| 790 | will work if you also use GAS and GDB in conjunction with GCC. We |
---|
| 791 | highly recommend using GAS for all HP-PA configurations. |
---|
| 792 | |
---|
| 793 | You should be using GAS-2.6 (or later) along with GDB-4.16 (or later). These |
---|
| 794 | can be retrieved from all the traditional GNU ftp archive sites. |
---|
| 795 | |
---|
| 796 | GAS will need to be installed into a directory before @code{/bin}, |
---|
| 797 | @code{/usr/bin}, and @code{/usr/ccs/bin} in your search path. You |
---|
| 798 | should install GAS before you build GNU CC. |
---|
| 799 | |
---|
| 800 | To enable debugging, you must configure GNU CC with the @samp{--with-gnu-as} |
---|
| 801 | option before building. |
---|
| 802 | |
---|
| 803 | @item i370-*-* |
---|
| 804 | This port is very preliminary and has many known bugs. We hope to |
---|
| 805 | have a higher-quality port for this machine soon. |
---|
| 806 | |
---|
| 807 | @item i386-*-linuxoldld |
---|
| 808 | Use this configuration to generate a.out binaries on Linux-based GNU |
---|
| 809 | systems, if you do not have gas/binutils version 2.5.2 or later |
---|
| 810 | installed. This is an obsolete configuration. |
---|
| 811 | |
---|
| 812 | @item i386-*-linuxaout |
---|
| 813 | Use this configuration to generate a.out binaries on Linux-based GNU |
---|
| 814 | systems. This configuration is being superseded. You must use |
---|
| 815 | gas/binutils version 2.5.2 or later. |
---|
| 816 | |
---|
| 817 | @item i386-*-linux |
---|
| 818 | Use this configuration to generate ELF binaries on Linux-based GNU |
---|
| 819 | systems. You must use gas/binutils version 2.5.2 or later. |
---|
| 820 | |
---|
| 821 | @item i386-*-sco |
---|
| 822 | Compilation with RCC is recommended. Also, it may be a good idea to |
---|
| 823 | link with GNU malloc instead of the malloc that comes with the system. |
---|
| 824 | |
---|
| 825 | @item i386-*-sco3.2v4 |
---|
| 826 | Use this configuration for SCO release 3.2 version 4. |
---|
| 827 | |
---|
| 828 | @item i386-*-isc |
---|
| 829 | It may be a good idea to link with GNU malloc instead of the malloc that |
---|
| 830 | comes with the system. |
---|
| 831 | |
---|
| 832 | In ISC version 4.1, @file{sed} core dumps when building |
---|
| 833 | @file{deduced.h}. Use the version of @file{sed} from version 4.0. |
---|
| 834 | |
---|
| 835 | @item i386-*-esix |
---|
| 836 | It may be good idea to link with GNU malloc instead of the malloc that |
---|
| 837 | comes with the system. |
---|
| 838 | |
---|
| 839 | @item i386-ibm-aix |
---|
| 840 | You need to use GAS version 2.1 or later, and and LD from |
---|
| 841 | GNU binutils version 2.2 or later. |
---|
| 842 | |
---|
| 843 | @item i386-sequent-bsd |
---|
| 844 | Go to the Berkeley universe before compiling. In addition, you probably |
---|
| 845 | need to create a file named @file{string.h} containing just one line: |
---|
| 846 | @samp{#include <strings.h>}. |
---|
| 847 | |
---|
| 848 | @item i386-sequent-ptx1* |
---|
| 849 | Sequent DYNIX/ptx 1.x. |
---|
| 850 | |
---|
| 851 | @item i386-sequent-ptx2* |
---|
| 852 | Sequent DYNIX/ptx 2.x. |
---|
| 853 | |
---|
| 854 | @item i386-sun-sunos4 |
---|
| 855 | You may find that you need another version of GNU CC to begin |
---|
| 856 | bootstrapping with, since the current version when built with the |
---|
| 857 | system's own compiler seems to get an infinite loop compiling part of |
---|
| 858 | @file{libgcc2.c}. GNU CC version 2 compiled with GNU CC (any version) |
---|
| 859 | seems not to have this problem. |
---|
| 860 | |
---|
| 861 | See @ref{Sun Install}, for information on installing GNU CC on Sun |
---|
| 862 | systems. |
---|
| 863 | |
---|
| 864 | @item i[345]86-*-winnt3.5 |
---|
| 865 | This version requires a GAS that has not let been released. Until it |
---|
| 866 | is, you can get a prebuilt binary version via anonymous ftp from |
---|
| 867 | @file{cs.washington.edu:pub/gnat} or @file{cs.nyu.edu:pub/gnat}. You |
---|
| 868 | must also use the Microsoft header files from the Windows NT 3.5 SDK. |
---|
| 869 | Find these on the CDROM in the @file{/mstools/h} directory dated 9/4/94. You |
---|
| 870 | must use a fixed version of Microsoft linker made especially for NT 3.5, |
---|
| 871 | which is also is available on the NT 3.5 SDK CDROM. If you do not have |
---|
| 872 | this linker, can you also use the linker from Visual C/C++ 1.0 or 2.0. |
---|
| 873 | |
---|
| 874 | Installing GNU CC for NT builds a wrapper linker, called @file{ld.exe}, |
---|
| 875 | which mimics the behaviour of Unix @file{ld} in the specification of |
---|
| 876 | libraries (@samp{-L} and @samp{-l}). @file{ld.exe} looks for both Unix |
---|
| 877 | and Microsoft named libraries. For example, if you specify |
---|
| 878 | @samp{-lfoo}, @file{ld.exe} will look first for @file{libfoo.a} |
---|
| 879 | and then for @file{foo.lib}. |
---|
| 880 | |
---|
| 881 | You may install GNU CC for Windows NT in one of two ways, depending on |
---|
| 882 | whether or not you have a Unix-like shell and various Unix-like |
---|
| 883 | utilities. |
---|
| 884 | |
---|
| 885 | @enumerate |
---|
| 886 | @item |
---|
| 887 | If you do not have a Unix-like shell and few Unix-like utilities, you |
---|
| 888 | will use a DOS style batch script called @file{configure.bat}. Invoke |
---|
| 889 | it as @code{configure winnt} from an MSDOS console window or from the |
---|
| 890 | program manager dialog box. @file{configure.bat} assumes you have |
---|
| 891 | already installed and have in your path a Unix-like @file{sed} program |
---|
| 892 | which is used to create a working @file{Makefile} from @file{Makefile.in}. |
---|
| 893 | |
---|
| 894 | @file{Makefile} uses the Microsoft Nmake program maintenance utility and |
---|
| 895 | the Visual C/C++ V8.00 compiler to build GNU CC. You need only have the |
---|
| 896 | utilities @file{sed} and @file{touch} to use this installation method, |
---|
| 897 | which only automatically builds the compiler itself. You must then |
---|
| 898 | examine what @file{fixinc.winnt} does, edit the header files by hand and |
---|
| 899 | build @file{libgcc.a} manually. |
---|
| 900 | |
---|
| 901 | @item |
---|
| 902 | The second type of installation assumes you are running a Unix-like |
---|
| 903 | shell, have a complete suite of Unix-like utilities in your path, and |
---|
| 904 | have a previous version of GNU CC already installed, either through |
---|
| 905 | building it via the above installation method or acquiring a pre-built |
---|
| 906 | binary. In this case, use the @file{configure} script in the normal |
---|
| 907 | fashion. |
---|
| 908 | @end enumerate |
---|
| 909 | |
---|
| 910 | @item i860-intel-osf1 |
---|
| 911 | This is the Paragon. |
---|
| 912 | @ifset INSTALLONLY |
---|
| 913 | If you have version 1.0 of the operating system, you need to take |
---|
| 914 | special steps to build GNU CC due to peculiarities of the system. Newer |
---|
| 915 | system versions have no problem. See the section `Installation Problems' |
---|
| 916 | in the GNU CC Manual. |
---|
| 917 | @end ifset |
---|
| 918 | @ifclear INSTALLONLY |
---|
| 919 | If you have version 1.0 of the operating system, |
---|
| 920 | see @ref{Installation Problems}, for special things you need to do to |
---|
| 921 | compensate for peculiarities in the system. |
---|
| 922 | @end ifclear |
---|
| 923 | |
---|
| 924 | @item *-lynx-lynxos |
---|
| 925 | LynxOS 2.2 and earlier comes with GNU CC 1.x already installed as |
---|
| 926 | @file{/bin/gcc}. You should compile with this instead of @file{/bin/cc}. |
---|
| 927 | You can tell GNU CC to use the GNU assembler and linker, by specifying |
---|
| 928 | @samp{--with-gnu-as --with-gnu-ld} when configuring. These will produce |
---|
| 929 | COFF format object files and executables; otherwise GNU CC will use the |
---|
| 930 | installed tools, which produce a.out format executables. |
---|
| 931 | |
---|
| 932 | @item m68000-hp-bsd |
---|
| 933 | HP 9000 series 200 running BSD. Note that the C compiler that comes |
---|
| 934 | with this system cannot compile GNU CC; contact @code{law@@cs.utah.edu} |
---|
| 935 | to get binaries of GNU CC for bootstrapping. |
---|
| 936 | |
---|
| 937 | @item m68k-altos |
---|
| 938 | Altos 3068. You must use the GNU assembler, linker and debugger. |
---|
| 939 | Also, you must fix a kernel bug. Details in the file @file{README.ALTOS}. |
---|
| 940 | |
---|
| 941 | @item m68k-att-sysv |
---|
| 942 | AT&T 3b1, a.k.a. 7300 PC. Special procedures are needed to compile GNU |
---|
| 943 | CC with this machine's standard C compiler, due to bugs in that |
---|
| 944 | compiler. You can bootstrap it more easily with |
---|
| 945 | previous versions of GNU CC if you have them. |
---|
| 946 | |
---|
| 947 | Installing GNU CC on the 3b1 is difficult if you do not already have |
---|
| 948 | GNU CC running, due to bugs in the installed C compiler. However, |
---|
| 949 | the following procedure might work. We are unable to test it. |
---|
| 950 | |
---|
| 951 | @enumerate |
---|
| 952 | @item |
---|
| 953 | Comment out the @samp{#include "config.h"} line on line 37 of |
---|
| 954 | @file{cccp.c} and do @samp{make cpp}. This makes a preliminary version |
---|
| 955 | of GNU cpp. |
---|
| 956 | |
---|
| 957 | @item |
---|
| 958 | Save the old @file{/lib/cpp} and copy the preliminary GNU cpp to that |
---|
| 959 | file name. |
---|
| 960 | |
---|
| 961 | @item |
---|
| 962 | Undo your change in @file{cccp.c}, or reinstall the original version, |
---|
| 963 | and do @samp{make cpp} again. |
---|
| 964 | |
---|
| 965 | @item |
---|
| 966 | Copy this final version of GNU cpp into @file{/lib/cpp}. |
---|
| 967 | |
---|
| 968 | @findex obstack_free |
---|
| 969 | @item |
---|
| 970 | Replace every occurrence of @code{obstack_free} in the file |
---|
| 971 | @file{tree.c} with @code{_obstack_free}. |
---|
| 972 | |
---|
| 973 | @item |
---|
| 974 | Run @code{make} to get the first-stage GNU CC. |
---|
| 975 | |
---|
| 976 | @item |
---|
| 977 | Reinstall the original version of @file{/lib/cpp}. |
---|
| 978 | |
---|
| 979 | @item |
---|
| 980 | Now you can compile GNU CC with itself and install it in the normal |
---|
| 981 | fashion. |
---|
| 982 | @end enumerate |
---|
| 983 | |
---|
| 984 | @item m68k-bull-sysv |
---|
| 985 | Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GNU CC works |
---|
| 986 | either with native assembler or GNU assembler. You can use |
---|
| 987 | GNU assembler with native coff generation by providing @samp{--with-gnu-as} to |
---|
| 988 | the configure script or use GNU assembler with dbx-in-coff encapsulation |
---|
| 989 | by providing @samp{--with-gnu-as --stabs}. For any problem with native |
---|
| 990 | assembler or for availability of the DPX/2 port of GAS, contact |
---|
| 991 | @code{F.Pierresteguy@@frcl.bull.fr}. |
---|
| 992 | |
---|
| 993 | @item m68k-crds-unox |
---|
| 994 | Use @samp{configure unos} for building on Unos. |
---|
| 995 | |
---|
| 996 | The Unos assembler is named @code{casm} instead of @code{as}. For some |
---|
| 997 | strange reason linking @file{/bin/as} to @file{/bin/casm} changes the |
---|
| 998 | behavior, and does not work. So, when installing GNU CC, you should |
---|
| 999 | install the following script as @file{as} in the subdirectory where |
---|
| 1000 | the passes of GCC are installed: |
---|
| 1001 | |
---|
| 1002 | @example |
---|
| 1003 | #!/bin/sh |
---|
| 1004 | casm $* |
---|
| 1005 | @end example |
---|
| 1006 | |
---|
| 1007 | The default Unos library is named @file{libunos.a} instead of |
---|
| 1008 | @file{libc.a}. To allow GNU CC to function, either change all |
---|
| 1009 | references to @samp{-lc} in @file{gcc.c} to @samp{-lunos} or link |
---|
| 1010 | @file{/lib/libc.a} to @file{/lib/libunos.a}. |
---|
| 1011 | |
---|
| 1012 | @cindex @code{alloca}, for Unos |
---|
| 1013 | When compiling GNU CC with the standard compiler, to overcome bugs in |
---|
| 1014 | the support of @code{alloca}, do not use @samp{-O} when making stage 2. |
---|
| 1015 | Then use the stage 2 compiler with @samp{-O} to make the stage 3 |
---|
| 1016 | compiler. This compiler will have the same characteristics as the usual |
---|
| 1017 | stage 2 compiler on other systems. Use it to make a stage 4 compiler |
---|
| 1018 | and compare that with stage 3 to verify proper compilation. |
---|
| 1019 | |
---|
| 1020 | (Perhaps simply defining @code{ALLOCA} in @file{x-crds} as described in |
---|
| 1021 | the comments there will make the above paragraph superfluous. Please |
---|
| 1022 | inform us of whether this works.) |
---|
| 1023 | |
---|
| 1024 | Unos uses memory segmentation instead of demand paging, so you will need |
---|
| 1025 | a lot of memory. 5 Mb is barely enough if no other tasks are running. |
---|
| 1026 | If linking @file{cc1} fails, try putting the object files into a library |
---|
| 1027 | and linking from that library. |
---|
| 1028 | |
---|
| 1029 | @item m68k-hp-hpux |
---|
| 1030 | HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a bug in |
---|
| 1031 | the assembler that prevents compilation of GNU CC. To fix it, get patch |
---|
| 1032 | PHCO_4484 from HP. |
---|
| 1033 | |
---|
| 1034 | In addition, if you wish to use gas @samp{--with-gnu-as} you must use |
---|
| 1035 | gas version 2.1 or later, and you must use the GNU linker version 2.1 or |
---|
| 1036 | later. Earlier versions of gas relied upon a program which converted the |
---|
| 1037 | gas output into the native HP/UX format, but that program has not been |
---|
| 1038 | kept up to date. gdb does not understand that native HP/UX format, so |
---|
| 1039 | you must use gas if you wish to use gdb. |
---|
| 1040 | |
---|
| 1041 | @item m68k-sun |
---|
| 1042 | Sun 3. We do not provide a configuration file to use the Sun FPA by |
---|
| 1043 | default, because programs that establish signal handlers for floating |
---|
| 1044 | point traps inherently cannot work with the FPA. |
---|
| 1045 | |
---|
| 1046 | See @ref{Sun Install}, for information on installing GNU CC on Sun |
---|
| 1047 | systems. |
---|
| 1048 | |
---|
| 1049 | @item m88k-*-svr3 |
---|
| 1050 | Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. |
---|
| 1051 | These systems tend to use the Green Hills C, revision 1.8.5, as the |
---|
| 1052 | standard C compiler. There are apparently bugs in this compiler that |
---|
| 1053 | result in object files differences between stage 2 and stage 3. If this |
---|
| 1054 | happens, make the stage 4 compiler and compare it to the stage 3 |
---|
| 1055 | compiler. If the stage 3 and stage 4 object files are identical, this |
---|
| 1056 | suggests you encountered a problem with the standard C compiler; the |
---|
| 1057 | stage 3 and 4 compilers may be usable. |
---|
| 1058 | |
---|
| 1059 | It is best, however, to use an older version of GNU CC for bootstrapping |
---|
| 1060 | if you have one. |
---|
| 1061 | |
---|
| 1062 | @item m88k-*-dgux |
---|
| 1063 | Motorola m88k running DG/UX. To build 88open BCS native or cross |
---|
| 1064 | compilers on DG/UX, specify the configuration name as |
---|
| 1065 | @samp{m88k-*-dguxbcs} and build in the 88open BCS software development |
---|
| 1066 | environment. To build ELF native or cross compilers on DG/UX, specify |
---|
| 1067 | @samp{m88k-*-dgux} and build in the DG/UX ELF development environment. |
---|
| 1068 | You set the software development environment by issuing |
---|
| 1069 | @samp{sde-target} command and specifying either @samp{m88kbcs} or |
---|
| 1070 | @samp{m88kdguxelf} as the operand. |
---|
| 1071 | |
---|
| 1072 | If you do not specify a configuration name, @file{configure} guesses the |
---|
| 1073 | configuration based on the current software development environment. |
---|
| 1074 | |
---|
| 1075 | @item m88k-tektronix-sysv3 |
---|
| 1076 | Tektronix XD88 running UTekV 3.2e. Do not turn on |
---|
| 1077 | optimization while building stage1 if you bootstrap with |
---|
| 1078 | the buggy Green Hills compiler. Also, The bundled LAI |
---|
| 1079 | System V NFS is buggy so if you build in an NFS mounted |
---|
| 1080 | directory, start from a fresh reboot, or avoid NFS all together. |
---|
| 1081 | Otherwise you may have trouble getting clean comparisons |
---|
| 1082 | between stages. |
---|
| 1083 | |
---|
| 1084 | @item mips-mips-bsd |
---|
| 1085 | MIPS machines running the MIPS operating system in BSD mode. It's |
---|
| 1086 | possible that some old versions of the system lack the functions |
---|
| 1087 | @code{memcpy}, @code{memcmp}, and @code{memset}. If your system lacks |
---|
| 1088 | these, you must remove or undo the definition of |
---|
| 1089 | @code{TARGET_MEM_FUNCTIONS} in @file{mips-bsd.h}. |
---|
| 1090 | |
---|
| 1091 | The MIPS C compiler needs to be told to increase its table size |
---|
| 1092 | for switch statements with the @samp{-Wf,-XNg1500} option in |
---|
| 1093 | order to compile @file{cp/parse.c}. If you use the @samp{-O2} |
---|
| 1094 | optimization option, you also need to use @samp{-Olimit 3000}. |
---|
| 1095 | Both of these options are automatically generated in the |
---|
| 1096 | @file{Makefile} that the shell script @file{configure} builds. |
---|
| 1097 | If you override the @code{CC} make variable and use the MIPS |
---|
| 1098 | compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}. |
---|
| 1099 | |
---|
| 1100 | @item mips-mips-riscos* |
---|
| 1101 | The MIPS C compiler needs to be told to increase its table size |
---|
| 1102 | for switch statements with the @samp{-Wf,-XNg1500} option in |
---|
| 1103 | order to compile @file{cp/parse.c}. If you use the @samp{-O2} |
---|
| 1104 | optimization option, you also need to use @samp{-Olimit 3000}. |
---|
| 1105 | Both of these options are automatically generated in the |
---|
| 1106 | @file{Makefile} that the shell script @file{configure} builds. |
---|
| 1107 | If you override the @code{CC} make variable and use the MIPS |
---|
| 1108 | compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}. |
---|
| 1109 | |
---|
| 1110 | MIPS computers running RISC-OS can support four different |
---|
| 1111 | personalities: default, BSD 4.3, System V.3, and System V.4 |
---|
| 1112 | (older versions of RISC-OS don't support V.4). To configure GCC |
---|
| 1113 | for these platforms use the following configurations: |
---|
| 1114 | |
---|
| 1115 | @table @samp |
---|
| 1116 | @item mips-mips-riscos@code{rev} |
---|
| 1117 | Default configuration for RISC-OS, revision @code{rev}. |
---|
| 1118 | |
---|
| 1119 | @item mips-mips-riscos@code{rev}bsd |
---|
| 1120 | BSD 4.3 configuration for RISC-OS, revision @code{rev}. |
---|
| 1121 | |
---|
| 1122 | @item mips-mips-riscos@code{rev}sysv4 |
---|
| 1123 | System V.4 configuration for RISC-OS, revision @code{rev}. |
---|
| 1124 | |
---|
| 1125 | @item mips-mips-riscos@code{rev}sysv |
---|
| 1126 | System V.3 configuration for RISC-OS, revision @code{rev}. |
---|
| 1127 | @end table |
---|
| 1128 | |
---|
| 1129 | The revision @code{rev} mentioned above is the revision of |
---|
| 1130 | RISC-OS to use. You must reconfigure GCC when going from a |
---|
| 1131 | RISC-OS revision 4 to RISC-OS revision 5. This has the effect of |
---|
| 1132 | avoiding a linker |
---|
| 1133 | @ifclear INSTALLONLY |
---|
| 1134 | bug (see @ref{Installation Problems}, for more details). |
---|
| 1135 | @end ifclear |
---|
| 1136 | @ifset INSTALLONLY |
---|
| 1137 | bug. |
---|
| 1138 | @end ifset |
---|
| 1139 | |
---|
| 1140 | @item mips-sgi-* |
---|
| 1141 | In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib" |
---|
| 1142 | option must be installed from the CD-ROM supplied from Silicon Graphics. |
---|
| 1143 | This is found on the 2nd CD in release 4.0.1. |
---|
| 1144 | |
---|
| 1145 | In order to compile GCC on an SGI running IRIX 5, the "compiler_dev.hdr" |
---|
| 1146 | subsystem must be installed from the IDO CD-ROM supplied by Silicon |
---|
| 1147 | Graphics. |
---|
| 1148 | |
---|
| 1149 | @code{make compare} may fail on version 5 of IRIX unless you add |
---|
| 1150 | @samp{-save-temps} to @code{CFLAGS}. On these systems, the name of the |
---|
| 1151 | assembler input file is stored in the object file, and that makes |
---|
| 1152 | comparison fail if it differs between the @code{stage1} and |
---|
| 1153 | @code{stage2} compilations. The option @samp{-save-temps} forces a |
---|
| 1154 | fixed name to be used for the assembler input file, instead of a |
---|
| 1155 | randomly chosen name in @file{/tmp}. Do not add @samp{-save-temps} |
---|
| 1156 | unless the comparisons fail without that option. If you do you |
---|
| 1157 | @samp{-save-temps}, you will have to manually delete the @samp{.i} and |
---|
| 1158 | @samp{.s} files after each series of compilations. |
---|
| 1159 | |
---|
| 1160 | The MIPS C compiler needs to be told to increase its table size |
---|
| 1161 | for switch statements with the @samp{-Wf,-XNg1500} option in |
---|
| 1162 | order to compile @file{cp/parse.c}. If you use the @samp{-O2} |
---|
| 1163 | optimization option, you also need to use @samp{-Olimit 3000}. |
---|
| 1164 | Both of these options are automatically generated in the |
---|
| 1165 | @file{Makefile} that the shell script @file{configure} builds. |
---|
| 1166 | If you override the @code{CC} make variable and use the MIPS |
---|
| 1167 | compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}. |
---|
| 1168 | |
---|
| 1169 | On Irix version 4.0.5F, and perhaps on some other versions as well, |
---|
| 1170 | there is an assembler bug that reorders instructions incorrectly. To |
---|
| 1171 | work around it, specify the target configuration |
---|
| 1172 | @samp{mips-sgi-irix4loser}. This configuration inhibits assembler |
---|
| 1173 | optimization. |
---|
| 1174 | |
---|
| 1175 | In a compiler configured with target @samp{mips-sgi-irix4}, you can turn |
---|
| 1176 | off assembler optimization by using the @samp{-noasmopt} option. This |
---|
| 1177 | compiler option passes the option @samp{-O0} to the assembler, to |
---|
| 1178 | inhibit reordering. |
---|
| 1179 | |
---|
| 1180 | The @samp{-noasmopt} option can be useful for testing whether a problem |
---|
| 1181 | is due to erroneous assembler reordering. Even if a problem does not go |
---|
| 1182 | away with @samp{-noasmopt}, it may still be due to assembler |
---|
| 1183 | reordering---perhaps GNU CC itself was miscompiled as a result. |
---|
| 1184 | |
---|
| 1185 | To enable debugging under Irix 5, you must use GNU as 2.5 or later, |
---|
| 1186 | and use the @samp{--with-gnu-as} configure option when configuring gcc. |
---|
| 1187 | GNU as is distributed as part of the binutils package. |
---|
| 1188 | |
---|
| 1189 | @item mips-sony-sysv |
---|
| 1190 | Sony MIPS NEWS. This works in NEWSOS 5.0.1, but not in 5.0.2 (which |
---|
| 1191 | uses ELF instead of COFF). Support for 5.0.2 will probably be provided |
---|
| 1192 | soon by volunteers. In particular, the linker does not like the |
---|
| 1193 | code generated by GCC when shared libraries are linked in. |
---|
| 1194 | |
---|
| 1195 | @item ns32k-encore |
---|
| 1196 | Encore ns32000 system. Encore systems are supported only under BSD. |
---|
| 1197 | |
---|
| 1198 | @item ns32k-*-genix |
---|
| 1199 | National Semiconductor ns32000 system. Genix has bugs in @code{alloca} |
---|
| 1200 | and @code{malloc}; you must get the compiled versions of these from GNU |
---|
| 1201 | Emacs. |
---|
| 1202 | |
---|
| 1203 | @item ns32k-sequent |
---|
| 1204 | Go to the Berkeley universe before compiling. In addition, you probably |
---|
| 1205 | need to create a file named @file{string.h} containing just one line: |
---|
| 1206 | @samp{#include <strings.h>}. |
---|
| 1207 | |
---|
| 1208 | @item ns32k-utek |
---|
| 1209 | UTEK ns32000 system (``merlin''). The C compiler that comes with this |
---|
| 1210 | system cannot compile GNU CC; contact @samp{tektronix!reed!mason} to get |
---|
| 1211 | binaries of GNU CC for bootstrapping. |
---|
| 1212 | |
---|
| 1213 | @item romp-*-aos |
---|
| 1214 | @itemx romp-*-mach |
---|
| 1215 | The only operating systems supported for the IBM RT PC are AOS and |
---|
| 1216 | MACH. GNU CC does not support AIX running on the RT. We recommend you |
---|
| 1217 | compile GNU CC with an earlier version of itself; if you compile GNU CC |
---|
| 1218 | with @code{hc}, the Metaware compiler, it will work, but you will get |
---|
| 1219 | mismatches between the stage 2 and stage 3 compilers in various files. |
---|
| 1220 | These errors are minor differences in some floating-point constants and |
---|
| 1221 | can be safely ignored; the stage 3 compiler is correct. |
---|
| 1222 | |
---|
| 1223 | @item rs6000-*-aix |
---|
| 1224 | @itemx powerpc-*-aix |
---|
| 1225 | Various early versions of each release of the IBM XLC compiler will not |
---|
| 1226 | bootstrap GNU CC. Symptoms include differences between the stage2 and |
---|
| 1227 | stage3 object files, and errors when compiling @file{libgcc.a} or |
---|
| 1228 | @file{enquire}. Known problematic releases include: xlc-1.2.1.8, |
---|
| 1229 | xlc-1.3.0.0 (distributed with AIX 3.2.5), and xlc-1.3.0.19. Both |
---|
| 1230 | xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are known to produce working |
---|
| 1231 | versions of GNU CC, but most other recent releases correctly bootstrap |
---|
| 1232 | GNU CC. Also, releases of AIX prior to AIX 3.2.4 include a version of |
---|
| 1233 | the IBM assembler which does not accept debugging directives: assembler |
---|
| 1234 | updates are available as PTFs. Also, if you are using AIX 3.2.5 or |
---|
| 1235 | greater and the GNU assembler, you must have a version modified after |
---|
| 1236 | October 16th, 1995 in order for the GNU C compiler to build. See the |
---|
| 1237 | file @file{README.RS6000} for more details on of these problems. |
---|
| 1238 | |
---|
| 1239 | GNU CC does not yet support the 64-bit PowerPC instructions. |
---|
| 1240 | |
---|
| 1241 | Objective C does not work on this architecture because it makes assumptions |
---|
| 1242 | that are incompatible with the calling conventions. |
---|
| 1243 | |
---|
| 1244 | AIX on the RS/6000 provides support (NLS) for environments outside of |
---|
| 1245 | the United States. Compilers and assemblers use NLS to support |
---|
| 1246 | locale-specific representations of various objects including |
---|
| 1247 | floating-point numbers ("." vs "," for separating decimal fractions). |
---|
| 1248 | There have been problems reported where the library linked with GNU CC |
---|
| 1249 | does not produce the same floating-point formats that the assembler |
---|
| 1250 | accepts. If you have this problem, set the LANG environment variable to |
---|
| 1251 | "C" or "En_US". |
---|
| 1252 | |
---|
| 1253 | Due to changes in the way that GNU CC invokes the binder (linker) for AIX |
---|
| 1254 | 4.1, you may now receive warnings of duplicate symbols from the link step |
---|
| 1255 | that were not reported before. The assembly files generated by GNU CC for |
---|
| 1256 | AIX have always included multiple symbol definitions for certain global |
---|
| 1257 | variable and function declarations in the original program. The warnings |
---|
| 1258 | should not prevent the linker from producing a correct library or runnable |
---|
| 1259 | executable. |
---|
| 1260 | |
---|
| 1261 | @item powerpc-*-elf |
---|
| 1262 | @itemx powerpc-*-sysv4 |
---|
| 1263 | PowerPC system in big endian mode, running System V.4. |
---|
| 1264 | |
---|
| 1265 | This configuration is currently under development. |
---|
| 1266 | |
---|
| 1267 | @item powerpc-*-eabiaix |
---|
| 1268 | Embedded PowerPC system in big endian mode with -mcall-aix selected as |
---|
| 1269 | the default. This system is currently under development. |
---|
| 1270 | |
---|
| 1271 | @item powerpc-*-eabisim |
---|
| 1272 | Embedded PowerPC system in big endian mode for use in running under the |
---|
| 1273 | PSIM simulator. This system is currently under development. |
---|
| 1274 | |
---|
| 1275 | @item powerpc-*-eabi |
---|
| 1276 | Embedded PowerPC system in big endian mode. |
---|
| 1277 | |
---|
| 1278 | This configuration is currently under development. |
---|
| 1279 | |
---|
| 1280 | @item powerpcle-*-elf |
---|
| 1281 | @itemx powerpcle-*-sysv4 |
---|
| 1282 | PowerPC system in little endian mode, running System V.4. |
---|
| 1283 | |
---|
| 1284 | This configuration is currently under development. |
---|
| 1285 | |
---|
| 1286 | @itemx powerpcle-*-sysv4 |
---|
| 1287 | Embedded PowerPC system in little endian mode. |
---|
| 1288 | |
---|
| 1289 | This system is currently under development. |
---|
| 1290 | |
---|
| 1291 | @item powerpcle-*-eabisim |
---|
| 1292 | Embedded PowerPC system in little endian mode for use in running under |
---|
| 1293 | the PSIM simulator. |
---|
| 1294 | |
---|
| 1295 | This system is currently under development. |
---|
| 1296 | |
---|
| 1297 | @itemx powerpcle-*-eabi |
---|
| 1298 | Embedded PowerPC system in little endian mode. |
---|
| 1299 | |
---|
| 1300 | This configuration is currently under development. |
---|
| 1301 | |
---|
| 1302 | @item vax-dec-ultrix |
---|
| 1303 | Don't try compiling with Vax C (@code{vcc}). It produces incorrect code |
---|
| 1304 | in some cases (for example, when @code{alloca} is used). |
---|
| 1305 | |
---|
| 1306 | Meanwhile, compiling @file{cp/parse.c} with pcc does not work because of |
---|
| 1307 | an internal table size limitation in that compiler. To avoid this |
---|
| 1308 | problem, compile just the GNU C compiler first, and use it to recompile |
---|
| 1309 | building all the languages that you want to run. |
---|
| 1310 | |
---|
| 1311 | @item sparc-sun-* |
---|
| 1312 | See @ref{Sun Install}, for information on installing GNU CC on Sun |
---|
| 1313 | systems. |
---|
| 1314 | |
---|
| 1315 | @item vax-dec-vms |
---|
| 1316 | See @ref{VMS Install}, for details on how to install GNU CC on VMS. |
---|
| 1317 | |
---|
| 1318 | @item we32k-*-* |
---|
| 1319 | These computers are also known as the 3b2, 3b5, 3b20 and other similar |
---|
| 1320 | names. (However, the 3b1 is actually a 68000; see |
---|
| 1321 | @ref{Configurations}.) |
---|
| 1322 | |
---|
| 1323 | Don't use @samp{-g} when compiling with the system's compiler. The |
---|
| 1324 | system's linker seems to be unable to handle such a large program with |
---|
| 1325 | debugging information. |
---|
| 1326 | |
---|
| 1327 | The system's compiler runs out of capacity when compiling @file{stmt.c} |
---|
| 1328 | in GNU CC. You can work around this by building @file{cpp} in GNU CC |
---|
| 1329 | first, then use that instead of the system's preprocessor with the |
---|
| 1330 | system's C compiler to compile @file{stmt.c}. Here is how: |
---|
| 1331 | |
---|
| 1332 | @example |
---|
| 1333 | mv /lib/cpp /lib/cpp.att |
---|
| 1334 | cp cpp /lib/cpp.gnu |
---|
| 1335 | echo '/lib/cpp.gnu -traditional $@{1+"$@@"@}' > /lib/cpp |
---|
| 1336 | chmod +x /lib/cpp |
---|
| 1337 | @end example |
---|
| 1338 | |
---|
| 1339 | The system's compiler produces bad code for some of the GNU CC |
---|
| 1340 | optimization files. So you must build the stage 2 compiler without |
---|
| 1341 | optimization. Then build a stage 3 compiler with optimization. |
---|
| 1342 | That executable should work. Here are the necessary commands: |
---|
| 1343 | |
---|
| 1344 | @example |
---|
| 1345 | make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g" |
---|
| 1346 | make stage2 |
---|
| 1347 | make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O" |
---|
| 1348 | @end example |
---|
| 1349 | |
---|
| 1350 | You may need to raise the ULIMIT setting to build a C++ compiler, |
---|
| 1351 | as the file @file{cc1plus} is larger than one megabyte. |
---|
| 1352 | @end table |
---|
| 1353 | |
---|
| 1354 | @node Other Dir |
---|
| 1355 | @section Compilation in a Separate Directory |
---|
| 1356 | @cindex other directory, compilation in |
---|
| 1357 | @cindex compilation in a separate directory |
---|
| 1358 | @cindex separate directory, compilation in |
---|
| 1359 | |
---|
| 1360 | If you wish to build the object files and executables in a directory |
---|
| 1361 | other than the one containing the source files, here is what you must |
---|
| 1362 | do differently: |
---|
| 1363 | |
---|
| 1364 | @enumerate |
---|
| 1365 | @item |
---|
| 1366 | Make sure you have a version of Make that supports the @code{VPATH} |
---|
| 1367 | feature. (GNU Make supports it, as do Make versions on most BSD |
---|
| 1368 | systems.) |
---|
| 1369 | |
---|
| 1370 | @item |
---|
| 1371 | If you have ever run @file{configure} in the source directory, you must undo |
---|
| 1372 | the configuration. Do this by running: |
---|
| 1373 | |
---|
| 1374 | @example |
---|
| 1375 | make distclean |
---|
| 1376 | @end example |
---|
| 1377 | |
---|
| 1378 | @item |
---|
| 1379 | Go to the directory in which you want to build the compiler before |
---|
| 1380 | running @file{configure}: |
---|
| 1381 | |
---|
| 1382 | @example |
---|
| 1383 | mkdir gcc-sun3 |
---|
| 1384 | cd gcc-sun3 |
---|
| 1385 | @end example |
---|
| 1386 | |
---|
| 1387 | On systems that do not support symbolic links, this directory must be |
---|
| 1388 | on the same file system as the source code directory. |
---|
| 1389 | |
---|
| 1390 | @item |
---|
| 1391 | Specify where to find @file{configure} when you run it: |
---|
| 1392 | |
---|
| 1393 | @example |
---|
| 1394 | ../gcc/configure @dots{} |
---|
| 1395 | @end example |
---|
| 1396 | |
---|
| 1397 | This also tells @code{configure} where to find the compiler sources; |
---|
| 1398 | @code{configure} takes the directory from the file name that was used to |
---|
| 1399 | invoke it. But if you want to be sure, you can specify the source |
---|
| 1400 | directory with the @samp{--srcdir} option, like this: |
---|
| 1401 | |
---|
| 1402 | @example |
---|
| 1403 | ../gcc/configure --srcdir=../gcc @var{other options} |
---|
| 1404 | @end example |
---|
| 1405 | |
---|
| 1406 | The directory you specify with @samp{--srcdir} need not be the same |
---|
| 1407 | as the one that @code{configure} is found in. |
---|
| 1408 | @end enumerate |
---|
| 1409 | |
---|
| 1410 | Now, you can run @code{make} in that directory. You need not repeat the |
---|
| 1411 | configuration steps shown above, when ordinary source files change. You |
---|
| 1412 | must, however, run @code{configure} again when the configuration files |
---|
| 1413 | change, if your system does not support symbolic links. |
---|
| 1414 | |
---|
| 1415 | @node Cross-Compiler |
---|
| 1416 | @section Building and Installing a Cross-Compiler |
---|
| 1417 | @cindex cross-compiler, installation |
---|
| 1418 | |
---|
| 1419 | GNU CC can function as a cross-compiler for many machines, but not all. |
---|
| 1420 | |
---|
| 1421 | @itemize @bullet |
---|
| 1422 | @item |
---|
| 1423 | Cross-compilers for the Mips as target using the Mips assembler |
---|
| 1424 | currently do not work, because the auxiliary programs |
---|
| 1425 | @file{mips-tdump.c} and @file{mips-tfile.c} can't be compiled on |
---|
| 1426 | anything but a Mips. It does work to cross compile for a Mips |
---|
| 1427 | if you use the GNU assembler and linker. |
---|
| 1428 | |
---|
| 1429 | @item |
---|
| 1430 | Cross-compilers between machines with different floating point formats |
---|
| 1431 | have not all been made to work. GNU CC now has a floating point |
---|
| 1432 | emulator with which these can work, but each target machine description |
---|
| 1433 | needs to be updated to take advantage of it. |
---|
| 1434 | |
---|
| 1435 | @item |
---|
| 1436 | Cross-compilation between machines of different word sizes is |
---|
| 1437 | somewhat problematic and sometimes does not work. |
---|
| 1438 | @end itemize |
---|
| 1439 | |
---|
| 1440 | Since GNU CC generates assembler code, you probably need a |
---|
| 1441 | cross-assembler that GNU CC can run, in order to produce object files. |
---|
| 1442 | If you want to link on other than the target machine, you need a |
---|
| 1443 | cross-linker as well. You also need header files and libraries suitable |
---|
| 1444 | for the target machine that you can install on the host machine. |
---|
| 1445 | |
---|
| 1446 | @menu |
---|
| 1447 | * Steps of Cross:: Using a cross-compiler involves several steps |
---|
| 1448 | that may be carried out on different machines. |
---|
| 1449 | * Configure Cross:: Configuring a cross-compiler. |
---|
| 1450 | * Tools and Libraries:: Where to put the linker and assembler, and the C library. |
---|
| 1451 | * Cross Headers:: Finding and installing header files |
---|
| 1452 | for a cross-compiler. |
---|
| 1453 | * Cross Runtime:: Supplying arithmetic runtime routines (@file{libgcc1.a}). |
---|
| 1454 | * Build Cross:: Actually compiling the cross-compiler. |
---|
| 1455 | @end menu |
---|
| 1456 | |
---|
| 1457 | @node Steps of Cross |
---|
| 1458 | @subsection Steps of Cross-Compilation |
---|
| 1459 | |
---|
| 1460 | To compile and run a program using a cross-compiler involves several |
---|
| 1461 | steps: |
---|
| 1462 | |
---|
| 1463 | @itemize @bullet |
---|
| 1464 | @item |
---|
| 1465 | Run the cross-compiler on the host machine to produce assembler files |
---|
| 1466 | for the target machine. This requires header files for the target |
---|
| 1467 | machine. |
---|
| 1468 | |
---|
| 1469 | @item |
---|
| 1470 | Assemble the files produced by the cross-compiler. You can do this |
---|
| 1471 | either with an assembler on the target machine, or with a |
---|
| 1472 | cross-assembler on the host machine. |
---|
| 1473 | |
---|
| 1474 | @item |
---|
| 1475 | Link those files to make an executable. You can do this either with a |
---|
| 1476 | linker on the target machine, or with a cross-linker on the host |
---|
| 1477 | machine. Whichever machine you use, you need libraries and certain |
---|
| 1478 | startup files (typically @file{crt@dots{}.o}) for the target machine. |
---|
| 1479 | @end itemize |
---|
| 1480 | |
---|
| 1481 | It is most convenient to do all of these steps on the same host machine, |
---|
| 1482 | since then you can do it all with a single invocation of GNU CC. This |
---|
| 1483 | requires a suitable cross-assembler and cross-linker. For some targets, |
---|
| 1484 | the GNU assembler and linker are available. |
---|
| 1485 | |
---|
| 1486 | @node Configure Cross |
---|
| 1487 | @subsection Configuring a Cross-Compiler |
---|
| 1488 | |
---|
| 1489 | To build GNU CC as a cross-compiler, you start out by running |
---|
| 1490 | @file{configure}. Use the @samp{--target=@var{target}} to specify the |
---|
| 1491 | target type. If @file{configure} was unable to correctly identify the |
---|
| 1492 | system you are running on, also specify the @samp{--build=@var{build}} |
---|
| 1493 | option. For example, here is how to configure for a cross-compiler that |
---|
| 1494 | produces code for an HP 68030 system running BSD on a system that |
---|
| 1495 | @file{configure} can correctly identify: |
---|
| 1496 | |
---|
| 1497 | @smallexample |
---|
| 1498 | ./configure --target=m68k-hp-bsd4.3 |
---|
| 1499 | @end smallexample |
---|
| 1500 | |
---|
| 1501 | @node Tools and Libraries |
---|
| 1502 | @subsection Tools and Libraries for a Cross-Compiler |
---|
| 1503 | |
---|
| 1504 | If you have a cross-assembler and cross-linker available, you should |
---|
| 1505 | install them now. Put them in the directory |
---|
| 1506 | @file{/usr/local/@var{target}/bin}. Here is a table of the tools |
---|
| 1507 | you should put in this directory: |
---|
| 1508 | |
---|
| 1509 | @table @file |
---|
| 1510 | @item as |
---|
| 1511 | This should be the cross-assembler. |
---|
| 1512 | |
---|
| 1513 | @item ld |
---|
| 1514 | This should be the cross-linker. |
---|
| 1515 | |
---|
| 1516 | @item ar |
---|
| 1517 | This should be the cross-archiver: a program which can manipulate |
---|
| 1518 | archive files (linker libraries) in the target machine's format. |
---|
| 1519 | |
---|
| 1520 | @item ranlib |
---|
| 1521 | This should be a program to construct a symbol table in an archive file. |
---|
| 1522 | @end table |
---|
| 1523 | |
---|
| 1524 | The installation of GNU CC will find these programs in that directory, |
---|
| 1525 | and copy or link them to the proper place to for the cross-compiler to |
---|
| 1526 | find them when run later. |
---|
| 1527 | |
---|
| 1528 | The easiest way to provide these files is to build the Binutils package |
---|
| 1529 | and GAS. Configure them with the same @samp{--host} and @samp{--target} |
---|
| 1530 | options that you use for configuring GNU CC, then build and install |
---|
| 1531 | them. They install their executables automatically into the proper |
---|
| 1532 | directory. Alas, they do not support all the targets that GNU CC |
---|
| 1533 | supports. |
---|
| 1534 | |
---|
| 1535 | If you want to install libraries to use with the cross-compiler, such as |
---|
| 1536 | a standard C library, put them in the directory |
---|
| 1537 | @file{/usr/local/@var{target}/lib}; installation of GNU CC copies all |
---|
| 1538 | all the files in that subdirectory into the proper place for GNU CC to |
---|
| 1539 | find them and link with them. Here's an example of copying some |
---|
| 1540 | libraries from a target machine: |
---|
| 1541 | |
---|
| 1542 | @example |
---|
| 1543 | ftp @var{target-machine} |
---|
| 1544 | lcd /usr/local/@var{target}/lib |
---|
| 1545 | cd /lib |
---|
| 1546 | get libc.a |
---|
| 1547 | cd /usr/lib |
---|
| 1548 | get libg.a |
---|
| 1549 | get libm.a |
---|
| 1550 | quit |
---|
| 1551 | @end example |
---|
| 1552 | |
---|
| 1553 | @noindent |
---|
| 1554 | The precise set of libraries you'll need, and their locations on |
---|
| 1555 | the target machine, vary depending on its operating system. |
---|
| 1556 | |
---|
| 1557 | @cindex start files |
---|
| 1558 | Many targets require ``start files'' such as @file{crt0.o} and |
---|
| 1559 | @file{crtn.o} which are linked into each executable; these too should be |
---|
| 1560 | placed in @file{/usr/local/@var{target}/lib}. There may be several |
---|
| 1561 | alternatives for @file{crt0.o}, for use with profiling or other |
---|
| 1562 | compilation options. Check your target's definition of |
---|
| 1563 | @code{STARTFILE_SPEC} to find out what start files it uses. |
---|
| 1564 | Here's an example of copying these files from a target machine: |
---|
| 1565 | |
---|
| 1566 | @example |
---|
| 1567 | ftp @var{target-machine} |
---|
| 1568 | lcd /usr/local/@var{target}/lib |
---|
| 1569 | prompt |
---|
| 1570 | cd /lib |
---|
| 1571 | mget *crt*.o |
---|
| 1572 | cd /usr/lib |
---|
| 1573 | mget *crt*.o |
---|
| 1574 | quit |
---|
| 1575 | @end example |
---|
| 1576 | |
---|
| 1577 | @node Cross Runtime |
---|
| 1578 | @subsection @file{libgcc.a} and Cross-Compilers |
---|
| 1579 | |
---|
| 1580 | Code compiled by GNU CC uses certain runtime support functions |
---|
| 1581 | implicitly. Some of these functions can be compiled successfully with |
---|
| 1582 | GNU CC itself, but a few cannot be. These problem functions are in the |
---|
| 1583 | source file @file{libgcc1.c}; the library made from them is called |
---|
| 1584 | @file{libgcc1.a}. |
---|
| 1585 | |
---|
| 1586 | When you build a native compiler, these functions are compiled with some |
---|
| 1587 | other compiler--the one that you use for bootstrapping GNU CC. |
---|
| 1588 | Presumably it knows how to open code these operations, or else knows how |
---|
| 1589 | to call the run-time emulation facilities that the machine comes with. |
---|
| 1590 | But this approach doesn't work for building a cross-compiler. The |
---|
| 1591 | compiler that you use for building knows about the host system, not the |
---|
| 1592 | target system. |
---|
| 1593 | |
---|
| 1594 | So, when you build a cross-compiler you have to supply a suitable |
---|
| 1595 | library @file{libgcc1.a} that does the job it is expected to do. |
---|
| 1596 | |
---|
| 1597 | To compile @file{libgcc1.c} with the cross-compiler itself does not |
---|
| 1598 | work. The functions in this file are supposed to implement arithmetic |
---|
| 1599 | operations that GNU CC does not know how to open code for your target |
---|
| 1600 | machine. If these functions are compiled with GNU CC itself, they |
---|
| 1601 | will compile into infinite recursion. |
---|
| 1602 | |
---|
| 1603 | On any given target, most of these functions are not needed. If GNU CC |
---|
| 1604 | can open code an arithmetic operation, it will not call these functions |
---|
| 1605 | to perform the operation. It is possible that on your target machine, |
---|
| 1606 | none of these functions is needed. If so, you can supply an empty |
---|
| 1607 | library as @file{libgcc1.a}. |
---|
| 1608 | |
---|
| 1609 | Many targets need library support only for multiplication and division. |
---|
| 1610 | If you are linking with a library that contains functions for |
---|
| 1611 | multiplication and division, you can tell GNU CC to call them directly |
---|
| 1612 | by defining the macros @code{MULSI3_LIBCALL}, and the like. These |
---|
| 1613 | macros need to be defined in the target description macro file. For |
---|
| 1614 | some targets, they are defined already. This may be sufficient to |
---|
| 1615 | avoid the need for libgcc1.a; if so, you can supply an empty library. |
---|
| 1616 | |
---|
| 1617 | Some targets do not have floating point instructions; they need other |
---|
| 1618 | functions in @file{libgcc1.a}, which do floating arithmetic. |
---|
| 1619 | Recent versions of GNU CC have a file which emulates floating point. |
---|
| 1620 | With a certain amount of work, you should be able to construct a |
---|
| 1621 | floating point emulator that can be used as @file{libgcc1.a}. Perhaps |
---|
| 1622 | future versions will contain code to do this automatically and |
---|
| 1623 | conveniently. That depends on whether someone wants to implement it. |
---|
| 1624 | |
---|
| 1625 | Some embedded targets come with all the necessary @file{libgcc1.a} |
---|
| 1626 | routines written in C or assembler. These targets build |
---|
| 1627 | @file{libgcc1.a} automatically and you do not need to do anything |
---|
| 1628 | special for them. Other embedded targets do not need any |
---|
| 1629 | @file{libgcc1.a} routines since all the necessary operations are |
---|
| 1630 | supported by the hardware. |
---|
| 1631 | |
---|
| 1632 | If your target system has another C compiler, you can configure GNU CC |
---|
| 1633 | as a native compiler on that machine, build just @file{libgcc1.a} with |
---|
| 1634 | @samp{make libgcc1.a} on that machine, and use the resulting file with |
---|
| 1635 | the cross-compiler. To do this, execute the following on the target |
---|
| 1636 | machine: |
---|
| 1637 | |
---|
| 1638 | @example |
---|
| 1639 | cd @var{target-build-dir} |
---|
| 1640 | ./configure --host=sparc --target=sun3 |
---|
| 1641 | make libgcc1.a |
---|
| 1642 | @end example |
---|
| 1643 | |
---|
| 1644 | @noindent |
---|
| 1645 | And then this on the host machine: |
---|
| 1646 | |
---|
| 1647 | @example |
---|
| 1648 | ftp @var{target-machine} |
---|
| 1649 | binary |
---|
| 1650 | cd @var{target-build-dir} |
---|
| 1651 | get libgcc1.a |
---|
| 1652 | quit |
---|
| 1653 | @end example |
---|
| 1654 | |
---|
| 1655 | Another way to provide the functions you need in @file{libgcc1.a} is to |
---|
| 1656 | define the appropriate @code{perform_@dots{}} macros for those |
---|
| 1657 | functions. If these definitions do not use the C arithmetic operators |
---|
| 1658 | that they are meant to implement, you should be able to compile them |
---|
| 1659 | with the cross-compiler you are building. (If these definitions already |
---|
| 1660 | exist for your target file, then you are all set.) |
---|
| 1661 | |
---|
| 1662 | To build @file{libgcc1.a} using the perform macros, use |
---|
| 1663 | @samp{LIBGCC1=libgcc1.a OLDCC=./xgcc} when building the compiler. |
---|
| 1664 | Otherwise, you should place your replacement library under the name |
---|
| 1665 | @file{libgcc1.a} in the directory in which you will build the |
---|
| 1666 | cross-compiler, before you run @code{make}. |
---|
| 1667 | |
---|
| 1668 | @node Cross Headers |
---|
| 1669 | @subsection Cross-Compilers and Header Files |
---|
| 1670 | |
---|
| 1671 | If you are cross-compiling a standalone program or a program for an |
---|
| 1672 | embedded system, then you may not need any header files except the few |
---|
| 1673 | that are part of GNU CC (and those of your program). However, if you |
---|
| 1674 | intend to link your program with a standard C library such as |
---|
| 1675 | @file{libc.a}, then you probably need to compile with the header files |
---|
| 1676 | that go with the library you use. |
---|
| 1677 | |
---|
| 1678 | The GNU C compiler does not come with these files, because (1) they are |
---|
| 1679 | system-specific, and (2) they belong in a C library, not in a compiler. |
---|
| 1680 | |
---|
| 1681 | If the GNU C library supports your target machine, then you can get the |
---|
| 1682 | header files from there (assuming you actually use the GNU library when |
---|
| 1683 | you link your program). |
---|
| 1684 | |
---|
| 1685 | If your target machine comes with a C compiler, it probably comes with |
---|
| 1686 | suitable header files also. If you make these files accessible from the host |
---|
| 1687 | machine, the cross-compiler can use them also. |
---|
| 1688 | |
---|
| 1689 | Otherwise, you're on your own in finding header files to use when |
---|
| 1690 | cross-compiling. |
---|
| 1691 | |
---|
| 1692 | When you have found suitable header files, put them in |
---|
| 1693 | @file{/usr/local/@var{target}/include}, before building the cross |
---|
| 1694 | compiler. Then installation will run fixincludes properly and install |
---|
| 1695 | the corrected versions of the header files where the compiler will use |
---|
| 1696 | them. |
---|
| 1697 | |
---|
| 1698 | Provide the header files before you build the cross-compiler, because |
---|
| 1699 | the build stage actually runs the cross-compiler to produce parts of |
---|
| 1700 | @file{libgcc.a}. (These are the parts that @emph{can} be compiled with |
---|
| 1701 | GNU CC.) Some of them need suitable header files. |
---|
| 1702 | |
---|
| 1703 | Here's an example showing how to copy the header files from a target |
---|
| 1704 | machine. On the target machine, do this: |
---|
| 1705 | |
---|
| 1706 | @example |
---|
| 1707 | (cd /usr/include; tar cf - .) > tarfile |
---|
| 1708 | @end example |
---|
| 1709 | |
---|
| 1710 | Then, on the host machine, do this: |
---|
| 1711 | |
---|
| 1712 | @example |
---|
| 1713 | ftp @var{target-machine} |
---|
| 1714 | lcd /usr/local/@var{target}/include |
---|
| 1715 | get tarfile |
---|
| 1716 | quit |
---|
| 1717 | tar xf tarfile |
---|
| 1718 | @end example |
---|
| 1719 | |
---|
| 1720 | @node Build Cross |
---|
| 1721 | @subsection Actually Building the Cross-Compiler |
---|
| 1722 | |
---|
| 1723 | Now you can proceed just as for compiling a single-machine compiler |
---|
| 1724 | through the step of building stage 1. If you have not provided some |
---|
| 1725 | sort of @file{libgcc1.a}, then compilation will give up at the point |
---|
| 1726 | where it needs that file, printing a suitable error message. If you |
---|
| 1727 | do provide @file{libgcc1.a}, then building the compiler will automatically |
---|
| 1728 | compile and link a test program called @file{libgcc1-test}; if you get |
---|
| 1729 | errors in the linking, it means that not all of the necessary routines |
---|
| 1730 | in @file{libgcc1.a} are available. |
---|
| 1731 | |
---|
| 1732 | You must provide the header file @file{float.h}. One way to do this is |
---|
| 1733 | to compile @file{enquire} and run it on your target machine. The job of |
---|
| 1734 | @file{enquire} is to run on the target machine and figure out by |
---|
| 1735 | experiment the nature of its floating point representation. |
---|
| 1736 | @file{enquire} records its findings in the header file @file{float.h}. |
---|
| 1737 | If you can't produce this file by running @file{enquire} on the target |
---|
| 1738 | machine, then you will need to come up with a suitable @file{float.h} in |
---|
| 1739 | some other way (or else, avoid using it in your programs). |
---|
| 1740 | |
---|
| 1741 | Do not try to build stage 2 for a cross-compiler. It doesn't work to |
---|
| 1742 | rebuild GNU CC as a cross-compiler using the cross-compiler, because |
---|
| 1743 | that would produce a program that runs on the target machine, not on the |
---|
| 1744 | host. For example, if you compile a 386-to-68030 cross-compiler with |
---|
| 1745 | itself, the result will not be right either for the 386 (because it was |
---|
| 1746 | compiled into 68030 code) or for the 68030 (because it was configured |
---|
| 1747 | for a 386 as the host). If you want to compile GNU CC into 68030 code, |
---|
| 1748 | whether you compile it on a 68030 or with a cross-compiler on a 386, you |
---|
| 1749 | must specify a 68030 as the host when you configure it. |
---|
| 1750 | |
---|
| 1751 | To install the cross-compiler, use @samp{make install}, as usual. |
---|
| 1752 | |
---|
| 1753 | @node Sun Install |
---|
| 1754 | @section Installing GNU CC on the Sun |
---|
| 1755 | @cindex Sun installation |
---|
| 1756 | @cindex installing GNU CC on the Sun |
---|
| 1757 | |
---|
| 1758 | On Solaris (version 2.1), do not use the linker or other tools in |
---|
| 1759 | @file{/usr/ucb} to build GNU CC. Use @code{/usr/ccs/bin}. |
---|
| 1760 | |
---|
| 1761 | Make sure the environment variable @code{FLOAT_OPTION} is not set when |
---|
| 1762 | you compile @file{libgcc.a}. If this option were set to @code{f68881} |
---|
| 1763 | when @file{libgcc.a} is compiled, the resulting code would demand to be |
---|
| 1764 | linked with a special startup file and would not link properly without |
---|
| 1765 | special pains. |
---|
| 1766 | |
---|
| 1767 | @cindex @code{alloca}, for SunOs |
---|
| 1768 | There is a bug in @code{alloca} in certain versions of the Sun library. |
---|
| 1769 | To avoid this bug, install the binaries of GNU CC that were compiled by |
---|
| 1770 | GNU CC. They use @code{alloca} as a built-in function and never the one |
---|
| 1771 | in the library. |
---|
| 1772 | |
---|
| 1773 | Some versions of the Sun compiler crash when compiling GNU CC. The |
---|
| 1774 | problem is a segmentation fault in cpp. This problem seems to be due to |
---|
| 1775 | the bulk of data in the environment variables. You may be able to avoid |
---|
| 1776 | it by using the following command to compile GNU CC with Sun CC: |
---|
| 1777 | |
---|
| 1778 | @example |
---|
| 1779 | make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc" |
---|
| 1780 | @end example |
---|
| 1781 | |
---|
| 1782 | @node VMS Install |
---|
| 1783 | @section Installing GNU CC on VMS |
---|
| 1784 | @cindex VMS installation |
---|
| 1785 | @cindex installing GNU CC on VMS |
---|
| 1786 | |
---|
| 1787 | The VMS version of GNU CC is distributed in a backup saveset containing |
---|
| 1788 | both source code and precompiled binaries. |
---|
| 1789 | |
---|
| 1790 | To install the @file{gcc} command so you can use the compiler easily, in |
---|
| 1791 | the same manner as you use the VMS C compiler, you must install the VMS CLD |
---|
| 1792 | file for GNU CC as follows: |
---|
| 1793 | |
---|
| 1794 | @enumerate |
---|
| 1795 | @item |
---|
| 1796 | Define the VMS logical names @samp{GNU_CC} and @samp{GNU_CC_INCLUDE} |
---|
| 1797 | to point to the directories where the GNU CC executables |
---|
| 1798 | (@file{gcc-cpp.exe}, @file{gcc-cc1.exe}, etc.) and the C include files are |
---|
| 1799 | kept respectively. This should be done with the commands:@refill |
---|
| 1800 | |
---|
| 1801 | @smallexample |
---|
| 1802 | $ assign /system /translation=concealed - |
---|
| 1803 | disk:[gcc.] gnu_cc |
---|
| 1804 | $ assign /system /translation=concealed - |
---|
| 1805 | disk:[gcc.include.] gnu_cc_include |
---|
| 1806 | @end smallexample |
---|
| 1807 | |
---|
| 1808 | @noindent |
---|
| 1809 | with the appropriate disk and directory names. These commands can be |
---|
| 1810 | placed in your system startup file so they will be executed whenever |
---|
| 1811 | the machine is rebooted. You may, if you choose, do this via the |
---|
| 1812 | @file{GCC_INSTALL.COM} script in the @file{[GCC]} directory. |
---|
| 1813 | |
---|
| 1814 | @item |
---|
| 1815 | Install the @file{GCC} command with the command line: |
---|
| 1816 | |
---|
| 1817 | @smallexample |
---|
| 1818 | $ set command /table=sys$common:[syslib]dcltables - |
---|
| 1819 | /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc |
---|
| 1820 | $ install replace sys$common:[syslib]dcltables |
---|
| 1821 | @end smallexample |
---|
| 1822 | |
---|
| 1823 | @item |
---|
| 1824 | To install the help file, do the following: |
---|
| 1825 | |
---|
| 1826 | @smallexample |
---|
| 1827 | $ library/help sys$library:helplib.hlb gcc.hlp |
---|
| 1828 | @end smallexample |
---|
| 1829 | |
---|
| 1830 | @noindent |
---|
| 1831 | Now you can invoke the compiler with a command like @samp{gcc /verbose |
---|
| 1832 | file.c}, which is equivalent to the command @samp{gcc -v -c file.c} in |
---|
| 1833 | Unix. |
---|
| 1834 | @end enumerate |
---|
| 1835 | |
---|
| 1836 | If you wish to use GNU C++ you must first install GNU CC, and then |
---|
| 1837 | perform the following steps: |
---|
| 1838 | |
---|
| 1839 | @enumerate |
---|
| 1840 | @item |
---|
| 1841 | Define the VMS logical name @samp{GNU_GXX_INCLUDE} to point to the |
---|
| 1842 | directory where the preprocessor will search for the C++ header files. |
---|
| 1843 | This can be done with the command:@refill |
---|
| 1844 | |
---|
| 1845 | @smallexample |
---|
| 1846 | $ assign /system /translation=concealed - |
---|
| 1847 | disk:[gcc.gxx_include.] gnu_gxx_include |
---|
| 1848 | @end smallexample |
---|
| 1849 | |
---|
| 1850 | @noindent |
---|
| 1851 | with the appropriate disk and directory name. If you are going to be |
---|
| 1852 | using libg++, this is where the libg++ install procedure will install |
---|
| 1853 | the libg++ header files. |
---|
| 1854 | |
---|
| 1855 | @item |
---|
| 1856 | Obtain the file @file{gcc-cc1plus.exe}, and place this in the same |
---|
| 1857 | directory that @file{gcc-cc1.exe} is kept. |
---|
| 1858 | |
---|
| 1859 | The GNU C++ compiler can be invoked with a command like @samp{gcc /plus |
---|
| 1860 | /verbose file.cc}, which is equivalent to the command @samp{g++ -v -c |
---|
| 1861 | file.cc} in Unix. |
---|
| 1862 | @end enumerate |
---|
| 1863 | |
---|
| 1864 | We try to put corresponding binaries and sources on the VMS distribution |
---|
| 1865 | tape. But sometimes the binaries will be from an older version than the |
---|
| 1866 | sources, because we don't always have time to update them. (Use the |
---|
| 1867 | @samp{/version} option to determine the version number of the binaries and |
---|
| 1868 | compare it with the source file @file{version.c} to tell whether this is |
---|
| 1869 | so.) In this case, you should use the binaries you get to recompile the |
---|
| 1870 | sources. If you must recompile, here is how: |
---|
| 1871 | |
---|
| 1872 | @enumerate |
---|
| 1873 | @item |
---|
| 1874 | Execute the command procedure @file{vmsconfig.com} to set up the files |
---|
| 1875 | @file{tm.h}, @file{config.h}, @file{aux-output.c}, and @file{md.}, and |
---|
| 1876 | to create files @file{tconfig.h} and @file{hconfig.h}. This procedure |
---|
| 1877 | also creates several linker option files used by @file{make-cc1.com} and |
---|
| 1878 | a data file used by @file{make-l2.com}.@refill |
---|
| 1879 | |
---|
| 1880 | @smallexample |
---|
| 1881 | $ @@vmsconfig.com |
---|
| 1882 | @end smallexample |
---|
| 1883 | |
---|
| 1884 | @item |
---|
| 1885 | Setup the logical names and command tables as defined above. In |
---|
| 1886 | addition, define the VMS logical name @samp{GNU_BISON} to point at the |
---|
| 1887 | to the directories where the Bison executable is kept. This should be |
---|
| 1888 | done with the command:@refill |
---|
| 1889 | |
---|
| 1890 | @smallexample |
---|
| 1891 | $ assign /system /translation=concealed - |
---|
| 1892 | disk:[bison.] gnu_bison |
---|
| 1893 | @end smallexample |
---|
| 1894 | |
---|
| 1895 | You may, if you choose, use the @file{INSTALL_BISON.COM} script in the |
---|
| 1896 | @file{[BISON]} directory. |
---|
| 1897 | |
---|
| 1898 | @item |
---|
| 1899 | Install the @samp{BISON} command with the command line:@refill |
---|
| 1900 | |
---|
| 1901 | @smallexample |
---|
| 1902 | $ set command /table=sys$common:[syslib]dcltables - |
---|
| 1903 | /output=sys$common:[syslib]dcltables - |
---|
| 1904 | gnu_bison:[000000]bison |
---|
| 1905 | $ install replace sys$common:[syslib]dcltables |
---|
| 1906 | @end smallexample |
---|
| 1907 | |
---|
| 1908 | @item |
---|
| 1909 | Type @samp{@@make-gcc} to recompile everything (alternatively, submit |
---|
| 1910 | the file @file{make-gcc.com} to a batch queue). If you wish to build |
---|
| 1911 | the GNU C++ compiler as well as the GNU CC compiler, you must first edit |
---|
| 1912 | @file{make-gcc.com} and follow the instructions that appear in the |
---|
| 1913 | comments.@refill |
---|
| 1914 | |
---|
| 1915 | @item |
---|
| 1916 | In order to use GCC, you need a library of functions which GCC compiled code |
---|
| 1917 | will call to perform certain tasks, and these functions are defined in the |
---|
| 1918 | file @file{libgcc2.c}. To compile this you should use the command procedure |
---|
| 1919 | @file{make-l2.com}, which will generate the library @file{libgcc2.olb}. |
---|
| 1920 | @file{libgcc2.olb} should be built using the compiler built from |
---|
| 1921 | the same distribution that @file{libgcc2.c} came from, and |
---|
| 1922 | @file{make-gcc.com} will automatically do all of this for you. |
---|
| 1923 | |
---|
| 1924 | To install the library, use the following commands:@refill |
---|
| 1925 | |
---|
| 1926 | @smallexample |
---|
| 1927 | $ library gnu_cc:[000000]gcclib/delete=(new,eprintf) |
---|
| 1928 | $ library gnu_cc:[000000]gcclib/delete=L_* |
---|
| 1929 | $ library libgcc2/extract=*/output=libgcc2.obj |
---|
| 1930 | $ library gnu_cc:[000000]gcclib libgcc2.obj |
---|
| 1931 | @end smallexample |
---|
| 1932 | |
---|
| 1933 | The first command simply removes old modules that will be replaced with |
---|
| 1934 | modules from @file{libgcc2} under different module names. The modules |
---|
| 1935 | @code{new} and @code{eprintf} may not actually be present in your |
---|
| 1936 | @file{gcclib.olb}---if the VMS librarian complains about those modules |
---|
| 1937 | not being present, simply ignore the message and continue on with the |
---|
| 1938 | next command. The second command removes the modules that came from the |
---|
| 1939 | previous version of the library @file{libgcc2.c}. |
---|
| 1940 | |
---|
| 1941 | Whenever you update the compiler on your system, you should also update the |
---|
| 1942 | library with the above procedure. |
---|
| 1943 | |
---|
| 1944 | @item |
---|
| 1945 | You may wish to build GCC in such a way that no files are written to the |
---|
| 1946 | directory where the source files reside. An example would be the when |
---|
| 1947 | the source files are on a read-only disk. In these cases, execute the |
---|
| 1948 | following DCL commands (substituting your actual path names): |
---|
| 1949 | |
---|
| 1950 | @smallexample |
---|
| 1951 | $ assign dua0:[gcc.build_dir.]/translation=concealed, - |
---|
| 1952 | dua1:[gcc.source_dir.]/translation=concealed gcc_build |
---|
| 1953 | $ set default gcc_build:[000000] |
---|
| 1954 | @end smallexample |
---|
| 1955 | |
---|
| 1956 | @noindent |
---|
| 1957 | where the directory @file{dua1:[gcc.source_dir]} contains the source |
---|
| 1958 | code, and the directory @file{dua0:[gcc.build_dir]} is meant to contain |
---|
| 1959 | all of the generated object files and executables. Once you have done |
---|
| 1960 | this, you can proceed building GCC as described above. (Keep in mind |
---|
| 1961 | that @file{gcc_build} is a rooted logical name, and thus the device |
---|
| 1962 | names in each element of the search list must be an actual physical |
---|
| 1963 | device name rather than another rooted logical name). |
---|
| 1964 | |
---|
| 1965 | @item |
---|
| 1966 | @strong{If you are building GNU CC with a previous version of GNU CC, |
---|
| 1967 | you also should check to see that you have the newest version of the |
---|
| 1968 | assembler}. In particular, GNU CC version 2 treats global constant |
---|
| 1969 | variables slightly differently from GNU CC version 1, and GAS version |
---|
| 1970 | 1.38.1 does not have the patches required to work with GCC version 2. |
---|
| 1971 | If you use GAS 1.38.1, then @code{extern const} variables will not have |
---|
| 1972 | the read-only bit set, and the linker will generate warning messages |
---|
| 1973 | about mismatched psect attributes for these variables. These warning |
---|
| 1974 | messages are merely a nuisance, and can safely be ignored. |
---|
| 1975 | |
---|
| 1976 | If you are compiling with a version of GNU CC older than 1.33, specify |
---|
| 1977 | @samp{/DEFINE=("inline=")} as an option in all the compilations. This |
---|
| 1978 | requires editing all the @code{gcc} commands in @file{make-cc1.com}. |
---|
| 1979 | (The older versions had problems supporting @code{inline}.) Once you |
---|
| 1980 | have a working 1.33 or newer GNU CC, you can change this file back. |
---|
| 1981 | |
---|
| 1982 | @item |
---|
| 1983 | If you want to build GNU CC with the VAX C compiler, you will need to |
---|
| 1984 | make minor changes in @file{make-cccp.com} and @file{make-cc1.com} |
---|
| 1985 | to choose alternate definitions of @code{CC}, @code{CFLAGS}, and |
---|
| 1986 | @code{LIBS}. See comments in those files. However, you must |
---|
| 1987 | also have a working version of the GNU assembler (GNU as, aka GAS) as |
---|
| 1988 | it is used as the back-end for GNU CC to produce binary object modules |
---|
| 1989 | and is not included in the GNU CC sources. GAS is also needed to |
---|
| 1990 | compile @file{libgcc2} in order to build @file{gcclib} (see above); |
---|
| 1991 | @file{make-l2.com} expects to be able to find it operational in |
---|
| 1992 | @file{gnu_cc:[000000]gnu-as.exe}. |
---|
| 1993 | |
---|
| 1994 | To use GNU CC on VMS, you need the VMS driver programs |
---|
| 1995 | @file{gcc.exe}, @file{gcc.com}, and @file{gcc.cld}. They are |
---|
| 1996 | distributed with the VMS binaries (@file{gcc-vms}) rather than the |
---|
| 1997 | GNU CC sources. GAS is also included in @file{gcc-vms}, as is Bison. |
---|
| 1998 | |
---|
| 1999 | Once you have successfully built GNU CC with VAX C, you should use the |
---|
| 2000 | resulting compiler to rebuild itself. Before doing this, be sure to |
---|
| 2001 | restore the @code{CC}, @code{CFLAGS}, and @code{LIBS} definitions in |
---|
| 2002 | @file{make-cccp.com} and @file{make-cc1.com}. The second generation |
---|
| 2003 | compiler will be able to take advantage of many optimizations that must |
---|
| 2004 | be suppressed when building with other compilers. |
---|
| 2005 | @end enumerate |
---|
| 2006 | |
---|
| 2007 | Under previous versions of GNU CC, the generated code would occasionally |
---|
| 2008 | give strange results when linked with the sharable @file{VAXCRTL} library. |
---|
| 2009 | Now this should work. |
---|
| 2010 | |
---|
| 2011 | Even with this version, however, GNU CC itself should not be linked with |
---|
| 2012 | the sharable @file{VAXCRTL}. The version of @code{qsort} in |
---|
| 2013 | @file{VAXCRTL} has a bug (known to be present in VMS versions V4.6 |
---|
| 2014 | through V5.5) which causes the compiler to fail. |
---|
| 2015 | |
---|
| 2016 | The executables are generated by @file{make-cc1.com} and |
---|
| 2017 | @file{make-cccp.com} use the object library version of @file{VAXCRTL} in |
---|
| 2018 | order to make use of the @code{qsort} routine in @file{gcclib.olb}. If |
---|
| 2019 | you wish to link the compiler executables with the shareable image |
---|
| 2020 | version of @file{VAXCRTL}, you should edit the file @file{tm.h} (created |
---|
| 2021 | by @file{vmsconfig.com}) to define the macro @code{QSORT_WORKAROUND}. |
---|
| 2022 | |
---|
| 2023 | @code{QSORT_WORKAROUND} is always defined when GNU CC is compiled with |
---|
| 2024 | VAX C, to avoid a problem in case @file{gcclib.olb} is not yet |
---|
| 2025 | available. |
---|
| 2026 | |
---|
| 2027 | @node Collect2 |
---|
| 2028 | @section @code{collect2} |
---|
| 2029 | |
---|
| 2030 | Many target systems do not have support in the assembler and linker for |
---|
| 2031 | ``constructors''---initialization functions to be called before the |
---|
| 2032 | official ``start'' of @code{main}. On such systems, GNU CC uses a |
---|
| 2033 | utility called @code{collect2} to arrange to call these functions at |
---|
| 2034 | start time. |
---|
| 2035 | |
---|
| 2036 | The program @code{collect2} works by linking the program once and |
---|
| 2037 | looking through the linker output file for symbols with particular names |
---|
| 2038 | indicating they are constructor functions. If it finds any, it |
---|
| 2039 | creates a new temporary @samp{.c} file containing a table of them, |
---|
| 2040 | compiles it, and links the program a second time including that file. |
---|
| 2041 | |
---|
| 2042 | @findex __main |
---|
| 2043 | @cindex constructors, automatic calls |
---|
| 2044 | The actual calls to the constructors are carried out by a subroutine |
---|
| 2045 | called @code{__main}, which is called (automatically) at the beginning |
---|
| 2046 | of the body of @code{main} (provided @code{main} was compiled with GNU |
---|
| 2047 | CC). Calling @code{__main} is necessary, even when compiling C code, to |
---|
| 2048 | allow linking C and C++ object code together. (If you use |
---|
| 2049 | @samp{-nostdlib}, you get an unresolved reference to @code{__main}, |
---|
| 2050 | since it's defined in the standard GCC library. Include @samp{-lgcc} at |
---|
| 2051 | the end of your compiler command line to resolve this reference.) |
---|
| 2052 | |
---|
| 2053 | The program @code{collect2} is installed as @code{ld} in the directory |
---|
| 2054 | where the passes of the compiler are installed. When @code{collect2} |
---|
| 2055 | needs to find the @emph{real} @code{ld}, it tries the following file |
---|
| 2056 | names: |
---|
| 2057 | |
---|
| 2058 | @itemize @bullet |
---|
| 2059 | @item |
---|
| 2060 | @file{real-ld} in the directories listed in the compiler's search |
---|
| 2061 | directories. |
---|
| 2062 | |
---|
| 2063 | @item |
---|
| 2064 | @file{real-ld} in the directories listed in the environment variable |
---|
| 2065 | @code{PATH}. |
---|
| 2066 | |
---|
| 2067 | @item |
---|
| 2068 | The file specified in the @code{REAL_LD_FILE_NAME} configuration macro, |
---|
| 2069 | if specified. |
---|
| 2070 | |
---|
| 2071 | @item |
---|
| 2072 | @file{ld} in the compiler's search directories, except that |
---|
| 2073 | @code{collect2} will not execute itself recursively. |
---|
| 2074 | |
---|
| 2075 | @item |
---|
| 2076 | @file{ld} in @code{PATH}. |
---|
| 2077 | @end itemize |
---|
| 2078 | |
---|
| 2079 | ``The compiler's search directories'' means all the directories where |
---|
| 2080 | @code{gcc} searches for passes of the compiler. This includes |
---|
| 2081 | directories that you specify with @samp{-B}. |
---|
| 2082 | |
---|
| 2083 | Cross-compilers search a little differently: |
---|
| 2084 | |
---|
| 2085 | @itemize @bullet |
---|
| 2086 | @item |
---|
| 2087 | @file{real-ld} in the compiler's search directories. |
---|
| 2088 | |
---|
| 2089 | @item |
---|
| 2090 | @file{@var{target}-real-ld} in @code{PATH}. |
---|
| 2091 | |
---|
| 2092 | @item |
---|
| 2093 | The file specified in the @code{REAL_LD_FILE_NAME} configuration macro, |
---|
| 2094 | if specified. |
---|
| 2095 | |
---|
| 2096 | @item |
---|
| 2097 | @file{ld} in the compiler's search directories. |
---|
| 2098 | |
---|
| 2099 | @item |
---|
| 2100 | @file{@var{target}-ld} in @code{PATH}. |
---|
| 2101 | @end itemize |
---|
| 2102 | |
---|
| 2103 | @code{collect2} explicitly avoids running @code{ld} using the file name |
---|
| 2104 | under which @code{collect2} itself was invoked. In fact, it remembers |
---|
| 2105 | up a list of such names---in case one copy of @code{collect2} finds |
---|
| 2106 | another copy (or version) of @code{collect2} installed as @code{ld} in a |
---|
| 2107 | second place in the search path. |
---|
| 2108 | |
---|
| 2109 | @code{collect2} searches for the utilities @code{nm} and @code{strip} |
---|
| 2110 | using the same algorithm as above for @code{ld}. |
---|
| 2111 | |
---|
| 2112 | @node Header Dirs |
---|
| 2113 | @section Standard Header File Directories |
---|
| 2114 | |
---|
| 2115 | @code{GCC_INCLUDE_DIR} means the same thing for native and cross. It is |
---|
| 2116 | where GNU CC stores its private include files, and also where GNU CC |
---|
| 2117 | stores the fixed include files. A cross compiled GNU CC runs |
---|
| 2118 | @code{fixincludes} on the header files in @file{$(tooldir)/include}. |
---|
| 2119 | (If the cross compilation header files need to be fixed, they must be |
---|
| 2120 | installed before GNU CC is built. If the cross compilation header files |
---|
| 2121 | are already suitable for ANSI C and GNU CC, nothing special need be |
---|
| 2122 | done). |
---|
| 2123 | |
---|
| 2124 | @code{GPLUS_INCLUDE_DIR} means the same thing for native and cross. It |
---|
| 2125 | is where @code{g++} looks first for header files. @code{libg++} |
---|
| 2126 | installs only target independent header files in that directory. |
---|
| 2127 | |
---|
| 2128 | @code{LOCAL_INCLUDE_DIR} is used only for a native compiler. It is |
---|
| 2129 | normally @file{/usr/local/include}. GNU CC searches this directory so |
---|
| 2130 | that users can install header files in @file{/usr/local/include}. |
---|
| 2131 | |
---|
| 2132 | @code{CROSS_INCLUDE_DIR} is used only for a cross compiler. GNU CC |
---|
| 2133 | doesn't install anything there. |
---|
| 2134 | |
---|
| 2135 | @code{TOOL_INCLUDE_DIR} is used for both native and cross compilers. It |
---|
| 2136 | is the place for other packages to install header files that GNU CC will |
---|
| 2137 | use. For a cross-compiler, this is the equivalent of |
---|
| 2138 | @file{/usr/include}. When you build a cross-compiler, |
---|
| 2139 | @code{fixincludes} processes any header files in this directory. |
---|