summary refs log tree commit diff
path: root/pkgs/stdenv/cross/default.nix
blob: d78061db712e83ad1084773781f28a4a53c35e87 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{ system, allPackages, platform, crossSystem, config, ... } @ args:

rec {
  vanillaStdenv = (import ../. (args // {
    crossSystem = null;
    allPackages = args: allPackages ({ crossSystem = null; } // args);
  })).stdenv;

  # Yeah this isn't so cleanly just build-time packages yet. Notice the
  # buildPackages <-> stdenvCross cycle. Yup, it's very weird.
  #
  # This works because the derivation used to build `stdenvCross` are in
  # fact using `forceNativeDrv` to use the `nativeDrv` attribute of the resulting
  # derivation built with `vanillaStdenv` (second argument of `makeStdenvCross`).
  #
  # Eventually, `forceNativeDrv` should be removed and the cycle broken.
  buildPackages = allPackages {
    # It's OK to change the built-time dependencies
    allowCustomOverrides = true;
    bootStdenv = stdenvCross;
    inherit system platform crossSystem config;
  };

  stdenvCross = buildPackages.makeStdenvCross
    vanillaStdenv crossSystem
    buildPackages.binutilsCross buildPackages.gccCrossStageFinal;
}