Skip to content

Commit

Permalink
stdenvBootstrapTools: inherit {cross,local}System
Browse files Browse the repository at this point in the history
It's expected that attributes in the top-level package set will all use
that package set, but this wasn't the case for the bootstrap tools.
This led some very confusing behaviour:

- pkgsMusl.stdenvBootstrapTools would build glibc bootstrap tools
- stdenvBootstrapTools was _always_ cross compiled, even if
  Nixpkgs wasn't, because it always set crossSystem.  This also didn't
  match the behaviour of using make-bootstrap-tools.nix as an
  entrypoint, where crossSystem would default to null.

For the Linux stdenv, I've made the ideal fix, which is to make pkgs an
argument rather than taking the arguments for pkgs, and then
re-importing it.  This means it'll always use exactly the same package
set that's calling it, and should also mean faster eval due to not
importing Nixpkgs twice.

The Darwin stdenv is more complicated, and I'm not able to easily test
it, so I wasn't confident in making the same fix there.  Instead, I've
just made sure crossSystem and localSystem are set to the correct values
so they're not always cross compiled and match the parent package set's.
It would still be preferable if somebody could make Darwin's
make-bootstrap-tools.nix take pkgs as an argument, rather than all the
arguments for pkgs.
  • Loading branch information
alyssais committed May 31, 2022
1 parent c5d82eb commit 5643714
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 14 deletions.
8 changes: 5 additions & 3 deletions pkgs/stdenv/darwin/make-bootstrap-tools.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
{ pkgspath ? ../../.., test-pkgspath ? pkgspath
, system ? builtins.currentSystem, crossSystem ? null, bootstrapFiles ? null
, localSystem ? { system = builtins.currentSystem; }
, crossSystem ? null
, bootstrapFiles ? null
}:

let cross = if crossSystem != null
Expand All @@ -11,7 +13,7 @@ let cross = if crossSystem != null
in (import "${pkgspath}/pkgs/stdenv/darwin" args').stagesDarwin;
}
else {};
in with import pkgspath ({ inherit system; } // cross // custom-bootstrap);
in with import pkgspath ({ inherit localSystem; } // cross // custom-bootstrap);

let
llvmPackages = llvmPackages_11;
Expand Down Expand Up @@ -364,7 +366,7 @@ in rec {
test-pkgs = import test-pkgspath {
# if the bootstrap tools are for another platform, we should be testing
# that platform.
system = if crossSystem != null then crossSystem else system;
localSystem = if crossSystem != null then crossSystem else localSystem;

stdenvStages = args: let
args' = args // { inherit bootstrapLlvmVersion bootstrapFiles; };
Expand Down
5 changes: 1 addition & 4 deletions pkgs/stdenv/linux/make-bootstrap-tools.nix
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
{ localSystem ? { system = builtins.currentSystem; }
, crossSystem ? null
}:
{ pkgs ? import ../../.. {} }:

let
pkgs = import ../../.. { inherit localSystem crossSystem; };
libc = pkgs.stdenv.cc.libc;
in with pkgs; rec {

Expand Down
16 changes: 9 additions & 7 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1918,13 +1918,15 @@ with pkgs;

brewtarget = libsForQt514.callPackage ../applications/misc/brewtarget { } ;

stdenvBootstrapTools =
let args = { crossSystem = stdenv.hostPlatform.system; }; in
if stdenv.hostPlatform.isDarwin
then callPackage ../stdenv/darwin/make-bootstrap-tools.nix args
else if stdenv.hostPlatform.isLinux
then callPackage ../stdenv/linux/make-bootstrap-tools.nix args
else throw "stdenvBootstrapTools: unknown hostPlatform ${stdenv.hostPlatform.config}";
stdenvBootstrapTools = if stdenv.hostPlatform.isDarwin then
callPackage ../stdenv/darwin/make-bootstrap-tools.nix {
localSystem = stdenv.buildPlatform;
crossSystem =
if stdenv.buildPlatform == stdenv.hostPlatform then null else stdenv.hostPlatform;
}
else if stdenv.hostPlatform.isLinux then
callPackage ../stdenv/linux/make-bootstrap-tools.nix {}
else throw "stdenvBootstrapTools: unknown hostPlatform ${stdenv.hostPlatform.config}";

boxes = callPackage ../tools/text/boxes { };

Expand Down

0 comments on commit 5643714

Please sign in to comment.