merge up to ghc HEAD 16-Apr-2011
[ghc-hetmet.git] / docs / users_guide / phases.xml
index 2026a34..dfa10a5 100644 (file)
 
       <varlistentry>
         <term>
-          <option>-pgmm</option> <replaceable>cmd</replaceable>
-          <indexterm><primary><option>-pgmm</option></primary></indexterm>
+          <option>-pgmlo</option> <replaceable>cmd</replaceable>
+          <indexterm><primary><option>-pgmlo</option></primary></indexterm>
         </term>
         <listitem>
-          <para>Use <replaceable>cmd</replaceable> as the
-          mangler.</para>
+          <para>Use <replaceable>cmd</replaceable> as the LLVM
+          optimiser.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
+          <option>-pgmlc</option> <replaceable>cmd</replaceable>
+          <indexterm><primary><option>-pgmlc</option></primary></indexterm>
+        </term>
+        <listitem>
+          <para>Use <replaceable>cmd</replaceable> as the LLVM
+          compiler.</para>
         </listitem>
       </varlistentry>
 
       </varlistentry>
       <varlistentry>
         <term>
+          <option>-optlo</option> <replaceable>option</replaceable>
+          <indexterm><primary><option>-optlo</option></primary></indexterm>
+        </term>
+        <listitem>
+          <para>Pass <replaceable>option</replaceable> to the LLVM optimiser.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
+          <option>-optlc</option> <replaceable>option</replaceable>
+          <indexterm><primary><option>-optlc</option></primary></indexterm>
+        </term>
+        <listitem>
+          <para>Pass <replaceable>option</replaceable> to the LLVM compiler.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>
           <option>-optm</option>  <replaceable>option</replaceable>
           <indexterm><primary><option>-optm</option></primary></indexterm>
         </term>
@@ -319,44 +348,6 @@ $ cat foo.hspp</screen>
     <variablelist>
       <varlistentry>
         <term>
-          <constant>&lowbar;&lowbar;HASKELL98&lowbar;&lowbar;</constant>
-          <indexterm><primary><literal>&lowbar;&lowbar;HASKELL98&lowbar;&lowbar;</literal></primary></indexterm>
-        </term>
-        <listitem>
-          <para>If defined, this means that GHC supports the
-          language defined by the Haskell 98 report.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>
-          <constant>&lowbar;&lowbar;HASKELL&lowbar;&lowbar;=98</constant>
-          <indexterm><primary><constant>&lowbar;&lowbar;HASKELL&lowbar;&lowbar;=98</constant></primary></indexterm>
-        </term>
-        <listitem>
-          <para>In GHC 4.04 and later, the
-          <constant>&lowbar;&lowbar;HASKELL&lowbar;&lowbar;</constant>
-          macro is defined as having the value
-          <constant>98</constant>.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>
-          <constant>&lowbar;&lowbar;HASKELL1&lowbar;&lowbar;</constant>
-          <indexterm><primary><constant>&lowbar;&lowbar;HASKELL1&lowbar;&lowbar;</constant></primary></indexterm>
-        </term>
-        <listitem>
-          <para>If defined to <replaceable>n</replaceable>, that
-          means GHC supports the Haskell language defined in the
-          Haskell report version <emphasis>1.n</emphasis>.
-          Currently 5.  This macro is deprecated, and will probably
-          disappear in future versions.</para>
-        </listitem>
-      </varlistentry>
-
-      <varlistentry>
-        <term>
           <constant>&lowbar;&lowbar;GLASGOW&lowbar;HASKELL&lowbar;&lowbar;</constant>
           <indexterm><primary><constant>&lowbar;&lowbar;GLASGOW&lowbar;HASKELL&lowbar;&lowbar;</constant></primary></indexterm>
         </term>
@@ -395,55 +386,42 @@ $ cat foo.hspp</screen>
       </varlistentry>
 
       <varlistentry>
-      <term>
-          <constant>&lowbar;&lowbar;CONCURRENT&lowbar;HASKELL&lowbar;&lowbar;</constant>
-          <indexterm><primary><constant>&lowbar;&lowbar;CONCURRENT&lowbar;HASKELL&lowbar;&lowbar;</constant></primary></indexterm>
-        </term>
-      <listitem>
-        <para>This symbol is defined when pre-processing Haskell
-          (input) and pre-processing C (GHC output).  Since GHC from
-          version 4.00 now supports concurrent haskell by default,
-          this symbol is always defined.</para>
-        </listitem>
-      </varlistentry>
-      
-      <varlistentry>
-       <term>
+        <term>
           <constant>&lowbar;&lowbar;PARALLEL&lowbar;HASKELL&lowbar;&lowbar;</constant>
           <indexterm><primary><constant>&lowbar;&lowbar;PARALLEL&lowbar;HASKELL&lowbar;&lowbar;</constant></primary></indexterm>
         </term>
-       <listitem>
-         <para>Only defined when <option>-parallel</option> is in
+        <listitem>
+          <para>Only defined when <option>-parallel</option> is in
           use!  This symbol is defined when pre-processing Haskell
           (input) and pre-processing C (GHC output).</para>
-       </listitem>
+        </listitem>
       </varlistentry>
 
       <varlistentry>
-       <term>
+        <term>
           <constant><replaceable>os</replaceable>_HOST_OS=1</constant>
         </term>
-       <listitem>
-         <para>This define allows conditional compilation based on
+        <listitem>
+          <para>This define allows conditional compilation based on
           the Operating System, where<replaceable>os</replaceable> is
           the name of the current Operating System
           (eg. <literal>linux</literal>, <literal>mingw32</literal>
           for Windows, <literal>solaris</literal>, etc.).</para>
-       </listitem>
+        </listitem>
       </varlistentry>
-       
+        
       <varlistentry>
-       <term>
+        <term>
           <constant><replaceable>arch</replaceable>_HOST_ARCH=1</constant>
         </term>
-       <listitem>
-         <para>This define allows conditional compilation based on
+        <listitem>
+          <para>This define allows conditional compilation based on
           the host architecture, where<replaceable>arch</replaceable>
           is the name of the current architecture
           (eg. <literal>i386</literal>, <literal>x86_64</literal>,
           <literal>powerpc</literal>, <literal>sparc</literal>,
           etc.).</para>
-       </listitem>
+        </listitem>
       </varlistentry>
     </variablelist>
 
@@ -543,31 +521,6 @@ $ cat foo.hspp</screen>
     </variablelist>
   </sect2>
 
-  <sect2 id="options-C-compiler">
-    <title>Options affecting the C compiler (if applicable)</title>
-
-    <indexterm><primary>include-file options</primary></indexterm>
-    <indexterm><primary>C compiler options</primary></indexterm>
-    <indexterm><primary>GCC options</primary></indexterm>
-
-    <para>If you are compiling with lots of foreign calls, you may
-    need to tell the C&nbsp;compiler about some
-    <literal>&num;include</literal> files.  The Right Way to do this is to
-      add an <literal>INCLUDE</literal> pragma to the top of your source file
-      (<xref linkend="include-pragma" />):</para>
-
-<programlisting>{-# INCLUDE &lt;X/Xlib.h&gt; #-}</programlisting>
-      
-    <para>Sometimes this isn't convenient.  In those cases there's an
-      equivalent command-line option:</para>
-
-<screen>% ghc -c '-#include &lt;X/Xlib.h&gt;' Xstuff.lhs</screen>
-
-    <indexterm><primary><option>-#include</option></primary>
-    </indexterm>
-
-  </sect2>
-
   <sect2 id="options-codegen">
     <title>Options affecting code generation</title>
 
@@ -579,21 +532,23 @@ $ cat foo.hspp</screen>
         </term>
         <listitem>
           <para>Use GHC's native code generator rather than
-          compiling via C.  This will compile faster (up to twice as
-          fast), but may produce code that is slightly slower than
-          compiling via C.  <option>-fasm</option> is the default.</para>
+          compiling via LLVM.
+          <option>-fasm</option> is the default.</para>
         </listitem>
       </varlistentry>
 
       <varlistentry>
         <term>
-          <option>-fvia-C</option>
-          <indexterm><primary><option>-fvia-C</option></primary></indexterm>
+          <option>-fllvm</option>
+          <indexterm><primary><option>-fllvm</option></primary></indexterm>
         </term>
         <listitem>
-          <para>Compile via C instead of using the native code
-          generator.  This is the default on architectures for which GHC
-          doesn't have a native code generator.</para>
+          <para>Compile via LLVM instead of using the native code
+          generator. This will generally take slightly longer than the
+          native code generator to compile.
+          Produced code is generally the same speed or faster
+          than the other two code generators. Compiling via LLVM
+          requires LLVM version 2.7 or later to be on the path.</para>
         </listitem>
       </varlistentry>
 
@@ -658,7 +613,7 @@ $ cat foo.hspp</screen>
           different package will reside in a different shared library or
           binary.</para>
           <para>Note that using this option when linking causes GHC to link
-         against shared libraries.</para>
+          against shared libraries.</para>
         </listitem>
       </varlistentry>
     </variablelist>
@@ -724,10 +679,10 @@ $ cat foo.hspp</screen>
         </term>
         <listitem>
           <para>Omits the link step.  This option can be used with
-           <option>&ndash;&ndash;make</option> to avoid the automatic linking
-           that takes place if the program contains a <literal>Main</literal>
-           module.</para>
-       </listitem>
+            <option>&ndash;&ndash;make</option> to avoid the automatic linking
+            that takes place if the program contains a <literal>Main</literal>
+            module.</para>
+        </listitem>
       </varlistentry>
 
       <varlistentry>
@@ -824,9 +779,9 @@ $ cat foo.hspp</screen>
         </term>
         <listitem>
           <para>This flag tells GHC to link against shared Haskell libraries.
-         This flag only affects the selection of dependent libraries, not
-         the form of the current target (see -shared).
-         See <xref linkend="using-shared-libs" /> on how to
+          This flag only affects the selection of dependent libraries, not
+          the form of the current target (see -shared).
+          See <xref linkend="using-shared-libs" /> on how to
           create them.</para>
 
           <para>Note that this option also has an effect on
@@ -846,20 +801,20 @@ $ cat foo.hspp</screen>
           DLL, or a Mac OS dylib. GHC hides the operating system
           details beneath this uniform flag.</para>
 
-         <para>The flags <option>-dynamic</option>/<option>-static</option> control whether the
-         resulting shared object links statically or dynamically to
-         Haskell package libraries given as <option>-package</option> option. Non-Haskell
-         libraries are linked as gcc would regularly link it on your
-         system, e.g. on most ELF system the linker uses the dynamic
-         libraries when found.</para>
+          <para>The flags <option>-dynamic</option>/<option>-static</option> control whether the
+          resulting shared object links statically or dynamically to
+          Haskell package libraries given as <option>-package</option> option. Non-Haskell
+          libraries are linked as gcc would regularly link it on your
+          system, e.g. on most ELF system the linker uses the dynamic
+          libraries when found.</para>
 
-         <para>Object files linked into shared objects must be
-         compiled with <option>-fPIC</option>, see <xref linkend="options-codegen" /></para>
+          <para>Object files linked into shared objects must be
+          compiled with <option>-fPIC</option>, see <xref linkend="options-codegen" /></para>
 
-         <para>When creating shared objects for Haskell packages, the
-         shared object must be named properly, so that GHC recognizes
-         the shared object when linked against this package. See
-         shared object name mangling.</para>
+          <para>When creating shared objects for Haskell packages, the
+          shared object must be named properly, so that GHC recognizes
+          the shared object when linked against this package. See
+          shared object name mangling.</para>
         </listitem>
       </varlistentry>
 
@@ -870,9 +825,9 @@ $ cat foo.hspp</screen>
         </term>
         <listitem>
           <para>
-           This flag selects one of a number of modes for finding shared
-           libraries at runtime. See <xref linkend="finding-shared-libs"/> for
-           a description of each mode.
+            This flag selects one of a number of modes for finding shared
+            libraries at runtime. See <xref linkend="finding-shared-libs"/> for
+            a description of each mode.
           </para>
         </listitem>
       </varlistentry>
@@ -889,21 +844,21 @@ $ cat foo.hspp</screen>
             to change which function is the "main" one, and the <option>-main-is</option> flag
             allows you to do so.  The  <replaceable>thing</replaceable> can be one of:
             <itemizedlist>
-       <listitem><para>A lower-case identifier <literal>foo</literal>.  GHC assumes that the main function is <literal>Main.foo</literal>.</para></listitem>
-       <listitem><para>An module name <literal>A</literal>.  GHC assumes that the main function is <literal>A.main</literal>.</para></listitem>
-       <listitem><para>An qualified name <literal>A.foo</literal>.  GHC assumes that the main function is <literal>A.foo</literal>.</para></listitem>
-       </itemizedlist>
+        <listitem><para>A lower-case identifier <literal>foo</literal>.  GHC assumes that the main function is <literal>Main.foo</literal>.</para></listitem>
+        <listitem><para>An module name <literal>A</literal>.  GHC assumes that the main function is <literal>A.main</literal>.</para></listitem>
+        <listitem><para>An qualified name <literal>A.foo</literal>.  GHC assumes that the main function is <literal>A.foo</literal>.</para></listitem>
+        </itemizedlist>
             Strictly speaking, <option>-main-is</option> is not a link-phase flag at all; it has no effect on the link step.
             The flag must be specified when compiling the module containing the specified main function (e.g. module <literal>A</literal>
             in the latter two items above).  It has no effect for other modules,
             and hence can safely be given to <literal>ghc --make</literal>.
-           However, if all the modules are otherwise up to date, you may need to force
-           recompilation both of the module where the new "main" is, and of the
-           module where the "main" function used to be;
-           <literal>ghc</literal> is not clever 
-           enough to figure out that they both need recompiling.  You can
-           force recompilation by removing the object file, or by using the
-           <option>-fforce-recomp</option> flag.
+            However, if all the modules are otherwise up to date, you may need to force
+            recompilation both of the module where the new "main" is, and of the
+            module where the "main" function used to be;
+            <literal>ghc</literal> is not clever 
+            enough to figure out that they both need recompiling.  You can
+            force recompilation by removing the object file, or by using the
+            <option>-fforce-recomp</option> flag.
             </para> 
         </listitem>
       </varlistentry>
@@ -989,6 +944,109 @@ $ cat foo.hspp</screen>
 
       <varlistentry>
         <term>
+          <option>-eventlog</option>
+          <indexterm><primary><option>-eventlog</option></primary></indexterm>
+        </term>
+        <listitem>
+          <para>
+            Link the program with the "eventlog" version of the
+            runtime system.  A program linked in this way can generate
+            a runtime trace of events (such as thread start/stop) to a
+            binary file
+            <literal><replaceable>program</replaceable>.eventlog</literal>,
+            which can then be interpreted later by various tools.  See
+            <xref linkend="rts-eventlog" /> for more information.
+          </para>
+          <para>
+            <option>-eventlog</option> can be used
+            with <option>-threaded</option>.  It is implied
+            by <option>-debug</option>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
+          <option>-rtsopts</option>
+          <indexterm><primary><option>-rtsopts</option></primary></indexterm>
+        </term>
+        <listitem>
+          <para>
+            This option affects the processing of RTS control options given either
+            on the command line or via the <envar>GHCRTS</envar> environment variable.
+            There are three possibilities:
+          </para>
+          <variablelist>
+            <varlistentry>
+              <term><option>-rtsopts=none</option></term>
+              <listitem>
+                <para>
+                  Disable all processing of RTS options.
+                  If <option>+RTS</option> appears anywhere on the command
+                  line, then the program will abort with an error message.
+                  If the <envar>GHCRTS</envar> environment variable is
+                  set, then the program will emit a warning message,
+                  <envar>GHCRTS</envar> will be ignored, and the program
+                  will run as normal.
+                </para>
+              </listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>-rtsopts=some</option></term>
+              <listitem>
+                <para>&lsqb;this is the default setting&rsqb; Enable
+                  only the "safe" RTS options: (Currently
+                  only <option>-?</option>
+                  and <option>--info</option>.)  Any other RTS options
+                  on the command line or in the <envar>GHCRTS</envar>
+                  environment variable causes the program with to abort
+                  with an error message.
+                </para>
+              </listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><option>-rtsopts=all</option>, or
+ just <option>-rtsopts</option></term>
+              <listitem>
+                <para>
+                  Enable <emphasis>all</emphasis> RTS option
+                  processing, both on the command line and through
+                  the <envar>GHCRTS</envar> environment variable.
+                </para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+          <para>
+            In GHC 6.12.3 and earlier, the default was to process all
+            RTS options. However, since RTS options can be used to
+            write logging data to arbitrary files under the security
+            context of the running program, there is a potential
+            security problem.  For this reason, GHC 7.0.1 and later
+            default to <option>-rtsops=some</option>.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
+          <option>-with-rtsopts</option>
+          <indexterm><primary><option>-with-rtsopts</option></primary></indexterm>
+        </term>
+        <listitem>
+          <para>
+            This option allows you to set the default RTS options at link-time. For example,
+            <option>-with-rtsopts="-H128m"</option> sets the default heap size to 128MB.
+            This will always be the default heap size for this program, unless the user overrides it.
+            (Depending on the setting of the <option>-rtsopts</option> option, the user might
+            not have the ability to change RTS options at run-time, in which case 
+            <option>-with-rtsopts</option> would be the <emphasis>only</emphasis> way to set
+            them.)
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
           <option>-fno-gen-manifest</option>
           <indexterm><primary><option>-fno-gen-manifest</option></primary>
           </indexterm>
@@ -1052,6 +1110,46 @@ $ cat foo.hspp</screen>
               />).</para>
         </listitem>
       </varlistentry>
+          
+      <varlistentry>
+        <term>
+          <option>-fno-shared-implib</option>
+          <indexterm><primary><option>-fno-shared-implib</option></primary>
+          </indexterm>
+        </term>
+        <listitem>
+          <para>DLLs on Windows are typically linked to by linking to a corresponding
+            <literal>.lib</literal> or <literal>.dll.a</literal> - the so-called import library.
+            GHC will typically generate such a file for every DLL you create by compiling in
+            <literal>-shared</literal> mode. However, sometimes you don't want to pay the
+            disk-space cost of creating this import library, which can be substantial - it
+            might require as much space as the code itself, as Haskell DLLs tend to export
+            lots of symbols.</para>
+            
+          <para>As long as you are happy to only be able to link to the DLL using
+            <literal>GetProcAddress</literal> and friends, you can supply the
+            <option>-fno-shared-implib</option> flag to disable the creation of the import
+            library entirely.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term>
+          <option>-dylib-install-name <replaceable>path</replaceable></option>
+          <indexterm><primary><option>-dylib-install-name</option></primary>
+          </indexterm>
+        </term>
+        <listitem>
+          <para>On Darwin/MacOS X, dynamic libraries are stamped at build time with an
+              "install name", which is the ultimate install path of the library file.
+              Any libraries or executables that subsequently link against it will pick
+              up that path as their runtime search location for it. By default, ghc sets
+              the install name to the location where the library is built. This option
+              allows you to override it with the specified file path. (It passes
+              <literal>-install_name</literal> to Apple's linker.) Ignored on other
+              platforms.</para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </sect2>
 
@@ -1059,7 +1157,6 @@ $ cat foo.hspp</screen>
 
 <!-- Emacs stuff:
      ;;; Local Variables: ***
-     ;;; mode: xml ***
      ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter" "sect1") ***
      ;;; End: ***
  -->