2024-07-04 18:01:33 -07:00
|
|
|
{ lib, config }:
|
|
|
|
let
|
2024-06-14 07:01:18 -07:00
|
|
|
cfg = config.builders.basic;
|
|
|
|
|
|
|
|
lib' = config.lib;
|
|
|
|
|
|
|
|
inherit (config) foundation;
|
2024-07-04 18:01:33 -07:00
|
|
|
in
|
|
|
|
{
|
2024-06-14 07:01:18 -07:00
|
|
|
config.builders = {
|
|
|
|
basic = {
|
|
|
|
executable = "${foundation.stage2-bash}/bin/bash";
|
|
|
|
|
2024-07-04 18:01:33 -07:00
|
|
|
build =
|
|
|
|
package:
|
|
|
|
let
|
|
|
|
phases = lib.dag.apply.defaults package.phases {
|
|
|
|
unpack = lib.dag.entry.before [ "patch" ] "";
|
2024-06-24 10:51:25 -07:00
|
|
|
|
2024-07-04 18:01:33 -07:00
|
|
|
patch = lib.dag.entry.between [ "configure" ] [ "unpack" ] "";
|
2024-06-24 10:51:25 -07:00
|
|
|
|
2024-07-04 18:01:33 -07:00
|
|
|
configure = lib.dag.entry.between [ "build" ] [ "patch" ] "";
|
2024-06-24 10:51:25 -07:00
|
|
|
|
2024-07-04 18:01:33 -07:00
|
|
|
build = lib.dag.entry.between [ "install" ] [ "configure" ] "";
|
2024-06-24 10:51:25 -07:00
|
|
|
|
2024-07-04 18:01:33 -07:00
|
|
|
install = lib.dag.entry.after [ "build" ] "";
|
|
|
|
};
|
|
|
|
sorted = lib.dag.sort.topographic phases;
|
|
|
|
|
|
|
|
script = lib.strings.concatMapSep "\n" (
|
|
|
|
entry: if builtins.isFunction entry.value then entry.value package else entry.value
|
|
|
|
) sorted.result;
|
|
|
|
|
|
|
|
system = package.platform.build.double;
|
|
|
|
|
|
|
|
built = builtins.derivation (
|
|
|
|
package.env
|
|
|
|
// {
|
|
|
|
inherit (package) name;
|
|
|
|
inherit script system;
|
|
|
|
|
|
|
|
passAsFile = [ "script" ];
|
|
|
|
|
|
|
|
SHELL = cfg.executable;
|
|
|
|
|
|
|
|
PATH =
|
|
|
|
let
|
|
|
|
bins = lib.paths.bin (
|
|
|
|
(lib'.packages.dependencies.getPackages package.deps.build.host)
|
|
|
|
++ [
|
|
|
|
foundation.stage2-bash
|
|
|
|
foundation.stage2-coreutils
|
|
|
|
]
|
|
|
|
);
|
|
|
|
in
|
|
|
|
builtins.concatStringsSep ":" (
|
|
|
|
[ bins ] ++ (lib.lists.when (package.env ? PATH) [ package.env.PATH ])
|
|
|
|
);
|
|
|
|
|
|
|
|
builder = cfg.executable;
|
|
|
|
|
|
|
|
args = [
|
|
|
|
"-e"
|
|
|
|
(builtins.toFile "bash-builder.sh" ''
|
|
|
|
export CONFIG_SHELL=$SHELL
|
|
|
|
|
|
|
|
# Normalize the NIX_BUILD_CORES variable. The value might be 0, which
|
|
|
|
# means that we're supposed to try and auto-detect the number of
|
|
|
|
# available CPU cores at run-time.
|
|
|
|
NIX_BUILD_CORES="''${NIX_BUILD_CORES:-1}"
|
|
|
|
if ((NIX_BUILD_CORES <= 0)); then
|
|
|
|
guess=$(nproc 2>/dev/null || true)
|
|
|
|
((NIX_BUILD_CORES = guess <= 0 ? 1 : guess))
|
|
|
|
fi
|
|
|
|
export NIX_BUILD_CORES
|
|
|
|
|
|
|
|
bash -eux $scriptPath
|
|
|
|
'')
|
|
|
|
];
|
|
|
|
}
|
|
|
|
);
|
|
|
|
in
|
2024-07-03 00:35:21 -07:00
|
|
|
built
|
|
|
|
// {
|
|
|
|
inherit (package) meta;
|
|
|
|
extras = {
|
|
|
|
inherit package;
|
|
|
|
};
|
|
|
|
};
|
2024-06-14 07:01:18 -07:00
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|