mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-18 07:46:09 +01:00
stdenv: cause makeStaticLibraries usage to agree with usage spec
The usage of `makeStaticLibraries` in stdenv/linux/default.nix is prefaced by this comment: # Link GCC statically against GMP etc. This makes sense because # these builds of the libraries are only used by GCC, so it # reduces the size of the stdenv closure. However "these builds of the libraries are only used by GCC" is not actually true. As currently written, the stage4 coreutils links against these customized, static-ified libraries. Beside the fact that the code doesn't actually do what it says, this causes other problems as well. One example is #168983, which arises because have a dynamically-linked binary (coreutils) which is built from statically-linked libraries (libgmp.a); doing this causes mayhem on platforms where `-fstack-protector` needs an auxiliary `libssp.{so,a}` library; we end up with link failures because some parts of the resulting binary want `libssp.so` and other parts want `libssp_nonshared.a`. Let's make the code actually do what the comment says, by moving these definitions into the `gcc-unwrapped` override. This will cause the stage4-coreutils to link against libgmp dynamically, rather than statically. For this reason this commit depends on the previous commit, which allows that to be done without creating a forbidden reference from stdenv-final to the bootstrap-files.
This commit is contained in:
parent
7fd749009f
commit
122b6930b0
1 changed files with 7 additions and 8 deletions
|
@ -304,15 +304,14 @@ in
|
||||||
binutils coreutils gnugrep
|
binutils coreutils gnugrep
|
||||||
perl patchelf linuxHeaders gnum4 bison libidn2 libunistring;
|
perl patchelf linuxHeaders gnum4 bison libidn2 libunistring;
|
||||||
${localSystem.libc} = getLibc prevStage;
|
${localSystem.libc} = getLibc prevStage;
|
||||||
# Link GCC statically against GMP etc. This makes sense because
|
|
||||||
# these builds of the libraries are only used by GCC, so it
|
|
||||||
# reduces the size of the stdenv closure.
|
|
||||||
gmp = super.gmp.override { stdenv = self.makeStaticLibraries self.stdenv; };
|
|
||||||
mpfr = super.mpfr.override { stdenv = self.makeStaticLibraries self.stdenv; };
|
|
||||||
libmpc = super.libmpc.override { stdenv = self.makeStaticLibraries self.stdenv; };
|
|
||||||
isl_0_20 = super.isl_0_20.override { stdenv = self.makeStaticLibraries self.stdenv; };
|
|
||||||
gcc-unwrapped = super.gcc-unwrapped.override {
|
gcc-unwrapped = super.gcc-unwrapped.override {
|
||||||
isl = isl_0_20;
|
# Link GCC statically against GMP etc. This makes sense because
|
||||||
|
# these builds of the libraries are only used by GCC, so it
|
||||||
|
# reduces the size of the stdenv closure.
|
||||||
|
gmp = super.gmp.override { stdenv = self.makeStaticLibraries self.stdenv; };
|
||||||
|
mpfr = super.mpfr.override { stdenv = self.makeStaticLibraries self.stdenv; };
|
||||||
|
libmpc = super.libmpc.override { stdenv = self.makeStaticLibraries self.stdenv; };
|
||||||
|
isl = super.isl_0_20.override { stdenv = self.makeStaticLibraries self.stdenv; };
|
||||||
# Use a deterministically built compiler
|
# Use a deterministically built compiler
|
||||||
# see https://github.com/NixOS/nixpkgs/issues/108475 for context
|
# see https://github.com/NixOS/nixpkgs/issues/108475 for context
|
||||||
reproducibleBuild = true;
|
reproducibleBuild = true;
|
||||||
|
|
Loading…
Reference in a new issue