aboutsummaryrefslogtreecommitdiff
path: root/README.configure
diff options
context:
space:
mode:
authorK. Richard Pixley <rich@cygnus>1992-12-08 05:27:22 +0000
committerK. Richard Pixley <rich@cygnus>1992-12-08 05:27:22 +0000
commite7a8768db643c2003230f4be997ee2c63c98f1da (patch)
treeced6dc65cc6f64a840e5ed23943939640722d4c5 /README.configure
parent017349fbcff97ddad57d87a7a43b8a68dd09cc5b (diff)
downloadfsf-binutils-gdb-e7a8768db643c2003230f4be997ee2c63c98f1da.zip
fsf-binutils-gdb-e7a8768db643c2003230f4be997ee2c63c98f1da.tar.gz
fsf-binutils-gdb-e7a8768db643c2003230f4be997ee2c63c98f1da.tar.bz2
recording file death
Diffstat (limited to 'README.configure')
-rwxr-xr-xREADME.configure573
1 files changed, 0 insertions, 573 deletions
diff --git a/README.configure b/README.configure
deleted file mode 100755
index c77813d..0000000
--- a/README.configure
+++ /dev/null
@@ -1,573 +0,0 @@
- On Configuring Development Tools
-
- K. Richard Pixley
- Cygnus Support
-
- Last Mod Tue Oct 1 21:20:21 PDT 1991, by rich@cygnus.com
-
-INTRO
------
-
- This document attempts to describe the general concepts behind
- configuration of the Cygnus Support release of the GNU Development
- Tools. It also discusses common usage. Eventually, FIXME, there
- will also be a man page for "configure", an "info" tree, etc.
-
-
-BASICS
-------
-
-Some Basic Terms:
-
- There are a lot of terms that are frequently used when discussing
- development tools. Most of the common terms have been used for
- several different concepts such that their meanings have become
- ambiguous to the point of being confusing. Typically, we only
- guess at their meanings from context and we frequently guess
- wrong.
-
- This document uses very few terms by comparison. The intent is to
- make the concepts as clear as possible in order to convey the
- usage and intent of these tools.
-
- "Programs" run on "machines". Programs are very nearly always
- written in "source". Programs are "built" from source.
- "Compilation" is a process that is frequently, but not always,
- used when building programs.
-
-
-Host Environments:
-
- In this document, the word "host" refers to the environment in
- which this source will be compiled. "host" and "host name" have
- nothing to do with the proper name of your host, like "ucbvax",
- "prep.ai.mit.edu" or "att.com". Instead they refer to things like
- "sun4" and "dec3100".
-
- Forget for a moment that this particular directory of source is
- the source for a development environment. Instead, pretend that
- it is the source for a simpler, more mundane, application, say, a
- desk calculator.
-
- Source that can be compiled in more than one environment,
- generally needs to be set up for each environment explicitly.
- Here we refer to that process as configuration. That is, we
- configure the source for a host.
-
- For example, if we wanted to configure our mythical desk
- calculator to compile on a SparcStation, we might configure for
- host sun4. With our configuration system:
-
- cd desk-calculator ; ./configure sun4
-
- does the trick. "configure" is a shell script that sets up
- Makefiles, subdirectories, and symbolic links appropriate for
- compiling the source on a sun4.
-
- The "host" environment does not necessarily refer to the machine
- on which the tools are built. It is possible to provide a sun3
- development environment on a sun4. If we wanted to use a cross
- compiler on the sun4 to build a program intended to be run on a
- sun3, we would configure the source for sun3.
-
- cd desk-calculator ; ./configure sun3
-
- The fact that we are actually building the program on a sun4 makes
- no difference if the sun3 cross compiler presents an environment
- that looks like a sun3 from the point of view of the desk
- calculator source code. Specifically, the environment is a sun3
- environment if the header files, predefined symbols, and libraries
- appear as they do on a sun3.
-
- Nor does the host environment refer to the the machine on which
- the program to be built will run. It is possible to provide a
- sun3 emulation environment on a sun4 such that programs built in a
- sun3 development environment actually run on the sun4.
-
- Host environment simply refers to the environment in which the
- program will be built from the source.
-
-
-Configuration Time Options:
-
- Many programs have compile time options. That is, features of the
- program that are either compiled into the program or not based on a
- choice made by the person who builds the program. We refer to these
- as "configuration options". For example, our desk calculator might be
- capable of being compiled into a program that either uses infix
- notation or postfix as a configuration option. For a sun3, chosing
- infix might be:
-
- ./configure sun3 +notation=infix
-
- while a sun4 with postfix might be:
-
- ./configure sun4 +notation=postfix
-
- If we wanted to build both at the same time, in the same directory
- structure, the intermediate pieces used in the build process must
- be kept separate.
-
- ./configure sun4 +subdirs +notation=postfix
- ./configure sun3 +subdirs +notation=infix
-
- will create subdirectories for the intermediate pieces of the sun4
- and sun3 configurations. This is necessary as previous systems
- were only capable of one configuration at a time. A second
- configuration overwrote the first. We've chosen to retain this
- behaviour so the "+subdirs" configuration option is necessary
- to get the new behaviour. The order of the arguments doesn't
- matter. There should be exactly one argument without a leading
- '+' sign and that argument will be assumed to be the host name.
-
- From here on the examples will assume that you want to build the
- tools "in place" and won't show the "+subdirs" option, but
- remember that it is available.
-
- In order to actually install the program, the configuration system
- needs to know where you would like the program installed. The
- default location is /usr/local. We refer to this location as
- $(destdir). All user visible programs will be installed in
- $(destdir)/bin. All other programs and files will be installed in
- a subdirectory of $(destdir)/lib.
-
- You can elect to change $(destdir) only as a configuration time
- option.
-
- ./configure sun4 +notation=postfix +destdir=/local
-
- Will configure the source such that:
-
- make install
-
- will put it's programs in /local/bin and /local/lib/gcc. If you
- change $(destdir) after building the source, you will need to:
-
- make clean
-
- before the change will be propogated properly. This is because
- some tools need to know the locations of other tools.
-
- With these concepts in mind, we can drop the desk calculator and
- move on to the application that resides in these directories,
- namely, the source to a development environment.
-
-
-SPECIFICS
----------
-
- The GNU Development Tools can be built on a wide variety of hosts.
- So, of course, they must be configured. Like the last example,
-
- ./configure sun4 +destdir=/local
- ./configure sun3 +destdir=/local
-
- will configure the source to be built in subdirectories, in order
- to keep the intermediate pieces separate, and to be installed in
- /local.
-
- When built with suitable development environments, these will be
- native tools. We'll explain the term "native" later.
-
-
-BUILDING DEVELOPMENT ENVIRONMENTS
----------------------------------
-
- The Cygnus Support GNU development tools can not only be built
- with a number of host development environments, they can also be
- configured to create a number of different development
- environments on each of those hosts. We refer to a specific
- development environment created as a "target". That is, the word
- "target" refers to the development environment produced by
- compiling this source and installing the resulting programs.
-
- For the Cygnus Support GNU development tools, the default target
- is the same as the host. That is, the development environment
- produced is intended to be compatible with the environment used to
- build the tools.
-
- In the example above, we created two configurations, one for sun4
- and one for sun3. The first configuration is expecting to be
- built in a sun4 development environment, to create a sun4
- development environment. It doesn't necessarily need to be built
- on a sun4 if a sun4 development environment is available
- elsewhere. Likewise, if the available sun4 development
- environment produces executables intended for something other than
- sun4, then the development environment built from this sun4
- configuration will run on something other than a sun4. From the
- point of view of the configuration system and the GNU development
- tools source, this doesn't matter. What matters is that they will
- be built in a sun4 environment.
-
- Similarly, the second configuration given above is expecting to be
- built in a sun3 development environment, to create a sun3
- development environment.
-
- The development environment produced, is a configuration time
- option, just like $(destdir).
-
- ./configure sun4 +destdir=/local +target=sun3
- ./configure sun3 +destdir=/local +target=sun4
-
- In this example, like before, we create two configurations. The
- first is intended to be built in a sun4 environment, in
- subdirectories, to be installed in /local. The second is intended
- to be built in a sun3 environment, in subdirectories, to be
- installed in /local.
-
- Unlike the previous example, the first configuration will produce
- a sun3 development environment, perhaps even suitable for building
- the second configuration. Likewise, the second configuration will
- produce a sun4 development environment, perhaps even suitable for
- building the first configuration.
-
- The development environment used to build these configurations
- will determine the machines on which the resulting development
- environments can be used.
-
-
-A WALK THROUGH
---------------
-
-Native Development Environments:
-
- Let us assume for a moment that you have a sun4 and that with your
- sun4 you received a development environment. This development
- environment is intended to be run on your sun4 to build programs
- that can be run on your sun4. You could, for instance, run this
- development environment on your sun4 to build our example desk
- calculator program. You could then run the desk calculator
- program on your sun4.
-
- The resulting desk calculator program is referred to as a "native"
- program. The development environment itself is composed of native
- programs that, when run, build other native programs. Any other
- program is referred to as "foreign". Programs intended for other
- machines are foreign programs.
-
- This type of development environment, which is by far the most
- common, is refered to as "native". That is, a native development
- environment runs on some machine to build programs for that same
- machine. The process of using a native development environment to
- build native programs is called a "native" build.
-
- ./configure sun4
-
- Will configure this source such that when built in a sun4
- development environment, with a development environment that
- builds programs intended to be run on sun4 machines, the programs
- built will be native programs and the resulting development
- environment will be a native development environment.
-
- The development system that came with your sun4 is one such
- environment. Using it to build the GNU Development Tools is a
- very common activity and the resulting development environment is
- very popular.
-
- make all
-
- will build the tools as configured and will assume that you want
- to use the native development environment that came with your
- machine.
-
- Using a development environment to build a development environment
- is called "bootstrapping". The Cygnus Support release of the GNU
- Development Tools is capable of bootstrapping itself. This is a
- very powerful feature that we'll return to later. For now, let's
- pretend that you used the native development environment that came
- with your sun4 to bootstrap the Cygnus Support release and let's
- call the new development environment stage1.
-
- Why bother? Well, most people find that the Cygnus Support
- release builds programs that run faster and take up less space
- than the native development environments that came with their
- machines. Some people didn't get development environments with
- their machines and some people just like using the GNU tools
- better than using other tools.
-
- While you're at it, if the GNU tools produce better programs, maybe
- you should use them to build the GNU tools. It's a good idea, so
- let's pretend that you do. Let's call the new development
- environment stage2.
-
- So far you've built a development environment, stage1, and you've
- used stage1 to build a new, faster and smaller development
- environment, stage2, but you haven't run any of the programs that
- the GNU tools have built. You really don't yet know if these
- tools work. Do you have any programs built with the GNU tools?
- Yes, you do. stage2. What does that program do? It builds
- programs. Ok, do you have any source handy to build into a
- program? Yes, you do. The GNU tools themselves. In fact, if you
- use stage2 to build the GNU tools again the resulting programs
- should be identical to stage2. Let's pretend that you do and call
- the new development environment stage3.
-
- You've just completed what's called a "three stage boot". You now
- have a small, fast, somewhat tested, development environment.
-
- make bootstrap
-
- will do a three stage boot across all tools and will compare
- stage2 to stage3 and complain if they are not identical.
-
- Once built,
-
- make install
-
- will install the development environment in the default location
- or in $(destdir) if you specified an alternate when you
- configured. In fact, you can skip the "make all" part and just
- "make install" which will make sure that the development
- environment is built before attempting to install anything. Even
- better, for configurations where host is the same as target, like
- this one, "make install" will make sure that a "make bootstrap" is
- done before installing anything.
-
- Any development environment that is not a native development
- environment is refered to as a "cross" development environment.
- There are many different types of cross development environments
- but most fall into one of FIXME basic categories.
-
-
-Emulation Environments:
-
- The first category of cross development environment is called
- "emulation". There are two primary types of emulation, but both
- types result in programs that run on the native host.
-
- The first type is "software emulation". This form of cross
- development environment involves a native program that when run on
- the native host, is capable of interpreting, and in most aspects
- running, a program intended for some other machine. This
- technique is typically used when the other machine is either too
- expensive, too slow, too fast, or not available, perhaps because
- it hasn't yet been built. The native, interpreting program is
- called a "software emulator".
-
- The GNU Development Tools do not currently include any software
- emulators. Some do exist and the GNU Development Tools can be
- configured to create simple cross development environments for
- with these emulators. More on this later.
-
- The second type of emulation is when source intended for some
- other development environment is built into a program intended for
- the native host. The concept of universes in operating systems
- and hosted operating systems are two such development
- environments.
-
- The Cygnus Support Release of the GNU Development Tools can be
- configured for one such emulation at this time.
-
- ./configure sun4 +ansi
-
- will configure the source such that when built in a sun4
- development environment the resulting development environment is
- capable of building sun4 programs from strictly conforming ANSI
- X3J11 C source. Remember that the environment used to build the
- tools determines the machine on which this tools will run, so the
- resulting programs aren't necessarily intended to run on a sun4,
- although they usually are. Also note that the source for the GNU
- tools is not strictly conforming ANSI source so this configuration
- cannot be used to bootstrap the GNU tools.
-
-
-Simple Cross Environments:
-
- ./configure sun4 +target=a29k
-
- will configure the tools such that when compiled in a sun4
- development environment the resulting development environment can
- be used to create programs intended for an a29k. Again, this does
- not necessarily mean that the new development environment can be
- run on a sun4. That would depend on the development environment
- used to build these tools.
-
- Earlier you saw how to configure the tools to build a native
- development environment, that is, a development environment that
- runs on your sun4 and builds programs for your sun4. Let's
- pretend that you use stage3 to build this simple cross
- configuration and let's call the new development environment
- gcc-a29k. Remember that this is a native build. Gcc-a29k is a
- collection of native programs intended to run on your sun4.
- That's what stage3 builds, programs for your sun4. Gcc-a29k
- represents an a29k development environment that builds programs
- intended to run on an a29k. But, remember, gcc-a29k runs on your
- sun4. Programs built with gcc-a29k will run on your sun4 only
- with the help of an appropriate software emulator.
-
- Building gcc-a29k is also a bootstrap but of a slightly different
- sort. We call gcc-a29k a simple cross environment and using
- gcc-a29k to build a program intended for a29k is called "crossing
- to" a29k. Simple cross environments are the second category of
- cross development environments.
-
-
-Crossing Into Targets:
-
- ./configure a29k +target=a29k
-
- will configure the tools such that when compiled in an a29k
- development environment, the resulting development environment can
- be used to create programs intended for an a29k. Again, this does
- not necessarily mean that the new development environment can be
- run on an a29k. That would depend on the development environment
- used to build these tools.
-
- If you've been following along this walk through, then you've
- already built an a29k environment, namely gcc-a29k. Let's pretend
- you use gcc-a29k to build the current configuration.
-
- Gcc-a29k builds programs intended for the a29k so the new
- development environment will be intended for use on an a29k. That
- is, this new gcc consists of programs that are foreign to your
- sun4. They cannot be run on your sun4.
-
- The process of building this configuration is another a bootstrap.
- This bootstrap is also a cross to a29k. Because this type of
- build is both a bootstrap and a cross to a29k, it is sometimes
- referred to as a "cross into" a29k. This new development
- environment isn't really a cross development environment at all.
- It is intended to run on an a29k to produce programs for an a29k.
- You'll remember that this makes it, by definition, an a29k native
- compiler. "Crossing into" has been introduced here not because it
- is a type of cross development environment, but because it is
- frequently confused one. The process is "a cross" but the
- resulting development environment is a native development
- environment.
-
- You could not have built this configuration with stage3, because
- stage3 doesn't provide an a29k environment. Instead it provides a
- sun4 environment.
-
- If you happen to have an a29k lying around, you could now use
- this fresh development environment on the a29k to three-stage
- these tools all over again. This process would look just like it
- did when we built the native sun4 development environment because
- we would be building another native development environment, this
- one on a29k.
-
-
-The Three Party Cross:
-
- So far you've seen that our development environment source must be
- configured for a specific host and for a specific target. You've
- also seen that the resulting development environment depends on
- the development environment used in the build process.
-
- When all four match identically, that is, the configured host, the
- configured target, the environment presented by the development
- environment used in the build, and the machine on which the
- resulting development environment is intended to run, then the new
- development environment will be a native development environment.
-
- When all four match except the configured host, then we can assume
- that the development environment used in the build is some form of
- library emulation.
-
- When all four match except for the configured target, then the
- resulting development environment will be a simple cross
- development environment.
-
- When all four match except for the host on which the development
- environment used in the build runs, the build process is a "cross
- into" and the resulting development environment will be native to
- some other machine.
-
- Most of the other permutations do exist in some form, but only one
- more is interesting to the current discussion.
-
- ./configure a29k +target=sun3
-
- will configure the tools such that when compiled in an a29k
- development environment, the resulting development environment can
- be used to create programs intended for a sun3. Again, this does
- not necessarily mean that the new development environment can be
- run on an a29k. That would depend on the development environment
- used to build these tools.
-
- If you are still following along, then you have two a29k
- development environments, the native development environment that
- runs on a29k, and the simple cross that runs on your sun4. If you
- use the a29k native development environment on the a29k, you will
- be doing the same thing we did a while back, namely building a
- simple cross from a29k to sun3. Let's pretend that instead, you
- use gcc-a29k, the simple cross development environment that runs
- on sun4 but produces programs for a29k.
-
- The resulting development environment will run on a29k because
- that's what gcc-a29k builds, a29k programs. This development
- environment will produce programs for a sun3 because that is how
- it was configured. This means that the resulting development
- environment is a simple cross.
-
- There really isn't a common name for this process because very few
- development environments are capable of being configured this
- extensively. For the sake of discussion, let's call this process
- a "three party cross".
-
-
-FINAL NOTES
------------
-
-By "configures", I mean that links, Makefile, .gdbinit, and
-config.status are built. Configuration is always done from the source
-directory.
-
-* "./configure name" configures this directory, perhaps recursively,
- for a single host+target pair where the host and target are both
- "name". If a previous configuration existed, it will be
- overwritten.
-
-* "./configure hostname +target=targetname" configures this directory,
- perhaps recursively, for a single host+target pair where the host is
- hostname and target is targetname. If a previous configuration
- existed, it will be overwritten.
-
-* "./configure +subdirs hostname +target=targetname" creates a
- subdirectories H-hostname and H-hostname/T-targetname and
- configures H-hostname/T-targetname. For now, makes should
- be done from H-hostname/T-targetname. "./configure +sub name"
- works as expected. That is, it creates H-name and
- H-name/T-name and configures the latter.
-
-
-Hacking configurations:
-
-The configure scripts essentially do three things, create
-subdirectories if appropriate, build a Makefile, and create links to
-files, all based on and tailored to, a specific host+target pair. The
-scripts also create a .gdbinit if appropriate but this is not
-tailored.
-
-The Makefile is created by prepending some variable definitions to a
-Makefile template called Makefile.in and then inserting host and
-target specific Makefile fragments. The variables are set based on
-the chosen host+target pair and build style, that is, if you use
-subdirectories or not. The host and target specific Makefile may or
-may not exist. If fragments
-
-* Makefiles can be edited directly, but those changes will eventually
- be lost. Changes intended to be permanent for a specific host
- should be made to the host specific Makefile fragment. This should
- be in ./config/hmake-host if it exists. Changes intended to be
- permanent for a specific target should be made to the target
- specific Makefile fragment. This should be in ./config/tmake-target
- if it exists. Changes intended to be permanent for the directory
- should be made in Makefile.in. To propogate changes to any of
- these, either use "make Makefile" or re-configure from the source
- directory.
-
-* configure can be edited directly, but those changes will eventually
- be lost. Changes intended to be permanent for a specific directory
- should be made to configure.in. Changes intended to be permanent
- for all configure scripts should be made to configure.template.
- Propogating changes to configure.in requires the presence of
- configure.template which normally resides in the uppermost directory
- you received. To propogate changes to either configure.template or
- a configure.in, use "configure +template=pathtothetemplate".
- This will configure the configure scripts themselves, recursively if
- appropriate.
-
-* "./configure -srcdir=foo" is not supported yet. At the moment, things
- will probably be configured correctly only for leaf directories, and
- even they will not have paths to libraries set properly.