| 1 | This is configure.info, produced by makeinfo version 4.0 from
|
|---|
| 2 | ./configure.texi.
|
|---|
| 3 |
|
|---|
| 4 | INFO-DIR-SECTION GNU admin
|
|---|
| 5 | START-INFO-DIR-ENTRY
|
|---|
| 6 | * configure: (configure). The GNU configure and build system
|
|---|
| 7 | END-INFO-DIR-ENTRY
|
|---|
| 8 |
|
|---|
| 9 | This file documents the GNU configure and build system.
|
|---|
| 10 |
|
|---|
| 11 | Copyright (C) 1998 Cygnus Solutions.
|
|---|
| 12 |
|
|---|
| 13 | Permission is granted to make and distribute verbatim copies of this
|
|---|
| 14 | manual provided the copyright notice and this permission notice are
|
|---|
| 15 | preserved on all copies.
|
|---|
| 16 |
|
|---|
| 17 | Permission is granted to copy and distribute modified versions of
|
|---|
| 18 | this manual under the conditions for verbatim copying, provided that
|
|---|
| 19 | the entire resulting derived work is distributed under the terms of a
|
|---|
| 20 | permission notice identical to this one.
|
|---|
| 21 |
|
|---|
| 22 | Permission is granted to copy and distribute translations of this
|
|---|
| 23 | manual into another language, under the above conditions for modified
|
|---|
| 24 | versions, except that this permission notice may be stated in a
|
|---|
| 25 | translation approved by the Foundation.
|
|---|
| 26 |
|
|---|
| 27 |
|
|---|
| 28 | File: configure.info, Node: Configuration Name Definition, Next: Using Configuration Names, Up: Configuration Names
|
|---|
| 29 |
|
|---|
| 30 | Configuration Name Definition
|
|---|
| 31 | =============================
|
|---|
| 32 |
|
|---|
| 33 | This is a string of the form CPU-MANUFACTURER-OPERATING_SYSTEM. In
|
|---|
| 34 | some cases, this is extended to a four part form:
|
|---|
| 35 | CPU-MANUFACTURER-KERNEL-OPERATING_SYSTEM.
|
|---|
| 36 |
|
|---|
| 37 | When using a configuration name in a configure option, it is normally
|
|---|
| 38 | not necessary to specify an entire name. In particular, the
|
|---|
| 39 | MANUFACTURER field is often omitted, leading to strings such as
|
|---|
| 40 | `i386-linux' or `sparc-sunos'. The shell script `config.sub' will
|
|---|
| 41 | translate these shortened strings into the canonical form. autoconf
|
|---|
| 42 | will arrange for `config.sub' to be run automatically when it is needed.
|
|---|
| 43 |
|
|---|
| 44 | The fields of a configuration name are as follows:
|
|---|
| 45 |
|
|---|
| 46 | CPU
|
|---|
| 47 | The type of processor. This is typically something like `i386' or
|
|---|
| 48 | `sparc'. More specific variants are used as well, such as
|
|---|
| 49 | `mipsel' to indicate a little endian MIPS processor.
|
|---|
| 50 |
|
|---|
| 51 | MANUFACTURER
|
|---|
| 52 | A somewhat freeform field which indicates the manufacturer of the
|
|---|
| 53 | system. This is often simply `unknown'. Other common strings are
|
|---|
| 54 | `pc' for an IBM PC compatible system, or the name of a workstation
|
|---|
| 55 | vendor, such as `sun'.
|
|---|
| 56 |
|
|---|
| 57 | OPERATING_SYSTEM
|
|---|
| 58 | The name of the operating system which is run on the system. This
|
|---|
| 59 | will be something like `solaris2.5' or `irix6.3'. There is no
|
|---|
| 60 | particular restriction on the version number, and strings like
|
|---|
| 61 | `aix4.1.4.0' are seen. For an embedded system, which has no
|
|---|
| 62 | operating system, this field normally indicates the type of object
|
|---|
| 63 | file format, such as `elf' or `coff'.
|
|---|
| 64 |
|
|---|
| 65 | KERNEL
|
|---|
| 66 | This is used mainly for GNU/Linux. A typical GNU/Linux
|
|---|
| 67 | configuration name is `i586-pc-linux-gnulibc1'. In this case the
|
|---|
| 68 | kernel, `linux', is separated from the operating system,
|
|---|
| 69 | `gnulibc1'.
|
|---|
| 70 |
|
|---|
| 71 | The shell script `config.guess' will normally print the correct
|
|---|
| 72 | configuration name for the system on which it is run. It does by
|
|---|
| 73 | running `uname' and by examining other characteristics of the system.
|
|---|
| 74 |
|
|---|
| 75 | Because `config.guess' can normally determine the configuration name
|
|---|
| 76 | for a machine, it is normally only necessary to specify a configuration
|
|---|
| 77 | name when building a cross-compiler or when building using a
|
|---|
| 78 | cross-compiler.
|
|---|
| 79 |
|
|---|
| 80 |
|
|---|
| 81 | File: configure.info, Node: Using Configuration Names, Prev: Configuration Name Definition, Up: Configuration Names
|
|---|
| 82 |
|
|---|
| 83 | Using Configuration Names
|
|---|
| 84 | =========================
|
|---|
| 85 |
|
|---|
| 86 | A configure script will sometimes have to make a decision based on a
|
|---|
| 87 | configuration name. You will need to do this if you have to compile
|
|---|
| 88 | code differently based on something which can not be tested using a
|
|---|
| 89 | standard autoconf feature test.
|
|---|
| 90 |
|
|---|
| 91 | It is normally better to test for particular features, rather than to
|
|---|
| 92 | test for a particular system. This is because as Unix evolves,
|
|---|
| 93 | different systems copy features from one another. Even if you need to
|
|---|
| 94 | determine whether the feature is supported based on a configuration
|
|---|
| 95 | name, you should define a macro which describes the feature, rather than
|
|---|
| 96 | defining a macro which describes the particular system you are on.
|
|---|
| 97 |
|
|---|
| 98 | Testing for a particular system is normally done using a case
|
|---|
| 99 | statement in `configure.in'. The case statement might look something
|
|---|
| 100 | like the following, assuming that `host' is a shell variable holding a
|
|---|
| 101 | canonical configuration name (which will be the case if `configure.in'
|
|---|
| 102 | uses the `AC_CANONICAL_HOST' or `AC_CANONICAL_SYSTEM' macro).
|
|---|
| 103 |
|
|---|
| 104 | case "${host}" in
|
|---|
| 105 | i[3456]86-*-linux-gnu*) do something ;;
|
|---|
| 106 | sparc*-sun-solaris2.[56789]*) do something ;;
|
|---|
| 107 | sparc*-sun-solaris*) do something ;;
|
|---|
| 108 | mips*-*-elf*) do something ;;
|
|---|
| 109 | esac
|
|---|
| 110 |
|
|---|
| 111 | It is particularly important to use `*' after the operating system
|
|---|
| 112 | field, in order to match the version number which will be generated by
|
|---|
| 113 | `config.guess'.
|
|---|
| 114 |
|
|---|
| 115 | In most cases you must be careful to match a range of processor
|
|---|
| 116 | types. For most processor families, a trailing `*' suffices, as in
|
|---|
| 117 | `mips*' above. For the i386 family, something along the lines of
|
|---|
| 118 | `i[3456]86' suffices at present. For the m68k family, you will need
|
|---|
| 119 | something like `m68*'. Of course, if you do not need to match on the
|
|---|
| 120 | processor, it is simpler to just replace the entire field by a `*', as
|
|---|
| 121 | in `*-*-irix*'.
|
|---|
| 122 |
|
|---|
| 123 |
|
|---|
| 124 | File: configure.info, Node: Cross Compilation Tools, Next: Canadian Cross, Prev: Configuration Names, Up: Top
|
|---|
| 125 |
|
|---|
| 126 | Cross Compilation Tools
|
|---|
| 127 | ***********************
|
|---|
| 128 |
|
|---|
| 129 | The GNU configure and build system can be used to build "cross
|
|---|
| 130 | compilation" tools. A cross compilation tool is a tool which runs on
|
|---|
| 131 | one system and produces code which runs on another system.
|
|---|
| 132 |
|
|---|
| 133 | * Menu:
|
|---|
| 134 |
|
|---|
| 135 | * Cross Compilation Concepts:: Cross Compilation Concepts.
|
|---|
| 136 | * Host and Target:: Host and Target.
|
|---|
| 137 | * Using the Host Type:: Using the Host Type.
|
|---|
| 138 | * Specifying the Target:: Specifying the Target.
|
|---|
| 139 | * Using the Target Type:: Using the Target Type.
|
|---|
| 140 | * Cross Tools in the Cygnus Tree:: Cross Tools in the Cygnus Tree
|
|---|
| 141 |
|
|---|
| 142 |
|
|---|
| 143 | File: configure.info, Node: Cross Compilation Concepts, Next: Host and Target, Up: Cross Compilation Tools
|
|---|
| 144 |
|
|---|
| 145 | Cross Compilation Concepts
|
|---|
| 146 | ==========================
|
|---|
| 147 |
|
|---|
| 148 | A compiler which produces programs which run on a different system
|
|---|
| 149 | is a cross compilation compiler, or simply a "cross compiler".
|
|---|
| 150 | Similarly, we speak of cross assemblers, cross linkers, etc.
|
|---|
| 151 |
|
|---|
| 152 | In the normal case, a compiler produces code which runs on the same
|
|---|
| 153 | system as the one on which the compiler runs. When it is necessary to
|
|---|
| 154 | distinguish this case from the cross compilation case, such a compiler
|
|---|
| 155 | is called a "native compiler". Similarly, we speak of native
|
|---|
| 156 | assemblers, etc.
|
|---|
| 157 |
|
|---|
| 158 | Although the debugger is not strictly speaking a compilation tool,
|
|---|
| 159 | it is nevertheless meaningful to speak of a cross debugger: a debugger
|
|---|
| 160 | which is used to debug code which runs on another system. Everything
|
|---|
| 161 | that is said below about configuring cross compilation tools applies to
|
|---|
| 162 | the debugger as well.
|
|---|
| 163 |
|
|---|
| 164 |
|
|---|
| 165 | File: configure.info, Node: Host and Target, Next: Using the Host Type, Prev: Cross Compilation Concepts, Up: Cross Compilation Tools
|
|---|
| 166 |
|
|---|
| 167 | Host and Target
|
|---|
| 168 | ===============
|
|---|
| 169 |
|
|---|
| 170 | When building cross compilation tools, there are two different
|
|---|
| 171 | systems involved: the system on which the tools will run, and the
|
|---|
| 172 | system for which the tools generate code.
|
|---|
| 173 |
|
|---|
| 174 | The system on which the tools will run is called the "host" system.
|
|---|
| 175 |
|
|---|
| 176 | The system for which the tools generate code is called the "target"
|
|---|
| 177 | system.
|
|---|
| 178 |
|
|---|
| 179 | For example, suppose you have a compiler which runs on a GNU/Linux
|
|---|
| 180 | system and generates ELF programs for a MIPS embedded system. In this
|
|---|
| 181 | case the GNU/Linux system is the host, and the MIPS ELF system is the
|
|---|
| 182 | target. Such a compiler could be called a GNU/Linux cross MIPS ELF
|
|---|
| 183 | compiler, or, equivalently, a `i386-linux-gnu' cross `mips-elf'
|
|---|
| 184 | compiler.
|
|---|
| 185 |
|
|---|
| 186 | Naturally, most programs are not cross compilation tools. For those
|
|---|
| 187 | programs, it does not make sense to speak of a target. It only makes
|
|---|
| 188 | sense to speak of a target for tools like `gcc' or the `binutils' which
|
|---|
| 189 | actually produce running code. For example, it does not make sense to
|
|---|
| 190 | speak of the target of a tool like `bison' or `make'.
|
|---|
| 191 |
|
|---|
| 192 | Most cross compilation tools can also serve as native tools. For a
|
|---|
| 193 | native compilation tool, it is still meaningful to speak of a target.
|
|---|
| 194 | For a native tool, the target is the same as the host. For example, for
|
|---|
| 195 | a GNU/Linux native compiler, the host is GNU/Linux, and the target is
|
|---|
| 196 | also GNU/Linux.
|
|---|
| 197 |
|
|---|
| 198 |
|
|---|
| 199 | File: configure.info, Node: Using the Host Type, Next: Specifying the Target, Prev: Host and Target, Up: Cross Compilation Tools
|
|---|
| 200 |
|
|---|
| 201 | Using the Host Type
|
|---|
| 202 | ===================
|
|---|
| 203 |
|
|---|
| 204 | In almost all cases the host system is the system on which you run
|
|---|
| 205 | the `configure' script, and on which you build the tools (for the case
|
|---|
| 206 | when they differ, *note Canadian Cross::).
|
|---|
| 207 |
|
|---|
| 208 | If your configure script needs to know the configuration name of the
|
|---|
| 209 | host system, and the package is not a cross compilation tool and
|
|---|
| 210 | therefore does not have a target, put `AC_CANONICAL_HOST' in
|
|---|
| 211 | `configure.in'. This macro will arrange to define a few shell
|
|---|
| 212 | variables when the `configure' script is run.
|
|---|
| 213 |
|
|---|
| 214 | `host'
|
|---|
| 215 | The canonical configuration name of the host. This will normally
|
|---|
| 216 | be determined by running the `config.guess' shell script, although
|
|---|
| 217 | the user is permitted to override this by using an explicit
|
|---|
| 218 | `--host' option.
|
|---|
| 219 |
|
|---|
| 220 | `host_alias'
|
|---|
| 221 | In the unusual case that the user used an explicit `--host' option,
|
|---|
| 222 | this will be the argument to `--host'. In the normal case, this
|
|---|
| 223 | will be the same as the `host' variable.
|
|---|
| 224 |
|
|---|
| 225 | `host_cpu'
|
|---|
| 226 | `host_vendor'
|
|---|
| 227 | `host_os'
|
|---|
| 228 | The first three parts of the canonical configuration name.
|
|---|
| 229 |
|
|---|
| 230 | The shell variables may be used by putting shell code in
|
|---|
| 231 | `configure.in'. For an example, see *Note Using Configuration Names::.
|
|---|
| 232 |
|
|---|
| 233 |
|
|---|
| 234 | File: configure.info, Node: Specifying the Target, Next: Using the Target Type, Prev: Using the Host Type, Up: Cross Compilation Tools
|
|---|
| 235 |
|
|---|
| 236 | Specifying the Target
|
|---|
| 237 | =====================
|
|---|
| 238 |
|
|---|
| 239 | By default, the `configure' script will assume that the target is
|
|---|
| 240 | the same as the host. This is the more common case; for example, it
|
|---|
| 241 | leads to a native compiler rather than a cross compiler.
|
|---|
| 242 |
|
|---|
| 243 | If you want to build a cross compilation tool, you must specify the
|
|---|
| 244 | target explicitly by using the `--target' option when you run
|
|---|
| 245 | `configure'. The argument to `--target' is the configuration name of
|
|---|
| 246 | the system for which you wish to generate code. *Note Configuration
|
|---|
| 247 | Names::.
|
|---|
| 248 |
|
|---|
| 249 | For example, to build tools which generate code for a MIPS ELF
|
|---|
| 250 | embedded system, you would use `--target mips-elf'.
|
|---|
| 251 |
|
|---|
| 252 |
|
|---|
| 253 | File: configure.info, Node: Using the Target Type, Next: Cross Tools in the Cygnus Tree, Prev: Specifying the Target, Up: Cross Compilation Tools
|
|---|
| 254 |
|
|---|
| 255 | Using the Target Type
|
|---|
| 256 | =====================
|
|---|
| 257 |
|
|---|
| 258 | When writing `configure.in' for a cross compilation tool, you will
|
|---|
| 259 | need to use information about the target. To do this, put
|
|---|
| 260 | `AC_CANONICAL_SYSTEM' in `configure.in'.
|
|---|
| 261 |
|
|---|
| 262 | `AC_CANONICAL_SYSTEM' will look for a `--target' option and
|
|---|
| 263 | canonicalize it using the `config.sub' shell script. It will also run
|
|---|
| 264 | `AC_CANONICAL_HOST' (*note Using the Host Type::).
|
|---|
| 265 |
|
|---|
| 266 | The target type will be recorded in the following shell variables.
|
|---|
| 267 | Note that the host versions of these variables will also be defined by
|
|---|
| 268 | `AC_CANONICAL_HOST'.
|
|---|
| 269 |
|
|---|
| 270 | `target'
|
|---|
| 271 | The canonical configuration name of the target.
|
|---|
| 272 |
|
|---|
| 273 | `target_alias'
|
|---|
| 274 | The argument to the `--target' option. If the user did not specify
|
|---|
| 275 | a `--target' option, this will be the same as `host_alias'.
|
|---|
| 276 |
|
|---|
| 277 | `target_cpu'
|
|---|
| 278 | `target_vendor'
|
|---|
| 279 | `target_os'
|
|---|
| 280 | The first three parts of the canonical target configuration name.
|
|---|
| 281 |
|
|---|
| 282 | Note that if `host' and `target' are the same string, you can assume
|
|---|
| 283 | a native configuration. If they are different, you can assume a cross
|
|---|
| 284 | configuration.
|
|---|
| 285 |
|
|---|
| 286 | It is arguably possible for `host' and `target' to represent the
|
|---|
| 287 | same system, but for the strings to not be identical. For example, if
|
|---|
| 288 | `config.guess' returns `sparc-sun-sunos4.1.4', and somebody configures
|
|---|
| 289 | with `--target sparc-sun-sunos4.1', then the slight differences between
|
|---|
| 290 | the two versions of SunOS may be unimportant for your tool. However,
|
|---|
| 291 | in the general case it can be quite difficult to determine whether the
|
|---|
| 292 | differences between two configuration names are significant or not.
|
|---|
| 293 | Therefore, by convention, if the user specifies a `--target' option
|
|---|
| 294 | without specifying a `--host' option, it is assumed that the user wants
|
|---|
| 295 | to configure a cross compilation tool.
|
|---|
| 296 |
|
|---|
| 297 | The variables `target' and `target_alias' should be handled
|
|---|
| 298 | differently.
|
|---|
| 299 |
|
|---|
| 300 | In general, whenever the user may actually see a string,
|
|---|
| 301 | `target_alias' should be used. This includes anything which may appear
|
|---|
| 302 | in the file system, such as a directory name or part of a tool name.
|
|---|
| 303 | It also includes any tool output, unless it is clearly labelled as the
|
|---|
| 304 | canonical target configuration name. This permits the user to use the
|
|---|
| 305 | `--target' option to specify how the tool will appear to the outside
|
|---|
| 306 | world.
|
|---|
| 307 |
|
|---|
| 308 | On the other hand, when checking for characteristics of the target
|
|---|
| 309 | system, `target' should be used. This is because a wide variety of
|
|---|
| 310 | `--target' options may map into the same canonical configuration name.
|
|---|
| 311 | You should not attempt to duplicate the canonicalization done by
|
|---|
| 312 | `config.sub' in your own code.
|
|---|
| 313 |
|
|---|
| 314 | By convention, cross tools are installed with a prefix of the
|
|---|
| 315 | argument used with the `--target' option, also known as `target_alias'
|
|---|
| 316 | (*note Using the Target Type::). If the user does not use the
|
|---|
| 317 | `--target' option, and thus is building a native tool, no prefix is
|
|---|
| 318 | used.
|
|---|
| 319 |
|
|---|
| 320 | For example, if gcc is configured with `--target mips-elf', then the
|
|---|
| 321 | installed binary will be named `mips-elf-gcc'. If gcc is configured
|
|---|
| 322 | without a `--target' option, then the installed binary will be named
|
|---|
| 323 | `gcc'.
|
|---|
| 324 |
|
|---|
| 325 | The autoconf macro `AC_ARG_PROGRAM' will handle this for you. If
|
|---|
| 326 | you are using automake, no more need be done; the programs will
|
|---|
| 327 | automatically be installed with the correct prefixes. Otherwise, see
|
|---|
| 328 | the autoconf documentation for `AC_ARG_PROGRAM'.
|
|---|
| 329 |
|
|---|
| 330 |
|
|---|
| 331 | File: configure.info, Node: Cross Tools in the Cygnus Tree, Prev: Using the Target Type, Up: Cross Compilation Tools
|
|---|
| 332 |
|
|---|
| 333 | Cross Tools in the Cygnus Tree
|
|---|
| 334 | ==============================
|
|---|
| 335 |
|
|---|
| 336 | The Cygnus tree is used for various packages including gdb, the GNU
|
|---|
| 337 | binutils, and egcs. It is also, of course, used for Cygnus releases.
|
|---|
| 338 |
|
|---|
| 339 | In the Cygnus tree, the top level `configure' script uses the old
|
|---|
| 340 | Cygnus configure system, not autoconf. The top level `Makefile.in' is
|
|---|
| 341 | written to build packages based on what is in the source tree, and
|
|---|
| 342 | supports building a large number of tools in a single
|
|---|
| 343 | `configure'/`make' step.
|
|---|
| 344 |
|
|---|
| 345 | The Cygnus tree may be configured with a `--target' option. The
|
|---|
| 346 | `--target' option applies recursively to every subdirectory, and
|
|---|
| 347 | permits building an entire set of cross tools at once.
|
|---|
| 348 |
|
|---|
| 349 | * Menu:
|
|---|
| 350 |
|
|---|
| 351 | * Host and Target Libraries:: Host and Target Libraries.
|
|---|
| 352 | * Target Library Configure Scripts:: Target Library Configure Scripts.
|
|---|
| 353 | * Make Targets in Cygnus Tree:: Make Targets in Cygnus Tree.
|
|---|
| 354 | * Target libiberty:: Target libiberty
|
|---|
| 355 |
|
|---|
| 356 |
|
|---|
| 357 | File: configure.info, Node: Host and Target Libraries, Next: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree
|
|---|
| 358 |
|
|---|
| 359 | Host and Target Libraries
|
|---|
| 360 | -------------------------
|
|---|
| 361 |
|
|---|
| 362 | The Cygnus tree distinguishes host libraries from target libraries.
|
|---|
| 363 |
|
|---|
| 364 | Host libraries are built with the compiler used to build the programs
|
|---|
| 365 | which run on the host, which is called the host compiler. This includes
|
|---|
| 366 | libraries such as `bfd' and `tcl'. These libraries are built with the
|
|---|
| 367 | host compiler, and are linked into programs like the binutils or gcc
|
|---|
| 368 | which run on the host.
|
|---|
| 369 |
|
|---|
| 370 | Target libraries are built with the target compiler. If gcc is
|
|---|
| 371 | present in the source tree, then the target compiler is the gcc that is
|
|---|
| 372 | built using the host compiler. Target libraries are libraries such as
|
|---|
| 373 | `newlib' and `libstdc++'. These libraries are not linked into the host
|
|---|
| 374 | programs, but are instead made available for use with programs built
|
|---|
| 375 | with the target compiler.
|
|---|
| 376 |
|
|---|
| 377 | For the rest of this section, assume that gcc is present in the
|
|---|
| 378 | source tree, so that it will be used to build the target libraries.
|
|---|
| 379 |
|
|---|
| 380 | There is a complication here. The configure process needs to know
|
|---|
| 381 | which compiler you are going to use to build a tool; otherwise, the
|
|---|
| 382 | feature tests will not work correctly. The Cygnus tree handles this by
|
|---|
| 383 | not configuring the target libraries until the target compiler is
|
|---|
| 384 | built. In order to permit everything to build using a single
|
|---|
| 385 | `configure'/`make', the configuration of the target libraries is
|
|---|
| 386 | actually triggered during the make step.
|
|---|
| 387 |
|
|---|
| 388 | When the target libraries are configured, the `--target' option is
|
|---|
| 389 | not used. Instead, the `--host' option is used with the argument of
|
|---|
| 390 | the `--target' option for the overall configuration. If no `--target'
|
|---|
| 391 | option was used for the overall configuration, the `--host' option will
|
|---|
| 392 | be passed with the output of the `config.guess' shell script. Any
|
|---|
| 393 | `--build' option is passed down unchanged.
|
|---|
| 394 |
|
|---|
| 395 | This translation of configuration options is done because since the
|
|---|
| 396 | target libraries are compiled with the target compiler, they are being
|
|---|
| 397 | built in order to run on the target of the overall configuration. By
|
|---|
| 398 | the definition of host, this means that their host system is the same as
|
|---|
| 399 | the target system of the overall configuration.
|
|---|
| 400 |
|
|---|
| 401 | The same process is used for both a native configuration and a cross
|
|---|
| 402 | configuration. Even when using a native configuration, the target
|
|---|
| 403 | libraries will be configured and built using the newly built compiler.
|
|---|
| 404 | This is particularly important for the C++ libraries, since there is no
|
|---|
| 405 | reason to assume that the C++ compiler used to build the host tools (if
|
|---|
| 406 | there even is one) uses the same ABI as the g++ compiler which will be
|
|---|
| 407 | used to build the target libraries.
|
|---|
| 408 |
|
|---|
| 409 | There is one difference between a native configuration and a cross
|
|---|
| 410 | configuration. In a native configuration, the target libraries are
|
|---|
| 411 | normally configured and built as siblings of the host tools. In a cross
|
|---|
| 412 | configuration, the target libraries are normally built in a subdirectory
|
|---|
| 413 | whose name is the argument to `--target'. This is mainly for
|
|---|
| 414 | historical reasons.
|
|---|
| 415 |
|
|---|
| 416 | To summarize, running `configure' in the Cygnus tree configures all
|
|---|
| 417 | the host libraries and tools, but does not configure any of the target
|
|---|
| 418 | libraries. Running `make' then does the following steps:
|
|---|
| 419 |
|
|---|
| 420 | * Build the host libraries.
|
|---|
| 421 |
|
|---|
| 422 | * Build the host programs, including gcc. Note that we call gcc
|
|---|
| 423 | both a host program (since it runs on the host) and a target
|
|---|
| 424 | compiler (since it generates code for the target).
|
|---|
| 425 |
|
|---|
| 426 | * Using the newly built target compiler, configure the target
|
|---|
| 427 | libraries.
|
|---|
| 428 |
|
|---|
| 429 | * Build the target libraries.
|
|---|
| 430 |
|
|---|
| 431 | The steps need not be done in precisely this order, since they are
|
|---|
| 432 | actually controlled by `Makefile' targets.
|
|---|
| 433 |
|
|---|
| 434 |
|
|---|
| 435 | File: configure.info, Node: Target Library Configure Scripts, Next: Make Targets in Cygnus Tree, Prev: Host and Target Libraries, Up: Cross Tools in the Cygnus Tree
|
|---|
| 436 |
|
|---|
| 437 | Target Library Configure Scripts
|
|---|
| 438 | --------------------------------
|
|---|
| 439 |
|
|---|
| 440 | There are a few things you must know in order to write a configure
|
|---|
| 441 | script for a target library. This is just a quick sketch, and beginners
|
|---|
| 442 | shouldn't worry if they don't follow everything here.
|
|---|
| 443 |
|
|---|
| 444 | The target libraries are configured and built using a newly built
|
|---|
| 445 | target compiler. There may not be any startup files or libraries for
|
|---|
| 446 | this target compiler. In fact, those files will probably be built as
|
|---|
| 447 | part of some target library, which naturally means that they will not
|
|---|
| 448 | exist when your target library is configured.
|
|---|
| 449 |
|
|---|
| 450 | This means that the configure script for a target library may not use
|
|---|
| 451 | any test which requires doing a link. This unfortunately includes many
|
|---|
| 452 | useful autoconf macros, such as `AC_CHECK_FUNCS'. autoconf macros
|
|---|
| 453 | which do a compile but not a link, such as `AC_CHECK_HEADERS', may be
|
|---|
| 454 | used.
|
|---|
| 455 |
|
|---|
| 456 | This is a severe restriction, but normally not a fatal one, as target
|
|---|
| 457 | libraries can often assume the presence of other target libraries, and
|
|---|
| 458 | thus know which functions will be available.
|
|---|
| 459 |
|
|---|
| 460 | As of this writing, the autoconf macro `AC_PROG_CC' does a link to
|
|---|
| 461 | make sure that the compiler works. This may fail in a target library,
|
|---|
| 462 | so target libraries must use a different set of macros to locate the
|
|---|
| 463 | compiler. See the `configure.in' file in a directory like `libiberty'
|
|---|
| 464 | or `libgloss' for an example.
|
|---|
| 465 |
|
|---|
| 466 | As noted in the previous section, target libraries are sometimes
|
|---|
| 467 | built in directories which are siblings to the host tools, and are
|
|---|
| 468 | sometimes built in a subdirectory. The `--with-target-subdir' configure
|
|---|
| 469 | option will be passed when the library is configured. Its value will be
|
|---|
| 470 | an empty string if the target library is a sibling. Its value will be
|
|---|
| 471 | the name of the subdirectory if the target library is in a subdirectory.
|
|---|
| 472 |
|
|---|
| 473 | If the overall build is not a native build (i.e., the overall
|
|---|
| 474 | configure used the `--target' option), then the library will be
|
|---|
| 475 | configured with the `--with-cross-host' option. The value of this
|
|---|
| 476 | option will be the host system of the overall build. Recall that the
|
|---|
| 477 | host system of the library will be the target of the overall build. If
|
|---|
| 478 | the overall build is a native build, the `--with-cross-host' option
|
|---|
| 479 | will not be used.
|
|---|
| 480 |
|
|---|
| 481 | A library which can be built both standalone and as a target library
|
|---|
| 482 | may want to install itself into different directories depending upon the
|
|---|
| 483 | case. When built standalone, or when built native, the library should
|
|---|
| 484 | be installed in `$(libdir)'. When built as a target library which is
|
|---|
| 485 | not native, the library should be installed in `$(tooldir)/lib'. The
|
|---|
| 486 | `--with-cross-host' option may be used to distinguish these cases.
|
|---|
| 487 |
|
|---|
| 488 | This same test of `--with-cross-host' may be used to see whether it
|
|---|
| 489 | is OK to use link tests in the configure script. If the
|
|---|
| 490 | `--with-cross-host' option is not used, then the library is being built
|
|---|
| 491 | either standalone or native, and a link should work.
|
|---|
| 492 |
|
|---|
| 493 |
|
|---|
| 494 | File: configure.info, Node: Make Targets in Cygnus Tree, Next: Target libiberty, Prev: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree
|
|---|
| 495 |
|
|---|
| 496 | Make Targets in Cygnus Tree
|
|---|
| 497 | ---------------------------
|
|---|
| 498 |
|
|---|
| 499 | The top level `Makefile' in the Cygnus tree defines targets for
|
|---|
| 500 | every known subdirectory.
|
|---|
| 501 |
|
|---|
| 502 | For every subdirectory DIR which holds a host library or program,
|
|---|
| 503 | the `Makefile' target `all-DIR' will build that library or program.
|
|---|
| 504 |
|
|---|
| 505 | There are dependencies among host tools. For example, building gcc
|
|---|
| 506 | requires first building gas, because the gcc build process invokes the
|
|---|
| 507 | target assembler. These dependencies are reflected in the top level
|
|---|
| 508 | `Makefile'.
|
|---|
| 509 |
|
|---|
| 510 | For every subdirectory DIR which holds a target library, the
|
|---|
| 511 | `Makefile' target `configure-target-DIR' will configure that library.
|
|---|
| 512 | The `Makefile' target `all-target-DIR' will build that library.
|
|---|
| 513 |
|
|---|
| 514 | Every `configure-target-DIR' target depends upon `all-gcc', since
|
|---|
| 515 | gcc, the target compiler, is required to configure the tool. Every
|
|---|
| 516 | `all-target-DIR' target depends upon the corresponding
|
|---|
| 517 | `configure-target-DIR' target.
|
|---|
| 518 |
|
|---|
| 519 | There are several other targets which may be of interest for each
|
|---|
| 520 | directory: `install-DIR', `clean-DIR', and `check-DIR'. There are also
|
|---|
| 521 | corresponding `target' versions of these for the target libraries ,
|
|---|
| 522 | such as `install-target-DIR'.
|
|---|
| 523 |
|
|---|
| 524 |
|
|---|
| 525 | File: configure.info, Node: Target libiberty, Prev: Make Targets in Cygnus Tree, Up: Cross Tools in the Cygnus Tree
|
|---|
| 526 |
|
|---|
| 527 | Target libiberty
|
|---|
| 528 | ----------------
|
|---|
| 529 |
|
|---|
| 530 | The `libiberty' subdirectory is currently a special case, in that it
|
|---|
| 531 | is the only directory which is built both using the host compiler and
|
|---|
| 532 | using the target compiler.
|
|---|
| 533 |
|
|---|
| 534 | This is because the files in `libiberty' are used when building the
|
|---|
| 535 | host tools, and they are also incorporated into the `libstdc++' target
|
|---|
| 536 | library as support code.
|
|---|
| 537 |
|
|---|
| 538 | This duality does not pose any particular difficulties. It means
|
|---|
| 539 | that there are targets for both `all-libiberty' and
|
|---|
| 540 | `all-target-libiberty'.
|
|---|
| 541 |
|
|---|
| 542 | In a native configuration, when target libraries are not built in a
|
|---|
| 543 | subdirectory, the same objects are normally used as both the host build
|
|---|
| 544 | and the target build. This is normally OK, since libiberty contains
|
|---|
| 545 | only C code, and in a native configuration the results of the host
|
|---|
| 546 | compiler and the target compiler are normally interoperable.
|
|---|
| 547 |
|
|---|
| 548 | Irix 6 is again an exception here, since the SGI native compiler
|
|---|
| 549 | defaults to using the `O32' ABI, and gcc defaults to using the `N32'
|
|---|
| 550 | ABI. On Irix 6, the target libraries are built in a subdirectory even
|
|---|
| 551 | for a native configuration, avoiding this problem.
|
|---|
| 552 |
|
|---|
| 553 | There are currently no other libraries built for both the host and
|
|---|
| 554 | the target, but there is no conceptual problem with adding more.
|
|---|
| 555 |
|
|---|
| 556 |
|
|---|
| 557 | File: configure.info, Node: Canadian Cross, Next: Cygnus Configure, Prev: Cross Compilation Tools, Up: Top
|
|---|
| 558 |
|
|---|
| 559 | Canadian Cross
|
|---|
| 560 | **************
|
|---|
| 561 |
|
|---|
| 562 | It is possible to use the GNU configure and build system to build a
|
|---|
| 563 | program which will run on a system which is different from the system on
|
|---|
| 564 | which the tools are built. In other words, it is possible to build
|
|---|
| 565 | programs using a cross compiler.
|
|---|
| 566 |
|
|---|
| 567 | This is referred to as a "Canadian Cross".
|
|---|
| 568 |
|
|---|
| 569 | * Menu:
|
|---|
| 570 |
|
|---|
| 571 | * Canadian Cross Example:: Canadian Cross Example.
|
|---|
| 572 | * Canadian Cross Concepts:: Canadian Cross Concepts.
|
|---|
| 573 | * Build Cross Host Tools:: Build Cross Host Tools.
|
|---|
| 574 | * Build and Host Options:: Build and Host Options.
|
|---|
| 575 | * CCross not in Cygnus Tree:: Canadian Cross not in Cygnus Tree.
|
|---|
| 576 | * CCross in Cygnus Tree:: Canadian Cross in Cygnus Tree.
|
|---|
| 577 | * Supporting Canadian Cross:: Supporting Canadian Cross.
|
|---|
| 578 |
|
|---|
| 579 |
|
|---|
| 580 | File: configure.info, Node: Canadian Cross Example, Next: Canadian Cross Concepts, Up: Canadian Cross
|
|---|
| 581 |
|
|---|
| 582 | Canadian Cross Example
|
|---|
| 583 | ======================
|
|---|
| 584 |
|
|---|
| 585 | Here is an example of a Canadian Cross.
|
|---|
| 586 |
|
|---|
| 587 | While running on a GNU/Linux, you can build a program which will run
|
|---|
| 588 | on a Solaris system. You would use a GNU/Linux cross Solaris compiler
|
|---|
| 589 | to build the program.
|
|---|
| 590 |
|
|---|
| 591 | Of course, you could not run the resulting program on your GNU/Linux
|
|---|
| 592 | system. You would have to copy it over to a Solaris system before you
|
|---|
| 593 | would run it.
|
|---|
| 594 |
|
|---|
| 595 | Of course, you could also simply build the programs on the Solaris
|
|---|
| 596 | system in the first place. However, perhaps the Solaris system is not
|
|---|
| 597 | available for some reason; perhaps you actually don't have one, but you
|
|---|
| 598 | want to build the tools for somebody else to use. Or perhaps your
|
|---|
| 599 | GNU/Linux system is much faster than your Solaris system.
|
|---|
| 600 |
|
|---|
| 601 | A Canadian Cross build is most frequently used when building
|
|---|
| 602 | programs to run on a non-Unix system, such as DOS or Windows. It may
|
|---|
| 603 | be simpler to configure and build on a Unix system than to support the
|
|---|
| 604 | configuration machinery on a non-Unix system.
|
|---|
| 605 |
|
|---|
| 606 |
|
|---|
| 607 | File: configure.info, Node: Canadian Cross Concepts, Next: Build Cross Host Tools, Prev: Canadian Cross Example, Up: Canadian Cross
|
|---|
| 608 |
|
|---|
| 609 | Canadian Cross Concepts
|
|---|
| 610 | =======================
|
|---|
| 611 |
|
|---|
| 612 | When building a Canadian Cross, there are at least two different
|
|---|
| 613 | systems involved: the system on which the tools are being built, and
|
|---|
| 614 | the system on which the tools will run.
|
|---|
| 615 |
|
|---|
| 616 | The system on which the tools are being built is called the "build"
|
|---|
| 617 | system.
|
|---|
| 618 |
|
|---|
| 619 | The system on which the tools will run is called the host system.
|
|---|
| 620 |
|
|---|
| 621 | For example, if you are building a Solaris program on a GNU/Linux
|
|---|
| 622 | system, as in the previous section, the build system would be GNU/Linux,
|
|---|
| 623 | and the host system would be Solaris.
|
|---|
| 624 |
|
|---|
| 625 | It is, of course, possible to build a cross compiler using a Canadian
|
|---|
| 626 | Cross (i.e., build a cross compiler using a cross compiler). In this
|
|---|
| 627 | case, the system for which the resulting cross compiler generates code
|
|---|
| 628 | is called the target system. (For a more complete discussion of host
|
|---|
| 629 | and target systems, *note Host and Target::).
|
|---|
| 630 |
|
|---|
| 631 | An example of building a cross compiler using a Canadian Cross would
|
|---|
| 632 | be building a Windows cross MIPS ELF compiler on a GNU/Linux system. In
|
|---|
| 633 | this case the build system would be GNU/Linux, the host system would be
|
|---|
| 634 | Windows, and the target system would be MIPS ELF.
|
|---|
| 635 |
|
|---|
| 636 | The name Canadian Cross comes from the case when the build, host, and
|
|---|
| 637 | target systems are all different. At the time that these issues were
|
|---|
| 638 | all being hashed out, Canada had three national political parties.
|
|---|
| 639 |
|
|---|
| 640 |
|
|---|
| 641 | File: configure.info, Node: Build Cross Host Tools, Next: Build and Host Options, Prev: Canadian Cross Concepts, Up: Canadian Cross
|
|---|
| 642 |
|
|---|
| 643 | Build Cross Host Tools
|
|---|
| 644 | ======================
|
|---|
| 645 |
|
|---|
| 646 | In order to configure a program for a Canadian Cross build, you must
|
|---|
| 647 | first build and install the set of cross tools you will use to build the
|
|---|
| 648 | program.
|
|---|
| 649 |
|
|---|
| 650 | These tools will be build cross host tools. That is, they will run
|
|---|
| 651 | on the build system, and will produce code that runs on the host system.
|
|---|
| 652 |
|
|---|
| 653 | It is easy to confuse the meaning of build and host here. Always
|
|---|
| 654 | remember that the build system is where you are doing the build, and the
|
|---|
| 655 | host system is where the resulting program will run. Therefore, you
|
|---|
| 656 | need a build cross host compiler.
|
|---|
| 657 |
|
|---|
| 658 | In general, you must have a complete cross environment in order to do
|
|---|
| 659 | the build. This normally means a cross compiler, cross assembler, and
|
|---|
| 660 | so forth, as well as libraries and include files for the host system.
|
|---|
| 661 |
|
|---|
| 662 |
|
|---|
| 663 | File: configure.info, Node: Build and Host Options, Next: CCross not in Cygnus Tree, Prev: Build Cross Host Tools, Up: Canadian Cross
|
|---|
| 664 |
|
|---|
| 665 | Build and Host Options
|
|---|
| 666 | ======================
|
|---|
| 667 |
|
|---|
| 668 | When you run `configure', you must use both the `--build' and
|
|---|
|
|---|