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