<html>
<head>
<title>Configuring egcs-1.0.3 </title>
</head>
<body bgcolor="white">
<h1 align="center">Configuring egcs-1.0.3</h1>

<p>Like most GNU software, egcs must be configured before it can be built.
This document attempts to describe the recommended configuration procedure
for both native and cross targets.

<p>We use <i>srcdir</i> to refer to the toplevel source directory for
egcs; we use <i>objdir</i> to refer to the toplevel build/object
directory for egcs.

<p>First, we <b>highly</b> recommend that egcs be built into a separate
directory than the sources.  This is how we generally build egcs; building
where <i>srcdir</i> == <i>objdir</i> should still work, but doesn't get
extensive testing.

<p>Second, when configuring a native system, either "cc" must be in your
path or you must set CC in your environment before running configure.
Otherwise the configuration scripts may fail.

<p>To configure egcs:

<blockquote>
<tt>
  <br>% mkdir <i>objdir</i>
  <br>% cd <i>objdir</i>
  <br>% <i>srcdir</i>/configure <b>[target]</b> <b>[options]</b>
</tt>
</blockquote>


<p><b>target specification</b>
<ul>
  <li> egcs has code to correctly determine the correct value for
  <b>target</b> for nearly all native systems.  Therefore, we highly
  recommend you not provide a configure target when configuring a
  native compiler.

  <li> <b>target</b> must be specified when configuring a cross compiler;
  examples of valid targets would be i960-rtems, m68k-coff, sh-elf, etc.
</ul>


<p><b> options specification</b>

<p>Use <b>options</b> to override several configure time options for
egcs.  A partial list of supported <tt>options</tt>:

<ul>
  <li> <tt>--prefix=</tt><i>dirname</i> -- Specify the toplevel installation
  directory.  This is the recommended way to install the tools into a directory
  other than the default.  The toplevel installation directory defaults to
  /usr/local.

  <br>These additional options control where certain parts of the distribution
  are installed.  Normally you should not need to use these options.
  <ul>
     <li> <tt>--with-local-prefix=</tt><i>dirname</i> -- Specify the installation
     directory for local include files.  The default is /usr/local.

     <li> <tt>--with-gxx-include-dir=</tt><i>dirname</i> -- Specify the installation
     directory for g++ header files.  The default is /usr/local/include/g++.
  </ul>

  <li> <tt>--enable-shared</tt> -- Build shared versions of the C++ runtime
  libraries if supported <tt>--disable-shared</tt> is the default.

  <li> <tt>--enable-haifa</tt> -- Enable the new Haifa instruction scheduler in the
  compiler; the new scheduler can significantly improve code on some targets.
  <tt>--disable-haifa</tt> is currently the default on all platforms except the HPPA.

  <li> <tt>--with-gnu-as</tt> -- Specify that the compiler should assume the GNU
  assembler (aka gas) is available. 

  <li> <tt>--with-gnu-ld</tt> -- Specify that the compiler should assume the GNU
  linker (aka gld) is available. 

  <li> <tt>--with-stabs</tt> -- Specify that stabs debugging information should be used
  instead of whatever format the host normally uses.  Normally GCC uses the
  same debug format as the host system. 

  <li> <tt>--enable-multilib</tt> -- Specify that multiple target libraries
  should be built to support different target variants, calling conventions,
  etc.  This is the default. 

  <li> <tt>--enable-threads</tt> -- Specify that the target supports threads.
  This only effects the Objective-C compiler and runtime library.

  <li> <tt>--enable-threads=</tt><i>lib</i> -- Specify that <i>lib</i> is the
  thread support library.  This only effects the Objective-C compiler  and
  runtime library.

  <li> <tt>--with-cpu=</tt><i>cpu</i> -- Specify which cpu variant the compiler should
  generate code for by default.  This is currently only supported on the
  RS6000/PowerPC ports.
</ul>

<p>Some options which only apply to building cross compilers:
<ul>
  <li> <tt>--with-headers=</tt><i>dir</i> -- Specifies a directory which has target
  include files.
  <li> <tt>--with-libs=</tt><i>dirs</i> -- Specifies a list of directories which contain
  the target runtime libraries.
  <li> <tt>--with-newlib</tt> -- Specifies that "newlib" is being used as the target
  C library.   This causes __eprintf to be omitted from libgcc.a on the
  assumption that it will be provided by newlib.
</ul>
 
<p>Note that each <tt>--enable</tt> option has a corresponding <tt>--disable</tt> option and
that each <tt>--with</tt> option has a corresponding <tt>--without</tt> option.


<p>
<hr>
<i>Last modified on Jan 2, 1998.</i>

</body>
</html>
