3e197f7d81
Introduce new abstraction, `stdenv/booter.nix` for composing bootstraping stages, and use it everywhere for consistency. See that file for more doc. Stdenvs besides Linux and Darwin are completely refactored to utilize this. Those two, due to their size and complexity, are minimally edited for easier reviewing. No hashes should be changed.
49 lines
1.4 KiB
Nix
49 lines
1.4 KiB
Nix
{ lib
|
|
, system, platform, crossSystem, config
|
|
}:
|
|
|
|
let
|
|
bootStages = import ../. {
|
|
inherit lib system platform;
|
|
crossSystem = null;
|
|
# Ignore custom stdenvs when cross compiling for compatability
|
|
config = builtins.removeAttrs config [ "replaceStdenv" ];
|
|
};
|
|
|
|
in bootStages ++ [
|
|
|
|
# Build Packages.
|
|
#
|
|
# For now, this is just used to build the native stdenv. Eventually, it
|
|
# should be used to build compilers and other such tools targeting the cross
|
|
# platform. Then, `forceNativeDrv` can be removed.
|
|
(vanillaPackages: {
|
|
inherit system platform crossSystem config;
|
|
# It's OK to change the built-time dependencies
|
|
allowCustomOverrides = true;
|
|
stdenv = vanillaPackages.stdenv // {
|
|
# Needed elsewhere as a hacky way to pass the target
|
|
cross = crossSystem;
|
|
};
|
|
})
|
|
|
|
# Run packages
|
|
(buildPackages: {
|
|
inherit system platform crossSystem config;
|
|
stdenv = if crossSystem.useiOSCross or false
|
|
then let
|
|
inherit (buildPackages.darwin.ios-cross {
|
|
prefix = crossSystem.config;
|
|
inherit (crossSystem) arch;
|
|
simulator = crossSystem.isiPhoneSimulator or false; })
|
|
cc binutils;
|
|
in buildPackages.makeStdenvCross
|
|
buildPackages.stdenv crossSystem
|
|
binutils cc
|
|
else buildPackages.makeStdenvCross
|
|
buildPackages.stdenv crossSystem
|
|
buildPackages.binutilsCross buildPackages.gccCrossStageFinal;
|
|
})
|
|
|
|
]
|