Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 4e4f7a2f6684
Choose a base ref
...
head repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: bb37fc90c751
Choose a head ref
  • 3 commits
  • 7 files changed
  • 2 contributors

Commits on May 19, 2017

  1. glibc: Fix for cross

    Ericson2314 committed May 19, 2017

    Verified

    This commit was signed with the committer’s verified signature. The key has expired.
    panzarino Zach Panzarino
    Copy the full SHA
    7e09602 View commit details

Commits on May 21, 2017

  1. glibc: Simplify derivation further

    No native hashes should be changed with this commit
    default.nix's cross hash should also not be changed
    Ericson2314 committed May 21, 2017

    Verified

    This commit was signed with the committer’s verified signature. The key has expired.
    panzarino Zach Panzarino
    Copy the full SHA
    25edc47 View commit details
  2. Merge pull request #25897 from obsidiansystems/glibc-cross

    glibc: Clean up cross compilation
    Ericson2314 authored May 21, 2017

    Verified

    This commit was signed with the committer’s verified signature. The key has expired.
    panzarino Zach Panzarino
    Copy the full SHA
    bb37fc9 View commit details
71 changes: 54 additions & 17 deletions pkgs/development/libraries/glibc/common.nix
Original file line number Diff line number Diff line change
@@ -1,23 +1,34 @@
/* Build configuration used to build glibc, Info files, and locale
information. */

cross:

{ name, fetchurl, lib, stdenv, installLocales ? false
, gccCross ? null, linuxHeaders ? null
, profilingLibraries ? false, meta
, withGd ? false, gd ? null, libpng ? null
, preConfigure ? "", ... }@args:
{ stdenv, lib, fetchurl
, gd ? null, libpng ? null
, buildPlatform, hostPlatform
, buildPackages
}:

{ name
, withLinuxHeaders ? false
, profilingLibraries ? false
, installLocales ? false
, withGd ? false
, meta
, ...
} @ args:

let
inherit (buildPackages) linuxHeaders;
version = "2.25";
sha256 = "067bd9bb3390e79aa45911537d13c3721f1d9d3769931a30c2681bfee66f23a0";
cross = if buildPlatform != hostPlatform then hostPlatform else null;
in

assert cross != null -> gccCross != null;
assert withLinuxHeaders -> linuxHeaders != null;
assert withGd -> gd != null && libpng != null;

stdenv.mkDerivation ({
inherit linuxHeaders installLocales;
inherit installLocales;
linuxHeaders = if withLinuxHeaders then linuxHeaders else null;

# The host/target system.
crossConfig = if cross != null then cross.config else null;
@@ -84,13 +95,13 @@ stdenv.mkDerivation ({
"--enable-obsolete-rpc"
"--sysconfdir=/etc"
"--enable-stackguard-randomization"
(if linuxHeaders != null
(if withLinuxHeaders
then "--with-headers=${linuxHeaders}/include"
else "--without-headers")
(if profilingLibraries
then "--enable-profile"
else "--disable-profile")
] ++ lib.optionals (cross == null && linuxHeaders != null) [
] ++ lib.optionals (cross == null && withLinuxHeaders) [
"--enable-kernel=2.6.32"
] ++ lib.optionals (cross != null) [
(if cross.withTLS then "--with-tls" else "--without-tls")
@@ -113,18 +124,16 @@ 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
# bootstrap.
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 [ "withLinuxHeaders" "withGd" ]) //

{
name = name + "-${version}" +
@@ -153,7 +162,22 @@ stdenv.mkDerivation ({
''makeFlags="$makeFlags BUILD_LDFLAGS=-Wl,-rpath,${stdenv.cc.libc}/lib"''
}
${preConfigure}
'' + lib.optionalString (cross != null) ''
sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig"
cat > config.cache << "EOF"
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
# Only due to a problem in gcc configure scripts:
libc_cv_sparc64_tls=${if cross.withTLS then "yes" else "no"}
EOF
export BUILD_CC=gcc
export CC="$crossConfig-gcc"
export AR="$crossConfig-ar"
export RANLIB="$crossConfig-ranlib"
'';

preBuild = lib.optionalString withGd "unset NIX_DONT_SET_RPATH";
@@ -176,4 +200,17 @@ stdenv.mkDerivation ({
maintainers = [ lib.maintainers.eelco ];
platforms = lib.platforms.linux;
} // meta;
}

// lib.optionalAttrs (cross != null) {
preInstall = null; # clobber the native hook

dontStrip = true;

separateDebugInfo = false; # this is currently broken for crossDrv

# To avoid a dependency on the build system 'bash'.
preFixup = ''
rm $bin/bin/{ldd,tzselect,catchsegv,xtrace}
'';
})
50 changes: 6 additions & 44 deletions pkgs/development/libraries/glibc/default.nix
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
{ lib, stdenv, fetchurl, linuxHeaders
{ stdenv, callPackage
, withLinuxHeaders ? true
, installLocales ? true
, profilingLibraries ? false
, gccCross ? null
, withGd ? false, gd ? null, libpng ? null
, withGd ? false
}:

assert stdenv.cc.isGNU;

let
build = import ./common.nix;
cross = if gccCross != null then gccCross.target else null;
in
build cross ({
name = "glibc" + lib.optionalString withGd "-gd";
callPackage ./common.nix { inherit stdenv; } {
name = "glibc" + stdenv.lib.optionalString withGd "-gd";

inherit lib stdenv fetchurl linuxHeaders installLocales
profilingLibraries gccCross withGd gd libpng;
inherit withLinuxHeaders profilingLibraries installLocales withGd;

NIX_NO_SELF_RPATH = true;

@@ -104,36 +99,3 @@ in

meta.description = "The GNU C Library";
}

//

(if cross != null
then {
preConfigure = ''
sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig"
cat > config.cache << "EOF"
libc_cv_forced_unwind=yes
libc_cv_c_cleanup=yes
libc_cv_gnu89_inline=yes
# Only due to a problem in gcc configure scripts:
libc_cv_sparc64_tls=${if cross.withTLS then "yes" else "no"}
EOF
export BUILD_CC=gcc
export CC="$crossConfig-gcc"
export AR="$crossConfig-ar"
export RANLIB="$crossConfig-ranlib"
dontStrip=1
'';

preInstall = null; # clobber the native hook

separateDebugInfo = false; # this is currently broken for crossDrv

# To avoid a dependency on the build system 'bash'.
preFixup = ''
rm $bin/bin/{ldd,tzselect,catchsegv,xtrace}
'';
}
else {}))
9 changes: 2 additions & 7 deletions pkgs/development/libraries/glibc/info.nix
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
{ lib, stdenv, fetchurl, texinfo, perl }:
{ callPackage, texinfo, perl }:

let build = import ./common.nix; in

/* null cross builder */
build null {
callPackage ./common.nix {} {
name = "glibc-info";

inherit fetchurl stdenv lib;

outputs = [ "out" ];

configureFlags = [ "--enable-add-ons" ];
9 changes: 4 additions & 5 deletions pkgs/development/libraries/glibc/locales.nix
Original file line number Diff line number Diff line change
@@ -6,14 +6,13 @@
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/localedata/SUPPORTED?cvsroot=glibc
*/

{ lib, stdenv, fetchurl, writeText, allLocales ? true, locales ? ["en_US.UTF-8/UTF-8"] }:
{ stdenv, callPackage, writeText
, allLocales ? true, locales ? [ "en_US.UTF-8/UTF-8" ]
}:

let build = import ./common.nix; in

build null {
callPackage ./common.nix { inherit stdenv; } {
name = "glibc-locales";

inherit fetchurl stdenv lib;
installLocales = true;

builder = ./locales-builder.sh;
2 changes: 1 addition & 1 deletion pkgs/stdenv/linux/make-bootstrap-tools-cross.nix
Original file line number Diff line number Diff line change
@@ -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;
19 changes: 14 additions & 5 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
@@ -7762,21 +7762,30 @@ with pkgs;

glibc = callPackage ../development/libraries/glibc {
installLocales = config.glibc.locales or false;
gccCross = null;
};

glibc_memusage = callPackage ../development/libraries/glibc {
installLocales = false;
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
1 change: 1 addition & 0 deletions pkgs/top-level/release-cross.nix
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@ let
common = {
buildPackages.binutils = nativePlatforms;
gmp = nativePlatforms;
libcCross = nativePlatforms;
};

gnuCommon = lib.recursiveUpdate common {