home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / gnu / libg++-2.6.2.lha / libg++-2.6.2 / etc / cfg-paper.info (.txt) next >
GNU Info File  |  1994-12-15  |  29KB  |  503 lines

  1. This is Info file cfg-paper.info, produced by Makeinfo-1.55 from the
  2. input file ./cfg-paper.texi.
  3.    This document attempts to describe the general concepts behind
  4. configuration of the GNU Development Tools.  It also discusses common
  5. usage.
  6.    Copyright (C) 1991, 1992, 1994 Cygnus Support Permission is granted
  7. to make and distribute verbatim copies of this manual provided the
  8. copyright notice and this permission notice are preserved on all copies.
  9.    Permission is granted to copy and distribute modified versions of
  10. this manual under the conditions for verbatim copying, provided that
  11. the entire resulting derived work is distributed under the terms of a
  12. permission notice identical to this one.
  13.    Permission is granted to copy and distribute translations of this
  14. manual into another language, under the above conditions for modified
  15. versions, except that this permission notice may be stated in a
  16. translation approved by Cygnus Support.
  17. START-INFO-DIR-ENTRY
  18. * configuration: (cfg-paper).    Some theory on configuring source.
  19. END-INFO-DIR-ENTRY
  20. File: cfg-paper.info,  Node: Top,  Next: Some Basic Terms,  Prev: (dir),  Up: (dir)
  21.    This document attempts to describe the general concepts behind
  22. configuration of the GNU Development Tools.  It also discusses common
  23. usage.
  24. * Menu:
  25. * Some Basic Terms::        Some Basic Terms
  26. * Specifics.::            Specifics
  27. * Building Development Environments::  Building Development Environments
  28. * A Walk Through::        A Walk Through
  29. * Final Notes::            Final Notes
  30. * Index::            Index
  31.  -- The Detailed Node Listing --
  32. Some Basic Terms
  33. * Host Environments::        Host Environments
  34. * Configuration Time Options::    Configuration Time Options
  35. A Walk Through
  36. * Native Development Environments::  Native Development Environments
  37. * Emulation Environments::    Emulation Environments
  38. * Simple Cross Environments::    Simple Cross Environments
  39. * Crossing Into Targets::    Crossing Into Targets
  40. * Canadian Cross::        Canadian Cross
  41. Final Notes
  42. * Hacking Configurations::    Hacking Configurations
  43. File: cfg-paper.info,  Node: Some Basic Terms,  Next: Specifics.,  Prev: Top,  Up: Top
  44. Some Basic Terms
  45. ****************
  46.    There are a lot of terms that are frequently used when discussing
  47. development tools.  Most of the common terms have been used for many
  48. different concepts such that their meanings have become ambiguous to the
  49. point of being confusing.  Typically, we only guess at their meanings
  50. from context and we frequently guess wrong.
  51.    This document uses very few terms by comparison.  The intent is to
  52. make the concepts as clear as possible in order to convey the usage and
  53. intent of these tools.
  54.    *Programs* run on *machines*.  Programs are very nearly always
  55. written in *source*.  Programs are *built* from source.  *Compilation*
  56. is a process that is frequently, but not always, used when building
  57. programs.
  58. * Menu:
  59. * Host Environments::        Host Environments
  60. * Configuration Time Options::    Configuration Time Options
  61. File: cfg-paper.info,  Node: Host Environments,  Next: Configuration Time Options,  Prev: Some Basic Terms,  Up: Some Basic Terms
  62. Host Environments
  63. =================
  64.    In this document, the word *host* refers to the environment in which
  65. the source in question will be compiled.  *host* and *host name* have
  66. nothing to do with the proper name of your host, like *ucbvax*,
  67. *prep.ai.mit.edu* or *att.com*.  Instead they refer to things like
  68. *sun4* and *dec3100*.
  69.    Forget for a moment that this particular directory of source is the
  70. source for a development environment.  Instead, pretend that it is the
  71. source for a simpler, more mundane, application, say, a desk calculator.
  72.    Source that can be compiled in more than one environment, generally
  73. needs to be set up for each environment explicitly.  Here we refer to
  74. that process as configuration.  That is, we configure the source for a
  75. host.
  76.    For example, if we wanted to configure our mythical desk calculator
  77. to compile on a SparcStation, we might configure for host sun4.  With
  78. our configuration system:
  79.      cd desk-calculator ; ./configure sun4
  80. does the trick.  `configure' is a shell script that sets up Makefiles,
  81. subdirectories, and symbolic links appropriate for compiling the source
  82. on a sun4.
  83.    The *host* environment does not necessarily refer to the machine on
  84. which the tools are built.  It is possible to provide a sun3 development
  85. environment on a sun4.  If we wanted to use a cross compiler on the sun4
  86. to build a program intended to be run on a sun3, we would configure the
  87. source for sun3.
  88.      cd desk-calculator ; ./configure sun3
  89. The fact that we are actually building the program on a sun4 makes no
  90. difference if the sun3 cross compiler presents an environment that looks
  91. like a sun3 from the point of view of the desk calculator source code.
  92. Specifically, the environment is a sun3 environment if the header files,
  93. predefined symbols, and libraries appear as they do on a sun3.
  94.    Nor does the host environment refer to the the machine on which the
  95. program to be built will run.  It is possible to provide a sun3
  96. emulation environment on a sun4 such that programs built in a sun3
  97. development environment actually run on the sun4.  This technique is
  98. often used within individual programs to remedy deficiencies in the host
  99. operating system.  For example, some operating systems do not provide
  100. the `bcopy' function and so it is emulated using the `memcpy' funtion.
  101.    Host environment simply refers to the environment in which the
  102. program will be built from the source.
  103. File: cfg-paper.info,  Node: Configuration Time Options,  Prev: Host Environments,  Up: Some Basic Terms
  104. Configuration Time Options
  105. ==========================
  106.    Many programs have compile time options.  That is, features of the
  107. program that are either compiled into the program or not based on a
  108. choice made by the person who builds the program.  We refer to these as
  109. *configuration options*.  For example, our desk calculator might be
  110. capable of being compiled into a program that either uses infix notation
  111. or postfix as a configuration option.  For a sun3, to choose infix you
  112. might use:
  113.      ./configure sun3 --enable-notation=infix
  114. while for a sun4 with postfix you might use:
  115.      ./configure sun4 --enable-notation=postfix
  116.    If we wanted to build both at the same time, the intermediate pieces
  117. used in the build process must be kept separate.
  118.      mkdir ../objdir.sun4
  119.      (cd ../objdir.sun4 ; ../configure sun4 --enable-notation=postfix --srcdir=../src)
  120.      mkdir ../objdir.sun3
  121.      (cd ../objdir.sun3 ; ../configure sun3 --enable-notation=infix --srcdir=../src)
  122. will create subdirectories for the intermediate pieces of the sun4 and
  123. sun3 configurations.  This is necessary as previous systems were only
  124. capable of one configuration at a time.  Otherwise, a second
  125. configuration would write over the first.  We've chosen to retain this
  126. behaviour so the obj directories and the `--srcdir' configuration
  127. option are necessary to get the new behaviour.  The order of the
  128. arguments doesn't matter.  There should be exactly one argument without
  129. a leading `-' and that argument will be assumed to be the host name.
  130.    From here on the examples will assume that you want to build the
  131. tools *in place* and won't show the `--srcdir' option, but remember
  132. that it is available.
  133.    In order to actually install the program, the configuration system
  134. needs to know where you would like the program installed.  The default
  135. location is `/usr/local'.  We refer to this location as `$(prefix)'.
  136. All user visible programs will be installed in ``$(prefix)'/bin'.  All
  137. other programs and files will be installed in a subdirectory of
  138. ``$(prefix)'/lib'.
  139.    You can only change `$(prefix)' as a configuration time option.
  140.      ./configure sun4 --enable-notation=postfix --prefix=/local
  141. Will configure the source such that:
  142.      make install
  143. will put its programs in `/local/bin' and `/local/lib/gcc'.  If you
  144. change `$(prefix)' after building the source, you will need to:
  145.      make clean
  146. before the change will be propogated properly.  This is because some
  147. tools need to know the locations of other tools.
  148.    With these concepts in mind, we can drop the desk calculator example
  149. and move on to the application that resides in these di