]>
Commit | Line | Data |
---|---|---|
7d283cc1 RP |
1 | \input texinfo @c -*-para-*- |
2 | @c %**start of header | |
3 | @setfilename cfg-paper.info | |
4 | @settitle On Configuring Development Tools | |
5 | @c %**end of header | |
6 | @setchapternewpage off | |
7 | ||
ad659e07 RP |
8 | @ifinfo |
9 | This document attempts to describe the general concepts behind | |
10 | configuration of the Cygnus Support release of the @sc{gnu} Development | |
11 | Tools. It also discusses common usage.. | |
12 | ||
787c6bfe | 13 | Copyright (C) 1991, 1992 Cygnus Support |
ad659e07 RP |
14 | Permission is granted to make and distribute verbatim copies of |
15 | this manual provided the copyright notice and this permission notice | |
16 | are preserved on all copies. | |
17 | ||
18 | @ignore | |
19 | Permission is granted to process this file through TeX and print the | |
20 | results, provided the printed document carries copying permission | |
21 | notice identical to this one except for the removal of this paragraph | |
22 | (this paragraph not being relevant to the printed manual). | |
23 | ||
24 | @end ignore | |
25 | Permission is granted to copy and distribute modified versions of this | |
26 | manual under the conditions for verbatim copying, provided that the entire | |
27 | resulting derived work is distributed under the terms of a permission | |
28 | notice identical to this one. | |
29 | ||
30 | Permission is granted to copy and distribute translations of this manual | |
31 | into another language, under the above conditions for modified versions, | |
32 | except that this permission notice may be stated in a translation approved | |
33 | by Cygnus Support. | |
34 | @end ifinfo | |
35 | ||
7d283cc1 RP |
36 | @titlepage |
37 | @sp 10 | |
38 | @title{On Configuring Development Tools} | |
0065bc39 | 39 | @author{K. Richard Pixley, @code{rich@@cygnus.com}} |
7d283cc1 | 40 | @author{Cygnus Support} |
ad659e07 | 41 | @page |
0065bc39 | 42 | |
7d283cc1 | 43 | @vskip 0pt plus 1filll |
787c6bfe | 44 | Copyright @copyright{} 1991, 1992 Cygnus Support |
7d283cc1 | 45 | |
ad659e07 RP |
46 | Permission is granted to make and distribute verbatim copies of |
47 | this manual provided the copyright notice and this permission notice | |
48 | are preserved on all copies. | |
7d283cc1 | 49 | |
ad659e07 RP |
50 | Permission is granted to copy and distribute modified versions of this |
51 | manual under the conditions for verbatim copying, provided that the entire | |
52 | resulting derived work is distributed under the terms of a permission | |
53 | notice identical to this one. | |
54 | ||
55 | Permission is granted to copy and distribute translations of this manual | |
56 | into another language, under the above conditions for modified versions, | |
57 | except that this permission notice may be stated in a translation approved | |
58 | by Cygnus Support. | |
59 | @end titlepage | |
7d283cc1 | 60 | |
12682548 RP |
61 | @ifinfo |
62 | @format | |
63 | START-INFO-DIR-ENTRY | |
64 | * configuration: (cfg-paper.info). Some theory on configuring source. | |
65 | END-INFO-DIR-ENTRY | |
66 | @end format | |
67 | @end ifinfo | |
68 | ||
7d283cc1 RP |
69 | @node top, Some Basic Terms, (dir), (dir) |
70 | ||
71 | @ifinfo | |
72 | This document attempts to describe the general concepts behind | |
73 | configuration of the Cygnus Support release of the @sc{gnu} Development | |
74 | Tools. It also discusses common usage. | |
75 | @end ifinfo | |
76 | ||
77 | @menu | |
78 | * Some Basic Terms:: Some Basic Terms | |
79 | * Specifics.:: Specifics | |
80 | * Building Development Environments:: Building Development Environments | |
81 | * A Walk Through:: A Walk Through | |
82 | * Final Notes:: Final Notes | |
83 | * Index:: Index | |
90f66196 RP |
84 | |
85 | --- The Detailed Node Listing --- | |
86 | ||
87 | Some Basic Terms | |
88 | ||
89 | * Host Environments:: Host Environments | |
90 | * Configuration Time Options:: Configuration Time Options | |
91 | ||
92 | A Walk Through | |
93 | ||
94 | * Native Development Environments:: Native Development Environments | |
95 | * Emulation Environments:: Emulation Environments | |
96 | * Simple Cross Environments:: Simple Cross Environments | |
97 | * Crossing Into Targets:: Crossing Into Targets | |
98 | * Canadian Cross:: Canadian Cross | |
99 | ||
100 | Final Notes | |
101 | ||
102 | * Hacking Configurations:: Hacking Configurations | |
7d283cc1 RP |
103 | @end menu |
104 | ||
105 | @node Some Basic Terms, Specifics., top, top | |
106 | @chapter Some Basic Terms | |
107 | ||
108 | There are a lot of terms that are frequently used when discussing | |
109 | development tools. Most of the common terms have been used for many | |
110 | different concepts such that their meanings have become ambiguous to the | |
111 | point of being confusing. Typically, we only guess at their meanings | |
112 | from context and we frequently guess wrong. | |
113 | ||
114 | This document uses very few terms by comparison. The intent is to make | |
115 | the concepts as clear as possible in order to convey the usage and | |
116 | intent of these tools. | |
117 | ||
118 | @emph{Programs} run on @emph{machines}. Programs are very nearly always | |
119 | written in @emph{source}. Programs are @emph{built} from source. | |
120 | @emph{Compilation} is a process that is frequently, but not always, used | |
121 | when building programs. | |
122 | @cindex Programs | |
123 | @cindex Machines | |
124 | @cindex Source | |
125 | @cindex Building | |
126 | @cindex Compilation | |
127 | ||
128 | @menu | |
129 | * Host Environments:: Host Environments | |
130 | * Configuration Time Options:: Configuration Time Options | |
131 | @end menu | |
132 | ||
133 | @node Host Environments, Configuration Time Options, Some Basic Terms, Some Basic Terms | |
134 | @section Host Environments | |
135 | ||
136 | @cindex host | |
137 | In this document, the word @emph{host} refers to the environment in | |
138 | which the source in question will be compiled. @emph{host} and | |
139 | @emph{host name} have nothing to do with the proper name of your host, | |
140 | like @emph{ucbvax}, @emph{prep.ai.mit.edu} or @emph{att.com}. Instead | |
141 | they refer to things like @emph{sun4} and @emph{dec3100}. | |
142 | ||
143 | Forget for a moment that this particular directory of source is the | |
144 | source for a development environment. Instead, pretend that it is the | |
145 | source for a simpler, more mundane, application, say, a desk calculator. | |
146 | ||
147 | Source that can be compiled in more than one environment, generally | |
148 | needs to be set up for each environment explicitly. Here we refer to | |
149 | that process as configuration. That is, we configure the source for a | |
150 | host. | |
151 | ||
152 | For example, if we wanted to configure our mythical desk calculator to | |
153 | compile on a SparcStation, we might configure for host sun4. With our | |
154 | configuration system: | |
155 | ||
156 | @example | |
157 | cd desk-calculator ; ./configure sun4 | |
158 | @end example | |
159 | ||
160 | @noindent | |
161 | does the trick. @code{configure} is a shell script that sets up Makefiles, | |
162 | subdirectories, and symbolic links appropriate for compiling the source | |
163 | on a sun4. | |
164 | ||
165 | The @emph{host} environment does not necessarily refer to the machine on | |
166 | which the tools are built. It is possible to provide a sun3 development | |
167 | environment on a sun4. If we wanted to use a cross compiler on the sun4 | |
168 | to build a program intended to be run on a sun3, we would configure the | |
169 | source for sun3. | |
170 | ||
171 | @example | |
172 | cd desk-calculator ; ./configure sun3 | |
173 | @end example | |
174 | ||
175 | @noindent | |
176 | The fact that we are actually building the program on a sun4 makes no | |
177 | difference if the sun3 cross compiler presents an environment that looks | |
178 | like a sun3 from the point of view of the desk calculator source code. | |
179 | Specifically, the environment is a sun3 environment if the header files, | |
180 | predefined symbols, and libraries appear as they do on a sun3. | |
181 | ||
182 | Nor does the host environment refer to the the machine on which the | |
183 | program to be built will run. It is possible to provide a sun3 | |
184 | emulation environment on a sun4 such that programs built in a sun3 | |
185 | development environment actually run on the sun4. This technique is | |
186 | often used within individual programs to remedy deficiencies in the host | |
187 | operating system. For example, some operating systems do not provide | |
62ddb92b RP |
188 | the @code{bcopy} function and so it is emulated using the |
189 | @code{memcpy} funtion. | |
7d283cc1 RP |
190 | |
191 | Host environment simply refers to the environment in which the program | |
192 | will be built from the source. | |
193 | ||
194 | ||
195 | @node Configuration Time Options, , Host Environments, Some Basic Terms | |
196 | @section Configuration Time Options | |
197 | ||
198 | Many programs have compile time options. That is, features of the | |
199 | program that are either compiled into the program or not based on a | |
200 | choice made by the person who builds the program. We refer to these as | |
201 | @emph{configuration options}. For example, our desk calculator might be | |
202 | capable of being compiled into a program that either uses infix notation | |
203 | or postfix as a configuration option. For a sun3, to choose infix you | |
204 | might use: | |
205 | ||
206 | @example | |
207 | ./configure sun3 -notation=infix | |
208 | @end example | |
209 | ||
210 | @noindent | |
211 | while for a sun4 with postfix you might use: | |
212 | ||
213 | @example | |
214 | ./configure sun4 -notation=postfix | |
215 | @end example | |
216 | ||
787c6bfe RP |
217 | If we wanted to build both at the same time, the intermediate pieces |
218 | used in the build process must be kept separate. | |
7d283cc1 RP |
219 | |
220 | @example | |
787c6bfe RP |
221 | mkdir ../objdir.sun4 |
222 | (cd ../objdir.sun4 ; ./configure sun4 -notation=postfix -srcdir=../src) | |
223 | mkdir ../objdir.sun3 | |
224 | (cd ../objdir.sun3 ; ./configure sun3 -notation=infix -srcdir=../src) | |
7d283cc1 RP |
225 | @end example |
226 | ||
227 | @noindent | |
228 | will create subdirectories for the intermediate pieces of the sun4 and | |
229 | sun3 configurations. This is necessary as previous systems were only | |
230 | capable of one configuration at a time. Otherwise, a second | |
231 | configuration would write over the first. We've chosen to retain this | |
787c6bfe RP |
232 | behaviour so the obj directories and the @code{-srcdir} configuration |
233 | option are necessary to get the new behaviour. The order of the | |
234 | arguments doesn't matter. There should be exactly one argument without | |
235 | a leading @samp{-} sign and that argument will be assumed to be the host | |
236 | name. | |
7d283cc1 RP |
237 | |
238 | From here on the examples will assume that you want to build the tools | |
787c6bfe | 239 | @emph{in place} and won't show the @code{-srcdir} option, but remember |
7d283cc1 RP |
240 | that it is available. |
241 | ||
242 | In order to actually install the program, the configuration system needs | |
243 | to know where you would like the program installed. The default | |
244 | location is @file{/usr/local}. We refer to this location as | |
245 | @code{$(prefix)}. All user visible programs will be installed in | |
246 | @file{@code{$(prefix)}/bin}. All other programs and files will be | |
247 | installed in a subdirectory of @file{@code{$(prefix)}/lib}. | |
248 | ||
249 | NOTE: @code{$(prefix)} was previously known as @code{$(destdir)}. | |
250 | ||
251 | You can elect to change @code{$(prefix)} only as a configuration time | |
252 | option. | |
253 | ||
254 | @example | |
255 | ./configure sun4 -notation=postfix -prefix=/local | |
256 | @end example | |
257 | ||
258 | @noindent | |
259 | Will configure the source such that: | |
260 | ||
261 | @example | |
262 | make install | |
263 | @end example | |
264 | ||
265 | @noindent | |
266 | will put it's programs in @file{/local/bin} and @file{/local/lib/gcc}. | |
267 | If you change @code{$(prefix)} after building the source, you will need | |
268 | to: | |
269 | ||
270 | @example | |
271 | make clean | |
272 | @end example | |
273 | ||
274 | @noindent | |
275 | before the change will be propogated properly. This is because some | |
276 | tools need to know the locations of other tools. | |
277 | ||
278 | With these concepts in mind, we can drop the desk calculator example and | |
279 | move on to the application that resides in these directories, namely, | |
280 | the source to a development environment. | |
281 | ||
282 | @node Specifics., Building Development Environments, Some Basic Terms, top | |
283 | @chapter Specifics | |
284 | ||
285 | The @sc{gnu} Development Tools can be built on a wide variety of hosts. So, | |
286 | of course, they must be configured. Like the last example, | |
287 | ||
288 | @example | |
289 | ./configure sun4 -prefix=/local | |
290 | ./configure sun3 -prefix=/local | |
291 | @end example | |
292 | ||
293 | @noindent | |
294 | will configure the source to be built in subdirectories, in order to | |
295 | keep the intermediate pieces separate, and to be installed in | |
296 | @file{/local}. | |
297 | ||
298 | When built with suitable development environments, these will be native | |
299 | tools. We'll explain the term @emph{native} later. | |
300 | ||
301 | @node Building Development Environments, A Walk Through, Specifics., top | |
302 | @chapter Building Development Environments | |
303 | ||
304 | @cindex Target | |
305 | ||
306 | The Cygnus Support @sc{gnu} development tools can not only be built in a | |
307 | number of host development environments, they can also be configured to | |
308 | create a number of different development environments on each of those | |
309 | hosts. We refer to a specific development environment created as a | |
310 | @emph{target}. That is, the word @emph{target} refers to the development | |
311 | environment produced by compiling this source and installing the | |
312 | resulting programs. | |
313 | ||
314 | For the Cygnus Support @sc{gnu} development tools, the default target is the | |
315 | same as the host. That is, the development environment produced is | |
316 | intended to be compatible with the environment used to build the tools. | |
317 | ||
318 | In the example above, we created two configurations, one for sun4 and | |
319 | one for sun3. The first configuration is expecting to be built in a | |
320 | sun4 development environment, to create a sun4 development environment. | |
321 | It doesn't necessarily need to be built on a sun4 if a sun4 development | |
322 | environment is available elsewhere. Likewise, if the available sun4 | |
323 | development environment produces executables intended for something | |
324 | other than sun4, then the development environment built from this sun4 | |
325 | configuration will run on something other than a sun4. From the point | |
326 | of view of the configuration system and the @sc{gnu} development tools | |
327 | source, this doesn't matter. What matters is that they will be built in | |
328 | a sun4 environment. | |
329 | ||
330 | Similarly, the second configuration given above is expecting to be built | |
331 | in a sun3 development environment, to create a sun3 development | |
332 | environment. | |
333 | ||
334 | The development environment produced, is a configuration time option, | |
335 | just like @code{$(prefix)}. | |
336 | ||
337 | @example | |
338 | ./configure sun4 -prefix=/local -target=sun3 | |
339 | ./configure sun3 -prefix=/local -target=sun4 | |
340 | @end example | |
341 | ||
342 | In this example, like before, we create two configurations. The first | |
343 | is intended to be built in a sun4 environment, in subdirectories, to be | |
344 | installed in @file{/local}. The second is intended to be built in a | |
345 | sun3 environment, in subdirectories, to be installed in @file{/local}. | |
346 | ||
347 | Unlike the previous example, the first configuration will produce a sun3 | |
348 | development environment, perhaps even suitable for building the second | |
349 | configuration. Likewise, the second configuration will produce a sun4 | |
350 | development environment, perhaps even suitable for building the first | |
351 | configuration. | |
352 | ||
353 | The development environment used to build these configurations will | |
354 | determine the machines on which the resulting development environments | |
355 | can be used. | |
356 | ||
357 | ||
358 | @node A Walk Through, Final Notes, Building Development Environments, top | |
359 | @chapter A Walk Through | |
360 | ||
361 | ||
362 | @menu | |
363 | * Native Development Environments:: Native Development Environments | |
364 | * Emulation Environments:: Emulation Environments | |
365 | * Simple Cross Environments:: Simple Cross Environments | |
366 | * Crossing Into Targets:: Crossing Into Targets | |
90f66196 | 367 | * Canadian Cross:: Canadian Cross |
7d283cc1 RP |
368 | @end menu |
369 | ||
370 | @node Native Development Environments, Emulation Environments, A Walk Through, A Walk Through | |
371 | @section Native Development Environments | |
372 | ||
373 | Let us assume for a moment that you have a sun4 and that with your sun4 | |
374 | you received a development environment. This development environment is | |
375 | intended to be run on your sun4 to build programs that can be run on | |
376 | your sun4. You could, for instance, run this development environment on | |
377 | your sun4 to build our example desk calculator program. You could then | |
378 | run the desk calculator program on your sun4. | |
379 | ||
380 | @cindex Native | |
381 | @cindex Foreign | |
382 | The resulting desk calculator program is referred to as a @emph{native} | |
383 | program. The development environment itself is composed of native | |
384 | programs that, when run, build other native programs. Any other program | |
385 | is referred to as @emph{foreign}. Programs intended for other machines are | |
386 | foreign programs. | |
387 | ||
388 | This type of development environment, which is by far the most common, | |
389 | is refered to as @emph{native}. That is, a native development environment | |
390 | runs on some machine to build programs for that same machine. The | |
391 | process of using a native development environment to build native | |
392 | programs is called a @emph{native} build. | |
393 | ||
394 | @example | |
395 | ./configure sun4 | |
396 | @end example | |
397 | ||
398 | @noindent | |
399 | will configure this source such that when built in a sun4 development | |
400 | environment, with a development environment that builds programs | |
401 | intended to be run on sun4 machines, the programs built will be native | |
402 | programs and the resulting development environment will be a native | |
403 | development environment. | |
404 | ||
405 | The development system that came with your sun4 is one such environment. | |
406 | Using it to build the @sc{gnu} Development Tools is a very common activity | |
407 | and the resulting development environment is quite popular. | |
408 | ||
409 | @example | |
410 | make all | |
411 | @end example | |
412 | ||
413 | @noindent | |
414 | will build the tools as configured and will assume that you want to use | |
415 | the native development environment that came with your machine. | |
416 | ||
417 | @cindex Bootstrapping | |
418 | @cindex Stage1 | |
419 | Using a development environment to build a development environment is | |
420 | called @emph{bootstrapping}. The Cygnus Support release of the @sc{gnu} | |
421 | Development Tools is capable of bootstrapping itself. This is a very | |
422 | powerful feature that we'll return to later. For now, let's pretend | |
423 | that you used the native development environment that came with your | |
424 | sun4 to bootstrap the Cygnus Support release and let's call the new | |
425 | development environment @emph{stage1}. | |
426 | ||
62ddb92b RP |
427 | Why bother? Well, most people find that the @sc{gnu} development |
428 | environment builds programs that run faster and take up less space than | |
429 | the native development environments that came with their machines. Some | |
430 | people didn't get development environments with their machines and some | |
431 | people just like using the @sc{gnu} tools better than using other tools. | |
7d283cc1 RP |
432 | |
433 | @cindex Stage2 | |
434 | While you're at it, if the @sc{gnu} tools produce better programs, maybe you | |
435 | should use them to build the @sc{gnu} tools. It's a good idea, so let's | |
436 | pretend that you do. Let's call the new development environment | |
437 | @emph{stage2}. | |
438 | ||
439 | @cindex Stage3 | |
440 | So far you've built a development environment, stage1, and you've used | |
441 | stage1 to build a new, faster and smaller development environment, | |
442 | stage2, but you haven't run any of the programs that the @sc{gnu} tools have | |
443 | built. You really don't yet know if these tools work. Do you have any | |
444 | programs built with the @sc{gnu} tools? Yes, you do. stage2. What does | |
445 | that program do? It builds programs. Ok, do you have any source handy | |
446 | to build into a program? Yes, you do. The @sc{gnu} tools themselves. In | |
447 | fact, if you use stage2 to build the @sc{gnu} tools again the resulting | |
448 | programs should be identical to stage2. Let's pretend that you do and | |
449 | call the new development environment @emph{stage3}. | |
450 | ||
451 | @cindex Three stage boot | |
452 | You've just completed what's called a @emph{three stage boot}. You now have | |
453 | a small, fast, somewhat tested, development environment. | |
454 | ||
455 | @example | |
456 | make bootstrap | |
457 | @end example | |
458 | ||
459 | @noindent | |
460 | will do a three stage boot across all tools and will compare stage2 to | |
461 | stage3 and complain if they are not identical. | |
462 | ||
463 | Once built, | |
464 | ||
465 | @example | |
466 | make install | |
467 | @end example | |
468 | ||
469 | @noindent | |
470 | will install the development environment in the default location or in | |
471 | @code{$(prefix)} if you specified an alternate when you configured. | |
472 | ||
473 | @cindex Cross | |
474 | Any development environment that is not a native development environment | |
475 | is refered to as a @emph{cross} development environment. There are many | |
476 | different types of cross development environments but most fall into one | |
477 | of three basic categories. | |
478 | ||
479 | ||
480 | @node Emulation Environments, Simple Cross Environments, Native Development Environments, A Walk Through | |
481 | @section Emulation Environments | |
482 | ||
483 | @cindex Emulation | |
484 | The first category of cross development environment is called | |
485 | @emph{emulation}. There are two primary types of emulation, but both | |
486 | types result in programs that run on the native host. | |
487 | ||
488 | @cindex Software emulation | |
489 | @cindex Software emulator | |
490 | The first type is @emph{software emulation}. This form of cross | |
491 | development environment involves a native program that when run on the | |
492 | native host, is capable of interpreting, and in most aspects running, a | |
493 | program intended for some other machine. This technique is typically | |
494 | used when the other machine is either too expensive, too slow, too fast, | |
495 | or not available, perhaps because it hasn't yet been built. The native, | |
496 | interpreting program is called a @emph{software emulator}. | |
497 | ||
498 | The @sc{gnu} Development Tools do not currently include any software | |
499 | emulators. Some do exist and the @sc{gnu} Development Tools can be | |
500 | configured to create simple cross development environments for with | |
501 | these emulators. More on this later. | |
502 | ||
503 | The second type of emulation is when source intended for some other | |
504 | development environment is built into a program intended for the native | |
505 | host. The concepts of operating system universes and hosted operating | |
506 | systems are two such development environments. | |
507 | ||
508 | The Cygnus Support Release of the @sc{gnu} Development Tools can be | |
509 | configured for one such emulation at this time. | |
510 | ||
511 | @example | |
512 | ./configure sun4 -ansi | |
513 | @end example | |
514 | ||
515 | @cindex ANSI | |
516 | @cindex X3J11 | |
517 | @noindent | |
518 | will configure the source such that when built in a sun4 development | |
519 | environment the resulting development environment is capable of building | |
520 | sun4 programs from strictly conforming @sc{ANSI X3J11 C} source. | |
521 | Remember that the environment used to build the tools determines the | |
522 | machine on which this tools will run, so the resulting programs aren't | |
523 | necessarily intended to run on a sun4, although they usually are. Also | |
524 | note that the source for the @sc{gnu} tools is not strictly conforming | |
525 | @sc{ansi} source so this configuration cannot be used to bootstrap the | |
526 | @sc{gnu} tools. | |
527 | ||
528 | ||
529 | @node Simple Cross Environments, Crossing Into Targets, Emulation Environments, A Walk Through | |
530 | @section Simple Cross Environments | |
531 | ||
532 | @example | |
533 | ./configure sun4 -target=a29k | |
534 | @end example | |
535 | ||
536 | @noindent | |
537 | will configure the tools such that when compiled in a sun4 development | |
538 | environment the resulting development environment can be used to create | |
539 | programs intended for an a29k. Again, this does not necessarily mean | |
540 | that the new development environment can be run on a sun4. That would | |
541 | depend on the development environment used to build these tools. | |
542 | ||
543 | Earlier you saw how to configure the tools to build a native development | |
544 | environment, that is, a development environment that runs on your sun4 | |
545 | and builds programs for your sun4. Let's pretend that you use stage3 to | |
546 | build this simple cross configuration and let's call the new development | |
547 | environment gcc-a29k. Remember that this is a native build. Gcc-a29k | |
548 | is a collection of native programs intended to run on your sun4. That's | |
549 | what stage3 builds, programs for your sun4. Gcc-a29k represents an a29k | |
550 | development environment that builds programs intended to run on an a29k. | |
551 | But, remember, gcc-a29k runs on your sun4. Programs built with gcc-a29k | |
552 | will run on your sun4 only with the help of an appropriate software | |
553 | emulator. | |
554 | ||
555 | @cindex Simple cross | |
556 | @cindex Crossing to | |
557 | Building gcc-a29k is also a bootstrap but of a slightly different sort. | |
558 | We call gcc-a29k a @emph{simple cross} environment and using gcc-a29k to | |
559 | build a program intended for a29k is called @emph{crossing to} a29k. | |
560 | Simple cross environments are the second category of cross development | |
561 | environments. | |
562 | ||
563 | ||
90f66196 | 564 | @node Crossing Into Targets, Canadian Cross, Simple Cross Environments, A Walk Through |
7d283cc1 RP |
565 | @section Crossing Into Targets |
566 | ||
567 | @example | |
568 | ./configure a29k -target=a29k | |
569 | @end example | |
570 | ||
571 | @noindent | |
572 | will configure the tools such that when compiled in an a29k development | |
573 | environment, the resulting development environment can be used to create | |
574 | programs intended for an a29k. Again, this does not necessarily mean | |
575 | that the new development environment can be run on an a29k. That would | |
576 | depend on the development environment used to build these tools. | |
577 | ||
578 | If you've been following along this walk through, then you've already | |
579 | built an a29k environment, namely gcc-a29k. Let's pretend you use | |
580 | gcc-a29k to build the current configuration. | |
581 | ||
582 | Gcc-a29k builds programs intended for the a29k so the new development | |
583 | environment will be intended for use on an a29k. That is, this new gcc | |
584 | consists of programs that are foreign to your sun4. They cannot be run | |
585 | on your sun4. | |
586 | ||
587 | @cindex Crossing into | |
588 | The process of building this configuration is another a bootstrap. This | |
589 | bootstrap is also a cross to a29k. Because this type of build is both a | |
590 | bootstrap and a cross to a29k, it is sometimes referred to as a | |
591 | @emph{cross into} a29k. This new development environment isn't really a | |
592 | cross development environment at all. It is intended to run on an a29k | |
593 | to produce programs for an a29k. You'll remember that this makes it, by | |
594 | definition, an a29k native compiler. @emph{Crossing into} has been | |
595 | introduced here not because it is a type of cross development | |
596 | environment, but because it is frequently mistaken as one. The process | |
597 | is @emph{a cross} but the resulting development environment is a native | |
598 | development environment. | |
599 | ||
600 | You could not have built this configuration with stage3, because stage3 | |
601 | doesn't provide an a29k environment. Instead it provides a sun4 | |
602 | environment. | |
603 | ||
604 | If you happen to have an a29k lying around, you could now use this fresh | |
605 | development environment on the a29k to three-stage these tools all over | |
606 | again. This process would look just like it did when we built the | |
607 | native sun4 development environment because we would be building another | |
608 | native development environment, this one on a29k. | |
609 | ||
610 | ||
90f66196 RP |
611 | @node Canadian Cross, , Crossing Into Targets, A Walk Through |
612 | @section Canadian Cross | |
7d283cc1 RP |
613 | |
614 | So far you've seen that our development environment source must be | |
615 | configured for a specific host and for a specific target. You've also | |
616 | seen that the resulting development environment depends on the | |
617 | development environment used in the build process. | |
618 | ||
619 | When all four match identically, that is, the configured host, the | |
620 | configured target, the environment presented by the development | |
621 | environment used in the build, and the machine on which the resulting | |
622 | development environment is intended to run, then the new development | |
623 | environment will be a native development environment. | |
624 | ||
625 | When all four match except the configured host, then we can assume that | |
626 | the development environment used in the build is some form of library | |
627 | emulation. | |
628 | ||
629 | When all four match except for the configured target, then the resulting | |
630 | development environment will be a simple cross development environment. | |
631 | ||
632 | When all four match except for the host on which the development | |
633 | environment used in the build runs, the build process is a @emph{cross into} | |
634 | and the resulting development environment will be native to some other | |
635 | machine. | |
636 | ||
637 | Most of the other permutations do exist in some form, but only one more | |
638 | is interesting to the current discussion. | |
639 | ||
640 | @example | |
641 | ./configure a29k -target=sun3 | |
642 | @end example | |
643 | ||
644 | @noindent | |
645 | will configure the tools such that when compiled in an a29k development | |
646 | environment, the resulting development environment can be used to create | |
647 | programs intended for a sun3. Again, this does not necessarily mean | |
648 | that the new development environment can be run on an a29k. That would | |
649 | depend on the development environment used to build these tools. | |
650 | ||
651 | If you are still following along, then you have two a29k development | |
652 | environments, the native development environment that runs on a29k, and | |
653 | the simple cross that runs on your sun4. If you use the a29k native | |
654 | development environment on the a29k, you will be doing the same thing we | |
655 | did a while back, namely building a simple cross from a29k to sun3. | |
656 | Let's pretend that instead, you use gcc-a29k, the simple cross | |
657 | development environment that runs on sun4 but produces programs for | |
658 | a29k. | |
659 | ||
660 | The resulting development environment will run on a29k because that's | |
661 | what gcc-a29k builds, a29k programs. This development environment will | |
662 | produce programs for a sun3 because that is how it was configured. This | |
663 | means that the resulting development environment is a simple cross. | |
664 | ||
90f66196 | 665 | @cindex Canadian Cross |
7d283cc1 RP |
666 | @cindex Three party cross |
667 | There really isn't a common name for this process because very few | |
668 | development environments are capable of being configured this | |
669 | extensively. For the sake of discussion, let's call this process a | |
90f66196 RP |
670 | @emph{Canadian cross}. It's a three party cross, Canada has a three |
671 | party system, hence Canadian Cross. | |
7d283cc1 RP |
672 | |
673 | @node Final Notes, Index, A Walk Through, top | |
674 | @chapter Final Notes | |
675 | ||
676 | By @emph{configures}, I mean that links, Makefile, .gdbinit, and | |
677 | config.status are built. Configuration is always done from the source | |
678 | directory. | |
679 | ||
680 | @table @code | |
681 | ||
682 | @item ./configure @var{name} | |
683 | configures this directory, perhaps recursively, for a single host+target | |
684 | pair where the host and target are both @var{name}. If a previous | |
685 | configuration existed, it will be overwritten. | |
686 | ||
687 | @item ./configure @var{hostname} -target=@var{targetname} | |
688 | configures this directory, perhaps recursively, for a single host+target | |
689 | pair where the host is @var{hostname} and target is @var{targetname}. | |
690 | If a previous configuration existed, it will be overwritten. | |
691 | ||
7d283cc1 RP |
692 | @end table |
693 | ||
694 | @menu | |
695 | * Hacking Configurations:: Hacking Configurations | |
696 | @end menu | |
697 | ||
698 | @node Hacking Configurations, , Final Notes, Final Notes | |
699 | @section Hacking Configurations | |
700 | ||
701 | The configure scripts essentially do three things, create subdirectories | |
702 | if appropriate, build a @file{Makefile}, and create links to files, all | |
703 | based on and tailored to, a specific host+target pair. The scripts also | |
704 | create a @file{.gdbinit} if appropriate but this is not tailored. | |
705 | ||
706 | The Makefile is created by prepending some variable definitions to a | |
707 | Makefile template called @file{Makefile.in} and then inserting host and | |
708 | target specific Makefile fragments. The variables are set based on the | |
709 | chosen host+target pair and build style, that is, if you use | |
787c6bfe | 710 | @code{-srcdir} or not. The host and target specific Makefile may or may |
7d283cc1 RP |
711 | not exist. |
712 | ||
713 | @itemize @bullet | |
714 | ||
715 | @item | |
716 | Makefiles can be edited directly, but those changes will eventually be | |
717 | lost. Changes intended to be permanent for a specific host should be | |
718 | made to the host specific Makefile fragment. This should be in | |
719 | @file{./config/mh-@var{host}} if it exists. Changes intended to be | |
720 | permanent for a specific target should be made to the target specific | |
721 | Makefile fragment. This should be in @file{./config/mt-@var{target}} if | |
722 | it exists. Changes intended to be permanent for the directory should be | |
723 | made in @file{Makefile.in}. To propogate changes to any of these, | |
724 | either use @code{make Makefile} or @code{./config.status} or | |
725 | re-configure. | |
726 | ||
727 | @end itemize | |
728 | ||
729 | @page | |
730 | @node Index, , Final Notes, top | |
731 | @appendix Index | |
732 | ||
733 | @printindex cp | |
734 | ||
735 | @contents | |
736 | @bye | |
737 | ||
738 | @c Local Variables: | |
739 | @c fill-column: 72 | |
740 | @c End: |