Need rts at the top-level to allow more parallelism
authorAndrey Mokhov <andrey.mokhov@gmail.com>
Thu, 14 Sep 2017 17:23:47 +0000 (18:23 +0100)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Thu, 14 Sep 2017 17:23:47 +0000 (18:23 +0100)
See #393

src/Rules.hs

index fcf3f65..ea3df45 100644 (file)
@@ -32,7 +32,7 @@ allStages = [minBound ..]
 -- 'Stage1Only' flag.
 topLevelTargets :: Rules ()
 topLevelTargets = action $ do
-    let libraryPackages = filter isLibrary (knownPackages \\ [rts, libffi])
+    let libraryPackages = filter isLibrary (knownPackages \\ [libffi])
     need =<< if stage1Only
              then do
                  libs <- concatForM [Stage0, Stage1] $ \stage ->
@@ -41,11 +41,10 @@ topLevelTargets = action $ do
                  return $ libs ++ prgs ++ inplaceLibCopyTargets
              else do
                  targets <- concatForM allStages $ \stage ->
-                     concatForM (knownPackages \\ [rts, libffi]) $
+                     concatForM (knownPackages \\ [libffi]) $
                         packageTargets False stage
                  return $ targets ++ inplaceLibCopyTargets
 
-
 -- TODO: Get rid of the @includeGhciLib@ hack.
 -- | Return the list of targets associated with a given 'Stage' and 'Package'.
 -- By setting the Boolean parameter to False it is possible to exclude the GHCi
@@ -62,14 +61,15 @@ packageTargets includeGhciLib stage pkg = do
     then return [] -- Skip inactive packages.
     else if isLibrary pkg
         then do -- Collect all targets of a library package.
-            ways    <- interpretInContext context getLibraryWays
+            let pkgWays = if pkg == rts then getRtsWays else getLibraryWays
+            ways    <- interpretInContext context pkgWays
             libs    <- mapM (pkgLibraryFile . Context stage pkg) ways
             docs    <- interpretInContext context =<< buildHaddock <$> flavour
             more    <- libraryTargets includeGhciLib context
             setup   <- pkgSetupConfigFile context
             haddock <- pkgHaddockFile     context
-            return $ [ setup   | nonCabalContext context ]
-                  ++ [ haddock | docs && stage == Stage1 ]
+            return $ [ setup   | not $ nonCabalContext context ]
+                  ++ [ haddock | pkg /= rts && docs && stage == Stage1 ]
                   ++ libs ++ more
         else do -- The only target of a program package is the executable.
             prgContext <- programContext stage pkg