Annotation of GNUtools/libg++/etc/cfg-paper.texi, revision 1.1.1.1

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:

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.