diff options
-rw-r--r-- | ghc/ghc.mk | 6 | ||||
-rw-r--r-- | hadrian/doc/user-settings.md | 2 | ||||
-rw-r--r-- | hadrian/src/Flavour.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Rules/Generate.hs | 2 | ||||
-rw-r--r-- | hadrian/src/Settings/Default.hs | 1 | ||||
-rw-r--r-- | hadrian/src/Settings/Packages.hs | 4 |
6 files changed, 15 insertions, 2 deletions
diff --git a/ghc/ghc.mk b/ghc/ghc.mk index 3bff2f58c9..8c112a054f 100644 --- a/ghc/ghc.mk +++ b/ghc/ghc.mk @@ -61,7 +61,13 @@ ifeq "$(GhcThreaded)" "YES" # Use threaded RTS with GHCi, so threads don't get blocked at the prompt. ghc_stage2_MORE_HC_OPTS += -threaded ghc_stage3_MORE_HC_OPTS += -threaded +else +# Opt out from threaded GHC. See ghc-bin.cabal.in +ghc_stage2_CONFIGURE_OPTS += -f-threaded +ghc_stage3_CONFIGURE_OPTS += -f-threaded endif +# Stage-0 compiler isn't guaranteed to have a threaded RTS. +ghc_stage1_CONFIGURE_OPTS += -f-threaded ifeq "$(GhcProfiled)" "YES" ghc_stage2_PROGRAM_WAY = p diff --git a/hadrian/doc/user-settings.md b/hadrian/doc/user-settings.md index 04a526605d..02b6ddf9ea 100644 --- a/hadrian/doc/user-settings.md +++ b/hadrian/doc/user-settings.md @@ -35,6 +35,8 @@ data Flavour = Flavour { ghcProfiled :: Bool, -- | Build GHC with debug information. ghcDebugged :: Bool + -- | Build the GHC executable against the threaded runtime system. + ghcThreaded :: Bool, -- | Whether to build docs and which ones -- (haddocks, user manual, haddock manual) ghcDocs :: Action DocTargets } diff --git a/hadrian/src/Flavour.hs b/hadrian/src/Flavour.hs index dd203ea88e..64ce931e78 100644 --- a/hadrian/src/Flavour.hs +++ b/hadrian/src/Flavour.hs @@ -39,6 +39,8 @@ data Flavour = Flavour { ghcProfiled :: Bool, -- | Build GHC with debugging assertions. ghcDebugged :: Bool, + -- | Build the GHC executable against the threaded runtime system. + ghcThreaded :: Bool, -- | Whether to build docs and which ones -- (haddocks, user manual, haddock manual) ghcDocs :: Action DocTargets } diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs index 74759be20e..c65d852931 100644 --- a/hadrian/src/Rules/Generate.hs +++ b/hadrian/src/Rules/Generate.hs @@ -320,7 +320,7 @@ generateSettings = do , ("Tables next to code", expr $ yesNo <$> flag TablesNextToCode) , ("Leading underscore", expr $ yesNo <$> flag LeadingUnderscore) , ("Use LibFFI", expr $ yesNo <$> useLibFFIForAdjustors) - , ("Use Threads", yesNo . any (wayUnit Threaded) <$> getRtsWays) + , ("Use Threads", expr $ yesNo . ghcThreaded <$> flavour) , ("Use Debugging", expr $ yesNo . ghcDebugged <$> flavour) , ("RTS expects libdw", yesNo <$> getFlag WithLibdw) ] diff --git a/hadrian/src/Settings/Default.hs b/hadrian/src/Settings/Default.hs index 7279023e82..5bf9ea7e7c 100644 --- a/hadrian/src/Settings/Default.hs +++ b/hadrian/src/Settings/Default.hs @@ -215,6 +215,7 @@ defaultFlavour = Flavour , ghciWithDebugger = False , ghcProfiled = False , ghcDebugged = False + , ghcThreaded = True , ghcDocs = cmdDocsArgs } -- | Default logic for determining whether to build diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs index 9e43459a0f..d0dbabde99 100644 --- a/hadrian/src/Settings/Packages.hs +++ b/hadrian/src/Settings/Packages.hs @@ -96,7 +96,9 @@ packageArgs = do -- the 'threaded' flag is True by default, but -- let's record explicitly that we link all ghc -- executables with the threaded runtime. - , arg "threaded" ] ] + , stage0 ? arg "-threaded" + , notStage0 ? ifM (ghcThreaded <$> expr flavour) (arg "threaded") (arg "-threaded") ] + ] -------------------------------- ghcPkg -------------------------------- , package ghcPkg ? |