<varlistentry>
<term>
- <constant><replaceable>os</replaceable>_OS=1</constant>
+ <constant><replaceable>os</replaceable>_HOST_OS=1</constant>
</term>
<listitem>
<para>This define allows conditional compilation based on
<varlistentry>
<term>
- <constant><replaceable>arch</replaceable>_ARCH=1</constant>
+ <constant><replaceable>arch</replaceable>_HOST_ARCH=1</constant>
</term>
<listitem>
<para>This define allows conditional compilation based on
dumps of the intermediate compilation phases.</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>-fPIC</option>
+ <indexterm><primary><option>-fPIC</option></primary></indexterm>
+ </term>
+ <listitem>
+ <para>Generate position-independent code (code that can be put into
+ shared libraries). This currently works on Mac OS X; it works on
+ PowerPC Linux when using the native code generator (-fasm).
+ It is not quite ready to be used yet for x86 Linux.
+ On Windows, position-independent code is never used,
+ and on PowerPC64 Linux, position-independent code is always used,
+ so the flag is a no-op on those platforms.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <option>-dynamic</option>
+ </term>
+ <listitem>
+ <para>When generating code, assume that entities imported from a
+ different package will reside in a different shared library or
+ binary. This currently works on Mac OS X; it works on PowerPC Linux when
+ using the native code generator. As with <option>-fPIC</option>,
+ x86 Linux support is not quite ready yet. Windows is not supported,
+ and it is a no-op on PowerPC64 Linux.</para>
+ <para>Note that this option also causes GHC to use shared libraries
+ when linking.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</sect2>
<varlistentry>
<term>
- <option>-no-link</option>
- <indexterm><primary><option>-no-link</option></primary></indexterm>
+ <option>-c</option>
+ <indexterm><primary><option>-c</option></primary></indexterm>
</term>
<listitem>
- <para>Omit the link step. This flag can be useful if you
- want to avoid linking in <option>--make</option> mode,
- where linking is normally done automatically if the program
- contains a <literal>Main</literal> module.</para>
- </listitem>
+ <para>Omits the link step. This option can be used with
+ <option>––make</option> to avoid the automatic linking
+ that takes place if the program contains a <literal>Main</literal>
+ module.</para>
+ </listitem>
</varlistentry>
<varlistentry>
</term>
<listitem>
<para>Tell the linker to use shared Haskell libraries, if
- available (this option is only supported on Windows at the
+ available (this option is only supported on Mac OS X at the
moment, and also note that your distribution of GHC may
not have been supplied with shared libraries).</para>
+ <para>Note that this option also has an effect on
+ code generation (see above).</para>
</listitem>
</varlistentry>
</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>).
+ 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>-no-recomp</option> flag.
</para>
</listitem>
</varlistentry>