[commit: ghc] wip/angerman/llvmng: Fix binary distributions of cross compilers (4e4e717)

git at git.haskell.org git at git.haskell.org
Fri Oct 20 02:57:50 UTC 2017


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/angerman/llvmng
Link       : http://ghc.haskell.org/trac/ghc/changeset/4e4e71791132a068423001714440f1fd5e040ead/ghc

>---------------------------------------------------------------

commit 4e4e71791132a068423001714440f1fd5e040ead
Author: Moritz Angermann <moritz.angermann at gmail.com>
Date:   Mon Oct 2 13:47:45 2017 +0800

    Fix binary distributions of cross compilers
    
    Summary:
    - copy over the original settings file
      Otherwise most of the custom cross compiler toolchain will
      be screwed up upon install.  I'd rather have someone complain
      about a proper target-prefixed tool being missing, than getting
      garbaled output and a slew of strange errors because the final
      configure selected tools on the install machine just don't
      match up.
    
    - persist target-prefix. For cross compilers, retain the $target-
      prefix. This allows installing multiple cross compierls targetting
      different targets alongside each other.
    
    Reviewers: austin, hvr, bgamari
    
    Subscribers: rwbarton, trofi, thomie, hvr, bgamari, erikd
    
    Differential Revision: https://phabricator.haskell.org/D4058


>---------------------------------------------------------------

4e4e71791132a068423001714440f1fd5e040ead
 distrib/configure.ac.in | 20 ++++++++++++++------
 ghc.mk                  | 14 ++++++++++----
 2 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/distrib/configure.ac.in b/distrib/configure.ac.in
index 509e74e..62f6575 100644
--- a/distrib/configure.ac.in
+++ b/distrib/configure.ac.in
@@ -35,10 +35,9 @@ FPTOOLS_SET_PLATFORM_VARS
 # Requires FPTOOLS_SET_PLATFORM_VARS to be run first.
 FP_FIND_ROOT
 
-# ToDo: if Stage1Only=YES, should be YES
-CrossCompiling=NO
-CrossCompilePrefix=""
-TargetPlatformFull="${target}"
+CrossCompiling=@CrossCompiling@
+CrossCompilePrefix=@CrossCompilePrefix@
+TargetPlatformFull=@TargetPlatformFull@
 
 AC_SUBST(CrossCompiling)
 AC_SUBST(CrossCompilePrefix)
@@ -198,8 +197,17 @@ fi
 
 FP_SETTINGS
 
-#
-AC_CONFIG_FILES(settings mk/config.mk mk/install.mk)
+dnl ** Hack tools for cross compilers
+dnl --------------------------------------------------------------
+dnl When building a binary distribution for cross compilers,
+dnl we likely want to retain the target-prefixed tools, and not
+dnl have configure overwrite them with what ever it finds, as
+dnl the found tools likely do not target the target.
+AC_CONFIG_FILES(mk/config.mk mk/install.mk)
+if test "x$CrossCompiling" = "xNO"; then
+AC_CONFIG_FILES(settings)
+fi
+
 AC_OUTPUT
 
 # We get caught by
diff --git a/ghc.mk b/ghc.mk
index f397f7c..66ae00a 100644
--- a/ghc.mk
+++ b/ghc.mk
@@ -1060,11 +1060,17 @@ ifneq "$(CLEANING)" "YES"
 # stage0 compiled ghc-cabal into the binary distribution.  As the
 # stage1 compiled ghc-cabal is built for the target, however
 # ghc-cabal is used during 'make install' on the host, when
-# installing the binary distribution.
-ifeq "$(Stage1Only)" "YES"
+# installing the binary distribution. We will also copy the original
+# `settings` file instead of having `configure` compute a new one.
+# We do this because the bindist configure by default picks up
+# the non-target prefixed toolchain; and cross compilers can be
+# very sensitive to the toolchain.
+ifeq "$(Stage1Only) $(CrossCompiling)" "YES YES"
 DIST_GHC_CABAL=utils/ghc-cabal/dist/build/tmp/ghc-cabal
+DIST_SETTINGS=settings
 else
 DIST_GHC_CABAL=utils/ghc-cabal/dist-install/build/tmp/ghc-cabal
+DIST_SETTINGS=settings.in
 endif
 
 $(eval $(call bindist-list,.,\
@@ -1072,7 +1078,7 @@ $(eval $(call bindist-list,.,\
     README \
     INSTALL \
     configure config.sub config.guess install-sh \
-    settings.in \
+    $(DIST_SETTINGS) \
     llvm-targets \
     packages \
     Makefile \
@@ -1133,7 +1139,7 @@ BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindist.mk
 unix-binary-dist-prep:
 	$(call removeTrees,bindistprep/)
 	"$(MKDIRHIER)" $(BIN_DIST_PREP_DIR)
-	set -e; for i in packages LICENSE compiler ghc iserv rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh settings.in llvm-targets ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
+	set -e; for i in packages LICENSE compiler ghc iserv rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh $(DIST_SETTINGS) llvm-targets ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
 	echo "HADDOCK_DOCS       = $(HADDOCK_DOCS)"       >> $(BIN_DIST_MK)
 	echo "BUILD_SPHINX_HTML  = $(BUILD_SPHINX_HTML)"  >> $(BIN_DIST_MK)
 	echo "BUILD_SPHINX_PDF   = $(BUILD_SPHINX_PDF)"   >> $(BIN_DIST_MK)



More information about the ghc-commits mailing list