116 lines
5.1 KiB
Text
116 lines
5.1 KiB
Text
|
|
||
|
|
||
|
Configuration
|
||
|
|
||
|
Last Mod Fri Apr 12 13:32:56 PDT 1991, by rich@sendai
|
||
|
|
||
|
|
||
|
"Theory":
|
||
|
|
||
|
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.
|
||
|
|
||
|
The word "target" refers to the environment produced by compiling this
|
||
|
source and installing the resulting binaries.
|
||
|
|
||
|
For example, if configured for host sun4 and target sun4, this implies
|
||
|
that we will compile on a sun4 to create a sun4 compilation
|
||
|
environment. If configured for host sun3 and target a29k, this
|
||
|
implies that we will compile on a sun3 to create an a29k compilation
|
||
|
environment.
|
||
|
|
||
|
Host sun3 only implies that the source will be compiled on a sun3. In
|
||
|
fact, it need not be actually compiled on a sun3. If the appropriate
|
||
|
native development tools, header files, libraries, and operating
|
||
|
system support were available on a foobox, then source configured for
|
||
|
a sun3 could be compiled on a foobox, resulting in a development
|
||
|
environment for, using the previous example host+target pair, "a29k"
|
||
|
on the foobox. Similarly, if the appropriate cross development tools,
|
||
|
header files, and libraries were available on a dec3100, then source
|
||
|
configured for host sun3 could be cross compiled to create an a29k
|
||
|
development environment intended to be run on a sun3.
|
||
|
|
||
|
|
||
|
Usage:
|
||
|
|
||
|
Gdb's config has features not yet present in the uniform configuration
|
||
|
scheme described here. For this reason, configuration of gdb must
|
||
|
currently be done separately from that of the rest of this package.
|
||
|
This will be corrected soon. For more information on the
|
||
|
configuration of gdb, please refer to the documents in gdb.{your
|
||
|
target} if it exists, otherwise gdb.
|
||
|
|
||
|
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 +host=hostname 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 +forcesubdirs +host=hostname targetname" creates
|
||
|
a subdirectories Host-hostname and
|
||
|
Host-hostname/Target-targetname and configures
|
||
|
Host-hostname/Target-targetname. For now, makes should be
|
||
|
done from Host-hostname/Target-targetname. "./configure +f
|
||
|
name" works as expected. That is, it creates Host-name and
|
||
|
Host-name/Target-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 editted 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 editted 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=absolutepathtothetemplate".
|
||
|
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.
|