Build utilities with the bootstrap compiler when cross compiling
authorMoritz Angermann <moritz.angermann@gmail.com>
Fri, 29 Sep 2017 06:50:15 +0000 (14:50 +0800)
committerHerbert Valerio Riedel <hvr@gnu.org>
Fri, 29 Sep 2017 06:56:45 +0000 (08:56 +0200)
This should fix Trac #14297.  When building a cross compiler, we have rather little use
of utilities that do not run on the host, where the compiler runs. As such we should
build the utilities with the bootstrap (stage 0) compiler rather than witht he
in-tree (stage 1) compiler when CrossCompiling.

This used to results in the utilities we ship in the binary distribution to be built for
the wrong host.  This diff tries to rectify the situation and allow the binary distribution
to contain the utilities for the host when CrossCompiling.

See also https://phabricator.haskell.org/D4048

ghc.mk

diff --git a/ghc.mk b/ghc.mk
index f12aea5..c5f7473 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
@@ -13,7 +13,18 @@ utils/hsc2hs_dist-install_INSTALL = YES
 utils/hsc2hs_dist-install_INSTALL_INPLACE = NO
 
 $(eval $(call build-prog,utils/hsc2hs,dist,0))
+
+# When CrossCompiling, we want to ship the binary for the
+# host, not for the target.  As such we need to compile
+# with the Bootstrap compiler rather than with the in-tree
+# stage1 compiler, which would result in a binary that
+# won't run on the host.
+ifeq "$(CrossCompiling)" "YES"
+# compile with stage 0 (bootstrap compiler)
+$(eval $(call build-prog,utils/hsc2hs,dist-install,0))
+else
 $(eval $(call build-prog,utils/hsc2hs,dist-install,1))
+endif
 
 # After build-prog above
 utils/hsc2hs_dist_MODULES += Paths_hsc2hs