stdenv bootstrap: hack around glibc version mismatch
With this we shouldn't need other workarounds for the LTO problems.
This commit is contained in:
parent
e9a1b2009e
commit
5a71fa8447
1 changed files with 19 additions and 0 deletions
|
@ -258,6 +258,25 @@ in
|
||||||
# Rewrap the binutils with the new glibc, so both the next
|
# Rewrap the binutils with the new glibc, so both the next
|
||||||
# stage's wrappers use it.
|
# stage's wrappers use it.
|
||||||
libc = getLibc self;
|
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
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue