1 <sect1 id="options-phases">
2 <title>Options related to a particular phase</title>
4 <sect2 id="replacing-phases">
5 <title>Replacing the program for one or more phases</title>
6 <indexterm><primary>phases, changing</primary></indexterm>
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 phase:</para>
17 <term><option>-pgmL</option> <replaceable>cmd</replaceable></term>
18 <indexterm><primary><option>-pgmL</option></primary>
21 <para>Use <replaceable>cmd</replaceable> as the literate
27 <term><option>-pgmP</option> <replaceable>cmd</replaceable></term>
28 <indexterm><primary><option>-pgmP</option></primary>
31 <para>Use <replaceable>cmd</replaceable> as the C
32 pre-processor (with <option>-cpp</option> only).</para>
37 <term><option>-pgmc</option> <replaceable>cmd</replaceable></term>
38 <indexterm><primary><option>-pgmc</option></primary>
41 <para>Use <replaceable>cmd</replaceable> as the C
47 <term><option>-pgma</option> <replaceable>cmd</replaceable></term>
48 <indexterm><primary><option>-pgma</option></primary>
51 <para>Use <replaceable>cmd</replaceable> as the
57 <term><option>-pgml</option> <replaceable>cmd</replaceable></term>
58 <indexterm><primary><option>-pgml</option></primary>
61 <para>Use <replaceable>cmd</replaceable> as the
67 <term><option>-pgmdll</option> <replaceable>cmd</replaceable></term>
68 <indexterm><primary><option>-pgmdll</option></primary>
71 <para>Use <replaceable>cmd</replaceable> as the DLL
77 <term><option>-pgmdep</option> <replaceable>cmd</replaceable></term>
78 <indexterm><primary><option>-pgmdep</option></primary>
81 <para>Use <replaceable>cmd</replaceable> as the dependency
87 <term><option>-pgmF</option> <replaceable>cmd</replaceable></term>
88 <indexterm><primary><option>-pgmF</option></primary>
91 <para>Use <replaceable>cmd</replaceable> as the
92 pre-processor (with <option>-F</option> only).</para>
99 <sect2 id="forcing-options-through">
100 <title>Forcing options to a particular phase</title>
101 <indexterm><primary>forcing GHC-phase options</primary></indexterm>
103 <para>Options can be forced through to a particlar compilation
104 phase, using the following flags:</para>
108 <term><option>-optL</option> <replaceable>option</replaceable></term>
109 <indexterm><primary><option>-optL</option></primary>
112 <para>Pass <replaceable>option</replaceable> to the
113 literate pre-processor</para>
117 <term><option>-optP</option> <replaceable>option</replaceable></term>
118 <indexterm><primary><option>-optP</option></primary>
121 <para>Pass <replaceable>option</replaceable> to CPP (makes
122 sense only if <option>-cpp</option> is also on).</para>
126 <term><option>-optc</option> <replaceable>option</replaceable></term>
127 <indexterm><primary><option>-optc</option></primary>
130 <para>Pass <replaceable>option</replaceable> to the C compiler.</para>
134 <term><option>-opta</option> <replaceable>option</replaceable></term>
135 <indexterm><primary><option>-opta</option></primary>
138 <para>Pass <replaceable>option</replaceable> to the assembler.</para>
142 <term><option>-optl</option> <replaceable>option</replaceable></term>
143 <indexterm><primary><option>-optl</option></primary>
146 <para>Pass <replaceable>option</replaceable> to the linker.</para>
150 <term><option>-optdll</option> <replaceable>option</replaceable></term>
151 <indexterm><primary><option>-optdll</option></primary>
154 <para>Pass <replaceable>option</replaceable> to the DLL generator.</para>
158 <term><option>-optdep</option> <replaceable>option</replaceable></term>
159 <indexterm><primary><option>-optdep</option></primary>
162 <para>Pass <replaceable>option</replaceable> to the
163 dependency generator.</para>
168 <para>So, for example, to force an <option>-Ewurble</option>
169 option to the assembler, you would tell the driver
170 <option>-opta-Ewurble</option> (the dash before the E is
173 <para>GHC is itself a Haskell program, so if you need to pass
174 options directly to GHC's runtime system you can enclose them in
175 <literal>+RTS ... -RTS</literal> (see <xref
176 linkend="runtime-control">).</para>
180 <sect2 id="c-pre-processor">
181 <title>Options affecting the C pre-processor</title>
183 <indexterm><primary>pre-processing: cpp</primary></indexterm>
184 <indexterm><primary>C pre-processor options</primary></indexterm>
185 <indexterm><primary>cpp, pre-processing with</primary></indexterm>
190 <term><option>-cpp</option></term>
191 <indexterm><primary><option>-cpp</option></primary></indexterm>
193 <para>The C pre-processor <command>cpp</command> is run
194 over your Haskell code only if the <option>-cpp</option>
195 option <indexterm><primary>-cpp
196 option</primary></indexterm> is given. Unless you are
197 building a large system with significant doses of
198 conditional compilation, you really shouldn't need
204 <term><option>-D</option><replaceable>symbol</replaceable><optional>=<replaceable>value</replaceable></optional></term>
205 <indexterm><primary><option>-D</option></primary></indexterm>
207 <para>Define macro <replaceable>symbol</replaceable> in the
208 usual way. NB: does <emphasis>not</emphasis> affect
209 <option>-D</option> macros passed to the C compiler
210 when compiling via C! For those, use the
211 <option>-optc-Dfoo</option> hack… (see <xref
212 linkend="forcing-options-through">).</para>
217 <term><option>-U</option><replaceable>symbol</replaceable></term>
218 <indexterm><primary><option>-U</option></primary></indexterm>
220 <para> Undefine macro <replaceable>symbol</replaceable> in the
226 <term><option>-I</option><replaceable>dir</replaceable></term>
227 <indexterm><primary><option>-I</option></primary></indexterm>
229 <para> Specify a directory in which to look for
230 <literal>#include</literal> files, in the usual C
236 <para>The GHC driver pre-defines several macros when processing
237 Haskell source code (<filename>.hs</filename> or
238 <filename>.lhs</filename> files):</para>
243 <term><constant>__HASKELL98__</constant></term>
244 <indexterm><primary><literal>__HASKELL98__</literal></primary></indexterm>
246 <para>If defined, this means that GHC supports the
247 language defined by the Haskell 98 report.</para>
252 <term><constant>__HASKELL__=98</constant></term>
253 <indexterm><primary><constant>__HASKELL__=98</constant></primary></indexterm>
255 <para>In GHC 4.04 and later, the
256 <constant>__HASKELL__</constant>
257 macro is defined as having the value
258 <constant>98</constant>.</para>
263 <term><constant>__HASKELL1__</constant></term>
264 <indexterm><primary><constant>__HASKELL1__
265 </constant></primary></indexterm>
267 <para>If defined to <replaceable>n</replaceable>, that
268 means GHC supports the Haskell language defined in the
269 Haskell report version <emphasis>1.n</emphasis>.
270 Currently 5. This macro is deprecated, and will probably
271 disappear in future versions.</para>
276 <term><constant>__GLASGOW_HASKELL__</constant></term>
277 <indexterm><primary><constant>__GLASGOW_HASKELL__</constant></primary></indexterm>
279 <para>For version <replaceable>n</replaceable> of the GHC
280 system, this will be <literal>#define</literal>d to
281 <replaceable>100n</replaceable>. For example, for version
282 5.00, it is 500.</para>
285 <constant>__GLASGOW_HASKELL__</constant>
286 will be undefined in all other implementations that
287 support C-style pre-processing.</para>
289 <para>(For reference: the comparable symbols for other
291 <constant>__HUGS__</constant>
293 <constant>__NHC__</constant>
295 <constant>__HBC__</constant>
296 for Chalmers.)</para>
298 <para>NB. This macro is set when pre-processing both
299 Haskell source and C source, including the C source
300 generated from a Haskell module
301 (i.e. <filename>.hs</filename>, <filename>.lhs</filename>,
302 <filename>.c</filename> and <filename>.hc</filename>
308 <term><constant>__CONCURRENT_HASKELL__</constant></term>
309 <indexterm><primary><constant>__CONCURRENT_HASKELL__</constant></primary></indexterm>
311 <para>This symbol is defined when pre-processing Haskell
312 (input) and pre-processing C (GHC output). Since GHC from
313 verion 4.00 now supports concurrent haskell by default,
314 this symbol is always defined.</para>
319 <term><constant>__PARALLEL_HASKELL__</constant></term>
320 <indexterm><primary><constant>__PARALLEL_HASKELL__</constant></primary></indexterm>
322 <para>Only defined when <option>-parallel</option> is in
323 use! This symbol is defined when pre-processing Haskell
324 (input) and pre-processing C (GHC output).</para>
329 <sect3 id="cpp-string-gaps">
330 <title>CPP and string gaps</title>
332 <para>A small word of warning: <option>-cpp</option> is not
333 friendly to “string gaps”.<indexterm><primary>-cpp
334 vs string gaps</primary></indexterm><indexterm><primary>string
335 gaps vs -cpp</primary></indexterm>. In other words, strings
336 such as the following:</para>
344 <para>don't work with <option>-cpp</option>;
345 <filename>/usr/bin/cpp</filename> elides the backslash-newline
348 <para>However, it appears that if you add a space at the end
349 of the line, then <command>cpp</command> (at least GNU
350 <command>cpp</command> and possibly other
351 <command>cpp</command>s) leaves the backslash-space pairs
352 alone and the string gap works as expected.</para>
356 <sect2 id="pre-processor">
357 <title>Options affecting a Haskell pre-processor</title>
359 <indexterm><primary>pre-processing: custom</primary></indexterm>
360 <indexterm><primary>Pre-processor options</primary></indexterm>
364 <term><option>-F</option></term>
365 <indexterm><primary><option>-F</option></primary></indexterm>
367 <para>A custom pre-processor is run over your Haskell
368 source file only if the <option>-F</option> option
369 <indexterm><primary>-F</primary></indexterm> is given.
372 Running a custom pre-processor at compile-time is in some
373 settings appropriate and useful. The <option>-F</option>
374 option lets you run a pre-processor as part of the overall
375 GHC compilation pipeline, which has the advantage over
376 running a Haskell pre-processor separately in that it
377 works in interpreted mode and you can continue to take
378 reap the benefits of GHC's recompilation checker.
381 The pre-processor is run just before the Haskell
382 compiler proper processes the Haskell input, but after
383 the literate markup has been stripped away and (possibly)
384 the C pre-processor has washed the Haskell input.
389 <term><option>-pgmF</option> <replaceable>cmd</replaceable></term>
390 <indexterm><primary><option>-pgmF</option> <replaceable>cmd</replaceable></primary></indexterm>
392 <para>Use <replaceable>cmd</replaceable> as the Haskell
393 pre-processor. When invoked, the
394 <replaceable>cmd</replaceable> pre-processor is given at
395 least three arguments on its command-line: the first
396 argument is the name of the original source file, the second
397 is the name of the file holding the input, and the third is
398 the name of the file where
399 <replaceable>cmd</replaceable> should write its output to.
401 <para>Additional arguments to the
402 <replaceable>cmd</replaceable> pre-processor can be passed
403 in using the <option>-optF</option> option. These are fed to
404 <replaceable>cmd</replaceable> on the command line after the
405 three standard input and output arguments.
412 <sect2 id="options-C-compiler">
413 <title>Options affecting the C compiler (if applicable)</title>
415 <indexterm><primary>include-file options</primary></indexterm>
416 <indexterm><primary>C compiler options</primary></indexterm>
417 <indexterm><primary>GCC options</primary></indexterm>
419 <para>If you are compiling with lots of foreign calls, you may
420 need to tell the C compiler about some
421 <literal>#include</literal> files. There is no real pretty
422 way to do this, but you can use this hack from the
426 % ghc -c '-#include <X/Xlib.h>' Xstuff.lhs
431 <sect2 id="options-codegen">
432 <title>Options affecting code generation</title>
436 <term><option>-fasm</option></term>
437 <indexterm><primary><option>-fasm</option></primary></indexterm>
439 <para>Use GHC's native code generator rather than
440 compiling via C. This will compile faster (up to twice as
441 fast), but may produce code that is slightly slower than
442 compiling via C. <option>-fasm</option> is the default
443 when optimisation is off (see <xref
444 linkend="options-optimise">).</para>
449 <term><option>-fvia-C</option></term>
450 <indexterm><primary><option>-fvia-C</option></primary>
453 <para>Compile via C instead of using the native code
454 generator. This is default for optimised compilations,
455 and on architectures for which GHC doesn't have a native
456 code generator.</para>
461 <term><option>-fno-code</option></term>
462 <indexterm><primary><option>-fno-code</option></primary>
465 <para>Omit code generation (and all later phases)
466 altogether. Might be of some use if you just want to see
467 dumps of the intermediate compilation phases.</para>
473 <sect2 id="options-linker">
474 <title>Options affecting linking</title>
476 <indexterm><primary>linker options</primary></indexterm>
477 <indexterm><primary>ld options</primary></indexterm>
480 <para>GHC has to link your code with various libraries, possibly
481 including: user-supplied, GHC-supplied, and system-supplied
482 (<option>-lm</option> math library, for example).</para>
487 <term><option>-l</option><replaceable>lib</replaceable></term>
488 <indexterm><primary><option>-l</option></primary></indexterm>
490 <para>Link in the <replaceable>lib</replaceable> library.
491 On Unix systems, this will be in a file called
492 <filename>lib<replaceable>lib</replaceable>.a</filename>
494 <filename>lib<replaceable>lib</replaceable>.so</filename>
495 which resides somewhere on the library directories path.</para>
497 <para>Because of the sad state of most UNIX linkers, the
498 order of such options does matter. If library
499 <replaceable>foo</replaceable> requires library
500 <replaceable>bar</replaceable>, then in general
501 <option>-l</option><replaceable>foo</replaceable> should
502 come <emphasis>before</emphasis>
503 <option>-l</option><replaceable>bar</replaceable> on the
506 <para>There's one other gotcha to bear in mind when using
507 external libraries: if the library contains a
508 <literal>main()</literal> function, then this will be
509 linked in preference to GHC's own
510 <literal>main()</literal> function
511 (eg. <literal>libf2c</literal> and <literal>libl</literal>
512 have their own <literal>main()</literal>s). This is
513 because GHC's <literal>main()</literal> comes from the
514 <literal>HSrts</literal> library, which is normally
515 included <emphasis>after</emphasis> all the other
516 libraries on the linker's command line. To force GHC's
517 <literal>main()</literal> to be used in preference to any
518 other <literal>main()</literal>s from external libraries,
519 just add the option <option>-lHSrts</option> before any
520 other libraries on the command line.</para>
525 <term><option>-no-link</option></term>
527 <primary><option>-no-link</option></primary>
530 <para>Omit the link step. This flag can be useful if you
531 want to avoid linking in <option>--make</option> mode,
532 where linking is normally done automatically if the program
533 contains a <literal>Main</literal> module.</para>
538 <term><option>-package</option> <replaceable>name</replaceable></term>
539 <indexterm><primary><option>-package</option></primary></indexterm>
541 <para>If you are using a Haskell “package”
542 (see <xref linkend="packages">), don't forget to add the
543 relevant <option>-package</option> option when linking the
544 program too: it will cause the appropriate libraries to be
545 linked in with the program. Forgetting the
546 <option>-package</option> option will likely result in
547 several pages of link errors.</para>
552 <term><option>-framework</option> <replaceable>name</replaceable></term>
553 <indexterm><primary><option>-framework</option></primary></indexterm>
555 <para>On Darwin/MacOS X only, link in the framework <replaceable>name</replaceable>.
556 This option corresponds to the <option>-framework</option> option for Apple's Linker.
557 Please note that frameworks and packages are two different things - frameworks don't
558 contain any haskell code. Rather, they are Apple's way of packaging shared libraries.
559 To link to Apple's “Carbon” API, for example, you'd use
560 <option>-framework Carbon</option>.
566 <term><option>-L</option><replaceable>dir</replaceable></term>
567 <indexterm><primary><option>-L</option></primary></indexterm>
569 <para>Where to find user-supplied libraries…
570 Prepend the directory <replaceable>dir</replaceable> to
571 the library directories path.</para>
576 <term><option>-framework-path</option><replaceable>dir</replaceable></term>
577 <indexterm><primary><option>-framework-path</option></primary></indexterm>
579 <para>On Darwin/MacOS X only, prepend the directory <replaceable>dir</replaceable> to
580 the framework directories path. This option corresponds to the <option>-F</option>
581 option for Apple's Linker (<option>-F</option> already means something else for GHC).</para>
586 <term><option>-split-objs</option></term>
587 <indexterm><primary><option>-split-objs</option></primary></indexterm>
589 <para>Tell the linker to split the single object file that
590 would normally be generated into multiple object files,
591 one per top-level Haskell function or type in the module.
592 We use this feature for building GHC's libraries libraries
593 (warning: don't use it unless you know what you're
599 <term><option>-static</option></term>
600 <indexterm><primary><option>-static</option></primary></indexterm>
602 <para>Tell the linker to avoid shared Haskell libraries,
603 if possible. This is the default.</para>
608 <term><option>-dynamic</option></term>
609 <indexterm><primary><option>-dynamic</option></primary></indexterm>
611 <para>Tell the linker to use shared Haskell libraries, if
612 available (this option is only supported on Windows at the
613 moment, and also note that your distribution of GHC may
614 not have been supplied with shared libraries).</para>
619 <term><option>-main-is <replaceable>thing</replaceable></option></term>
620 <indexterm><primary><option>-main-is</option></primary></indexterm>
621 <indexterm><primary>specifying your own main function</primary></indexterm>
623 <para> The normal rule in Haskell is that your program must supply a <literal>main</literal>
624 function in module <literal>Main</literal>. When testing, it is often convenient
625 to change which function is the "main" one, and the <option>-main-is</option> flag
626 allows you to do so. The <replaceable>thing</replaceable> can be one of:
628 <listitem><para>A lower-case identifier <literal>foo</literal>. GHC assumes that the main function is <literal>Main.foo</literal>.</para></listitem>
629 <listitem><para>An module name <literal>A</literal>. GHC assumes that the main function is <literal>A.main</literal>.</para></listitem>
630 <listitem><para>An qualified name <literal>A.foo</literal>. GHC assumes that the main function is <literal>A.foo</literal>.</para></listitem>
632 Strictly speaking, <option>-main-is</option> is not a link-phase flag at all; it has no effect on the link step.
633 The flag must be specified when compiling the module containing the specified main function (e.g. module <literal>A</literal>
634 in the latter two items above. It has no effect for other modules (and hence can safely be given to <literal>ghc --make</literal>).
640 <term><option>-no-hs-main</option></term>
641 <indexterm><primary><option>-no-hs-main</option></primary></indexterm>
642 <indexterm><primary>linking Haskell libraries with foreign code</primary></indexterm>
644 <para>In the event you want to include ghc-compiled code
645 as part of another (non-Haskell) program, the RTS will not
646 be supplying its definition of <function>main()</function>
647 at link-time, you will have to. To signal that to the
648 compiler when linking, use
649 <option>-no-hs-main</option>. See also <xref linkend="using-own-main">.</para>
651 <para>Notice that since the command-line passed to the
652 linker is rather involved, you probably want to use
653 <command>ghc</command> to do the final link of your
654 `mixed-language' application. This is not a requirement
655 though, just try linking once with <option>-v</option> on
656 to see what options the driver passes through to the
659 <para>The <option>-no-hs-main</option> flag can also be
660 used to persuade the compiler to do the link step in
661 <option>--make</option> mode when there is no Haskell
662 <literal>Main</literal> module present (normally the
663 compiler will not attempt linking when there is no
664 <literal>Main</literal>).</para>
673 ;;; Local Variables: ***
675 ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***