WIP: feature: use WorkerLimit to parallelize one-shot mode
This PR extracts the parallel part of --make
into GHC.Driver.WorkerLimit
, then makes one-shot compilation in GHC.Driver.Pipeline
use it.
Notably, cabal uses one-shot compilation for foreign sources, so in conjunction with an MR to cabal (https://github.com/haskell/cabal/pull/9872), this makes building foreign sources "just as parallel" as building Haskell sources, with the exception that they are compiled in a separate pass after Haskell sources due to --make
not handling them natively.
Please take a few moments to address the following points:
-
if your MR may break existing programs (e.g. touches base
or causes the compiler to reject programs), please describe the expected breakage and add the user-facing label. This will run ghc/head.hackage> to characterise the effect of your change on Hackage. -
ensure that your commits are either individually buildable or squashed -
ensure that your commit messages describe what they do (referring to tickets using #NNNN
syntax when appropriate) -
have added source comments describing your change. For larger changes you likely should add a Note and cross-reference it from the relevant places. -
add a testcase to the testsuite. -
updates the users guide if applicable -
mentions new features in the release notes for the next release
If you have any questions don't hesitate to open your merge request and inquire
in a comment. If your patch isn't quite done yet please do add prefix your MR
title with WIP:
.
By default a minimal validation pipeline is run on each merge request, the full-ci label can be applied to perform additional validation checks if your MR affects a more unusual configuration.
Once your change is ready please remove the WIP:
tag and wait for review. If
no one has offered a review in a few days then please leave a comment mentioning
@triagers and apply the Blocked on Review label.