summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Sima <ben@bsima.me>2024-04-09 20:16:24 -0400
committerBen Sima <ben@bsima.me>2024-04-10 19:56:46 -0400
commita6856775ad86d8f33d5d724a3843fb16e5a3551d (patch)
tree5c37f970991064f165563b9773b3d7d0c46a0224
parentdabbe3cfa344f3ad011f26d570ee82621e2d1b67 (diff)
Fix --cpus and --jobs
This patch fixes two problems: 1. Apparently the docopt spec wasn't written correctly, I needed to add a metavar (like N for number) to the spec so that docopt would correctly parse the command line args. Without this, I had just been using the default 6 and 10 that I hardcoded. 2. I never added the --max-jobs and --cores flags to NixBuild, so anytime I built a nix target, i.e. any of my NixOS images, it would use all of the available cores. I think this is part of why I struggled so much to build webkitgtk: I *thought* I was limiting the resources to prevent an OOM crash, but I wasn't. With this fix, I can comfortably limit resources for a build, so I can continue working while building something in the background.
-rw-r--r--Biz/Bild.hs29
1 files changed, 19 insertions, 10 deletions
diff --git a/Biz/Bild.hs b/Biz/Bild.hs
index 7bce4e9..2ec0c7f 100644
--- a/Biz/Bild.hs
+++ b/Biz/Bild.hs
@@ -241,14 +241,16 @@ move args =
build isTest isLoud jobs (cpus nproc) targets
cpus :: Int -> Int
cpus nproc =
- Cli.getArgWithDefault args (str <| (nproc - 4) `div` jobs) (Cli.longOption "cpus")
+ Cli.longOption "cpus"
+ |> Cli.getArgWithDefault args (str <| (nproc - 4) `div` jobs)
|> readMaybe
|> \case
Nothing -> panic "could not read --cpus argument"
Just n -> n
jobs :: Int
jobs =
- Cli.getArgWithDefault args "6" (Cli.longOption "jobs")
+ Cli.longOption "jobs"
+ |> Cli.getArgWithDefault args "6"
|> readMaybe
|> \case
Nothing -> panic "could not read --jobs argument"
@@ -313,15 +315,16 @@ bild
Usage:
bild test
bild [options] <target>...
+ bild --help
Options:
- --test, -t Run tests on a target after building
- --loud, -l Show all output from compiler
- --plan, -p Print the build plan as JSON, don't build
- --time N Set timeout to N minutes, 0 means never timeout [default: 10]
- --jobs, -j Number of jobs to build at once [default: 6]
- --cpus, -c Number of cpu cores to use per job [default: (nproc-4)/jobs]
- --help, -h Print this info
+ --test, -t Run tests on a target after building
+ --loud, -l Show all output from compiler
+ --plan, -p Print the build plan as JSON, don't build
+ --time N Set timeout to N minutes, 0 means never timeout [default: 10]
+ --jobs N, -j N Build up to N jobs at once [default: 6]
+ --cpus N, -c N Allocate up to N cpu cores per job (default: (nproc-4)/jobs)
+ --help, -h Print this info
|]
exitSummary :: [Exit.ExitCode] -> IO ()
@@ -919,7 +922,13 @@ build andTest loud jobs cpus analysis =
pure (Exit.ExitSuccess, mempty)
NixBuild -> do
Log.info ["bild", "nix", user <> "@" <> host, nschunk namespace]
- proc loud namespace (toNixFlag compiler) compilerFlags
+ proc loud namespace (toNixFlag compiler)
+ <| compilerFlags
+ ++ [ "--max-jobs",
+ Text.pack <| str jobs,
+ "--cores",
+ Text.pack <| str cpus
+ ]
Copy -> do
Log.warn ["bild", "copy", "not implemented yet", nschunk namespace]
pure (Exit.ExitSuccess, mempty)