Make GHC-in-GHCi work on Windows
authorSebastian Graf <sgraf1337@gmail.com>
Tue, 16 Jul 2019 15:05:39 +0000 (16:05 +0100)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Wed, 17 Jul 2019 16:20:27 +0000 (12:20 -0400)
By not building anything in the dynamic way on Windows, where we don't
have a working story for DLLs yet.

Also the ghcid command needs to call bash on the hadrian/ghci.sh script
explicitly as the path gets interpreted differently otherwise.

.ghcid
hadrian/ghci.sh
hadrian/src/Rules.hs
hadrian/src/Settings/Flavours/GhcInGhci.hs

diff --git a/.ghcid b/.ghcid
index 26c2ad2..9ce2eeb 100644 (file)
--- a/.ghcid
+++ b/.ghcid
@@ -1,4 +1,4 @@
---command ./hadrian/ghci.sh
+--command sh ./hadrian/ghci.sh
 --reload compiler
 --reload ghc
 --reload includes
index 4c9b9c6..90727b2 100755 (executable)
@@ -1,6 +1,6 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
 
 set -e
 
-GHC_FLAGS=$(TERM=dumb CABFLAGS=-v0 "hadrian/build.cabal.sh" tool-args -q --build-root=.hadrian_ghci --flavour=ghc-in-ghci "$@")
+GHC_FLAGS=$(TERM=dumb CABFLAGS=-v0 "hadrian/build.cabal.sh" tool-args -q --build-root=.hadrian_ghci --flavour=ghc-in-ghci "$@")
 ghci $GHC_FLAGS -fno-code -fwrite-interface -hidir=.hadrian_ghci/interface -O0 ghc/Main.hs
index 851ccc0..61c5211 100644 (file)
@@ -38,7 +38,10 @@ import UserSettings
 toolArgsTarget :: Rules ()
 toolArgsTarget = do
   "tool-args" ~> do
-    let fake_target = target (Context Stage0 compiler dynamic)
+    -- We can't build DLLs on Windows (yet). Actually we should only
+    -- include the dynamic way when we have a dynamic host GHC, but just
+    -- checking for Windows seems simpler for now.
+    let fake_target = target (Context Stage0 compiler (if windowsHost then vanilla else dynamic))
                              (Ghc ToolArgs Stage0) [] ["ignored"]
 
     -- need the autogenerated files so that they are precompiled
index 82fd0f2..8533172 100644 (file)
@@ -10,8 +10,11 @@ ghcInGhciFlavour :: Flavour
 ghcInGhciFlavour = defaultFlavour
     { name        = "ghc-in-ghci"
     , args        = defaultBuilderArgs <> ghciArgs <> defaultPackageArgs
-    , libraryWays = pure [vanilla, dynamic]
-    , rtsWays     = pure [vanilla, threaded, dynamic]
+    -- We can't build DLLs on Windows (yet). Actually we should only
+    -- include the dynamic way when we have a dynamic host GHC, but just
+    -- checking for Windows seems simpler for now.
+    , libraryWays = pure [vanilla] <> pure [ dynamic | not windowsHost ]
+    , rtsWays     = pure [vanilla, threaded] <> pure [ dynamic | not windowsHost ]
     , dynamicGhcPrograms = return False }
 
 ghciArgs :: Args