diff options
author | Ben Sima <ben@bsima.me> | 2024-04-09 20:16:24 -0400 |
---|---|---|
committer | Ben Sima <ben@bsima.me> | 2024-04-10 19:56:46 -0400 |
commit | a6856775ad86d8f33d5d724a3843fb16e5a3551d (patch) | |
tree | 5c37f970991064f165563b9773b3d7d0c46a0224 | |
parent | dabbe3cfa344f3ad011f26d570ee82621e2d1b67 (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.hs | 29 |
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) |