From 11fe2fc3cfccb95f7b99f2a2d1096c851868e582 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Fri, 17 Sep 2021 16:59:12 +0200 Subject: [PATCH] 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. --- pkgs/build-support/bintools-wrapper/default.nix | 10 ++++++++++ .../bintools-wrapper/gnu-binutils-strip-wrapper.sh | 4 ++++ pkgs/build-support/setup-hooks/strip.sh | 2 +- pkgs/stdenv/linux/default.nix | 7 +------ 4 files changed, 16 insertions(+), 7 deletions(-) create mode 100644 pkgs/build-support/bintools-wrapper/gnu-binutils-strip-wrapper.sh diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index 3d64639d33fa..53f367b9b84d 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -324,6 +324,16 @@ stdenv.mkDerivation { 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 ### diff --git a/pkgs/build-support/bintools-wrapper/gnu-binutils-strip-wrapper.sh b/pkgs/build-support/bintools-wrapper/gnu-binutils-strip-wrapper.sh new file mode 100644 index 000000000000..5b5136e3d14c --- /dev/null +++ b/pkgs/build-support/bintools-wrapper/gnu-binutils-strip-wrapper.sh @@ -0,0 +1,4 @@ +#! @shell@ +# shellcheck shell=bash + +exec @prog@ --enable-deterministic-archives "$@" diff --git a/pkgs/build-support/setup-hooks/strip.sh b/pkgs/build-support/setup-hooks/strip.sh index c31a50eba57b..2d8e66a89fa3 100644 --- a/pkgs/build-support/setup-hooks/strip.sh +++ b/pkgs/build-support/setup-hooks/strip.sh @@ -51,7 +51,7 @@ stripDirs() { if [ -n "${dirs}" ]; then 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 fi } diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 1fbd3cba27ef..d2c74f7722d3 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -375,12 +375,7 @@ in targetPlatform = localSystem; inherit config; - preHook = '' - # Make "strip" produce deterministic output, by setting - # timestamps etc. to a fixed value. - commonStripFlags="--enable-deterministic-archives" - ${commonPreHook} - ''; + preHook = commonPreHook; initialPath = ((import ../common-path.nix) {pkgs = prevStage;});