Skip to content

Commit

Permalink
bintools: Add response file support to ld-wrapper
Browse files Browse the repository at this point in the history
The motivation behind this is to alleviate the problem
described in NixOS#41340.
I'm not sure if this completely fixes the problem, but it
eliminates one more area where we can exceed command line
length limits.

This is essentially the same change as in NixOS#112449,
except for `ld-wrapper.sh` instead of `cc-wrapper.sh`.

However, that change alone was not enough; on macOS the
`ld` provided by `darwin.cctools` fails if you use process
substitution to generate the response file, so I put up two
PRs to fix that:

tpoechtrager/cctools-port#131
tpoechtrager/cctools-port#132

… and I included a patch referencing that fix so that the
new `ld-wrapper` still works on macOS.
  • Loading branch information
Gabriella439 committed Feb 22, 2023
1 parent 6761cd0 commit 17f8f90
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 4 deletions.
1 change: 1 addition & 0 deletions pkgs/build-support/bintools-wrapper/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ stdenv.mkDerivation {
local dst="$1"
local wrapper="$2"
export prog="$3"
export use_response_file_by_default=${if (bintools.isCCTools or false) then "1" else "0"}
substituteAll "$wrapper" "$out/bin/$dst"
chmod +x "$out/bin/$dst"
}
Expand Down
16 changes: 12 additions & 4 deletions pkgs/build-support/bintools-wrapper/ld-wrapper.sh
Original file line number Diff line number Diff line change
Expand Up @@ -250,10 +250,18 @@ fi

PATH="$path_backup"
# Old bash workaround, see above.
@prog@ \
${extraBefore+"${extraBefore[@]}"} \
${params+"${params[@]}"} \
${extraAfter+"${extraAfter[@]}"}

if (( "${NIX_LD_USE_RESPONSE_FILE:-@use_response_file_by_default@}" >= 1 )); then
@prog@ @<(printf "%q\n" \
${extraBefore+"${extraBefore[@]}"} \
${params+"${params[@]}"} \
${extraAfter+"${extraAfter[@]}"})
else
@prog@ \
${extraBefore+"${extraBefore[@]}"} \
${params+"${params[@]}"} \
${extraAfter+"${extraAfter[@]}"}
fi

if [ -e "@out@/nix-support/post-link-hook" ]; then
source @out@/nix-support/post-link-hook
Expand Down
1 change: 1 addition & 0 deletions pkgs/os-specific/darwin/binutils/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ stdenv.mkDerivation {

passthru = {
inherit targetPrefix;
isCCTools = true;
};

meta = {
Expand Down
9 changes: 9 additions & 0 deletions pkgs/os-specific/darwin/cctools/port.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
, libuuid
, libobjc ? null, maloader ? null
, enableTapiSupport ? true, libtapi
, fetchpatch
}:

let
Expand Down Expand Up @@ -42,6 +43,14 @@ stdenv.mkDerivation {
patches = [
./ld-ignore-rpath-link.patch
./ld-rpath-nonfinal.patch
(fetchpatch {
url = "https://github.com/tpoechtrager/cctools-port/commit/4a734070cd2838e49658464003de5b92271d8b9e.patch";
hash = "sha256-72KaJyu7CHXxJJ1GNq/fz+kW1RslO3UaKI91LhBtiXA=";
})
(fetchpatch {
url = "https://github.com/MercuryTechnologies/cctools-port/commit/e1f2802ea4bfde6fe00d2d815303392b11a262eb.patch";
hash = "sha256-SWVUzFaJHH2fu9y8RcU3Nx/QKx60hPE5zFx0odYDeQs=";
})
]
++ lib.optional stdenv.isDarwin ./darwin-no-memstream.patch;

Expand Down

0 comments on commit 17f8f90

Please sign in to comment.