glibc: Fix for cross

Changed files
+31 -19
pkgs
development
libraries
stdenv
top-level
+9 -8
pkgs/development/libraries/glibc/common.nix
···
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;
···
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
···
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}" +
+7 -5
pkgs/development/libraries/glibc/default.nix
···
-
{ 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;
+1 -1
pkgs/stdenv/linux/make-bootstrap-tools-cross.nix
···
pkgs = pkgsFun ({inherit system;} // selectedCrossSystem);
-
glibc = pkgs.buildPackages.libcCross;
+
glibc = pkgs.libcCross;
bash = pkgs.bash;
findutils = pkgs.findutils;
diffutils = pkgs.diffutils;
+14 -5
pkgs/top-level/all-packages.nix
···
glibc = callPackage ../development/libraries/glibc {
installLocales = config.glibc.locales or false;
-
gccCross = null;
};
glibc_memusage = callPackage ../development/libraries/glibc {
···
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