[project @ 2001-08-23 14:38:23 by simonmar]
[ghc-hetmet.git] / ghc / docs / users_guide / phases.sgml
1   <sect1 id="options-phases">
2     <title>Options related to a particular phase</title>
3
4     <sect2 id="replacing-phases">
5       <title>Replacing the program for one or more phases.</title>
6       <indexterm><primary>phases, changing</primary></indexterm>
7
8       <para>You may specify that a different program be used for one
9       of the phases of the compilation system, in place of whatever
10       the <Command>ghc</Command> has wired into it.  For example, you
11       might want to try a different assembler.  The following options
12       allow you to change the external program used for a given
13       compilation phases:</para>
14
15     </sect2>
16
17     <sect2 id="forcing-options-through">
18       <title>Forcing options to a particular phase.</title>
19       <indexterm><primary>forcing GHC-phase options</primary></indexterm>
20
21       <para>Options can be forced through to a particlar compilation
22       phase, using the following flags:</para>
23
24
25       <para>So, for example, to force an <option>-Ewurble</option>
26       option to the assembler, you would tell the driver
27       <option>-opta-Ewurble</option> (the dash before the E is
28       required).</para>
29
30       <para>GHC is itself a Haskell program, so if you need to pass
31       options directly to GHC's runtime system you can enclose them in
32       <literal>+RTS ... -RTS</literal> (see <xref
33       linkend="runtime-control">).</para>
34
35     </sect2>
36
37     <sect2 id="c-pre-processor">
38       <title>Options affecting the C pre-processor</title>
39
40       <indexterm><primary>pre-processing: cpp</primary></indexterm>
41       <indexterm><primary>C pre-processor options</primary></indexterm>
42       <indexterm><primary>cpp, pre-processing with</primary></indexterm>
43
44       <variablelist>
45
46         <varlistentry>
47           <term><option>-cpp</option></term>
48           <indexterm><primary><option>-cpp</option></primary></indexterm>
49           <listitem>
50             <para>The C pre-processor <command>cpp</command> is run
51             over your Haskell code only if the <option>-cpp</option>
52             option <indexterm><primary>-cpp
53             option</primary></indexterm> is given.  Unless you are
54             building a large system with significant doses of
55             conditional compilation, you really shouldn't need
56             it.</para>
57           </listitem>
58         </varlistentry>
59
60         <varlistentry>
61           <term><option>-D</option><replaceable>symbol</replaceable><optional>=<replaceable>value</replaceable></optional></term>
62           <indexterm><primary><option>-D</option></primary></indexterm>
63           <listitem>
64             <para>Define macro <replaceable>symbol</replaceable> in the
65             usual way.  NB: does <emphasis>not</emphasis> affect
66             <option>-D</option> macros passed to the C&nbsp;compiler
67             when compiling via C!  For those, use the
68             <option>-optc-Dfoo</option> hack&hellip; (see <xref
69             linkend="forcing-options-through">).</para>
70           </listitem>
71         </varlistentry>
72
73         <varlistentry>
74           <term><option>-U</option><replaceable>symbol</replaceable></term>
75           <indexterm><primary><option>-U</option></primary></indexterm>
76           <listitem>
77             <para> Undefine macro <replaceable>symbol</replaceable> in the
78             usual way.</para>
79           </listitem>
80         </varlistentry>
81
82         <varlistentry>
83           <term><option>-I</option><replaceable>dir</replaceable></term>
84           <indexterm><primary><option>-I</option></primary></indexterm>
85           <listitem>
86             <para> Specify a directory in which to look for
87             <literal>&num;include</literal> files, in the usual C
88             way.</para>
89           </listitem>
90         </varlistentry>
91       </variablelist>
92
93       <para>The GHC driver pre-defines several macros when processing
94       Haskell source code (<filename>.hs</filename> or
95       <filename>.lhs</filename> files):</para>
96
97       <variablelist>
98
99         <varlistentry>
100           <term><constant>&lowbar;&lowbar;HASKELL98&lowbar;&lowbar;</constant></term>
101           <indexterm><primary><literal>&lowbar;&lowbar;HASKELL98&lowbar;&lowbar;</literal></primary></indexterm>
102           <listitem>
103             <para>If defined, this means that GHC supports the
104             language defined by the Haskell 98 report.</para>
105           </listitem>
106         </varlistentry>
107
108         <varlistentry>
109           <term><constant>&lowbar;&lowbar;HASKELL&lowbar;&lowbar;=98</constant></term>
110           <indexterm><primary><constant>&lowbar;&lowbar;HASKELL&lowbar;&lowbar;=98</constant></primary></indexterm>
111           <listitem>
112             <para>In GHC 4.04 and later, the
113             <constant>&lowbar;&lowbar;HASKELL&lowbar;&lowbar;</constant>
114             macro is defined as having the value
115             <constant>98</constant>.</para>
116           </listitem>
117         </varlistentry>
118
119         <varlistentry>
120           <term><constant>&lowbar;&lowbar;HASKELL1&lowbar;&lowbar;</constant></term>
121           <indexterm><primary><constant>&lowbar;&lowbar;HASKELL1&lowbar;&lowbar;
122           </constant></primary></indexterm>
123           <listitem>
124             <para>If defined to <replaceable>n</replaceable>, that
125             means GHC supports the Haskell language defined in the
126             Haskell report version <emphasis>1.n</emphasis>.
127             Currently 5.  This macro is deprecated, and will probably
128             disappear in future versions.</para>
129           </listitem>
130         </varlistentry>
131
132         <varlistentry>
133           <term><constant>&lowbar;&lowbar;GLASGOW&lowbar;HASKELL&lowbar;&lowbar;</constant></term>
134           <indexterm><primary><constant>&lowbar;&lowbar;GLASGOW&lowbar;HASKELL&lowbar;&lowbar;</constant></primary></indexterm>
135           <listitem>
136             <para>For version <replaceable>n</replaceable> of the GHC
137             system, this will be <literal>&num;define</literal>d to
138             <replaceable>100n</replaceable>.  For example, for version
139             5.00, it is 500.</para>
140
141             <para>With any luck,
142             <constant>&lowbar;&lowbar;GLASGOW&lowbar;HASKELL&lowbar;&lowbar;</constant>
143             will be undefined in all other implementations that
144             support C-style pre-processing.</para>
145
146             <para>(For reference: the comparable symbols for other
147             systems are:
148             <constant>&lowbar;&lowbar;HUGS&lowbar;&lowbar;</constant>
149             for Hugs,
150             <constant>&lowbar;&lowbar;NHC&lowbar;&lowbar;</constant>
151             for nhc98, and
152             <constant>&lowbar;&lowbar;HBC&lowbar;&lowbar;</constant>
153             for Chalmers.)</para>
154
155             <para>NB. This macro is set when pre-processing both
156             Haskell source and C source, including the C source
157             generated from a Haskell module
158             (i.e. <filename>.hs</filename>, <filename>.lhs</filename>,
159             <filename>.c</filename> and <filename>.hc</filename>
160             files).</para>
161           </listitem>
162         </varlistentry>
163
164         <varlistentry>
165           <term><constant>&lowbar;&lowbar;CONCURRENT&lowbar;HASKELL&lowbar;&lowbar;</constant></term>
166           <indexterm><primary><constant>&lowbar;&lowbar;CONCURRENT&lowbar;HASKELL&lowbar;&lowbar;</constant></primary></indexterm>
167           <listitem>
168             <para>This symbol is defined when pre-processing Haskell
169             (input) and pre-processing C (GHC output).  Since GHC from
170             verion 4.00 now supports concurrent haskell by default,
171             this symbol is always defined.</para>
172           </listitem>
173         </varlistentry>
174
175         <varlistentry>
176           <term><constant>&lowbar;&lowbar;PARALLEL&lowbar;HASKELL&lowbar;&lowbar;</constant></term>
177           <indexterm><primary><constant>&lowbar;&lowbar;PARALLEL&lowbar;HASKELL&lowbar;&lowbar;</constant></primary></indexterm>
178           <listitem>
179             <para>Only defined when <option>-parallel</option> is in
180             use!  This symbol is defined when pre-processing Haskell
181             (input) and pre-processing C (GHC output).</para>
182           </listitem>
183         </varlistentry>
184       </variablelist>
185
186       <para>A small word of warning: <option>-cpp</option> is not
187       friendly to &ldquo;string gaps&rdquo;.<indexterm><primary>-cpp
188       vs string gaps</primary></indexterm><indexterm><primary>string
189       gaps vs -cpp</primary></indexterm>.  In other words, strings
190       such as the following:</para>
191
192 <ProgramListing>
193 strmod = "\
194 \ p \
195 \ "
196 </ProgramListing>
197
198       <para>don't work with <option>-cpp</option>;
199       <filename>/usr/bin/cpp</filename> elides the backslash-newline
200       pairs.</para>
201
202       <para>However, it appears that if you add a space at the end of
203       the line, then <command>cpp</command> (at least GNU
204       <command>cpp</command> and possibly other
205       <command>cpp</command>s) leaves the backslash-space pairs alone
206       and the string gap works as expected.</para>
207     </sect2>
208
209     <sect2 id="options-C-compiler">
210       <title>Options affecting the C compiler (if applicable)</title>
211
212       <indexterm><primary>include-file options</primary></indexterm>
213       <indexterm><primary>C compiler options</primary></indexterm>
214       <indexterm><primary>GCC options</primary></indexterm>
215
216       <para>If you are compiling with lots of foreign calls, you may
217       need to tell the C&nbsp;compiler about some
218       <literal>&num;include</literal> files.  There is no real pretty
219       way to do this, but you can use this hack from the
220       command-line:</para>
221
222 <Screen>
223 % ghc -c '-#include &lt;X/Xlib.h&gt;' Xstuff.lhs
224 </Screen>
225
226     </sect2>
227
228     <sect2 id="options-codegen">
229       <title>Options affecting code generation</title>
230
231       <variablelist>
232         <varlistentry>
233           <term><option>-fasm</option></term>
234           <indexterm><primary><option>-fasm</option></primary></indexterm>
235           <listitem>
236             <para>Use GHC's native code generator rather than
237             compiling via C.  This will compile faster (up to twice as
238             fast), but may produce code that is slightly slower than
239             compiling via C.  <option>-fasm</option> is the default
240             when optimisation is off (see <xref
241             linkend="options-optimise">).</para>
242           </listitem>
243         </varlistentry>
244
245         <varlistentry>
246           <term><option>-fvia-C</option></term>
247           <indexterm><primary><option>-fvia-C</option></primary>
248           </indexterm>
249           <listitem>
250             <para>Compile via C instead of using the native code
251             generator.  This is default for optimised compilations,
252             and on architectures for which GHC doesn't have a native
253             code generator.</para>
254           </listitem>
255         </varlistentry>
256
257         <varlistentry>
258           <term><option>-fno-code</option></term>
259           <indexterm><primary><option>-fno-code</option></primary>
260           </indexterm>
261           <listitem>
262             <para>Omit code generation (and all later phases)
263             altogether.  Might be of some use if you just want to see
264             dumps of the intermediate compilation phases.</para>
265           </listitem>
266         </varlistentry>
267       </variablelist>
268     </sect2>
269
270     <sect2 id="options-linker">
271       <title>Options affecting linking</title>
272
273       <indexterm><primary>linker options</primary></indexterm>
274       <indexterm><primary>ld options</primary></indexterm>
275
276
277       <para>GHC has to link your code with various libraries, possibly
278       including: user-supplied, GHC-supplied, and system-supplied
279       (<option>-lm</option> math library, for example).</para>
280
281       <variablelist>
282
283         <varlistentry>
284           <term><option>-l</option><replaceable>lib</replaceable></term>
285           <indexterm><primary><option>-l</option></primary></indexterm>
286           <listitem>
287             <para>Link in the <replaceable>lib</replaceable> library.
288             On Unix systems, this will be in a file called
289             <filename>lib<replaceable>lib</replaceable>.a</filename>
290             or
291             <filename>lib<replaceable>lib</replaceable>.so</filename>
292             which resides somewhere on the library directories path.</para>
293
294             <para>Because of the sad state of most UNIX linkers, the
295             order of such options does matter.  If library
296             <replaceable>foo</replaceable> requires library
297             <replaceable>bar</replaceable>, then in general
298             <option>-l</option><replaceable>foo</replaceable> should
299             come <emphasis>before</emphasis>
300             <option>-l</option><replaceable>bar</replaceable> on the
301             command line.</para>
302           </listitem>
303         </varlistentry>
304
305         <varlistentry>
306           <term><option>-package</option> <replaceable>name</replaceable></term>
307           <indexterm><primary><option>-package</option></primary></indexterm>
308           <listitem>
309             <para>If you are using a Haskell &ldquo;package&rdquo;
310             (see <xref linkend="packages">), don't forget to add the
311             relevant <option>-package</option> option when linking the
312             program too: it will cause the appropriate libraries to be
313             linked in with the program.  Forgetting the
314             <option>-package</option> option will likely result in
315             several pages of link errors.</para>
316           </listitem>
317         </varlistentry>
318
319         <varlistentry>
320           <term><option>-L</option><replaceable>dir</replaceable></term>
321           <indexterm><primary><option>-L</option></primary></indexterm>
322           <listitem>
323             <para>Where to find user-supplied libraries&hellip;
324             Prepend the directory <replaceable>dir</replaceable> to
325             the library directories path.</para>
326           </listitem>
327         </varlistentry>
328
329         <varlistentry>
330           <term><option>-split-objs</option></term>
331           <indexterm><primary><option>-split-objs</option></primary></indexterm>
332           <listitem>
333             <para>Tell the linker to split the single object file that
334             would normally be generated into multiple object files,
335             one per top-level Haskell function or type in the module.
336             We use this feature for building GHC's libraries libraries
337             (warning: don't use it unless you know what you're
338             doing!).</para>
339           </listitem>
340         </varlistentry>
341
342         <varlistentry>
343           <term><option>-static</option></term>
344           <indexterm><primary><option>-static</option></primary></indexterm>
345           <listitem>
346             <para>Tell the linker to avoid shared Haskell libraries,
347             if possible.  This is the default.</para>
348           </listitem>
349         </varlistentry>
350
351         <varlistentry>
352           <term><option>-dynamic</option></term>
353           <indexterm><primary><option>-dynamic</option></primary></indexterm>
354           <listitem>
355             <para>Tell the linker to use shared Haskell libraries, if
356             available (this option is only supported on Windows at the
357             moment, and also note that your distribution of GHC may
358             not have been supplied with shared libraries).</para>
359           </listitem>
360         </varlistentry>
361
362         <varlistentry>
363           <term><option>-no-hs-main</option></term>
364           <indexterm><primary><option>-no-hs-main</option></primary></indexterm>
365           <indexterm><primary>linking Haskell libraries with foreign code</primary></indexterm>
366           <listitem>
367             <para>In the event you want to include ghc-compiled code
368             as part of another (non-Haskell) program, the RTS will not
369             be supplying its definition of <function>main()</function>
370             at link-time, you will have to. To signal that to the
371             driver script when linking, use
372             <option>-no-hs-main</option>.</para>
373
374             <para>Notice that since the command-line passed to the
375             linker is rather involved, you probably want to use
376             <command>ghc</command> to do the final link of your
377             `mixed-language' application. This is not a requirement
378             though, just try linking once with <option>-v</option> on
379             to see what options the driver passes through to the
380             linker.</para>
381           </listitem>
382         </varlistentry>
383       </variablelist>
384     </sect2>
385
386   </sect1>
387
388 <!-- Emacs stuff:
389      ;;; Local Variables: ***
390      ;;; mode: sgml ***
391      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***
392      ;;; End: ***
393  -->