source: trunk/src/binutils/etc/configure.info-2@ 1036

Last change on this file since 1036 was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 49.1 KB
Line 
1This is configure.info, produced by makeinfo version 4.3 from
2./configure.texi.
3
4INFO-DIR-SECTION GNU admin
5START-INFO-DIR-ENTRY
6* configure: (configure). The GNU configure and build system
7END-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
14manual provided the copyright notice and this permission notice are
15preserved on all copies.
16
17 Permission is granted to copy and distribute modified versions of
18this manual under the conditions for verbatim copying, provided that
19the entire resulting derived work is distributed under the terms of a
20permission notice identical to this one.
21
22 Permission is granted to copy and distribute translations of this
23manual into another language, under the above conditions for modified
24versions, except that this permission notice may be stated in a
25translation approved by the Foundation.
26
27
28File: configure.info, Node: Configuration Name Definition, Next: Using Configuration Names, Up: Configuration Names
29
30Configuration Name Definition
31=============================
32
33 This is a string of the form CPU-MANUFACTURER-OPERATING_SYSTEM. In
34some cases, this is extended to a four part form:
35CPU-MANUFACTURER-KERNEL-OPERATING_SYSTEM.
36
37 When using a configuration name in a configure option, it is normally
38not necessary to specify an entire name. In particular, the
39MANUFACTURER field is often omitted, leading to strings such as
40`i386-linux' or `sparc-sunos'. The shell script `config.sub' will
41translate these shortened strings into the canonical form. autoconf
42will arrange for `config.sub' to be run automatically when it is needed.
43
44 The fields of a configuration name are as follows:
45
46CPU
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
51MANUFACTURER
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
57OPERATING_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
65KERNEL
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
72configuration name for the system on which it is run. It does by
73running `uname' and by examining other characteristics of the system.
74
75 Because `config.guess' can normally determine the configuration name
76for a machine, it is normally only necessary to specify a configuration
77name when building a cross-compiler or when building using a
78cross-compiler.
79
80
81File: configure.info, Node: Using Configuration Names, Prev: Configuration Name Definition, Up: Configuration Names
82
83Using Configuration Names
84=========================
85
86 A configure script will sometimes have to make a decision based on a
87configuration name. You will need to do this if you have to compile
88code differently based on something which can not be tested using a
89standard autoconf feature test.
90
91 It is normally better to test for particular features, rather than to
92test for a particular system. This is because as Unix evolves,
93different systems copy features from one another. Even if you need to
94determine whether the feature is supported based on a configuration
95name, you should define a macro which describes the feature, rather than
96defining a macro which describes the particular system you are on.
97
98 Testing for a particular system is normally done using a case
99statement in `configure.in'. The case statement might look something
100like the following, assuming that `host' is a shell variable holding a
101canonical configuration name (which will be the case if `configure.in'
102uses 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
112field, 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
116types. 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
119something like `m68*'. Of course, if you do not need to match on the
120processor, it is simpler to just replace the entire field by a `*', as
121in `*-*-irix*'.
122
123
124File: configure.info, Node: Cross Compilation Tools, Next: Canadian Cross, Prev: Configuration Names, Up: Top
125
126Cross Compilation Tools
127***********************
128
129 The GNU configure and build system can be used to build "cross
130compilation" tools. A cross compilation tool is a tool which runs on
131one 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
143File: configure.info, Node: Cross Compilation Concepts, Next: Host and Target, Up: Cross Compilation Tools
144
145Cross Compilation Concepts
146==========================
147
148 A compiler which produces programs which run on a different system
149is a cross compilation compiler, or simply a "cross compiler".
150Similarly, we speak of cross assemblers, cross linkers, etc.
151
152 In the normal case, a compiler produces code which runs on the same
153system as the one on which the compiler runs. When it is necessary to
154distinguish this case from the cross compilation case, such a compiler
155is called a "native compiler". Similarly, we speak of native
156assemblers, etc.
157
158 Although the debugger is not strictly speaking a compilation tool,
159it is nevertheless meaningful to speak of a cross debugger: a debugger
160which is used to debug code which runs on another system. Everything
161that is said below about configuring cross compilation tools applies to
162the debugger as well.
163
164
165File: configure.info, Node: Host and Target, Next: Using the Host Type, Prev: Cross Compilation Concepts, Up: Cross Compilation Tools
166
167Host and Target
168===============
169
170 When building cross compilation tools, there are two different
171systems involved: the system on which the tools will run, and the
172system 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"
177system.
178
179 For example, suppose you have a compiler which runs on a GNU/Linux
180system and generates ELF programs for a MIPS embedded system. In this
181case the GNU/Linux system is the host, and the MIPS ELF system is the
182target. Such a compiler could be called a GNU/Linux cross MIPS ELF
183compiler, or, equivalently, a `i386-linux-gnu' cross `mips-elf'
184compiler.
185
186 Naturally, most programs are not cross compilation tools. For those
187programs, it does not make sense to speak of a target. It only makes
188sense to speak of a target for tools like `gcc' or the `binutils' which
189actually produce running code. For example, it does not make sense to
190speak of the target of a tool like `bison' or `make'.
191
192 Most cross compilation tools can also serve as native tools. For a
193native compilation tool, it is still meaningful to speak of a target.
194For a native tool, the target is the same as the host. For example, for
195a GNU/Linux native compiler, the host is GNU/Linux, and the target is
196also GNU/Linux.
197
198
199File: configure.info, Node: Using the Host Type, Next: Specifying the Target, Prev: Host and Target, Up: Cross Compilation Tools
200
201Using the Host Type
202===================
203
204 In almost all cases the host system is the system on which you run
205the `configure' script, and on which you build the tools (for the case
206when they differ, *note Canadian Cross::).
207
208 If your configure script needs to know the configuration name of the
209host system, and the package is not a cross compilation tool and
210therefore does not have a target, put `AC_CANONICAL_HOST' in
211`configure.in'. This macro will arrange to define a few shell
212variables 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
234File: configure.info, Node: Specifying the Target, Next: Using the Target Type, Prev: Using the Host Type, Up: Cross Compilation Tools
235
236Specifying the Target
237=====================
238
239 By default, the `configure' script will assume that the target is
240the same as the host. This is the more common case; for example, it
241leads to a native compiler rather than a cross compiler.
242
243 If you want to build a cross compilation tool, you must specify the
244target explicitly by using the `--target' option when you run
245`configure'. The argument to `--target' is the configuration name of
246the system for which you wish to generate code. *Note Configuration
247Names::.
248
249 For example, to build tools which generate code for a MIPS ELF
250embedded system, you would use `--target mips-elf'.
251
252
253File: configure.info, Node: Using the Target Type, Next: Cross Tools in the Cygnus Tree, Prev: Specifying the Target, Up: Cross Compilation Tools
254
255Using the Target Type
256=====================
257
258 When writing `configure.in' for a cross compilation tool, you will
259need 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
263canonicalize 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.
267Note 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
283a native configuration. If they are different, you can assume a cross
284configuration.
285
286 It is arguably possible for `host' and `target' to represent the
287same system, but for the strings to not be identical. For example, if
288`config.guess' returns `sparc-sun-sunos4.1.4', and somebody configures
289with `--target sparc-sun-sunos4.1', then the slight differences between
290the two versions of SunOS may be unimportant for your tool. However,
291in the general case it can be quite difficult to determine whether the
292differences between two configuration names are significant or not.
293Therefore, by convention, if the user specifies a `--target' option
294without specifying a `--host' option, it is assumed that the user wants
295to configure a cross compilation tool.
296
297 The variables `target' and `target_alias' should be handled
298differently.
299
300 In general, whenever the user may actually see a string,
301`target_alias' should be used. This includes anything which may appear
302in the file system, such as a directory name or part of a tool name.
303It also includes any tool output, unless it is clearly labelled as the
304canonical target configuration name. This permits the user to use the
305`--target' option to specify how the tool will appear to the outside
306world.
307
308 On the other hand, when checking for characteristics of the target
309system, `target' should be used. This is because a wide variety of
310`--target' options may map into the same canonical configuration name.
311You 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
315argument 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
318used.
319
320 For example, if gcc is configured with `--target mips-elf', then the
321installed binary will be named `mips-elf-gcc'. If gcc is configured
322without 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
326you are using automake, no more need be done; the programs will
327automatically be installed with the correct prefixes. Otherwise, see
328the autoconf documentation for `AC_ARG_PROGRAM'.
329
330
331File: configure.info, Node: Cross Tools in the Cygnus Tree, Prev: Using the Target Type, Up: Cross Compilation Tools
332
333Cross Tools in the Cygnus Tree
334==============================
335
336 The Cygnus tree is used for various packages including gdb, the GNU
337binutils, 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
340Cygnus configure system, not autoconf. The top level `Makefile.in' is
341written to build packages based on what is in the source tree, and
342supports 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
347permits 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
357File: configure.info, Node: Host and Target Libraries, Next: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree
358
359Host 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
365which run on the host, which is called the host compiler. This includes
366libraries such as `bfd' and `tcl'. These libraries are built with the
367host compiler, and are linked into programs like the binutils or gcc
368which run on the host.
369
370 Target libraries are built with the target compiler. If gcc is
371present in the source tree, then the target compiler is the gcc that is
372built using the host compiler. Target libraries are libraries such as
373`newlib' and `libstdc++'. These libraries are not linked into the host
374programs, but are instead made available for use with programs built
375with the target compiler.
376
377 For the rest of this section, assume that gcc is present in the
378source 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
381which compiler you are going to use to build a tool; otherwise, the
382feature tests will not work correctly. The Cygnus tree handles this by
383not configuring the target libraries until the target compiler is
384built. In order to permit everything to build using a single
385`configure'/`make', the configuration of the target libraries is
386actually triggered during the make step.
387
388 When the target libraries are configured, the `--target' option is
389not used. Instead, the `--host' option is used with the argument of
390the `--target' option for the overall configuration. If no `--target'
391option was used for the overall configuration, the `--host' option will
392be 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
396target libraries are compiled with the target compiler, they are being
397built in order to run on the target of the overall configuration. By
398the definition of host, this means that their host system is the same as
399the target system of the overall configuration.
400
401 The same process is used for both a native configuration and a cross
402configuration. Even when using a native configuration, the target
403libraries will be configured and built using the newly built compiler.
404This is particularly important for the C++ libraries, since there is no
405reason to assume that the C++ compiler used to build the host tools (if
406there even is one) uses the same ABI as the g++ compiler which will be
407used to build the target libraries.
408
409 There is one difference between a native configuration and a cross
410configuration. In a native configuration, the target libraries are
411normally configured and built as siblings of the host tools. In a cross
412configuration, the target libraries are normally built in a subdirectory
413whose name is the argument to `--target'. This is mainly for
414historical reasons.
415
416 To summarize, running `configure' in the Cygnus tree configures all
417the host libraries and tools, but does not configure any of the target
418libraries. 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
432actually controlled by `Makefile' targets.
433
434
435File: 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
437Target Library Configure Scripts
438--------------------------------
439
440 There are a few things you must know in order to write a configure
441script for a target library. This is just a quick sketch, and beginners
442shouldn't worry if they don't follow everything here.
443
444 The target libraries are configured and built using a newly built
445target compiler. There may not be any startup files or libraries for
446this target compiler. In fact, those files will probably be built as
447part of some target library, which naturally means that they will not
448exist when your target library is configured.
449
450 This means that the configure script for a target library may not use
451any test which requires doing a link. This unfortunately includes many
452useful autoconf macros, such as `AC_CHECK_FUNCS'. autoconf macros
453which do a compile but not a link, such as `AC_CHECK_HEADERS', may be
454used.
455
456 This is a severe restriction, but normally not a fatal one, as target
457libraries can often assume the presence of other target libraries, and
458thus know which functions will be available.
459
460 As of this writing, the autoconf macro `AC_PROG_CC' does a link to
461make sure that the compiler works. This may fail in a target library,
462so target libraries must use a different set of macros to locate the
463compiler. See the `configure.in' file in a directory like `libiberty'
464or `libgloss' for an example.
465
466 As noted in the previous section, target libraries are sometimes
467built in directories which are siblings to the host tools, and are
468sometimes built in a subdirectory. The `--with-target-subdir' configure
469option will be passed when the library is configured. Its value will be
470an empty string if the target library is a sibling. Its value will be
471the 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
474configure used the `--target' option), then the library will be
475configured with the `--with-cross-host' option. The value of this
476option will be the host system of the overall build. Recall that the
477host system of the library will be the target of the overall build. If
478the overall build is a native build, the `--with-cross-host' option
479will not be used.
480
481 A library which can be built both standalone and as a target library
482may want to install itself into different directories depending upon the
483case. When built standalone, or when built native, the library should
484be installed in `$(libdir)'. When built as a target library which is
485not 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
489is 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
491either standalone or native, and a link should work.
492
493
494File: configure.info, Node: Make Targets in Cygnus Tree, Next: Target libiberty, Prev: Target Library Configure Scripts, Up: Cross Tools in the Cygnus Tree
495
496Make Targets in Cygnus Tree
497---------------------------
498
499 The top level `Makefile' in the Cygnus tree defines targets for
500every known subdirectory.
501
502 For every subdirectory DIR which holds a host library or program,
503the `Makefile' target `all-DIR' will build that library or program.
504
505 There are dependencies among host tools. For example, building gcc
506requires first building gas, because the gcc build process invokes the
507target 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.
512The `Makefile' target `all-target-DIR' will build that library.
513
514 Every `configure-target-DIR' target depends upon `all-gcc', since
515gcc, 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
520directory: `install-DIR', `clean-DIR', and `check-DIR'. There are also
521corresponding `target' versions of these for the target libraries ,
522such as `install-target-DIR'.
523
524
525File: configure.info, Node: Target libiberty, Prev: Make Targets in Cygnus Tree, Up: Cross Tools in the Cygnus Tree
526
527Target libiberty
528----------------
529
530 The `libiberty' subdirectory is currently a special case, in that it
531is the only directory which is built both using the host compiler and
532using the target compiler.
533
534 This is because the files in `libiberty' are used when building the
535host tools, and they are also incorporated into the `libstdc++' target
536library as support code.
537
538 This duality does not pose any particular difficulties. It means
539that 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
543subdirectory, the same objects are normally used as both the host build
544and the target build. This is normally OK, since libiberty contains
545only C code, and in a native configuration the results of the host
546compiler and the target compiler are normally interoperable.
547
548 Irix 6 is again an exception here, since the SGI native compiler
549defaults to using the `O32' ABI, and gcc defaults to using the `N32'
550ABI. On Irix 6, the target libraries are built in a subdirectory even
551for a native configuration, avoiding this problem.
552
553 There are currently no other libraries built for both the host and
554the target, but there is no conceptual problem with adding more.
555
556
557File: configure.info, Node: Canadian Cross, Next: Cygnus Configure, Prev: Cross Compilation Tools, Up: Top
558
559Canadian Cross
560**************
561
562 It is possible to use the GNU configure and build system to build a
563program which will run on a system which is different from the system on
564which the tools are built. In other words, it is possible to build
565programs 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
580File: configure.info, Node: Canadian Cross Example, Next: Canadian Cross Concepts, Up: Canadian Cross
581
582Canadian 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
588on a Solaris system. You would use a GNU/Linux cross Solaris compiler
589to build the program.
590
591 Of course, you could not run the resulting program on your GNU/Linux
592system. You would have to copy it over to a Solaris system before you
593would run it.
594
595 Of course, you could also simply build the programs on the Solaris
596system in the first place. However, perhaps the Solaris system is not
597available for some reason; perhaps you actually don't have one, but you
598want to build the tools for somebody else to use. Or perhaps your
599GNU/Linux system is much faster than your Solaris system.
600
601 A Canadian Cross build is most frequently used when building
602programs to run on a non-Unix system, such as DOS or Windows. It may
603be simpler to configure and build on a Unix system than to support the
604configuration machinery on a non-Unix system.
605
606
607File: configure.info, Node: Canadian Cross Concepts, Next: Build Cross Host Tools, Prev: Canadian Cross Example, Up: Canadian Cross
608
609Canadian Cross Concepts
610=======================
611
612 When building a Canadian Cross, there are at least two different
613systems involved: the system on which the tools are being built, and
614the system on which the tools will run.
615
616 The system on which the tools are being built is called the "build"
617system.
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
622system, as in the previous section, the build system would be GNU/Linux,
623and the host system would be Solaris.
624
625 It is, of course, possible to build a cross compiler using a Canadian
626Cross (i.e., build a cross compiler using a cross compiler). In this
627case, the system for which the resulting cross compiler generates code
628is called the target system. (For a more complete discussion of host
629and target systems, *note Host and Target::).
630
631 An example of building a cross compiler using a Canadian Cross would
632be building a Windows cross MIPS ELF compiler on a GNU/Linux system. In
633this case the build system would be GNU/Linux, the host system would be
634Windows, and the target system would be MIPS ELF.
635
636 The name Canadian Cross comes from the case when the build, host, and
637target systems are all different. At the time that these issues were
638all being hashed out, Canada had three national political parties.
639
640
641File: configure.info, Node: Build Cross Host Tools, Next: Build and Host Options, Prev: Canadian Cross Concepts, Up: Canadian Cross
642
643Build Cross Host Tools
644======================
645
646 In order to configure a program for a Canadian Cross build, you must
647first build and install the set of cross tools you will use to build the
648program.
649
650 These tools will be build cross host tools. That is, they will run
651on 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
654remember that the build system is where you are doing the build, and the
655host system is where the resulting program will run. Therefore, you
656need a build cross host compiler.
657
658 In general, you must have a complete cross environment in order to do
659the build. This normally means a cross compiler, cross assembler, and
660so forth, as well as libraries and include files for the host system.
661
662
663File: configure.info, Node: Build and Host Options, Next: CCross not in Cygnus Tree, Prev: Build Cross Host Tools, Up: Canadian Cross
664
665Build 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
672the 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
677host system.
678
679 As we explained earlier, `config.guess' is used to set the default
680value for the `--host' option (*note Using the Host Type::). We can
681now see that since `config.guess' returns the type of system on which
682it is run, it really identifies the build system. Since the host
683system is normally the same as the build system (i.e., people do not
684normally build using a cross compiler), it is reasonable to use the
685result 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
690determine the build system, and presume a Canadian Cross if the result
691of `config.guess' differed from the `--host' option. However, for
692historical reasons, some configure scripts are routinely run using an
693explicit `--host' option, rather than using the default from
694`config.guess'. As noted earlier, it is difficult or impossible to
695reliably compare configuration names (*note Using the Target Type::).
696Therefore, by convention, if the `--host' option is used, but the
697`--build' option is not used, then the build system defaults to the
698host system.
699
700
701File: configure.info, Node: CCross not in Cygnus Tree, Next: CCross in Cygnus Tree, Prev: Build and Host Options, Up: Canadian Cross
702
703Canadian Cross not in Cygnus Tree.
704==================================
705
706 If you are not using the Cygnus tree, you must explicitly specify the
707cross tools which you want to use to build the program. This is done by
708setting environment variables before running the `configure' script.
709
710 You must normally set at least the environment variables `CC', `AR',
711and `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
714as `AS', `LD', or `NM'.
715
716 You would set these environment variables to the build cross tools
717which you are going to use.
718
719 For example, if you are building a Solaris program on a GNU/Linux
720system, 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
725File: configure.info, Node: CCross in Cygnus Tree, Next: Supporting Canadian Cross, Prev: CCross not in Cygnus Tree, Up: Canadian Cross
726
727Canadian Cross in Cygnus Tree
728=============================
729
730 This section describes configuring and building a Canadian Cross when
731using 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
739File: configure.info, Node: Standard Cygnus CCross, Next: Cross Cygnus CCross, Up: CCross in Cygnus Tree
740
741Building a Normal Program
742-------------------------
743
744 When configuring a Canadian Cross in the Cygnus tree, all the
745appropriate environment variables are automatically set to `HOST-TOOL',
746where HOST is the value used for the `--host' option, and TOOL is the
747name of the tool (e.g., `gcc', `as', etc.). These tools must be on
748your `PATH'.
749
750 Adding a prefix of HOST will give the usual name for the build cross
751host tools. To see this, consider that when these cross tools were
752built, they were configured to run on the build system and to produce
753code 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
755calling the host. Recall that the default name for installed cross
756tools uses the target system as a prefix (*note Using the Target
757Type::). Since that is the system which we are now calling the host,
758HOST 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
762using the compiler `solaris-gcc'. You must have previously built and
763installed this compiler, probably by doing a build with no `--host'
764option and with a `--target' option of `solaris'.
765
766
767File: configure.info, Node: Cross Cygnus CCross, Prev: Standard Cygnus CCross, Up: CCross in Cygnus Tree
768
769Building a Cross Program
770------------------------
771
772 There are additional considerations if you want to build a cross
773compiler, rather than a native compiler, in the Cygnus tree using a
774Canadian Cross.
775
776 When you build a cross compiler using the Cygnus tree, then the
777target libraries will normally be built with the newly built target
778compiler (*note Host and Target Libraries::). However, this will not
779work when building with a Canadian Cross. This is because the newly
780built target compiler will be a program which runs on the host system,
781and therefore will not be able to run on the build system.
782
783 Therefore, when building a cross compiler with the Cygnus tree, you
784must first install a set of build cross target tools. These tools will
785be used when building the target libraries.
786
787 Note that this is not a requirement of a Canadian Cross in general.
788For example, it would be possible to build just the host cross target
789tools on the build system, to copy the tools to the host system, and to
790build the target libraries on the host system. The requirement for
791build cross target tools is imposed by the Cygnus tree, which expects
792to 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
794expects to be able to build the target libraries on the build system,
795which means that it must use a build cross target toolchain.
796
797 For example, suppose you want to build a Windows cross MIPS ELF
798compiler on a GNU/Linux system. You must have previously installed
799both a GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF
800compiler.
801
802 In order to build the Windows (configuration name `i386-cygwin32')
803cross MIPS ELF (configure name `mips-elf') compiler, you might execute
804the following commands (long command lines are broken across lines with
805a 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
830Windows machine, and run the resulting programs.
831
832
833File: configure.info, Node: Supporting Canadian Cross, Prev: CCross in Cygnus Tree, Up: Canadian Cross
834
835Supporting Canadian Cross
836=========================
837
838 If you want to make it possible to build a program you are developing
839using a Canadian Cross, you must take some care when writing your
840configure and make rules. Simple cases will normally work correctly.
841However, it is not hard to write configure and make tests which will
842fail 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
850File: configure.info, Node: CCross in Configure, Next: CCross in Make, Up: Supporting Canadian Cross
851
852Supporting Canadian Cross in Configure Scripts
853----------------------------------------------
854
855 In a `configure.in' file, after calling `AC_PROG_CC', you can find
856out whether this is a Canadian Cross configure by examining the shell
857variable `cross_compiling'. In a Canadian Cross, which means that the
858compiler is a cross compiler, `cross_compiling' will be `yes'. In a
859normal configuration, `cross_compiling' will be `no'.
860
861 You ordinarily do not need to know the type of the build system in a
862configure script. However, if you do need that information, you can get
863it by using the macro `AC_CANONICAL_SYSTEM', the same macro that is
864used to determine the target system. This macro will set the variables
865`build', `build_alias', `build_cpu', `build_vendor', and `build_os',
866which correspond to the similar `target' and `host' variables, except
867that they describe the build system.
868
869 When writing tests in `configure.in', you must remember that you
870want to test the host environment, not the build environment.
871
872 Macros like `AC_CHECK_FUNCS' which use the compiler will test the
873host environment. That is because the tests will be done by running the
874compiler, which is actually a build cross host compiler. If the
875compiler can find the function, that means that the function is present
876in the host environment.
877
878 Tests like `test -f /dev/ptyp0', on the other hand, will test the
879build environment. Remember that the configure script is running on the
880build system, not the host system. If your configure scripts examines
881files, those files will be on the build system. Whatever you determine
882based 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
885main exception is `AC_TRY_RUN'. This macro tries to compile and run a
886test program. This will fail in a Canadian Cross, because the program
887will be compiled for the host system, which means that it will not run
888on the build system.
889
890 The `AC_TRY_RUN' macro provides an optional argument to tell the
891configure script what to do in a Canadian Cross. If that argument is
892not present, you will get a warning when you run `autoconf':
893 warning: AC_TRY_RUN called without default to allow cross compiling
894
895This tells you that the resulting `configure' script will not work with
896a Canadian Cross.
897
898 In some cases while it may better to perform a test at configure
899time, it is also possible to perform the test at run time. In such a
900case you can use the cross compiling argument to `AC_TRY_RUN' to tell
901your 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
904with 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
907generally not very useful with a Canadian Cross; it permits an optional
908argument indicating the default size, but there is no way to know what
909the correct default should be.
910
911
912File: configure.info, Node: CCross in Make, Prev: CCross in Configure, Up: Supporting Canadian Cross
913
914Supporting Canadian Cross in Makefiles.
915---------------------------------------
916
917 The main Canadian Cross issue in a `Makefile' arises when you want
918to use a subsidiary program to generate code or data which you will then
919include in your real program.
920
921 If you compile this subsidiary program using `$(CC)' in the usual
922way, you will not be able to run it. This is because `$(CC)' will
923build a program for the host system, but the program is being built on
924the build system.
925
926 You must instead use a compiler for the build system, rather than the
927host system. In the Cygnus tree, this make variable `$(CC_FOR_BUILD)'
928will hold a compiler for the build system.
929
930 Note that you should not include `config.h' in a file you are
931compiling with `$(CC_FOR_BUILD)'. The `configure' script will build
932`config.h' with information for the host system. However, you are
933compiling the file using a compiler for the build system (a native
934compiler). Subsidiary programs are normally simple filters which do no
935user interaction, and it is normally possible to write them in a highly
936portable fashion so that the absence of `config.h' is not crucial.
937
938 The gcc `Makefile.in' shows a complex situation in which certain
939files, such as `rtl.c', must be compiled into both subsidiary programs
940run on the build system and into the final program. This approach may
941be of interest for advanced build system hackers. Note that the build
942system compiler is rather confusingly called `HOST_CC'.
943
944
945File: configure.info, Node: Cygnus Configure, Next: Multilibs, Prev: Canadian Cross, Up: Top
946
947Cygnus Configure
948****************
949
950 The Cygnus configure script predates autoconf. All of its
951interesting features have been incorporated into autoconf. No new
952programs should be written to use the Cygnus configure script.
953
954 However, the Cygnus configure script is still used in a few places:
955at the top of the Cygnus tree and in a few target libraries in the
956Cygnus tree. Until those uses have been replaced with autoconf, some
957brief notes are appropriate here. This is not complete documentation,
958but it should be possible to use this as a guide while examining the
959scripts 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
967File: configure.info, Node: Cygnus Configure Basics, Next: Cygnus Configure in C++ Libraries, Up: Cygnus Configure
968
969Cygnus Configure Basics
970=======================
971
972 Cygnus configure does not use any generated files; there is no
973program corresponding to `autoconf'. Instead, there is a single shell
974script named `configure' which may be found at the top of the Cygnus
975tree. This shell script was written by hand; it was not generated by
976autoconf, and it is incorrect, and indeed harmful, to run `autoconf' in
977the top level of a Cygnus tree.
978
979 Cygnus configure works in a particular directory by examining the
980file `configure.in' in that directory. That file is broken into four
981separate shell scripts.
982
983 The first is the contents of `configure.in' up to a line that starts
984with `# per-host:'. This is the common part.
985
986 The second is the rest of `configure.in' up to a line that starts
987with `# per-target:'. This is the per host part.
988
989 The third is the rest of `configure.in' up to a line that starts
990with `# post-target:'. This is the per target part.
991
992 The fourth is the remainder of `configure.in'. This is the post
993target part.
994
995 If any of these comment lines are missing, the corresponding shell
996script is empty.
997
998 Cygnus configure will first execute the common part. This must set
999the shell variable `srctrigger' to the name of a source file, to
1000confirm that Cygnus configure is looking at the right directory. This
1001may 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
1005variables, and execute the per host part. This may set the shell
1006variable `host_makefile_frag'.
1007
1008 Cygnus configure will next set the `target' variable, and execute
1009the 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
1013variable is a list of subdirectories where a `Makefile.in' file may be
1014found. Cygnus configure will automatically look for a `Makefile.in'
1015file in the current directory. The `subdirs' shell variable is not
1016normally used, and I believe that the only directory which uses it at
1017present 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'
1021and `target', and automatically editing the values of `make' variables
1022such as `prefix' if they are present.
1023
1024 Also, if any of the `makefile_frag' shell variables are set, Cygnus
1025configure will interpret them as file names relative to either the
1026working directory or the source directory, and will read the contents of
1027the file into the generated `Makefile'. The file contents will be read
1028in after the first line in `Makefile.in' which starts with `####'.
1029
1030 These `Makefile' fragments are used to customize behaviour for a
1031particular host or target. They serve to select particular files to
1032compile, and to define particular preprocessor macros by providing
1033values for `make' variables which are then used during compilation.
1034Cygnus configure, unlike autoconf, normally does not do feature tests,
1035and 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
1042the `Makefile'. When it is run, the shell variable `Makefile' will
1043hold the name of the `Makefile', including the appropriate directory
1044component.
1045
1046 Like an autoconf generated `configure' script, Cygnus configure will
1047create a file named `config.status' which, when run, will automatically
1048recreate the configuration. The `config.status' file will simply
1049execute the Cygnus configure script again with the appropriate
1050arguments.
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
1054names in `links' to the files named in `files'. This is similar to the
1055autoconf `AC_LINK_FILES' macro.
1056
1057 Finally, any of the parts of `configure.in' may set the shell
1058variable `configdirs' to a set of subdirectories. If it is set, Cygnus
1059configure will recursively run the configure process in each
1060subdirectory. If the subdirectory uses Cygnus configure, it will
1061contain a `configure.in' file but no `configure' file, in which case
1062Cygnus configure will invoke itself recursively. If the subdirectory
1063has a `configure' file, Cygnus configure assumes that it is an autoconf
1064generated `configure' script, and simply invokes it directly.
1065
1066
1067File: configure.info, Node: Cygnus Configure in C++ Libraries, Prev: Cygnus Configure Basics, Up: Cygnus Configure
1068
1069Cygnus Configure in C++ Libraries
1070=================================
1071
1072 The C++ library configure system, written by Per Bothner, deserves
1073special mention. It uses Cygnus configure, but it does feature testing
1074like that done by autoconf generated `configure' scripts. This
1075approach is used in the libraries `libio', `libstdc++', and `libg++'.
1076
1077 Most of the `Makefile' information is written out by the shell
1078script `libio/config.shared'. Each `configure.in' file sets certain
1079shell variables, and then invokes `config.shared' to create two package
1080`Makefile' fragments. These fragments are then incorporated into the
1081resulting `Makefile' by the Cygnus configure script.
1082
1083 The file `_G_config.h' is created in the `libio' object directory by
1084running the shell script `libio/gen-params'. This shell script uses
1085feature tests to define macros and typedefs in `_G_config.h'.
1086
1087
1088File: configure.info, Node: Multilibs, Next: FAQ, Prev: Cygnus Configure, Up: Top
1089
1090Multilibs
1091*********
1092
1093 For some targets gcc may have different processor requirements
1094depending upon command line options. An obvious example is the
1095`-msoft-float' option supported on several processors. This option
1096means that the floating point registers are not available, which means
1097that floating point operations must be done by calling an emulation
1098subroutine rather than by using machine instructions.
1099
1100 For such options, gcc is often configured to compile target libraries
1101twice: once with `-msoft-float' and once without. When gcc compiles
1102target 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,
1106but we discuss them here since they require support in the `configure'
1107scripts 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
1115File: configure.info, Node: Multilibs in gcc, Next: Multilibs in Target Libraries, Up: Multilibs
1116
1117Multilibs 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
1123Makefile Fragment: (gcc)Target Fragment.
1124
1125 If you have built gcc, you can see what multilibs it uses by running
1126it with the `-print-multi-lib' option. The output `.;' means that no
1127multilibs are used. In general, the output is a sequence of lines, one
1128per multilib. The first part of each line, up to the `;', is the name
1129of the multilib directory. The second part is a list of compiler
1130options separated by `@' characters.
1131
1132 Multilibs are built in a tree of directories. The top of the tree,
1133represented by `.' in the list of multilib directories, is the default
1134library to use when no special compiler options are used. The
1135subdirectories of the tree hold versions of the library to use when
1136particular compiler options are used.
1137
Note: See TracBrowser for help on using the repository browser.