|
|
1.1 root 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:
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:
13: Copyright (C) 1991, 1992 Cygnus Support
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:
36: @titlepage
37: @sp 10
38: @title{On Configuring Development Tools}
39: @author{K. Richard Pixley, @code{rich@@cygnus.com}}
40: @author{Cygnus Support}
41: @page
42:
43: @vskip 0pt plus 1filll
44: Copyright @copyright{} 1991, 1992 Cygnus Support
45:
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.
49:
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
60:
61: @ifinfo
62: @format
63: START-INFO-DIR-ENTRY
64: * configuration: (cfg-paper). Some theory on configuring source.
65: END-INFO-DIR-ENTRY
66: @end format
67: @end ifinfo
68:
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
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
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
188: the @code{bcopy} function and so it is emulated using the
189: @code{memcpy} funtion.
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:
217: If we wanted to build both at the same time, the intermediate pieces
218: used in the build process must be kept separate.
219:
220: @example
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)
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
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.
237:
238: From here on the examples will assume that you want to build the tools
239: @emph{in place} and won't show the @code{-srcdir} option, but remember
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
367: * Canadian Cross:: Canadian Cross
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:
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.
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:
564: @node Crossing Into Targets, Canadian Cross, Simple Cross Environments, A Walk Through
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:
611: @node Canadian Cross, , Crossing Into Targets, A Walk Through
612: @section Canadian Cross
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:
665: @cindex Canadian Cross
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
670: @emph{Canadian cross}. It's a three party cross, Canada has a three
671: party system, hence Canadian Cross.
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:
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
710: @code{-srcdir} or not. The host and target specific Makefile may or may
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.