stdenv: move --enable-deterministic-archives flag into GNU wrapper

`--enable-deterministic-archives` is a GNU specific strip flag and
causes other strip implementations (for example LLVM's, see #138013)
to fail. Since strip failures are ignored, this means that stripping
doesn't work at all in certain situation (causing unnecessary
dependencies etc.).

To fix this, no longer pass `--enable-deterministic-archives`
unconditionally, but instead add it in a GNU binutils specific strip
wrapper only.

`commonStripFlags` was only used for this flag, so we can remove
it altogether.

Future work could be to make a generic strip wrapper, with support for
nix-support/strip-flags-{before,after} and NIX_STRIP_FLAGS_{BEFORE,AFTER}.
This possibly overkill and unnecessary though -- also with the
additional challenge of incorporating the darwin strip wrapper somehow.
This commit is contained in:
sternenseemann 2021-09-17 16:59:12 +02:00
parent 1174f3030c
commit 11fe2fc3cf
4 changed files with 16 additions and 7 deletions

View file

@ -324,6 +324,16 @@ stdenv.mkDerivation {
echo "-arch ${targetPlatform.darwinArch}" >> $out/nix-support/libc-ldflags echo "-arch ${targetPlatform.darwinArch}" >> $out/nix-support/libc-ldflags
'' ''
##
## GNU specific extra strip flags
##
# TODO(@sternenseemann): make a generic strip wrapper?
+ optionalString (bintools.isGNU or false) ''
wrap ${targetPrefix}strip ${./gnu-binutils-strip-wrapper.sh} \
"${bintools_bin}/bin/${targetPrefix}strip"
''
### ###
### Remove LC_UUID ### Remove LC_UUID
### ###

View file

@ -0,0 +1,4 @@
#! @shell@
# shellcheck shell=bash
exec @prog@ --enable-deterministic-archives "$@"

View file

@ -51,7 +51,7 @@ stripDirs() {
if [ -n "${dirs}" ]; then if [ -n "${dirs}" ]; then
header "stripping (with command $cmd and flags $stripFlags) in$dirs" header "stripping (with command $cmd and flags $stripFlags) in$dirs"
find $dirs -type f -exec $cmd $commonStripFlags $stripFlags '{}' \; 2>/dev/null find $dirs -type f -exec $cmd $stripFlags '{}' \; 2>/dev/null
stopNest stopNest
fi fi
} }

View file

@ -375,12 +375,7 @@ in
targetPlatform = localSystem; targetPlatform = localSystem;
inherit config; inherit config;
preHook = '' preHook = commonPreHook;
# Make "strip" produce deterministic output, by setting
# timestamps etc. to a fixed value.
commonStripFlags="--enable-deterministic-archives"
${commonPreHook}
'';
initialPath = initialPath =
((import ../common-path.nix) {pkgs = prevStage;}); ((import ../common-path.nix) {pkgs = prevStage;});