diff options
author | Ben Gamari <ben@smart-cactus.org> | 2022-03-16 19:45:56 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2022-04-06 15:18:37 -0400 |
commit | 109cee198886974ab5348c9a2ae5dd0275046b5e (patch) | |
tree | d640962d0ac23cef7146f1c75831178eae57ac7f /hadrian | |
parent | f7b0f63c5f605c005b90d2c06d9e29893dba2dd1 (diff) | |
download | haskell-109cee198886974ab5348c9a2ae5dd0275046b5e.tar.gz |
hadrian: Disable ghci libraries when object merging is not available
Diffstat (limited to 'hadrian')
-rw-r--r-- | hadrian/src/Oracles/Flag.hs | 13 | ||||
-rw-r--r-- | hadrian/src/Rules/Register.hs | 7 | ||||
-rw-r--r-- | hadrian/src/Settings/Builders/Cabal.hs | 4 |
3 files changed, 19 insertions, 5 deletions
diff --git a/hadrian/src/Oracles/Flag.hs b/hadrian/src/Oracles/Flag.hs index 40ae3e8f9b..7c05be5a68 100644 --- a/hadrian/src/Oracles/Flag.hs +++ b/hadrian/src/Oracles/Flag.hs @@ -1,8 +1,11 @@ {-# LANGUAGE MultiWayIf #-} module Oracles.Flag ( - Flag (..), flag, getFlag, platformSupportsSharedLibs, - targetSupportsSMP, useLibffiForAdjustors + Flag (..), flag, getFlag, + platformSupportsSharedLibs, + platformSupportsGhciObjects, + targetSupportsSMP, + useLibffiForAdjustors ) where import Hadrian.Oracles.TextFile @@ -60,6 +63,12 @@ flag f = do getFlag :: Flag -> Expr c b Bool getFlag = expr . flag +-- | Does the platform support object merging (and therefore we can build GHCi objects +-- when appropriate). +platformSupportsGhciObjects :: Action Bool +platformSupportsGhciObjects = + not . null <$> settingsFileSetting SettingsFileSetting_MergeObjectsCommand + platformSupportsSharedLibs :: Action Bool platformSupportsSharedLibs = do windows <- isWinTarget diff --git a/hadrian/src/Rules/Register.hs b/hadrian/src/Rules/Register.hs index cefdf04cb7..c510e96c02 100644 --- a/hadrian/src/Rules/Register.hs +++ b/hadrian/src/Rules/Register.hs @@ -9,6 +9,7 @@ import Expression ( getContextData ) import Hadrian.BuildPath import Hadrian.Expression import Hadrian.Haskell.Cabal +import Oracles.Flag (platformSupportsGhciObjects) import Packages import Rules.Rts import {-# SOURCE #-} Rules.Library (needLibrary) @@ -206,12 +207,14 @@ extraTargets context -- | Given a library 'Package' this action computes all of its targets. Needing -- all the targets should build the library such that it is ready to be -- registered into the package database. --- See 'packageTargets' for the explanation of the @includeGhciLib@ parameter. +-- See 'Rules.packageTargets' for the explanation of the @includeGhciLib@ +-- parameter. libraryTargets :: Bool -> Context -> Action [FilePath] libraryTargets includeGhciLib context@Context {..} = do libFile <- pkgLibraryFile context ghciLib <- pkgGhciLibraryFile context - ghci <- if includeGhciLib && not (wayUnit Dynamic way) + ghciObjsSupported <- platformSupportsGhciObjects + ghci <- if ghciObjsSupported && includeGhciLib && not (wayUnit Dynamic way) then interpretInContext context $ getContextData buildGhciLib else return False extra <- extraTargets context diff --git a/hadrian/src/Settings/Builders/Cabal.hs b/hadrian/src/Settings/Builders/Cabal.hs index 1ef20147ae..c6a83ce12b 100644 --- a/hadrian/src/Settings/Builders/Cabal.hs +++ b/hadrian/src/Settings/Builders/Cabal.hs @@ -139,6 +139,7 @@ libraryArgs = do package <- getPackage withGhci <- expr ghcWithInterpreter dynPrograms <- expr (flavour >>= dynamicGhcPrograms) + ghciObjsSupported <- expr platformSupportsGhciObjects let ways = flavourWays ++ [contextWay] hasVanilla = vanilla `elem` ways hasProfiling = any (wayUnit Profiling) ways @@ -149,7 +150,8 @@ libraryArgs = do , if hasProfiling then "--enable-library-profiling" else "--disable-library-profiling" - , if (hasVanilla || hasProfiling) && + , if ghciObjsSupported && + (hasVanilla || hasProfiling) && package /= rts && withGhci && not dynPrograms then "--enable-library-for-ghci" else "--disable-library-for-ghci" |