diff options
author | Vladimír Čunát <v@cunat.cz> | 2021-06-30 19:47:13 +0200 |
---|---|---|
committer | Vladimír Čunát <v@cunat.cz> | 2021-07-06 16:02:11 +0200 |
commit | 5a71fa84478ae86d2306aba0e9c4d79d1970ecb5 (patch) | |
tree | 77f69099d44d40fdc9da6ca78683fad52c10867d /pkgs/stdenv | |
parent | e9a1b2009ec9a5713b930d3ab6f4c908ba48498b (diff) | |
download | nixlib-5a71fa84478ae86d2306aba0e9c4d79d1970ecb5.tar nixlib-5a71fa84478ae86d2306aba0e9c4d79d1970ecb5.tar.gz nixlib-5a71fa84478ae86d2306aba0e9c4d79d1970ecb5.tar.bz2 nixlib-5a71fa84478ae86d2306aba0e9c4d79d1970ecb5.tar.lz nixlib-5a71fa84478ae86d2306aba0e9c4d79d1970ecb5.tar.xz nixlib-5a71fa84478ae86d2306aba0e9c4d79d1970ecb5.tar.zst nixlib-5a71fa84478ae86d2306aba0e9c4d79d1970ecb5.zip |
stdenv bootstrap: hack around glibc version mismatch
With this we shouldn't need other workarounds for the LTO problems.
Diffstat (limited to 'pkgs/stdenv')
-rw-r--r-- | pkgs/stdenv/linux/default.nix | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 63a37d54547d..1fbd3cba27ef 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -258,6 +258,25 @@ in # Rewrap the binutils with the new glibc, so both the next # stage's wrappers use it. libc = getLibc self; + + # Unfortunately, when building gcc in the next stage, its LTO plugin + # would use the final libc but `ld` would use the bootstrap one, + # and that can fail to load. Therefore we upgrade `ld` to use newer libc; + # apparently the interpreter needs to match libc, too. + bintools = self.stdenvNoCC.mkDerivation { + inherit (prevStage.bintools.bintools) name; + dontUnpack = true; + dontBuild = true; + # We wouldn't need to *copy* all, but it's easier and the result is temporary anyway. + installPhase = '' + mkdir -p "$out"/bin + cp -a '${prevStage.bintools.bintools}'/bin/* "$out"/bin/ + chmod +w "$out"/bin/ld.bfd + patchelf --set-interpreter '${getLibc self}'/lib/ld*.so.? \ + --set-rpath "${getLibc self}/lib:$(patchelf --print-rpath "$out"/bin/ld.bfd)" \ + "$out"/bin/ld.bfd + ''; + }; }; }; }) |