]>
Commit | Line | Data |
---|---|---|
866fd8cc RP |
1 | |
2 | ||
14825ce9 | 3 | On Configuring Development Tools |
866fd8cc | 4 | |
e9dcae1a | 5 | Last Mod Fri May 3 13:02:35 PDT 1991, by rich@sendai |
866fd8cc RP |
6 | |
7 | ||
14825ce9 RP |
8 | INTRO |
9 | ----- | |
866fd8cc | 10 | |
14825ce9 RP |
11 | This document attempts to describe the general concepts behind |
12 | configuration of the Cygnus Support release of the GNU Development | |
13 | Tools. It also discusses common usage. For a more in succint | |
14 | description, please refer to the man page on "configure" which you | |
15 | should have received {FIXME: ALONG WITH LOTS OF OTHER VERY PRETTY | |
16 | HARD COPY OR IN A DIFFERENT DISTRIBUTION OR ON THIS TAPE OR SHRINK | |
17 | BOX OR SOMETHING}. | |
866fd8cc | 18 | |
866fd8cc | 19 | |
14825ce9 RP |
20 | BASICS |
21 | ------ | |
866fd8cc | 22 | |
14825ce9 | 23 | Some Basic Terms: |
866fd8cc | 24 | |
14825ce9 RP |
25 | There are a lot of terms that are frequently used when discussing |
26 | development tools. Most of the common terms have been used for | |
27 | several different concepts such that their meanings have become | |
28 | ambiguous to the point of being confusing. Typically, we only | |
29 | guess at their meanings from context and we frequently guess | |
30 | wrong. | |
866fd8cc | 31 | |
14825ce9 RP |
32 | This document uses very few terms by comparison. The intent is to |
33 | make the concepts as clear as possible in order to convey the | |
34 | usage and intent of these tools. | |
35 | ||
36 | "Programs" run on "machines". Programs are very nearly always | |
37 | written in "source". Programs are "built" from source. | |
38 | "Compilation" is a process that is frequently, but not always, | |
39 | used when building programs. | |
40 | ||
41 | ||
42 | Host Environments: | |
43 | ||
44 | In this document, the word "host" refers to the environment in | |
45 | which this source will be compiled. "host" and "host name" have | |
46 | nothing to do with the proper name of your host, like "ucbvax", | |
47 | "prep.ai.mit.edu" or "att.com". Instead they refer to things like | |
48 | "sun4" and "dec3100". | |
49 | ||
50 | Forget for a moment that this particular directory of source is | |
51 | the source for a development environment. Instead, pretend that | |
52 | it is the source for a simpler, more mundane, application, say, a | |
53 | desk calculator. | |
54 | ||
55 | Source that can be compiled in more than one environment, | |
56 | generally needs to be set up for each environment explicitly. | |
57 | Here we refer to that process as configuration. That is, we | |
58 | configure the source for a host. | |
59 | ||
60 | For example, if we wanted to configure our mythical desk | |
61 | calculator to compile on a SparcStation, we might configure for | |
62 | host sun4. With our configuration system: | |
63 | ||
e9dcae1a | 64 | cd desk-calculator ; ./configure sun4 |
14825ce9 RP |
65 | |
66 | does the trick. "configure" is a shell script that sets up | |
67 | Makefiles, subdirectories, and symbolic links appropriate for | |
68 | compiling the source on a sun4. | |
69 | ||
70 | The "host" environment does not necessarily refer to the machine | |
71 | on which the tools are built. It is possible to provide a sun3 | |
72 | development environment on a sun4. If we wanted to use a cross | |
73 | compiler on the sun4 to build a program intended to be run on a | |
74 | sun3, we would configure the source for sun3. | |
75 | ||
e9dcae1a | 76 | cd desk-calculator ; ./configure sun3 |
14825ce9 RP |
77 | |
78 | The fact that we are actually building the program on a sun4 makes | |
79 | no difference if the sun3 cross compiler presents an environment | |
80 | that looks like a sun3 from the point of view of the desk | |
81 | calculator source code. Specifically, the environment is a sun3 | |
82 | environment if the header files, predefined symbols, and libraries | |
83 | appear as they do on a sun3. | |
84 | ||
85 | Nor does the host environment refer to the the machine on which | |
86 | the program to be built will run. It is possible to provide a | |
87 | sun3 emulation environment on a sun4 such that programs built in a | |
88 | sun3 development environment actually run on the sun4. | |
89 | ||
90 | Host environment simply refers to the environment in which the | |
91 | program will be built from the source. | |
92 | ||
93 | ||
94 | Configuration Time Options: | |
95 | ||
96 | Many programs have compile time options. That is, features of the | |
97 | program that are either compiled into the program or not based on a | |
98 | choice made by the person who builds the program. We refer to these | |
99 | as "configuration options". For example, our desk calculator might be | |
100 | capable of being compiled into a program that either uses infix | |
101 | notation or postfix as a configuration option. For a sun3, chosing | |
102 | infix might be: | |
103 | ||
e9dcae1a | 104 | ./configure sun3 +notation=infix |
14825ce9 RP |
105 | |
106 | while a sun4 with postfix might be: | |
107 | ||
e9dcae1a | 108 | ./configure sun4 +notation=postfix |
14825ce9 RP |
109 | |
110 | If we wanted to build both at the same time, in the same directory | |
111 | structure, the intermediate pieces used in the build process must | |
112 | be kept separate. | |
113 | ||
e9dcae1a RP |
114 | ./configure sun4 +forcesubdirs +notation=postfix |
115 | ./configure sun3 +forcesubdirs +notation=infix | |
14825ce9 RP |
116 | |
117 | will create subdirectories for the intermediate pieces of the sun4 | |
118 | and sun3 configurations. This is necessary as previous systems | |
119 | were only capable of one configuration at a time. A second | |
120 | configuration overwrote the first. We've chosen to retain this | |
121 | behaviour so the "+forcesubdirs" configuration option is necessary | |
122 | to get the new behaviour. The order of the arguments doesn't | |
123 | matter. There should be exactly one argument without a leading | |
124 | '+' sign and that argument will be assumed to be the host name. | |
125 | ||
126 | From here on the examples will assume that you want to build the | |
127 | tools "in place" and won't show the "+forcesubdirs" option, but | |
128 | remember that it is available. | |
129 | ||
130 | In order to actually install the program, the configuration system | |
131 | needs to know where you would like the program installed. The | |
132 | default location is /usr/local. We refer to this location as | |
133 | $(destdir). All user visible programs will be installed in | |
134 | $(destdir)/bin. All other programs and files will be installed in | |
135 | a subdirectory of $(destdir)/lib. For the tools in this | |
136 | directory, the files not normally user visible will be installed | |
137 | in $(destdir)/lib/gcc. | |
138 | ||
139 | You can elect to change $(destdir) only as a configuration time | |
140 | option. | |
141 | ||
e9dcae1a | 142 | ./configure sun4 +notation=postfix +destdir=/local |
14825ce9 RP |
143 | |
144 | Will configure the source such that: | |
145 | ||
146 | make install | |
147 | ||
148 | will put it's programs in /local/bin and /local/lib/gcc. If you | |
149 | change $(destdir) after building the source, you will need to: | |
150 | ||
151 | make clean | |
152 | ||
153 | before the change will be propogated properly. This is because | |
154 | some tools need to know the locations of other tools. | |
155 | ||
156 | With these concepts in mind, we can drop the desk calculator and | |
157 | move on to the application that resides in these directories, | |
158 | namely, the source to a development environment. | |
159 | ||
160 | ||
161 | SPECIFICS | |
162 | --------- | |
163 | ||
164 | The GNU Development Tools can be built on a wide variety of hosts. | |
165 | So, of course, they must be configured. Like the last example, | |
166 | ||
e9dcae1a RP |
167 | ./configure sun4 +destdir=/local |
168 | ./configure sun3 +destdir=/local | |
14825ce9 RP |
169 | |
170 | will configure the source to be built in subdirectories, in order | |
171 | to keep the intermediate pieces separate, and to be installed in | |
172 | /local. | |
173 | ||
174 | When built with suitable development environments, these will be | |
175 | native tools. We'll explain the term "native" later. | |
176 | ||
177 | ||
178 | BUILDING DEVELOPMENT ENVIRONMENTS | |
179 | --------------------------------- | |
180 | ||
181 | The Cygnus Support GNU development tools can not only be built | |
182 | with a number of host development environments, they can also be | |
183 | configured to create a number of different development | |
184 | environments on each of those hosts. We refer to a specific | |
185 | development environment created as a "target". That is, the word | |
186 | "target" refers to the development environment produced by | |
187 | compiling this source and installing the resulting programs. | |
188 | ||
189 | For the Cygnus Support GNU development tools, the default target | |
190 | is the same as the host. That is, the development environment | |
191 | produced is intended to be compatible with the environment used to | |
192 | build the tools. | |
193 | ||
194 | In the example above, we created two configurations, one for sun4 | |
195 | and one for sun3. The first configuration is expecting to be | |
196 | built in a sun4 development environment, to create a sun4 | |
197 | development environment. It doesn't necessarily need to be built | |
198 | on a sun4 if a sun4 development environment is available | |
199 | elsewhere. Likewise, if the available sun4 development | |
200 | environment produces executables intended for something other than | |
201 | sun4, then the development environment built from this sun4 | |
202 | configuration will run on something other than a sun4. From the | |
203 | point of view of the configuration system and the GNU development | |
204 | tools source, this doesn't matter. What matters is that they will | |
205 | be built in a sun4 environment. | |
206 | ||
207 | Similarly, the second configuration given above is expecting to be | |
208 | built in a sun3 development environment, to create a sun3 | |
209 | development environment. | |
210 | ||
211 | The development environment produced, is a configuration time | |
212 | option, just like $(destdir). | |
213 | ||
e9dcae1a RP |
214 | ./configure sun4 +destdir=/local +target=sun3 |
215 | ./configure sun3 +destdir=/local +target=sun4 | |
14825ce9 RP |
216 | |
217 | In this example, like before, we create two configurations. The | |
218 | first is intended to be built in a sun4 environment, in | |
e9dcae1a RP |
219 | subdirectories, to be installed in /local. The second is intended |
220 | to be build in a sun3 environment, in subdirectories, to be | |
221 | installed in /local. | |
14825ce9 RP |
222 | |
223 | Unlike the previous example, the first configuration will produce | |
224 | a sun3 development environment, perhaps even suitable for building | |
225 | the second configuration. Likewise, the second configuration will | |
226 | produce a sun4 development environment, perhaps even suitable for | |
227 | building the first configuration. | |
228 | ||
229 | The development environment used to build these configurations | |
230 | will determine the machines on which the resulting development | |
231 | environments can be used. | |
232 | ||
233 | ||
234 | A WALK THROUGH | |
235 | -------------- | |
236 | ||
237 | Native Development Environments: | |
238 | ||
239 | Let us assume for a moment that you have a sun4 and that with your | |
240 | sun4 you received a development environment. This development | |
241 | environment is intended to be run on your sun4 to build programs | |
242 | that can be run on your sun4. You could, for instance, run this | |
243 | development environment on your sun4 to build our example desk | |
244 | calculator program. You could then run the desk calculator | |
245 | program on your sun4. | |
246 | ||
247 | The resulting desk calculator program is referred to as a "native" | |
248 | program. The development environment itself is composed of native | |
249 | programs that, when run, build other native programs. Any other | |
250 | program is referred to as "foreign". Programs intended for other | |
251 | machines are foreign programs. | |
252 | ||
253 | This type of development environment, which is by far the most | |
254 | common, is refered to as "native". That is, a native development | |
255 | environment runs on some machine to build programs for that same | |
256 | machine. The process of using a native development environment to | |
257 | build native programs is called a "native" build. | |
258 | ||
e9dcae1a | 259 | ./configure sun4 |
14825ce9 RP |
260 | |
261 | Will configure this source such that when built in a sun4 | |
262 | development environment, with a development environment that | |
263 | builds programs intended to be run on sun4 machines, the programs | |
264 | built will be native programs and the resulting development | |
265 | environment will be a native development environment. | |
266 | ||
267 | The development system that came with your sun4 is one such | |
268 | environment. Using it to build the GNU Development Tools is a | |
269 | very common activity and the resulting development environment is | |
270 | very popular. | |
271 | ||
272 | make all | |
273 | ||
274 | will build the tools as configured and will assume that you want | |
275 | to use the native development environment that came with your | |
276 | machine. | |
277 | ||
278 | Using a development environment to build a development environment | |
279 | is called "bootstrapping". The Cygnus Support release of the GNU | |
280 | Development Tools is capable of bootstrapping itself. This is a | |
281 | very powerful feature that we'll return to later. For now, let's | |
282 | pretend that you used the native development environment that came | |
283 | with your sun4 to bootstrap the Cygnus Support release and let's | |
284 | call the new development environment stage1. | |
285 | ||
286 | Why bother? Well, most people find that the Cygnus Support | |
287 | release builds programs that run faster and take up less space | |
288 | than the native development environments that came with their | |
289 | machines. Some people didn't get development environments with | |
290 | their machines and some people just like using the GNU tools | |
291 | better than using other tools. | |
292 | ||
293 | While you're at it, if the GNU tools produce better programs, maybe | |
294 | you should use them to build the GNU tools. It's a good idea, so | |
295 | let's pretend that you do. Let's call the new development | |
296 | environment stage2. | |
297 | ||
298 | So far you've built a development environment, stage1, and you've | |
299 | used stage1 to build a new, faster and smaller development | |
300 | environment, stage2, but you haven't run any of the programs that | |
301 | the GNU tools have built. You really don't yet know if these | |
302 | tools work. Do you have any programs built with the GNU tools? | |
303 | Yes, you do. stage2. What does that program do? It builds | |
304 | programs. Ok, do you have any source handy to build into a | |
305 | program? Yes, you do. The GNU tools themselves. In fact, if you | |
306 | use stage2 to build the GNU tools again the resulting programs | |
307 | should be identical to stage2. Let's pretend that you do and call | |
308 | the new development environment stage3. | |
309 | ||
310 | You've just completed what's called a "three stage boot". You now | |
311 | have a small, fast, somewhat tested, development environment. | |
312 | ||
313 | make bootstrap | |
314 | ||
315 | will do a three stage boot across all tools and will compare | |
316 | stage2 to stage3 and complain if they are not identical. | |
317 | ||
318 | Once built, | |
319 | ||
320 | make install | |
321 | ||
322 | will install the development environment in the default location | |
323 | or in $(destdir) if you specified an alternate when you | |
324 | configured. In fact, you can skip the "make all" part and just | |
325 | "make install" which will make sure that the development | |
326 | environment is built before attempting to install anything. Even | |
327 | better, for configurations where host is the same as target, like | |
328 | this one, "make install" will make sure that a "make bootstrap" is | |
329 | done before installing anything. | |
330 | ||
331 | Any development environment that is not a native development | |
332 | environment is refered to as a "cross" development environment. | |
333 | There are many different types of cross development environments | |
334 | but most fall into one of FIXME basic categories. | |
335 | ||
336 | ||
337 | Emulation Environments: | |
338 | ||
339 | The first category of cross development environment is called | |
340 | "emulation". There are two primary types of emulation, but both | |
341 | types result in programs that run on the native host. | |
342 | ||
343 | The first type is "software emulation". This form of cross | |
344 | development environment involves a native program that when run on | |
345 | the native host, is capable of interpreting, and in most aspects | |
346 | running, a program intended for some other machine. This | |
347 | technique is typically used when the other machine is either too | |
348 | expensive, too slow, too fast, or not available, perhaps because | |
349 | it hasn't yet been built. The native, interpreting program is | |
350 | called a "software emulator". | |
351 | ||
352 | The GNU Development Tools do not currently include any software | |
353 | emulators. Some do exist and the GNU Development Tools can be | |
354 | configured to create simple cross development environments for | |
355 | with these emulators. More on this later. | |
356 | ||
357 | The second type of emulation is when source intended for some | |
358 | other development environment is built into a program intended for | |
359 | the native host. The concept of universes in operating systems | |
360 | and hosted operating systems are two such development | |
361 | environments. | |
362 | ||
363 | The Cygnus Support Release of the GNU Development Tools can be | |
364 | configured for one such emulation at this time. | |
365 | ||
e9dcae1a | 366 | ./configure sun4 +ansi |
14825ce9 RP |
367 | |
368 | will configure the source such that when built in a sun4 | |
369 | development environment the resulting development environment is | |
370 | capable of building sun4 programs from strictly conforming ANSI | |
371 | X3J11 C source. Remember that the environment used to build the | |
372 | tools determines the machine on which this tools will run, so the | |
373 | resulting programs aren't necessarily intended to run on a sun4, | |
374 | although they usually are. Also note that the source for the GNU | |
375 | tools is not strictly conforming ANSI source so this configuration | |
376 | cannot be used to bootstrap the GNU tools. | |
377 | ||
378 | ||
379 | Simple Cross Environments: | |
380 | ||
e9dcae1a | 381 | ./configure sun4 +target=a29k |
14825ce9 RP |
382 | |
383 | will configure the tools such that when compiled in a sun4 | |
384 | development environment the resulting development environment can | |
e9dcae1a | 385 | be used to create programs intended for an a29k. Again, this does |
14825ce9 RP |
386 | not necessarily mean that the new development environment can be |
387 | run on a sun4. That would depend on the development environment | |
388 | used to build these tools. | |
389 | ||
390 | Earlier you saw how to configure the tools to build a native | |
391 | development environment, that is, a development environment that | |
392 | runs on your sun4 and builds programs for your sun4. Let's | |
393 | pretend that you use stage3 to build this simple cross | |
394 | configuration and let's call the new development environment | |
395 | gcc-a29k. Remember that this is a native build. Gcc-a29k is a | |
396 | collection of native programs intended to run on your sun4. | |
397 | That's what stage3 builds, programs for your sun4. Gcc-a29k | |
0df06ca0 | 398 | represents an a29k development environment that builds programs |
14825ce9 | 399 | intended to run on an a29k. But, remember, gcc-a29k runs on your |
0df06ca0 RP |
400 | sun4. Programs built with gcc-a29k will run on your sun4 only |
401 | with the help of an appropriate software emulator. | |
14825ce9 RP |
402 | |
403 | Building gcc-a29k is also a bootstrap but of a slightly different | |
404 | sort. We call gcc-a29k a simple cross environment and using | |
405 | gcc-a29k to build a program intended for a29k is called "crossing | |
406 | to" a29k. Simple cross environments are the second category of | |
407 | cross development environments. | |
408 | ||
409 | ||
0df06ca0 | 410 | Crossing Into Targets: |
14825ce9 | 411 | |
e9dcae1a | 412 | ./configure a29k +target=a29k |
14825ce9 | 413 | |
0df06ca0 RP |
414 | will configure the tools such that when compiled in an a29k |
415 | development environment, the resulting development environment can | |
416 | be used to create programs intended for an a29k. Again, this does | |
417 | not necessarily mean that the new development environment can be | |
418 | run on an a29k. That would depend on the development environment | |
419 | used to build these tools. | |
14825ce9 | 420 | |
0df06ca0 RP |
421 | If you've been following along this walk through, then you've |
422 | already built an a29k environment, namely gcc-a29k. Let's pretend | |
423 | you use gcc-a29k to build the current configuration. | |
424 | ||
425 | Gcc-a29k builds programs intended for the a29k so the new | |
426 | development environment will be intended for use on an a29k. That | |
427 | is, this new gcc consists of programs that are foreign to your | |
428 | sun4. They cannot be run on your sun4. | |
429 | ||
430 | The process of building this configuration is another a bootstrap. | |
431 | This bootstrap is also a cross to a29k. Because this type of | |
432 | build is both a bootstrap and a cross to a29k, it is sometimes | |
433 | referred to as a "cross into" a29k. This new development | |
434 | environment isn't really a cross development environment at all. | |
435 | It is intended to run on an a29k to produce programs for an a29k. | |
436 | You'll remember that this makes it, by definition, an a29k native | |
437 | compiler. "Crossing into" has been introduced here not because it | |
438 | is a type of cross development environment, but because it is | |
439 | frequently confused one. The process is "a cross" but the | |
440 | resulting development environment is a native development | |
441 | environment. | |
442 | ||
443 | You could not have built this configuration with stage3, because | |
444 | stage3 doesn't provide an a29k environment. Instead it provides a | |
445 | sun4 environment. | |
446 | ||
447 | If you happen to have an a29k lying around, you could now use | |
e9dcae1a | 448 | this fresh development environment on the a29k to three-stage |
0df06ca0 RP |
449 | these tools all over again. This process would look just like it |
450 | did when we built the native sun4 development environment because | |
451 | we would be building another native development environment, this | |
452 | one on a29k. | |
453 | ||
454 | ||
455 | The Three Party Cross: | |
456 | ||
457 | So far you've seen that our development environment source must be | |
458 | configured for a specific host and for a specific target. You've | |
459 | also seen that the resulting development environment depends on | |
460 | the development environment used in the build process. | |
461 | ||
462 | When all four match identically, that is, the configured host, the | |
463 | configured target, the environment presented by the development | |
464 | environment used in the build, and the machine on which the | |
465 | resulting development environment is intended to run, then the new | |
466 | development environment will be a native development environment. | |
467 | ||
468 | When all four match except the configured host, then we can assume | |
469 | that the development environment used in the build is some form of | |
470 | library emulation. | |
471 | ||
472 | When all four match except for the configured target, then the | |
473 | resulting development environment will be a simple cross | |
474 | development environment. | |
14825ce9 | 475 | |
0df06ca0 RP |
476 | When all four match except for the host on which the development |
477 | environment used in the build runs, the build process is a "cross | |
478 | into" and the resulting development environment will be native to | |
479 | some other machine. | |
14825ce9 | 480 | |
0df06ca0 RP |
481 | Most of the other permutations do exist in some form, but only one |
482 | more is interesting to the current discussion. | |
14825ce9 | 483 | |
e9dcae1a | 484 | ./configure a29k +target=sun3 |
14825ce9 | 485 | |
0df06ca0 RP |
486 | will configure the tools such that when compiled in an a29k |
487 | development environment, the resulting development environment can | |
488 | be used to create programs intended for a sun3. Again, this does | |
489 | not necessarily mean that the new development environment can be | |
490 | run on an a29k. That would depend on the development environment | |
491 | used to build these tools. | |
14825ce9 | 492 | |
0df06ca0 RP |
493 | If you are still following along, then you have two a29k |
494 | development environments, the native development environment that | |
495 | runs on a29k, and the simple cross that runs on your sun4. If you | |
496 | use the a29k native development environment on the a29k, you will | |
497 | be doing the same thing we did a while back, namely building a | |
498 | simple cross from a29k to sun3. Let's pretend that instead, you | |
499 | use gcc-a29k, the simple cross development environment that runs | |
500 | on sun4 but produces programs for a29k. | |
14825ce9 | 501 | |
0df06ca0 RP |
502 | The resulting development environment will run on a29k because |
503 | that's what gcc-a29k builds, a29k programs. This development | |
504 | environment will produce programs for a sun3 because that is how | |
505 | it was configured. This means that the resulting development | |
506 | environment is a simple cross. | |
14825ce9 | 507 | |
0df06ca0 RP |
508 | There really isn't a common name for this process because very few |
509 | development environments are capable of being configured this | |
510 | extensively. For the sake of discussion, let's call this process | |
511 | a "three party cross". | |
14825ce9 RP |
512 | |
513 | ||
0df06ca0 RP |
514 | FINAL NOTES |
515 | ----------- | |
866fd8cc RP |
516 | |
517 | Gdb's config has features not yet present in the uniform configuration | |
518 | scheme described here. For this reason, configuration of gdb must | |
519 | currently be done separately from that of the rest of this package. | |
520 | This will be corrected soon. For more information on the | |
521 | configuration of gdb, please refer to the documents in gdb.{your | |
522 | target} if it exists, otherwise gdb. | |
523 | ||
524 | By "configures", I mean that links, Makefile, .gdbinit, and | |
525 | config.status are built. Configuration is always done from the source | |
526 | directory. | |
527 | ||
0df06ca0 RP |
528 | * "./configure name" configures this directory, perhaps recursively, |
529 | for a single host+target pair where the host and target are both | |
530 | "name". If a previous configuration existed, it will be | |
866fd8cc RP |
531 | overwritten. |
532 | ||
0df06ca0 RP |
533 | * "./configure hostname +target=targetname" configures this directory, |
534 | perhaps recursively, for a single host+target pair where the host is | |
535 | hostname and target is targetname. If a previous configuration | |
536 | existed, it will be overwritten. | |
537 | ||
538 | * "./configure +forcesubdirs hostname +target=targetname" creates a | |
539 | subdirectories Host-hostname and Host-hostname/Target-targetname and | |
540 | configures Host-hostname/Target-targetname. For now, makes should | |
541 | be done from Host-hostname/Target-targetname. "./configure +f name" | |
542 | works as expected. That is, it creates Host-name and | |
866fd8cc RP |
543 | Host-name/Target-name and configures the latter. |
544 | ||
545 | ||
546 | Hacking configurations: | |
547 | ||
548 | The configure scripts essentially do three things, create | |
549 | subdirectories if appropriate, build a Makefile, and create links to | |
550 | files, all based on and tailored to, a specific host+target pair. The | |
551 | scripts also create a .gdbinit if appropriate but this is not | |
552 | tailored. | |
553 | ||
554 | The Makefile is created by prepending some variable definitions to a | |
555 | Makefile template called Makefile.in and then inserting host and | |
556 | target specific Makefile fragments. The variables are set based on | |
557 | the chosen host+target pair and build style, that is, if you use | |
0df06ca0 RP |
558 | subdirectories or not. The host and target specific Makefile may or |
559 | may not exist. If fragments | |
866fd8cc RP |
560 | |
561 | * Makefiles can be editted directly, but those changes will eventually | |
562 | be lost. Changes intended to be permanent for a specific host | |
563 | should be made to the host specific Makefile fragment. This should | |
564 | be in ./config/hmake-host if it exists. Changes intended to be | |
565 | permanent for a specific target should be made to the target | |
566 | specific Makefile fragment. This should be in ./config/tmake-target | |
567 | if it exists. Changes intended to be permanent for the directory | |
568 | should be made in Makefile.in. To propogate changes to any of | |
569 | these, either use "make Makefile" or re-configure from the source | |
570 | directory. | |
571 | ||
572 | * configure can be editted directly, but those changes will eventually | |
573 | be lost. Changes intended to be permanent for a specific directory | |
574 | should be made to configure.in. Changes intended to be permanent | |
575 | for all configure scripts should be made to configure.template. | |
576 | Propogating changes to configure.in requires the presence of | |
577 | configure.template which normally resides in the uppermost directory | |
578 | you received. To propogate changes to either configure.template or | |
579 | a configure.in, use "configure +template=absolutepathtothetemplate". | |
580 | This will configure the configure scripts themselves, recursively if | |
581 | appropriate. | |
582 | ||
e9dcae1a | 583 | * "./configure -srcdir=foo" is not supported yet. At the moment, things |
866fd8cc RP |
584 | will probably be configured correctly only for leaf directories, and |
585 | even they will not have paths to libraries set properly. |