summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2011-03-23 21:16:51 +0000
committerIan Lynagh <igloo@earth.li>2011-03-23 21:16:51 +0000
commit4a2a508bb6adf33f9f3e99baa85f73f0fc18c832 (patch)
tree6be59cf25fc00f2303c26cb075b0a726e0c006b8
parent90d7a88f304ddff15f31f9b1edb86b452679583b (diff)
downloadhaskell-4a2a508bb6adf33f9f3e99baa85f73f0fc18c832.tar.gz
Document new hsc2hs flags, and use the --cross-safe flag when we're compiling
Patch from Brian Bloniarz
-rw-r--r--docs/users_guide/utils.xml51
-rw-r--r--mk/config.mk.in1
2 files changed, 52 insertions, 0 deletions
diff --git a/docs/users_guide/utils.xml b/docs/users_guide/utils.xml
index 0c7f0f6131..109cc01752 100644
--- a/docs/users_guide/utils.xml
+++ b/docs/users_guide/utils.xml
@@ -270,6 +270,34 @@ tags:
</varlistentry>
<varlistentry>
+ <term><literal>-k</literal> or
+ <literal>&ndash;&ndash;keep-files</literal></term>
+ <listitem>
+ <para>Proceed as normal, but do not delete any intermediate files.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>-x</literal> or
+ <literal>&ndash;&ndash;cross-compile</literal></term>
+ <listitem>
+ <para>Activate cross-compilation mode (see <xref linkend="hsc2hs_cross"/>).</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>&ndash;&ndash;cross-safe</literal></term>
+ <listitem>
+ <para>Restrict the .hsc directives to those supported by the
+ <literal>--cross-compile</literal> mode (see <xref linkend="hsc2hs_cross"/>).
+ This should be useful if your <literal>.hsc</literal> files
+ must be safely cross-compiled and you wish to keep
+ non-cross-compilable constructs from creeping into them.</para>
+ </listitem>
+ </varlistentry>
+
+
+ <varlistentry>
<term><literal>-?</literal> or <literal>&ndash;&ndash;help</literal></term>
<listitem>
<para>Display a summary of the available flags and exit successfully.</para>
@@ -544,6 +572,29 @@ tags:
</sect2>
+ <sect2 id="hsc2hs_cross">
+ <title>Cross-compilation</title>
+
+ <para><command>hsc2hs</command> normally operates by creating, compiling,
+ and running a C program. That approach doesn't work when cross-compiling --
+ in this case, the C compiler's generates code for the target machine,
+ not the host machine. For this situation, there's
+ a special mode <command>hsc2hs --cross-compile</command> which can generate
+ the .hs by extracting information from compilations only -- specifically,
+ whether or not compilation fails.
+ </para>
+
+ <para>Only a subset of <literal>.hsc</literal> syntax is supported by
+ <literal>--cross-compile</literal>. The following are unsupported:
+ <itemizedlist>
+ <listitem><literal>#{const_str}</literal></listitem>
+ <listitem><literal>#{let}</literal></listitem>
+ <listitem><literal>#{def}</literal></listitem>
+ <listitem>Custom constructs</listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+
</sect1>
</chapter>
diff --git a/mk/config.mk.in b/mk/config.mk.in
index 4204c7b5f5..948f805736 100644
--- a/mk/config.mk.in
+++ b/mk/config.mk.in
@@ -560,6 +560,7 @@ ifeq "$(TARGETPLATFORM)" "ia64-unknown-linux"
CONF_CC_OPTS += -G0
endif
+SRC_HSC2HS_OPTS += --cross-safe
SRC_HSC2HS_OPTS += $(addprefix --cflag=,$(filter-out -O,$(SRC_CC_OPTS) $(CONF_CC_OPTS_STAGE0)))
SRC_HSC2HS_OPTS += $(foreach d,$(GMP_INCLUDE_DIRS),-I$(d))