1 | This is configure.info, produced by makeinfo version 4.3 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
|
---|
669 | `--host' options.
|
---|
670 |
|
---|
671 | The `--build' option is used to specify the configuration name of
|
---|
672 | the build system. This can normally be the result of running the
|
---|
673 | `config.guess' shell script, and it is reasonable to use
|
---|
674 | `--build=`config.guess`'.
|
---|
675 |
|
---|
676 | The `--host' option is used to specify the configuration name of the
|
---|
677 | host system.
|
---|
678 |
|
---|
679 | As we explained earlier, `config.guess' is used to set the default
|
---|
680 | value for the `--host' option (*note Using the Host Type::). We can
|
---|
681 | now see that since `config.guess' returns the type of system on which
|
---|
682 | it is run, it really identifies the build system. Since the host
|
---|
683 | system is normally the same as the build system (i.e., people do not
|
---|
684 | normally build using a cross compiler), it is reasonable to use the
|
---|
685 | result of `config.guess' as the default for the host system when the
|
---|
686 | `--host' option is not used.
|
---|
687 |
|
---|
688 | It might seem that if the `--host' option were used without the
|
---|
689 | `--build' option that the configure script could run `config.guess' to
|
---|
690 | determine the build system, and presume a Canadian Cross if the result
|
---|
691 | of `config.guess' differed from the `--host' option. However, for
|
---|
692 | historical reasons, some configure scripts are routinely run using an
|
---|
693 | explicit `--host' option, rather than using the default from
|
---|
694 | `config.guess'. As noted earlier, it is difficult or impossible to
|
---|
695 | reliably compare configuration names (*note Using the Target Type::).
|
---|
696 | Therefore, by convention, if the `--host' option is used, but the
|
---|
697 | `--build' option is not used, then the build system defaults to the
|
---|
698 | host system.
|
---|
699 |
|
---|
700 |
|
---|
701 | File: configure.info, Node: CCross not in Cygnus Tree, Next: CCross in Cygnus Tree, Prev: Build and Host Options, Up: Canadian Cross
|
---|
702 |
|
---|
703 | Canadian Cross not in Cygnus Tree.
|
---|
704 | ==================================
|
---|
705 |
|
---|
706 | If you are not using the Cygnus tree, you must explicitly specify the
|
---|
707 | cross tools which you want to use to build the program. This is done by
|
---|
708 | setting environment variables before running the `configure' script.
|
---|
709 |
|
---|
710 | You must normally set at least the environment variables `CC', `AR',
|
---|
711 | and `RANLIB' to the cross tools which you want to use to build.
|
---|
712 |
|
---|
713 | For some programs, you must set additional cross tools as well, such
|
---|
714 | as `AS', `LD', or `NM'.
|
---|
715 |
|
---|
716 | You would set these environment variables to the build cross tools
|
---|
717 | which you are going to use.
|
---|
718 |
|
---|
719 | For example, if you are building a Solaris program on a GNU/Linux
|
---|
720 | system, and your GNU/Linux cross Solaris compiler were named
|
---|
721 | `solaris-gcc', then you would set the environment variable `CC' to
|
---|
722 | `solaris-gcc'.
|
---|
723 |
|
---|
724 |
|
---|
725 | File: configure.info, Node: CCross in Cygnus Tree, Next: Supporting Canadian Cross, Prev: CCross not in Cygnus Tree, Up: Canadian Cross
|
---|
726 |
|
---|
727 | Canadian Cross in Cygnus Tree
|
---|
728 | =============================
|
---|
729 |
|
---|
730 | This section describes configuring and building a Canadian Cross when
|
---|
731 | using the Cygnus tree.
|
---|
732 |
|
---|
733 | * Menu:
|
---|
734 |
|
---|
735 | * Standard Cygnus CCross:: Building a Normal Program.
|
---|
736 | * Cross Cygnus CCross:: Building a Cross Program.
|
---|
737 |
|
---|
738 |
|
---|
739 | File: configure.info, Node: Standard Cygnus CCross, Next: Cross Cygnus CCross, Up: CCross in Cygnus Tree
|
---|
740 |
|
---|
741 | Building a Normal Program
|
---|
742 | -------------------------
|
---|
743 |
|
---|
744 | When configuring a Canadian Cross in the Cygnus tree, all the
|
---|
745 | appropriate environment variables are automatically set to `HOST-TOOL',
|
---|
746 | where HOST is the value used for the `--host' option, and TOOL is the
|
---|
747 | name of the tool (e.g., `gcc', `as', etc.). These tools must be on
|
---|
748 | your `PATH'.
|
---|
749 |
|
---|
750 | Adding a prefix of HOST will give the usual name for the build cross
|
---|
751 | host tools. To see this, consider that when these cross tools were
|
---|
752 | built, they were configured to run on the build system and to produce
|
---|
753 | code for the host system. That is, they were configured with a
|
---|
754 | `--target' option that is the same as the system which we are now
|
---|
755 | calling the host. Recall that the default name for installed cross
|
---|
756 | tools uses the target system as a prefix (*note Using the Target
|
---|
757 | Type::). Since that is the system which we are now calling the host,
|
---|
758 | HOST is the right prefix to use.
|
---|
759 |
|
---|
760 | For example, if you configure with `--build=i386-linux-gnu' and
|
---|
761 | `--host=solaris', then the Cygnus tree will automatically default to
|
---|
762 | using the compiler `solaris-gcc'. You must have previously built and
|
---|
763 | installed this compiler, probably by doing a build with no `--host'
|
---|
764 | option and with a `--target' option of `solaris'.
|
---|
765 |
|
---|
766 |
|
---|
767 | File: configure.info, Node: Cross Cygnus CCross, Prev: Standard Cygnus CCross, Up: CCross in Cygnus Tree
|
---|
768 |
|
---|
769 | Building a Cross Program
|
---|
770 | ------------------------
|
---|
771 |
|
---|
772 | There are additional considerations if you want to build a cross
|
---|
773 | compiler, rather than a native compiler, in the Cygnus tree using a
|
---|
774 | Canadian Cross.
|
---|
775 |
|
---|
776 | When you build a cross compiler using the Cygnus tree, then the
|
---|
777 | target libraries will normally be built with the newly built target
|
---|
778 | compiler (*note Host and Target Libraries::). However, this will not
|
---|
779 | work when building with a Canadian Cross. This is because the newly
|
---|
780 | built target compiler will be a program which runs on the host system,
|
---|
781 | and therefore will not be able to run on the build system.
|
---|
782 |
|
---|
783 | Therefore, when building a cross compiler with the Cygnus tree, you
|
---|
784 | must first install a set of build cross target tools. These tools will
|
---|
785 | be used when building the target libraries.
|
---|
786 |
|
---|
787 | Note that this is not a requirement of a Canadian Cross in general.
|
---|
788 | For example, it would be possible to build just the host cross target
|
---|
789 | tools on the build system, to copy the tools to the host system, and to
|
---|
790 | build the target libraries on the host system. The requirement for
|
---|
791 | build cross target tools is imposed by the Cygnus tree, which expects
|
---|
792 | to be able to build both host programs and target libraries in a single
|
---|
793 | `configure'/`make' step. Because it builds these in a single step, it
|
---|
794 | expects to be able to build the target libraries on the build system,
|
---|
795 | which means that it must use a build cross target toolchain.
|
---|
796 |
|
---|
797 | For example, suppose you want to build a Windows cross MIPS ELF
|
---|
798 | compiler on a GNU/Linux system. You must have previously installed
|
---|
799 | both a GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF
|
---|
800 | compiler.
|
---|
801 |
|
---|
802 | In order to build the Windows (configuration name `i386-cygwin32')
|
---|
803 | cross MIPS ELF (configure name `mips-elf') compiler, you might execute
|
---|
804 | the following commands (long command lines are broken across lines with
|
---|
805 | a trailing backslash as a continuation character).
|
---|
806 |
|
---|
807 | mkdir linux-x-cygwin32
|
---|
808 | cd linux-x-cygwin32
|
---|
809 | SRCDIR/configure --target i386-cygwin32 --prefix=INSTALLDIR \
|
---|
810 | --exec-prefix=INSTALLDIR/H-i386-linux
|
---|
811 | make
|
---|
812 | make install
|
---|
813 | cd ..
|
---|
814 | mkdir linux-x-mips-elf
|
---|
815 | cd linux-x-mips-elf
|
---|
816 | SRCDIR/configure --target mips-elf --prefix=INSTALLDIR \
|
---|
817 | --exec-prefix=INSTALLDIR/H-i386-linux
|
---|
818 | make
|
---|
819 | make install
|
---|
820 | cd ..
|
---|
821 | mkdir cygwin32-x-mips-elf
|
---|
822 | cd cygwin32-x-mips-elf
|
---|
823 | SRCDIR/configure --build=i386-linux-gnu --host=i386-cygwin32 \
|
---|
824 | --target=mips-elf --prefix=WININSTALLDIR \
|
---|
825 | --exec-prefix=WININSTALLDIR/H-i386-cygwin32
|
---|
826 | make
|
---|
827 | make install
|
---|
828 |
|
---|
829 | You would then copy the contents of WININSTALLDIR over to the
|
---|
830 | Windows machine, and run the resulting programs.
|
---|
831 |
|
---|
832 |
|
---|
833 | File: configure.info, Node: Supporting Canadian Cross, Prev: CCross in Cygnus Tree, Up: Canadian Cross
|
---|
834 |
|
---|
835 | Supporting Canadian Cross
|
---|
836 | =========================
|
---|
837 |
|
---|
838 | If you want to make it possible to build a program you are developing
|
---|
839 | using a Canadian Cross, you must take some care when writing your
|
---|
840 | configure and make rules. Simple cases will normally work correctly.
|
---|
841 | However, it is not hard to write configure and make tests which will
|
---|
842 | fail in a Canadian Cross.
|
---|
843 |
|
---|
844 | * Menu:
|
---|
845 |
|
---|
846 | * CCross in Configure:: Supporting Canadian Cross in Configure Scripts.
|
---|
847 | * CCross in Make:: Supporting Canadian Cross in Makefiles.
|
---|
848 |
|
---|
849 |
|
---|
850 | File: configure.info, Node: CCross in Configure, Next: CCross in Make, Up: Supporting Canadian Cross
|
---|
851 |
|
---|
852 | Supporting Canadian Cross in Configure Scripts
|
---|
853 | ----------------------------------------------
|
---|
854 |
|
---|
855 | In a `configure.in' file, after calling `AC_PROG_CC', you can find
|
---|
856 | out whether this is a Canadian Cross configure by examining the shell
|
---|
857 | variable `cross_compiling'. In a Canadian Cross, which means that the
|
---|
858 | compiler is a cross compiler, `cross_compiling' will be `yes'. In a
|
---|
859 | normal configuration, `cross_compiling' will be `no'.
|
---|
860 |
|
---|
861 | You ordinarily do not need to know the type of the build system in a
|
---|
862 | configure script. However, if you do need that information, you can get
|
---|
863 | it by using the macro `AC_CANONICAL_SYSTEM', the same macro that is
|
---|
864 | used to determine the target system. This macro will set the variables
|
---|
865 | `build', `build_alias', `build_cpu', `build_vendor', and `build_os',
|
---|
866 | which correspond to the similar `target' and `host' variables, except
|
---|
867 | that they describe the build system.
|
---|
868 |
|
---|
869 | When writing tests in `configure.in', you must remember that you
|
---|
870 | want to test the host environment, not the build environment.
|
---|
871 |
|
---|
872 | Macros like `AC_CHECK_FUNCS' which use the compiler will test the
|
---|
873 | host environment. That is because the tests will be done by running the
|
---|
874 | compiler, which is actually a build cross host compiler. If the
|
---|
875 | compiler can find the function, that means that the function is present
|
---|
876 | in the host environment.
|
---|
877 |
|
---|
878 | Tests like `test -f /dev/ptyp0', on the other hand, will test the
|
---|
879 | build environment. Remember that the configure script is running on the
|
---|
880 | build system, not the host system. If your configure scripts examines
|
---|
881 | files, those files will be on the build system. Whatever you determine
|
---|
882 | based on those files may or may not be the case on the host system.
|
---|
883 |
|
---|
884 | Most autoconf macros will work correctly for a Canadian Cross. The
|
---|
885 | main exception is `AC_TRY_RUN'. This macro tries to compile and run a
|
---|
886 | test program. This will fail in a Canadian Cross, because the program
|
---|
887 | will be compiled for the host system, which means that it will not run
|
---|
888 | on the build system.
|
---|
889 |
|
---|
890 | The `AC_TRY_RUN' macro provides an optional argument to tell the
|
---|
891 | configure script what to do in a Canadian Cross. If that argument is
|
---|
892 | not present, you will get a warning when you run `autoconf':
|
---|
893 | warning: AC_TRY_RUN called without default to allow cross compiling
|
---|
894 |
|
---|
895 | This tells you that the resulting `configure' script will not work with
|
---|
896 | a Canadian Cross.
|
---|
897 |
|
---|
898 | In some cases while it may better to perform a test at configure
|
---|
899 | time, it is also possible to perform the test at run time. In such a
|
---|
900 | case you can use the cross compiling argument to `AC_TRY_RUN' to tell
|
---|
901 | your program that the test could not be performed at configure time.
|
---|
902 |
|
---|
903 | There are a few other autoconf macros which will not work correctly
|
---|
904 | with a Canadian Cross: a partial list is `AC_FUNC_GETPGRP',
|
---|
905 | `AC_FUNC_SETPGRP', `AC_FUNC_SETVBUF_REVERSED', and
|
---|
906 | `AC_SYS_RESTARTABLE_SYSCALLS'. The `AC_CHECK_SIZEOF' macro is
|
---|
907 | generally not very useful with a Canadian Cross; it permits an optional
|
---|
908 | argument indicating the default size, but there is no way to know what
|
---|
909 | the correct default should be.
|
---|
910 |
|
---|
911 |
|
---|
912 | File: configure.info, Node: CCross in Make, Prev: CCross in Configure, Up: Supporting Canadian Cross
|
---|
913 |
|
---|
914 | Supporting Canadian Cross in Makefiles.
|
---|
915 | ---------------------------------------
|
---|
916 |
|
---|
917 | The main Canadian Cross issue in a `Makefile' arises when you want
|
---|
918 | to use a subsidiary program to generate code or data which you will then
|
---|
919 | include in your real program.
|
---|
920 |
|
---|
921 | If you compile this subsidiary program using `$(CC)' in the usual
|
---|
922 | way, you will not be able to run it. This is because `$(CC)' will
|
---|
923 | build a program for the host system, but the program is being built on
|
---|
924 | the build system.
|
---|
925 |
|
---|
926 | You must instead use a compiler for the build system, rather than the
|
---|
927 | host system. In the Cygnus tree, this make variable `$(CC_FOR_BUILD)'
|
---|
928 | will hold a compiler for the build system.
|
---|
929 |
|
---|
930 | Note that you should not include `config.h' in a file you are
|
---|
931 | compiling with `$(CC_FOR_BUILD)'. The `configure' script will build
|
---|
932 | `config.h' with information for the host system. However, you are
|
---|
933 | compiling the file using a compiler for the build system (a native
|
---|
934 | compiler). Subsidiary programs are normally simple filters which do no
|
---|
935 | user interaction, and it is normally possible to write them in a highly
|
---|
936 | portable fashion so that the absence of `config.h' is not crucial.
|
---|
937 |
|
---|
938 | The gcc `Makefile.in' shows a complex situation in which certain
|
---|
939 | files, such as `rtl.c', must be compiled into both subsidiary programs
|
---|
940 | run on the build system and into the final program. This approach may
|
---|
941 | be of interest for advanced build system hackers. Note that the build
|
---|
942 | system compiler is rather confusingly called `HOST_CC'.
|
---|
943 |
|
---|
944 |
|
---|
945 | File: configure.info, Node: Cygnus Configure, Next: Multilibs, Prev: Canadian Cross, Up: Top
|
---|
946 |
|
---|
947 | Cygnus Configure
|
---|
948 | ****************
|
---|
949 |
|
---|
950 | The Cygnus configure script predates autoconf. All of its
|
---|
951 | interesting features have been incorporated into autoconf. No new
|
---|
952 | programs should be written to use the Cygnus configure script.
|
---|
953 |
|
---|
954 | However, the Cygnus configure script is still used in a few places:
|
---|
955 | at the top of the Cygnus tree and in a few target libraries in the
|
---|
956 | Cygnus tree. Until those uses have been replaced with autoconf, some
|
---|
957 | brief notes are appropriate here. This is not complete documentation,
|
---|
958 | but it should be possible to use this as a guide while examining the
|
---|
959 | scripts themselves.
|
---|
960 |
|
---|
961 | * Menu:
|
---|
962 |
|
---|
963 | * Cygnus Configure Basics:: Cygnus Configure Basics.
|
---|
964 | * Cygnus Configure in C++ Libraries:: Cygnus Configure in C++ Libraries.
|
---|
965 |
|
---|
966 |
|
---|
967 | File: configure.info, Node: Cygnus Configure Basics, Next: Cygnus Configure in C++ Libraries, Up: Cygnus Configure
|
---|
968 |
|
---|
969 | Cygnus Configure Basics
|
---|
970 | =======================
|
---|
971 |
|
---|
972 | Cygnus configure does not use any generated files; there is no
|
---|
973 | program corresponding to `autoconf'. Instead, there is a single shell
|
---|
974 | script named `configure' which may be found at the top of the Cygnus
|
---|
975 | tree. This shell script was written by hand; it was not generated by
|
---|
976 | autoconf, and it is incorrect, and indeed harmful, to run `autoconf' in
|
---|
977 | the top level of a Cygnus tree.
|
---|
978 |
|
---|
979 | Cygnus configure works in a particular directory by examining the
|
---|
980 | file `configure.in' in that directory. That file is broken into four
|
---|
981 | separate shell scripts.
|
---|
982 |
|
---|
983 | The first is the contents of `configure.in' up to a line that starts
|
---|
984 | with `# per-host:'. This is the common part.
|
---|
985 |
|
---|
986 | The second is the rest of `configure.in' up to a line that starts
|
---|
987 | with `# per-target:'. This is the per host part.
|
---|
988 |
|
---|
989 | The third is the rest of `configure.in' up to a line that starts
|
---|
990 | with `# post-target:'. This is the per target part.
|
---|
991 |
|
---|
992 | The fourth is the remainder of `configure.in'. This is the post
|
---|
993 | target part.
|
---|
994 |
|
---|
995 | If any of these comment lines are missing, the corresponding shell
|
---|
996 | script is empty.
|
---|
997 |
|
---|
998 | Cygnus configure will first execute the common part. This must set
|
---|
999 | the shell variable `srctrigger' to the name of a source file, to
|
---|
1000 | confirm that Cygnus configure is looking at the right directory. This
|
---|
1001 | may set the shell variables `package_makefile_frag' and
|
---|
1002 | `package_makefile_rules_frag'.
|
---|
1003 |
|
---|
1004 | Cygnus configure will next set the `build' and `host' shell
|
---|
1005 | variables, and execute the per host part. This may set the shell
|
---|
1006 | variable `host_makefile_frag'.
|
---|
1007 |
|
---|
1008 | Cygnus configure will next set the `target' variable, and execute
|
---|
1009 | the per target part. This may set the shell variable
|
---|
1010 | `target_makefile_frag'.
|
---|
1011 |
|
---|
1012 | Any of these scripts may set the `subdirs' shell variable. This
|
---|
1013 | variable is a list of subdirectories where a `Makefile.in' file may be
|
---|
1014 | found. Cygnus configure will automatically look for a `Makefile.in'
|
---|
1015 | file in the current directory. The `subdirs' shell variable is not
|
---|
1016 | normally used, and I believe that the only directory which uses it at
|
---|
1017 | present is `newlib'.
|
---|
1018 |
|
---|
1019 | For each `Makefile.in', Cygnus configure will automatically create a
|
---|
1020 | `Makefile' by adding definitions for `make' variables such as `host'
|
---|
1021 | and `target', and automatically editing the values of `make' variables
|
---|
1022 | such as `prefix' if they are present.
|
---|
1023 |
|
---|
1024 | Also, if any of the `makefile_frag' shell variables are set, Cygnus
|
---|
1025 | configure will interpret them as file names relative to either the
|
---|
1026 | working directory or the source directory, and will read the contents of
|
---|
1027 | the file into the generated `Makefile'. The file contents will be read
|
---|
1028 | in after the first line in `Makefile.in' which starts with `####'.
|
---|
1029 |
|
---|
1030 | These `Makefile' fragments are used to customize behaviour for a
|
---|
1031 | particular host or target. They serve to select particular files to
|
---|
1032 | compile, and to define particular preprocessor macros by providing
|
---|
1033 | values for `make' variables which are then used during compilation.
|
---|
1034 | Cygnus configure, unlike autoconf, normally does not do feature tests,
|
---|
1035 | and normally requires support to be added manually for each new host.
|
---|
1036 |
|
---|
1037 | The `Makefile' fragment support is similar to the autoconf
|
---|
1038 | `AC_SUBST_FILE' macro.
|
---|
1039 |
|
---|
1040 | After creating each `Makefile', the post target script will be run
|
---|
1041 | (i.e., it may be run several times). This script may further customize
|
---|
1042 | the `Makefile'. When it is run, the shell variable `Makefile' will
|
---|
1043 | hold the name of the `Makefile', including the appropriate directory
|
---|
1044 | component.
|
---|
1045 |
|
---|
1046 | Like an autoconf generated `configure' script, Cygnus configure will
|
---|
1047 | create a file named `config.status' which, when run, will automatically
|
---|
1048 | recreate the configuration. The `config.status' file will simply
|
---|
1049 | execute the Cygnus configure script again with the appropriate
|
---|
1050 | arguments.
|
---|
1051 |
|
---|
1052 | Any of the parts of `configure.in' may set the shell variables
|
---|
1053 | `files' and `links'. Cygnus configure will set up symlinks from the
|
---|
1054 | names in `links' to the files named in `files'. This is similar to the
|
---|
1055 | autoconf `AC_LINK_FILES' macro.
|
---|
1056 |
|
---|
1057 | Finally, any of the parts of `configure.in' may set the shell
|
---|
1058 | variable `configdirs' to a set of subdirectories. If it is set, Cygnus
|
---|
1059 | configure will recursively run the configure process in each
|
---|
1060 | subdirectory. If the subdirectory uses Cygnus configure, it will
|
---|
1061 | contain a `configure.in' file but no `configure' file, in which case
|
---|
1062 | Cygnus configure will invoke itself recursively. If the subdirectory
|
---|
1063 | has a `configure' file, Cygnus configure assumes that it is an autoconf
|
---|
1064 | generated `configure' script, and simply invokes it directly.
|
---|
1065 |
|
---|
1066 |
|
---|
1067 | File: configure.info, Node: Cygnus Configure in C++ Libraries, Prev: Cygnus Configure Basics, Up: Cygnus Configure
|
---|
1068 |
|
---|
1069 | Cygnus Configure in C++ Libraries
|
---|
1070 | =================================
|
---|
1071 |
|
---|
1072 | The C++ library configure system, written by Per Bothner, deserves
|
---|
1073 | special mention. It uses Cygnus configure, but it does feature testing
|
---|
1074 | like that done by autoconf generated `configure' scripts. This
|
---|
1075 | approach is used in the libraries `libio', `libstdc++', and `libg++'.
|
---|
1076 |
|
---|
1077 | Most of the `Makefile' information is written out by the shell
|
---|
1078 | script `libio/config.shared'. Each `configure.in' file sets certain
|
---|
1079 | shell variables, and then invokes `config.shared' to create two package
|
---|
1080 | `Makefile' fragments. These fragments are then incorporated into the
|
---|
1081 | resulting `Makefile' by the Cygnus configure script.
|
---|
1082 |
|
---|
1083 | The file `_G_config.h' is created in the `libio' object directory by
|
---|
1084 | running the shell script `libio/gen-params'. This shell script uses
|
---|
1085 | feature tests to define macros and typedefs in `_G_config.h'.
|
---|
1086 |
|
---|
1087 |
|
---|
1088 | File: configure.info, Node: Multilibs, Next: FAQ, Prev: Cygnus Configure, Up: Top
|
---|
1089 |
|
---|
1090 | Multilibs
|
---|
1091 | *********
|
---|
1092 |
|
---|
1093 | For some targets gcc may have different processor requirements
|
---|
1094 | depending upon command line options. An obvious example is the
|
---|
1095 | `-msoft-float' option supported on several processors. This option
|
---|
1096 | means that the floating point registers are not available, which means
|
---|
1097 | that floating point operations must be done by calling an emulation
|
---|
1098 | subroutine rather than by using machine instructions.
|
---|
1099 |
|
---|
1100 | For such options, gcc is often configured to compile target libraries
|
---|
1101 | twice: once with `-msoft-float' and once without. When gcc compiles
|
---|
1102 | target libraries more than once, the resulting libraries are called
|
---|
1103 | "multilibs".
|
---|
1104 |
|
---|
1105 | Multilibs are not really part of the GNU configure and build system,
|
---|
1106 | but we discuss them here since they require support in the `configure'
|
---|
1107 | scripts and `Makefile's used for target libraries.
|
---|
1108 |
|
---|
1109 | * Menu:
|
---|
1110 |
|
---|
1111 | * Multilibs in gcc:: Multilibs in gcc.
|
---|
1112 | * Multilibs in Target Libraries:: Multilibs in Target Libraries.
|
---|
1113 |
|
---|
1114 |
|
---|
1115 | File: configure.info, Node: Multilibs in gcc, Next: Multilibs in Target Libraries, Up: Multilibs
|
---|
1116 |
|
---|
1117 | Multilibs in gcc
|
---|
1118 | ================
|
---|
1119 |
|
---|
1120 | In gcc, multilibs are defined by setting the variable
|
---|
1121 | `MULTILIB_OPTIONS' in the target `Makefile' fragment. Several other
|
---|
1122 | `MULTILIB' variables may also be defined there. *Note The Target
|
---|
1123 | Makefile Fragment: (gcc)Target Fragment.
|
---|
1124 |
|
---|
1125 | If you have built gcc, you can see what multilibs it uses by running
|
---|
1126 | it with the `-print-multi-lib' option. The output `.;' means that no
|
---|
1127 | multilibs are used. In general, the output is a sequence of lines, one
|
---|
1128 | per multilib. The first part of each line, up to the `;', is the name
|
---|
1129 | of the multilib directory. The second part is a list of compiler
|
---|
1130 | options separated by `@' characters.
|
---|
1131 |
|
---|
1132 | Multilibs are built in a tree of directories. The top of the tree,
|
---|
1133 | represented by `.' in the list of multilib directories, is the default
|
---|
1134 | library to use when no special compiler options are used. The
|
---|
1135 | subdirectories of the tree hold versions of the library to use when
|
---|
1136 | particular compiler options are used.
|
---|
1137 |
|
---|