[project @ 2005-05-04 13:06:39 by simonmar]
[ghc-hetmet.git] / docs / building / building.xml
index aed9ec5..3bfe294 100644 (file)
@@ -407,12 +407,12 @@ setsockopt IPTOS_THROUGHPUT: Invalid argument</screen>
           result in checking out the entire repository instead of just
           the <literal>fpconfig</literal> bit.</para>
 <screen>$ cd <replaceable>directory</replaceable>
-$ cvs checkout ghc hslibs libraries</screen>
+$ cvs checkout ghc libraries</screen>
 
          <para>The second command here checks out the relevant
           modules you want to work on. For a GHC build, for instance,
           you need at least the <literal>ghc</literal>,
-          <literal>hslibs</literal> and <literal>libraries</literal>
+          and <literal>libraries</literal>
           modules (for a full list of the projects available, see
           <xref linkend="projects"/>).</para>
 
@@ -605,7 +605,7 @@ $ lndir <replaceable>source-tree</replaceable></screen>
 
 <screen>$ cvs co -r ghc-4-06 fpconfig
 $ cd fptools
-$ cvs co -r ghc-4-06 ghc hslibs</screen>
+$ cvs co -r ghc-4-06 ghc libraries</screen>
     </sect2>
 
     <sect2 id="cvs-hints">
@@ -793,8 +793,7 @@ $ cvs checkout nofib/spectral</screen>
           <indexterm><primary><literal>hslibs</literal></primary><secondary>project</secondary></indexterm>
         </term>
        <listitem>
-         <para>Supplemental libraries for GHC
-         (<emphasis>required</emphasis> for building GHC).</para>
+         <para>Old, now deprecated, libraries.  Everything in here is in <literal>libraries</literal>.</para>
        </listitem>
       </varlistentry>
 
@@ -843,8 +842,8 @@ $ cvs checkout nofib/spectral</screen>
     </variablelist>
 
     <para>So, to build GHC you need at least the
-    <literal>ghc</literal>, <literal>libraries</literal> and
-    <literal>hslibs</literal> projects (a GHC source distribution will
+    <literal>ghc</literal> and <literal>libraries</literal>
+    projects (a GHC source distribution will
     already include the bits you need).</para>
   </sect1>
 
@@ -2752,8 +2751,8 @@ directive.
              </varlistentry>
 
              <varlistentry>
-               <term><literal>EXCLUDE_SRCS</literal>
-                  <indexterm><primary><literal>EXCLUDE_SRCS</literal></primary></indexterm>
+               <term><literal>EXCLUDED_SRCS</literal>
+                  <indexterm><primary><literal>EXCLUDED_SRCS</literal></primary></indexterm>
                 </term>
                <listitem>
                  <para>Set to a list of source files (relative to the
@@ -2771,7 +2770,7 @@ directive.
 
              <varlistentry>
                <term><literal>EXTRA_SRCS</literal>
-                  <indexterm><primary><literal>EXCLUDE_SRCS</literal></primary></indexterm>
+                  <indexterm><primary><literal>EXTRA_SRCS</literal></primary></indexterm>
                 </term>
                  <listitem>
                  <para>Set to a list of extra source files (perhaps
@@ -2952,6 +2951,58 @@ directive.
       ones in <filename>boilerplate.mk</filename>.</para>
     </sect2>
 
+    <sect2 id="sec-platforms">
+      <title>Platform settings</title>
+      <indexterm><primary>Platform settings</primary>
+      </indexterm>
+
+      <para>There are three platforms of interest when building GHC:</para>
+      
+      <variablelist>
+       <varlistentry>
+         <term>The <emphasis>build</emphasis> platform</term>
+         <listitem>
+           <para>The platform on which we are doing this build.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>The <emphasis>host</emphasis> platform</term>
+         <listitem>
+           <para>The platform on which these binaries will run.</para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>The <emphasis>target</emphasis> platform</term>
+         <listitem>
+           <para>The platform for which this compiler will generate code.</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+      
+      <para>These platforms are set when running the
+       <literal>configure</literal> script, using the
+       <option>--build</option>, <option>--host</option>, and
+       <option>--target</option> options.  The <filename>mk/config.mk</filename>
+       file defines several symbols related to the platform settings (see
+       <filename>mk/config.mk</filename> for details).</para>
+
+      <para>We don't currently support build &amp; host being different, because
+       the build process creates binaries that are both run during the build,
+       and also installed.</para>
+
+      <para>If host and target are different, then we are building a
+       cross-compiler.  For GHC, this means a compiler
+       which will generate intermediate .hc files to port to the target
+       architecture for bootstrapping.  The libraries and stage 2 compiler
+       will be built as HC files for the target system (see <xref
+         linkend="sec-porting-ghc" /> for details.</para>
+
+      <para>More details on when to use BUILD, HOST or TARGET can be found in
+       the comments in <filename>config.mk</filename>.</para>
+    </sect2>
+
     <sect2 id="sec-suffix">
       <title>Pattern rules and options</title>
       <indexterm><primary>Pattern rules</primary></indexterm>
@@ -3540,20 +3591,19 @@ $ make install</screen>
 
       <para>Bootstrapping GHC on a system without GHC already
       installed is achieved by taking the intermediate C files (known
-      as HC files) from a GHC compilation on a supported system to the
-      target machine, and compiling them using gcc to get a working
-      GHC.</para>
+      as HC files) from another GHC compilation, compiling them using gcc to
+       get a working GHC.</para>
 
       <para><emphasis>NOTE: GHC versions 5.xx were hard to bootstrap
       from C.  We recommend using GHC 6.0.1 or
       later.</emphasis></para>
 
       <para>HC files are platform-dependent, so you have to get a set
-      that were generated on similar hardware.  There may be some
-      supplied on the GHC download page, otherwise you'll have to
-      compile some up yourself, or start from
-      <emphasis>unregisterised</emphasis> HC files - see <xref
-      linkend="unregisterised-porting"/>.</para>
+       that were generated on <emphasis>the same platform</emphasis>.  There
+       may be some supplied on the GHC download page, otherwise you'll have to
+       compile some up yourself, or start from
+       <emphasis>unregisterised</emphasis> HC files - see <xref
+         linkend="unregisterised-porting"/>.</para>
 
       <para>The following steps should result in a working GHC build
       with full libraries:</para>
@@ -3567,7 +3617,7 @@ $ make install</screen>
           corresponding Haskell source (<filename>.hs</filename> or
           <filename>.lhs</filename>) in the compiler subdirectory
           <filename>ghc/compiler</filename> and in the libraries
-          (subdirectories of <filename>hslibs</filename> and
+          (subdirectories of 
           <literal>libraries</literal>).</para>
        </listitem>
 
@@ -3696,7 +3746,7 @@ $ ./configure --enable-hc-boot --enable-hc-boot-unregisterised</screen>
   
            <listitem>
 <screen>$ cd <replaceable>T</replaceable>/ghc/includes
-$ make ghcconfig.h</screen>
+$ make</screen>
            </listitem>
          </itemizedlist>
          </listitem>
@@ -3722,11 +3772,12 @@ $ ./configure</screen>
 
 <programlisting>GhcUnregisterised = YES
 GhcLibHcOpts = -O -fvia-C -keep-hc-files
+GhcRtsHcOpts = -keep-hc-files
 GhcLibWays =
 SplitObjs = NO
 GhcWithNativeCodeGen = NO
 GhcWithInterpreter = NO
-GhcStage1HcOpts = -O -fasm
+GhcStage1HcOpts = -O
 GhcStage2HcOpts = -O -fvia-C -keep-hc-files
 SRC_HC_OPTS += -H32m
 GhcBootLibs = YES</programlisting>
@@ -3755,20 +3806,19 @@ GhcBootLibs = YES</programlisting>
 
            <listitem>
              <para>Copy
-             <filename><replaceable>T</replaceable>/ghc/includes/ghcconfig.h</filename>
+             <filename><replaceable>T</replaceable>/ghc/includes/ghcautoconf.h</filename>, <filename><replaceable>T</replaceable>/ghc/includes/DerivedConstants.h</filename>, and <filename><replaceable>T</replaceable>/ghc/includes/GHCConstants.h</filename>
              to
              <filename><replaceable>H</replaceable>/ghc/includes</filename>.
              Note that we are building on the host machine, using the
-             target machine's <literal>config.h</literal> file.  This
+             target machine's configuration files.  This
              is so that the intermediate C files generated here will
              be suitable for compiling on the target system.</para>
-
            </listitem>
 
              <listitem>
-               <para>Touch <literal>ghcconfig.h</literal>, just to make
-               sure it doesn't get replaced during the build:</para>
-<screen>$ touch <replaceable>H</replaceable>/ghc/includes/ghcconfig.h</screen>
+               <para>Touch the generated configuration files, just to make
+               sure they don't get replaced during the build:</para>
+<screen>$ touch <filename><replaceable>H</replaceable></filename>/ghc/includes/{ghcautoconf.h,DerivedConstants.h.GHCConstants.h.mkDerivedConstants.c,mkDerivedConstantsHdr,mkDerivedConstants.o,mkGHCConstants,mkGHCConstants.o}</screen>
              </listitem>
 
            <listitem>
@@ -3790,14 +3840,14 @@ $ make boot stage=2 &amp;&amp; make stage=2</screen>
            </listitem>
 
            <listitem>
-<screen>$ cd <replaceable>H</replaceable>/ghc/lib
+<screen>$ cd <replaceable>H</replaceable>/ghc/lib/compat
 $ make clean
-$ make -k UseStage1=YES \
-                EXTRA_HC_OPTS='-O -fvia-C -keep-hc-files'
+$ rm .depend
+$ make boot UseStage1=YES
+$ make -k UseStage1=YES EXTRA_HC_OPTS='-O -fvia-C -keep-hc-files'
 $ cd <replaceable>H</replaceable>/ghc/utils
 $ make clean
-$ make -k UseStage1=YES \
-               EXTRA_HC_OPTS='-O -fvia-C -keep-hc-files'</screen>
+$ make -k UseStage1=YES EXTRA_HC_OPTS='-O -fvia-C -keep-hc-files'</screen>
            </listitem>
            
            <listitem>
@@ -4768,6 +4818,11 @@ so you will need to add <filename>emacs/bin</filename> to your <literal>PATH</li
 </para>
 </listitem>
 
+         <listitem>
+           <para>You might want to install GLUT in your MSYS/Cygwin
+             installation, otherwise the GLUT package will not be built with
+             GHC.</para>
+         </listitem>
 
 <listitem>
 <para> Finally, check out a copy of GHC sources from