[commit: ghc] master: Link to the right RTS whenever we build a .dll on Windows (41e5229)
Ian Lynagh
igloo at earth.li
Wed May 15 16:30:44 CEST 2013
Repository : http://darcs.haskell.org/ghc.git/
On branch : master
https://github.com/ghc/ghc/commit/41e5229c297f9ecad95dbbeeedf9feacdce39751
>---------------------------------------------------------------
commit 41e5229c297f9ecad95dbbeeedf9feacdce39751
Author: Ian Lynagh <ian at well-typed.com>
Date: Wed May 15 01:53:13 2013 +0100
Link to the right RTS whenever we build a .dll on Windows
When GHCi makes temporary DLLs, those also need to be linked against
the right RTS, or we won't be able to load them.
>---------------------------------------------------------------
compiler/ghc.mk | 16 ++++++++++++++++
compiler/main/DynFlags.hs | 2 +-
compiler/main/SysTools.lhs | 18 +++++++++++++++---
rules/distdir-way-opts.mk | 12 ------------
4 files changed, 32 insertions(+), 16 deletions(-)
diff --git a/compiler/ghc.mk b/compiler/ghc.mk
index 1a032cc..c258bf2 100644
--- a/compiler/ghc.mk
+++ b/compiler/ghc.mk
@@ -117,6 +117,22 @@ ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
else
@echo 'cDYNAMIC_GHC_PROGRAMS = False' >> $@
endif
+# Note that GhcThreaded just reflects the Makefile variable setting.
+# In particular, the stage1 compiler is never actually compiled with
+# -threaded, but it will nevertheless have cGhcThreaded = True.
+# The "+RTS --info" output will show what RTS GHC is really using.
+ @echo 'cGhcThreaded :: Bool' >> $@
+ifeq "$(GhcThreaded)" "YES"
+ @echo 'cGhcThreaded = True' >> $@
+else
+ @echo 'cGhcThreaded = False' >> $@
+endif
+ @echo 'cGhcDebugged :: Bool' >> $@
+ifeq "$(GhcDebugged)" "YES"
+ @echo 'cGhcDebugged = True' >> $@
+else
+ @echo 'cGhcDebugged = False' >> $@
+endif
@echo done.
# -----------------------------------------------------------------------------
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 7dc0ef6..946f00b 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -50,7 +50,7 @@ module DynFlags (
printOutputForUser, printInfoForUser,
- Way(..), mkBuildTag, wayRTSOnly, updateWays,
+ Way(..), mkBuildTag, wayRTSOnly, addWay', updateWays,
wayGeneralFlags, wayUnsetGeneralFlags,
-- ** Safe Haskell
diff --git a/compiler/main/SysTools.lhs b/compiler/main/SysTools.lhs
index bacd53e..3df1a9c 100644
--- a/compiler/main/SysTools.lhs
+++ b/compiler/main/SysTools.lhs
@@ -1051,10 +1051,22 @@ linesPlatform xs =
#endif
linkDynLib :: DynFlags -> [String] -> [PackageId] -> IO ()
-linkDynLib dflags o_files dep_packages
+linkDynLib dflags0 o_files dep_packages
= do
- let verbFlags = getVerbFlags dflags
- let o_file = outputFile dflags
+ let -- This is a rather ugly hack to fix dynamically linked
+ -- GHC on Windows. If GHC is linked with -threaded, then
+ -- it links against libHSrts_thr. But if base is linked
+ -- against libHSrts, then both end up getting loaded,
+ -- and things go wrong. We therefore link the libraries
+ -- with the same RTS flags that we link GHC with.
+ dflags1 = if cGhcThreaded then addWay' WayThreaded dflags0
+ else dflags0
+ dflags2 = if cGhcDebugged then addWay' WayDebug dflags1
+ else dflags1
+ dflags = updateWays dflags2
+
+ verbFlags = getVerbFlags dflags
+ o_file = outputFile dflags
pkgs <- getPreloadPackagesAnd dflags dep_packages
diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk
index 23fdf7b..ecd3aa1 100644
--- a/rules/distdir-way-opts.mk
+++ b/rules/distdir-way-opts.mk
@@ -140,18 +140,6 @@ $1_$2_$3_GHC_LD_OPTS += \
else ifeq "$$(TargetOS_CPP)" "darwin"
$1_$2_$3_GHC_LD_OPTS += -optl-Wl,-headerpad_max_install_names
endif
-
-# This is a rather ugly hack to fix dynamically linked GHC on Windows.
-# If GHC is linked with -threaded, then it links against libHSrts_thr.
-# But if base is linked against libHSrts, then both end up getting
-# loaded, and things go wrong. We therefore link the libraries with the
-# same RTS flags that we link GHC with.
-ifeq "$$(GhcThreaded)" "YES"
-$1_$2_$3_GHC_LD_OPTS += -threaded
-endif
-ifeq "$$(GhcDebugged)" "YES"
-$1_$2_$3_GHC_LD_OPTS += -debug
-endif
endif
endif
More information about the ghc-commits
mailing list