mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-15 14:56:13 +01:00
Remove these Binutils 2.8.1 files.
This commit is contained in:
parent
bda4ef1aa0
commit
666c9ef376
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=61840
@ -1,717 +0,0 @@
|
||||
\input texinfo
|
||||
@c %**start of header
|
||||
@setfilename cfg-paper.info
|
||||
@settitle On Configuring Development Tools
|
||||
@c %**end of header
|
||||
@setchapternewpage off
|
||||
|
||||
@ifinfo
|
||||
This document attempts to describe the general concepts behind
|
||||
configuration of the @sc{gnu} Development Tools.
|
||||
It also discusses common usage.
|
||||
|
||||
Copyright (C) 1991, 1992, 1994 Cygnus Support
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
@ignore
|
||||
Permission is granted to process this file through TeX and print the
|
||||
results, provided the printed document carries copying permission
|
||||
notice identical to this one except for the removal of this paragraph
|
||||
(this paragraph not being relevant to the printed manual).
|
||||
|
||||
@end ignore
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the entire
|
||||
resulting derived work is distributed under the terms of a permission
|
||||
notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation approved
|
||||
by Cygnus Support.
|
||||
@end ifinfo
|
||||
|
||||
@titlepage
|
||||
@sp 10
|
||||
@title{On Configuring Development Tools}
|
||||
@author{K. Richard Pixley, @code{rich@@cygnus.com}}
|
||||
@author{Cygnus Support}
|
||||
@page
|
||||
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 1991, 1992, 1994 Cygnus Support
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided that the entire
|
||||
resulting derived work is distributed under the terms of a permission
|
||||
notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions,
|
||||
except that this permission notice may be stated in a translation approved
|
||||
by Cygnus Support.
|
||||
@end titlepage
|
||||
|
||||
@ifinfo
|
||||
@format
|
||||
START-INFO-DIR-ENTRY
|
||||
* configuration: (cfg-paper). Some theory on configuring source.
|
||||
END-INFO-DIR-ENTRY
|
||||
@end format
|
||||
@end ifinfo
|
||||
|
||||
@node top, Some Basic Terms, (dir), (dir)
|
||||
|
||||
@ifinfo
|
||||
This document attempts to describe the general concepts behind
|
||||
configuration of the @sc{gnu} Development Tools.
|
||||
It also discusses common usage.
|
||||
@end ifinfo
|
||||
|
||||
@menu
|
||||
* Some Basic Terms:: Some Basic Terms
|
||||
* Specifics.:: Specifics
|
||||
* Building Development Environments:: Building Development Environments
|
||||
* A Walk Through:: A Walk Through
|
||||
* Final Notes:: Final Notes
|
||||
* Index:: Index
|
||||
|
||||
--- The Detailed Node Listing ---
|
||||
|
||||
Some Basic Terms
|
||||
|
||||
* Host Environments:: Host Environments
|
||||
* Configuration Time Options:: Configuration Time Options
|
||||
|
||||
A Walk Through
|
||||
|
||||
* Native Development Environments:: Native Development Environments
|
||||
* Emulation Environments:: Emulation Environments
|
||||
* Simple Cross Environments:: Simple Cross Environments
|
||||
* Crossing Into Targets:: Crossing Into Targets
|
||||
* Canadian Cross:: Canadian Cross
|
||||
|
||||
Final Notes
|
||||
|
||||
* Hacking Configurations:: Hacking Configurations
|
||||
@end menu
|
||||
|
||||
@node Some Basic Terms, Specifics., top, top
|
||||
@chapter 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 many
|
||||
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.
|
||||
|
||||
@emph{Programs} run on @emph{machines}. Programs are very nearly always
|
||||
written in @emph{source}. Programs are @emph{built} from source.
|
||||
@emph{Compilation} is a process that is frequently, but not always, used
|
||||
when building programs.
|
||||
@cindex Programs
|
||||
@cindex Machines
|
||||
@cindex Source
|
||||
@cindex Building
|
||||
@cindex Compilation
|
||||
|
||||
@menu
|
||||
* Host Environments:: Host Environments
|
||||
* Configuration Time Options:: Configuration Time Options
|
||||
@end menu
|
||||
|
||||
@node Host Environments, Configuration Time Options, Some Basic Terms, Some Basic Terms
|
||||
@section Host Environments
|
||||
|
||||
@cindex host
|
||||
In this document, the word @emph{host} refers to the environment in
|
||||
which the source in question will be compiled. @emph{host} and
|
||||
@emph{host name} have nothing to do with the proper name of your host,
|
||||
like @emph{ucbvax}, @emph{prep.ai.mit.edu} or @emph{att.com}. Instead
|
||||
they refer to things like @emph{sun4} and @emph{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:
|
||||
|
||||
@example
|
||||
cd desk-calculator ; ./configure sun4
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
does the trick. @code{configure} is a shell script that sets up Makefiles,
|
||||
subdirectories, and symbolic links appropriate for compiling the source
|
||||
on a sun4.
|
||||
|
||||
The @emph{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.
|
||||
|
||||
@example
|
||||
cd desk-calculator ; ./configure sun3
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
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. This technique is
|
||||
often used within individual programs to remedy deficiencies in the host
|
||||
operating system. For example, some operating systems do not provide
|
||||
the @code{bcopy} function and so it is emulated using the
|
||||
@code{memcpy} funtion.
|
||||
|
||||
Host environment simply refers to the environment in which the program
|
||||
will be built from the source.
|
||||
|
||||
|
||||
@node Configuration Time Options, , Host Environments, Some Basic Terms
|
||||
@section 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
|
||||
@emph{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, to choose infix you
|
||||
might use:
|
||||
|
||||
@example
|
||||
./configure sun3 --enable-notation=infix
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
while for a sun4 with postfix you might use:
|
||||
|
||||
@example
|
||||
./configure sun4 --enable-notation=postfix
|
||||
@end example
|
||||
|
||||
If we wanted to build both at the same time, the intermediate pieces
|
||||
used in the build process must be kept separate.
|
||||
|
||||
@example
|
||||
mkdir ../objdir.sun4
|
||||
(cd ../objdir.sun4 ; ../configure sun4 --enable-notation=postfix --srcdir=../src)
|
||||
mkdir ../objdir.sun3
|
||||
(cd ../objdir.sun3 ; ../configure sun3 --enable-notation=infix --srcdir=../src)
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
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. Otherwise, a second
|
||||
configuration would write over the first. We've chosen to retain this
|
||||
behaviour so the obj directories and the @code{--srcdir} configuration
|
||||
option are necessary to get the new behaviour. The order of the
|
||||
arguments doesn't matter. There should be exactly one argument without
|
||||
a leading @samp{-} 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
|
||||
@emph{in place} and won't show the @code{--srcdir} 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 @file{/usr/local}. We refer to this location as
|
||||
@code{$(prefix)}. All user visible programs will be installed in
|
||||
@file{@code{$(prefix)}/bin}. All other programs and files will be
|
||||
installed in a subdirectory of @file{@code{$(prefix)}/lib}.
|
||||
|
||||
You can only change @code{$(prefix)} as a configuration time
|
||||
option.
|
||||
|
||||
@example
|
||||
./configure sun4 --enable-notation=postfix --prefix=/local
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
Will configure the source such that:
|
||||
|
||||
@example
|
||||
make install
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
will put its programs in @file{/local/bin} and @file{/local/lib/gcc}.
|
||||
If you change @code{$(prefix)} after building the source, you will need
|
||||
to:
|
||||
|
||||
@example
|
||||
make clean
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
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 example and
|
||||
move on to the application that resides in these directories, namely,
|
||||
the source to a development environment.
|
||||
|
||||
@node Specifics., Building Development Environments, Some Basic Terms, top
|
||||
@chapter Specifics
|
||||
|
||||
The @sc{gnu} Development Tools can be built on a wide variety of hosts. So,
|
||||
of course, they must be configured. Like the last example,
|
||||
|
||||
@example
|
||||
./configure sun4 --prefix=/local
|
||||
./configure sun3 --prefix=/local
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
will configure the source to be built in subdirectories, in order to
|
||||
keep the intermediate pieces separate, and to be installed in
|
||||
@file{/local}.
|
||||
|
||||
When built with suitable development environments, these will be native
|
||||
tools. We'll explain the term @emph{native} later.
|
||||
|
||||
@node Building Development Environments, A Walk Through, Specifics., top
|
||||
@chapter Building Development Environments
|
||||
|
||||
@cindex Target
|
||||
|
||||
The @sc{gnu} development tools can not only be built in 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
|
||||
@emph{target}. That is, the word @emph{target} refers to the development
|
||||
environment produced by compiling this source and installing the
|
||||
resulting programs.
|
||||
|
||||
For the @sc{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 @sc{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 @code{$(prefix)}.
|
||||
|
||||
@example
|
||||
./configure sun4 --prefix=/local --target=sun3
|
||||
./configure sun3 --prefix=/local --target=sun4
|
||||
@end example
|
||||
|
||||
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 @file{/local}. The second is intended to be built in a
|
||||
sun3 environment, in subdirectories, to be installed in @file{/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.
|
||||
|
||||
|
||||
@node A Walk Through, Final Notes, Building Development Environments, top
|
||||
@chapter A Walk Through
|
||||
|
||||
|
||||
@menu
|
||||
* Native Development Environments:: Native Development Environments
|
||||
* Emulation Environments:: Emulation Environments
|
||||
* Simple Cross Environments:: Simple Cross Environments
|
||||
* Crossing Into Targets:: Crossing Into Targets
|
||||
* Canadian Cross:: Canadian Cross
|
||||
@end menu
|
||||
|
||||
@node Native Development Environments, Emulation Environments, A Walk Through, A Walk Through
|
||||
@section 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.
|
||||
|
||||
@cindex Native
|
||||
@cindex Foreign
|
||||
The resulting desk calculator program is referred to as a @emph{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 @emph{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 @emph{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 @emph{native} build.
|
||||
|
||||
@example
|
||||
./configure sun4
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
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 @sc{gnu} Development Tools is a very common activity
|
||||
and the resulting development environment is quite popular.
|
||||
|
||||
@example
|
||||
make all
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
will build the tools as configured and will assume that you want to use
|
||||
the native development environment that came with your machine.
|
||||
|
||||
@cindex Bootstrapping
|
||||
@cindex Stage1
|
||||
Using a development environment to build a development environment is
|
||||
called @emph{bootstrapping}. The release of the @sc{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 release and let's call the new
|
||||
development environment @emph{stage1}.
|
||||
|
||||
Why bother? Well, most people find that the @sc{gnu} development
|
||||
environment 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 @sc{gnu} tools better than using other tools.
|
||||
|
||||
@cindex Stage2
|
||||
While you're at it, if the @sc{gnu} tools produce better programs, maybe you
|
||||
should use them to build the @sc{gnu} tools. So let's
|
||||
pretend that you do. Let's call the new development environment
|
||||
@emph{stage2}.
|
||||
|
||||
@cindex Stage3
|
||||
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 @sc{gnu} tools have
|
||||
built. You really don't yet know if these tools work. Do you have any
|
||||
programs built with the @sc{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 @sc{gnu} tools themselves. In
|
||||
fact, if you use stage2 to build the @sc{gnu} tools again the resulting
|
||||
programs should be identical to stage2. Let's pretend that you do and
|
||||
call the new development environment @emph{stage3}.
|
||||
|
||||
@cindex Three stage boot
|
||||
You've just completed what's called a @emph{three stage boot}. You now have
|
||||
a small, fast, somewhat tested, development environment.
|
||||
|
||||
@example
|
||||
make bootstrap
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
will do a three stage boot across all tools and will compare stage2 to
|
||||
stage3 and complain if they are not identical.
|
||||
|
||||
Once built,
|
||||
|
||||
@example
|
||||
make install
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
will install the development environment in the default location, or in
|
||||
@code{$(prefix)} if you specified an alternate when you configured.
|
||||
|
||||
@cindex Cross
|
||||
Any development environment that is not a native development environment
|
||||
is refered to as a @emph{cross} development environment. There are many
|
||||
different types of cross development environments but most fall into one
|
||||
of three basic categories.
|
||||
|
||||
|
||||
@node Emulation Environments, Simple Cross Environments, Native Development Environments, A Walk Through
|
||||
@section Emulation Environments
|
||||
|
||||
@cindex Emulation
|
||||
The first category of cross development environment is called
|
||||
@emph{emulation}. There are two primary types of emulation, but both
|
||||
types result in programs that run on the native host.
|
||||
|
||||
@cindex Software emulation
|
||||
@cindex Software emulator
|
||||
The first type is @emph{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 @emph{software emulator}.
|
||||
|
||||
The @sc{gnu} Development Tools do not currently include any software
|
||||
emulators. Some do exist and the @sc{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 concepts of operating system universes and hosted operating
|
||||
systems are two such development environments.
|
||||
|
||||
@node Simple Cross Environments, Crossing Into Targets, Emulation Environments, A Walk Through
|
||||
@section Simple Cross Environments
|
||||
|
||||
@example
|
||||
./configure sun4 --target=a29k
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
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.
|
||||
|
||||
@cindex Simple cross
|
||||
@cindex Crossing to
|
||||
Building gcc-a29k is also a bootstrap but of a slightly different sort.
|
||||
We call gcc-a29k a @emph{simple cross} environment and using gcc-a29k to
|
||||
build a program intended for a29k is called @emph{crossing to} a29k.
|
||||
Simple cross environments are the second category of cross development
|
||||
environments.
|
||||
|
||||
|
||||
@node Crossing Into Targets, Canadian Cross, Simple Cross Environments, A Walk Through
|
||||
@section Crossing Into Targets
|
||||
|
||||
@example
|
||||
./configure a29k --target=a29k
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
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.
|
||||
|
||||
@cindex Crossing into
|
||||
The process of building this configuration is a another 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
|
||||
@emph{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. @emph{Crossing into} has been
|
||||
introduced here not because it is a type of cross development
|
||||
environment, but because it is frequently mistaken as one. The process
|
||||
is @emph{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.
|
||||
|
||||
|
||||
@node Canadian Cross, , Crossing Into Targets, A Walk Through
|
||||
@section Canadian 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 @emph{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.
|
||||
|
||||
@example
|
||||
./configure a29k --target=sun3
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
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.
|
||||
|
||||
@cindex Canadian Cross
|
||||
@cindex Three party 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
|
||||
@emph{Canadian cross}. It's a three party cross, Canada has a three
|
||||
party system, hence Canadian Cross.
|
||||
|
||||
@node Final Notes, Index, A Walk Through, top
|
||||
@chapter Final Notes
|
||||
|
||||
By @emph{configures}, I mean that links, Makefile, .gdbinit, and
|
||||
config.status are built. Configuration is always done from the source
|
||||
directory.
|
||||
|
||||
@table @code
|
||||
|
||||
@item ./configure @var{name}
|
||||
configures this directory, perhaps recursively, for a single host+target
|
||||
pair where the host and target are both @var{name}. If a previous
|
||||
configuration existed, it will be overwritten.
|
||||
|
||||
@item ./configure @var{hostname} --target=@var{targetname}
|
||||
configures this directory, perhaps recursively, for a single host+target
|
||||
pair where the host is @var{hostname} and target is @var{targetname}.
|
||||
If a previous configuration existed, it will be overwritten.
|
||||
|
||||
@end table
|
||||
|
||||
@menu
|
||||
* Hacking Configurations:: Hacking Configurations
|
||||
@end menu
|
||||
|
||||
@node Hacking Configurations, , Final Notes, Final Notes
|
||||
@section Hacking Configurations
|
||||
|
||||
The configure scripts essentially do three things, create subdirectories
|
||||
if appropriate, build a @file{Makefile}, and create links to files, all
|
||||
based on and tailored to, a specific host+target pair. The scripts also
|
||||
create a @file{.gdbinit} if appropriate but this is not tailored.
|
||||
|
||||
The Makefile is created by prepending some variable definitions to a
|
||||
Makefile template called @file{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
|
||||
@code{--srcdir} or not. The host and target specific Makefile may or may
|
||||
not exist.
|
||||
|
||||
@itemize @bullet
|
||||
|
||||
@item
|
||||
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
|
||||
@file{./config/mh-@var{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 @file{./config/mt-@var{target}} if
|
||||
it exists. Changes intended to be permanent for the directory should be
|
||||
made in @file{Makefile.in}. To propogate changes to any of these,
|
||||
either use @code{make Makefile} or @code{./config.status} or
|
||||
re-configure.
|
||||
|
||||
@end itemize
|
||||
|
||||
@page
|
||||
@node Index, , Final Notes, top
|
||||
@appendix Index
|
||||
|
||||
@printindex cp
|
||||
|
||||
@contents
|
||||
@bye
|
||||
|
||||
@c Local Variables:
|
||||
@c fill-column: 72
|
||||
@c End:
|
@ -1,166 +0,0 @@
|
||||
.\" -*- nroff -*-
|
||||
.\" Copyright (c) 1991, 1992, 1996 Cygnus Support
|
||||
.\" written by K. Richard Pixley
|
||||
.TH configure 1 "29 March 1996" "cygnus support" "Cygnus Support"
|
||||
.de BP
|
||||
.sp
|
||||
.ti \-.2i
|
||||
\(**
|
||||
..
|
||||
|
||||
.SH NAME
|
||||
configure \- prepare source code to be built
|
||||
|
||||
.SH SYNOPSIS
|
||||
configure HOST [--target=TARGET] [--srcdir=DIR] [--rm]
|
||||
[--site=SITE] [--prefix=DIR] [--exec_prefix=DIR]
|
||||
[--program_prefix=DIR] [--tmpdir=DIR]
|
||||
[--with-PACKAGE[=YES/NO]] [--without-PACKAGE]
|
||||
[--enable-FEATURE[=YES/NO]] [--disable-FEATURE]
|
||||
[--norecursion] [--nfp] [-s] [-v] [-V | --version] [--help]
|
||||
|
||||
.SH DESCRIPTION
|
||||
.I configure
|
||||
is a program used to prepare souce code to be built. It does this by
|
||||
generating Makefiles and .gdbinit files, creating symlinks, recursing
|
||||
in subdirectories, and some other miscellaneous file editing.
|
||||
|
||||
.SH OPTIONS
|
||||
.I configure
|
||||
accepts the following options:
|
||||
|
||||
.TP
|
||||
.I \--target=TARGET
|
||||
Requests that the sources be configured to target the
|
||||
.I TARGET
|
||||
machine. If no target is specified explicitly, the target is assumed
|
||||
to be the same as the host.
|
||||
|
||||
.TP
|
||||
.I \--srcdir=DIR
|
||||
tells configure to find the source in
|
||||
.I DIR.
|
||||
Object code is always built in the current directory,
|
||||
.I `.'.
|
||||
|
||||
.TP
|
||||
.I \--rm
|
||||
asks configure to remove a configuration rather than create one.
|
||||
|
||||
.TP
|
||||
.I \--site=SITE
|
||||
asks configure to use any site-specific Makefile fragments for
|
||||
.I SITE
|
||||
when building Makefiles.
|
||||
|
||||
.TP
|
||||
.I \--prefix=DIR
|
||||
sets the location in which to install files to
|
||||
.I DIR.
|
||||
The default is "/usr/local".
|
||||
|
||||
.TP
|
||||
.I \--exec_prefix=DIR
|
||||
sets the root directory for host-dependent files to
|
||||
.I DIR.
|
||||
The default location is the value of
|
||||
.I prefix.
|
||||
|
||||
.TP
|
||||
.I \--program_prefix=DIR
|
||||
configures the source to install programs which have the same names as
|
||||
common Unix programs, such as "make", in
|
||||
.I DIR.
|
||||
Also applies to programs which might be used for cross-compilation.
|
||||
|
||||
.TP
|
||||
.I \--tmpdir=DIR
|
||||
sets the directory in which configure creates temporary files to
|
||||
.I DIR.
|
||||
|
||||
.TP
|
||||
.I \--with-PACKAGE[=YES/NO]
|
||||
sets a flag for the build to recognize that
|
||||
.I PACKAGE
|
||||
is explicitly present or not present. If
|
||||
.I \=YES/NO
|
||||
is nonexistent, the default is
|
||||
.I YES.
|
||||
.I \--without-PACKAGE
|
||||
is equivalent to
|
||||
.IR \--with-PACKAGE=no .
|
||||
|
||||
.TP
|
||||
.I \--enable-FEATURE[=YES/NO]
|
||||
sets a flag for the build to recognize that
|
||||
.I FEATURE
|
||||
should be included or not included. If
|
||||
.I \=YES/NO
|
||||
is nonexistent, the default is
|
||||
.I YES.
|
||||
.I \--disable-FEATURE
|
||||
is equivalent to
|
||||
.IR --enable-FEATURE=no .
|
||||
|
||||
.TP
|
||||
.I \--norecursion
|
||||
asks that only the current directory be configured. Normally
|
||||
.I configure
|
||||
recurs on subdirectories.
|
||||
|
||||
.TP
|
||||
.I \-nfp
|
||||
Notifies
|
||||
.I configure
|
||||
that all of the specified hosts have
|
||||
.I no floating point
|
||||
units.
|
||||
|
||||
.TP
|
||||
.I \-s
|
||||
used internally by configure to supress status messages on
|
||||
subdirectory recursions. Override with
|
||||
.I \-v
|
||||
|
||||
.TP
|
||||
.I \-v
|
||||
verbose output. Asks that configure print status lines for each
|
||||
directory configured. Normally, only the status lines for the current
|
||||
directory are printed.
|
||||
|
||||
.TP
|
||||
.I \--version
|
||||
.I \-V
|
||||
prints
|
||||
.I configure
|
||||
version number.
|
||||
|
||||
.TP
|
||||
.I \-help
|
||||
displays a brief usage summary.
|
||||
|
||||
|
||||
.SH FILES
|
||||
configure.in for each directory's individual needs
|
||||
.br
|
||||
Makefile.in Makefile template
|
||||
.br
|
||||
config.sub for parsing configuration names
|
||||
.br
|
||||
config.guess for guessing HOST when not specified
|
||||
.br
|
||||
config.status non-recursively rebuilds current directory
|
||||
|
||||
.SH FILES
|
||||
.ta \w'gmon.sum 'u
|
||||
a.out the namelist and text space.
|
||||
.br
|
||||
gmon.out dynamic call graph and profile.
|
||||
.br
|
||||
gmon.sum summarized dynamic call graph and profile.
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.RB "`\|" configure "\|'"
|
||||
entry in
|
||||
.B
|
||||
info.
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user