diff --git a/pkgs/development/libraries/glibc/common.nix b/pkgs/development/libraries/glibc/common.nix index ec9f94d00d8..74fb0050109 100644 --- a/pkgs/development/libraries/glibc/common.nix +++ b/pkgs/development/libraries/glibc/common.nix @@ -4,17 +4,20 @@ cross: { name, fetchurl, lib, stdenv, installLocales ? false -, gccCross ? null, linuxHeaders ? null +, linuxHeaders ? null , profilingLibraries ? false, meta , withGd ? false, gd ? null, libpng ? null -, preConfigure ? "", ... }@args: +, preConfigure ? "" +, buildPackages ? {} +, ... +} @ args: let version = "2.25"; sha256 = "067bd9bb3390e79aa45911537d13c3721f1d9d3769931a30c2681bfee66f23a0"; in -assert cross != null -> gccCross != null; +assert cross != null -> buildPackages.stdenv ? cc; stdenv.mkDerivation ({ inherit linuxHeaders installLocales; @@ -113,8 +116,8 @@ stdenv.mkDerivation ({ outputs = [ "out" "bin" "dev" "static" ]; - buildInputs = lib.optionals (cross != null) [ gccCross ] - ++ lib.optionals withGd [ gd libpng ]; + nativeBuildInputs = lib.optional (cross != null) buildPackages.stdenv.cc; + buildInputs = lib.optionals withGd [ gd libpng ]; # Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to # prevent a retained dependency on the bootstrap tools in the stdenv-linux @@ -122,9 +125,7 @@ stdenv.mkDerivation ({ BASH_SHELL = "/bin/sh"; } -# Remove the `gccCross' attribute so that the *native* glibc store path -# doesn't depend on whether `gccCross' is null or not. -// (removeAttrs args [ "lib" "gccCross" "fetchurl" "withGd" "gd" "libpng" ]) // +// (removeAttrs args [ "lib" "buildPackages" "fetchurl" "withGd" "gd" "libpng" ]) // { name = name + "-${version}" + diff --git a/pkgs/development/libraries/glibc/default.nix b/pkgs/development/libraries/glibc/default.nix index 4f9eb2d0714..7295e4d62f4 100644 --- a/pkgs/development/libraries/glibc/default.nix +++ b/pkgs/development/libraries/glibc/default.nix @@ -1,21 +1,23 @@ -{ lib, stdenv, fetchurl, linuxHeaders +{ lib, stdenv, fetchurl , installLocales ? true , profilingLibraries ? false -, gccCross ? null , withGd ? false, gd ? null, libpng ? null +, buildPlatform, hostPlatform +, buildPackages }: assert stdenv.cc.isGNU; let build = import ./common.nix; - cross = if gccCross != null then gccCross.target else null; + cross = if buildPlatform != hostPlatform then hostPlatform else null; + inherit (buildPackages) linuxHeaders; in build cross ({ name = "glibc" + lib.optionalString withGd "-gd"; - inherit lib stdenv fetchurl linuxHeaders installLocales - profilingLibraries gccCross withGd gd libpng; + inherit lib stdenv buildPackages fetchurl linuxHeaders installLocales + profilingLibraries withGd gd libpng; NIX_NO_SELF_RPATH = true; diff --git a/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix b/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix index 77471e6dfdb..50fd563e7c2 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools-cross.nix @@ -92,7 +92,7 @@ let pkgs = pkgsFun ({inherit system;} // selectedCrossSystem); - glibc = pkgs.buildPackages.libcCross; + glibc = pkgs.libcCross; bash = pkgs.bash; findutils = pkgs.findutils; diffutils = pkgs.diffutils; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d2a171a732d..32c4f0f95c6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7700,7 +7700,6 @@ with pkgs; glibc = callPackage ../development/libraries/glibc { installLocales = config.glibc.locales or false; - gccCross = null; }; glibc_memusage = callPackage ../development/libraries/glibc { @@ -7708,13 +7707,23 @@ with pkgs; withGd = true; }; - glibcCross = forcedNativePackages.glibc.override { - gccCross = gccCrossStageStatic; - inherit (forcedNativePackages) linuxHeaders; + # Being redundant to avoid cycles on boot. TODO: find a better way + glibcCross = callPackage ../development/libraries/glibc { + installLocales = config.glibc.locales or false; + # Can't just overrideCC, because then the stdenv-cross mkDerivation will be + # thrown away. TODO: find a better solution for this. + stdenv = buildPackages.makeStdenvCross + buildPackages.buildPackages.stdenv + buildPackages.targetPlatform + buildPackages.binutils + buildPackages.gccCrossStageStatic; }; # We can choose: - libcCrossChooser = name: if name == "glibc" then glibcCross + libcCrossChooser = name: + # libc is hackily often used from the previous stage. This `or` + # hack fixes the hack, *sigh*. + /**/ if name == "glibc" then __targetPackages.glibcCross or glibcCross else if name == "uclibc" then uclibcCross else if name == "msvcrt" then windows.mingw_w64 else if name == "libSystem" then darwin.xcode