diff --git a/Stackage/Build.hs b/Stackage/Build.hs index b1c6f597..b2f8b572 100644 --- a/Stackage/Build.hs +++ b/Stackage/Build.hs @@ -18,11 +18,20 @@ import System.IO (BufferMode (NoBuffering), import System.Process (rawSystem, runProcess, waitForProcess) -defaultBuildSettings :: GhcMajorVersion -> BuildSettings -defaultBuildSettings version = BuildSettings +defaultBuildSettings :: Maybe Int -- ^ argument to -j + -> GhcMajorVersion + -> BuildSettings +defaultBuildSettings cores version = BuildSettings { sandboxRoot = "sandbox" , expectedFailuresBuild = defaultExpectedFailures version - , extraArgs = const ["-fnetwork23"] + , extraArgs = \bs -> "-fnetwork23" : + case bs of + BSTest -> [] + _ -> + case cores of + Nothing -> ["-j"] + Just 1 -> [] + Just j -> ["-j", show j] , testWorkerThreads = 4 , buildDocs = True , tarballDir = "patching/tarballs" @@ -64,7 +73,6 @@ build settings' bp = do $ "install" : ("--cabal-lib-version=" ++ libVersion) : "--build-log=logs-tools/$pkg.log" - : "-j" : [tool] hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args)) ph <- runCabal args handle @@ -89,7 +97,6 @@ build settings' bp = do : "--build-log=logs/$pkg.log" : "--max-backjumps=-1" : "--reorder-goals" - : "-j" : packageList hPutStrLn handle ("cabal " ++ unwords (map (\s -> "'" ++ s ++ "'") args)) runCabal args handle diff --git a/app/stackage.hs b/app/stackage.hs index af664540..c6075fa1 100644 --- a/app/stackage.hs +++ b/app/stackage.hs @@ -47,15 +47,17 @@ data BuildArgs = BuildArgs , buildPlanSrc :: FilePath , extraArgs' :: [String] -> [String] , noDocs :: Bool + , buildCores :: Maybe Int } parseBuildArgs :: GhcMajorVersion -> [String] -> IO BuildArgs parseBuildArgs version = loop BuildArgs - { sandbox = sandboxRoot $ defaultBuildSettings version + { sandbox = sandboxRoot $ defaultBuildSettings Nothing version , buildPlanSrc = defaultBuildPlan , extraArgs' = id , noDocs = False + , buildCores = Nothing } where loop x [] = return x @@ -63,6 +65,7 @@ parseBuildArgs version = loop x ("--build-plan":y:rest) = loop x { buildPlanSrc = y } rest loop x ("--arg":y:rest) = loop x { extraArgs' = extraArgs' x . (y:) } rest loop x ("--no-docs":rest) = loop x { noDocs = True } rest + loop x ("-j":y:rest) = loop x { buildCores = Just $ read y } rest loop _ (y:_) = error $ "Did not understand argument: " ++ y defaultBuildPlan :: FilePath @@ -73,9 +76,10 @@ withBuildSettings args f = do version <- getGhcVersion BuildArgs {..} <- parseBuildArgs version args bp <- readBuildPlan buildPlanSrc - let settings = (defaultBuildSettings version) + let bs = defaultBuildSettings buildCores version + let settings = bs { sandboxRoot = sandbox - , extraArgs = extraArgs' . extraArgs (defaultBuildSettings version) + , extraArgs = extraArgs' . extraArgs bs , buildDocs = not noDocs } f settings bp