packages feed

ghc-bench-0.3.0: src/Benchmark/BuildCabalPackage.hs

module Benchmark.BuildCabalPackage (run, withPackage) where

import Benchmark.Util

indexState :: FilePath
indexState = "--index-state=2026-04-15T08:18:05Z"

withPackage :: String -> Benchmark () -> Benchmark ()
withPackage package action = do
  call "cabal" ["unpack", package, indexState]
  cd package action

run :: String -> FilePath -> Concurrency -> Benchmark ()
run package ghc concurrency = withPackage package do
  cabal "user-config" ["init"]
  cabal "configure" [
      "--with-compiler=" <> ghc
    , "--jobs=" <> show concurrency
    , "--enable-tests"
    , "--enable-benchmarks"
    , indexState
    ]
  cabal "build" ["--only-dependencies", "--only-download"]
  measure "dependencies" do
    cabal "build" ["--only-dependencies"]
  measure "build" do
    cabal "build" []
  where
    cabal :: FilePath -> [FilePath] -> Benchmark ()
    cabal command = call "cabal" . mappend [
        "--config-file=ghc-bench-cabal-config"
      , "--store-dir=store"
      , command
      ]