bintools: Add response file support to ld-wrapper
(#213831)
The motivation behind this is to alleviate the problem described in https://github.com/NixOS/nixpkgs/issues/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 #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 a PR to fix that: https://github.com/tpoechtrager/cctools-port/pull/131 … and I included a patch referencing that fix so that the new `ld-wrapper` still works on macOS.
This commit is contained in:
parent
55aecca307
commit
79484b1707
@ -25,7 +25,9 @@
|
|||||||
, nativeTools, noLibc ? false, nativeLibc, nativePrefix ? ""
|
, nativeTools, noLibc ? false, nativeLibc, nativePrefix ? ""
|
||||||
, propagateDoc ? bintools != null && bintools ? man
|
, propagateDoc ? bintools != null && bintools ? man
|
||||||
, extraPackages ? [], extraBuildCommands ? ""
|
, extraPackages ? [], extraBuildCommands ? ""
|
||||||
, isGNU ? bintools.isGNU or false, isLLVM ? bintools.isLLVM or false
|
, isGNU ? bintools.isGNU or false
|
||||||
|
, isLLVM ? bintools.isLLVM or false
|
||||||
|
, isCCTools ? bintools.isCCTools or false
|
||||||
, buildPackages ? {}
|
, buildPackages ? {}
|
||||||
, targetPackages ? {}
|
, targetPackages ? {}
|
||||||
, useMacosReexportHack ? false
|
, useMacosReexportHack ? false
|
||||||
@ -139,6 +141,7 @@ stdenv.mkDerivation {
|
|||||||
local dst="$1"
|
local dst="$1"
|
||||||
local wrapper="$2"
|
local wrapper="$2"
|
||||||
export prog="$3"
|
export prog="$3"
|
||||||
|
export use_response_file_by_default=${if isCCTools then "1" else "0"}
|
||||||
substituteAll "$wrapper" "$out/bin/$dst"
|
substituteAll "$wrapper" "$out/bin/$dst"
|
||||||
chmod +x "$out/bin/$dst"
|
chmod +x "$out/bin/$dst"
|
||||||
}
|
}
|
||||||
|
@ -250,10 +250,18 @@ fi
|
|||||||
|
|
||||||
PATH="$path_backup"
|
PATH="$path_backup"
|
||||||
# Old bash workaround, see above.
|
# Old bash workaround, see above.
|
||||||
@prog@ \
|
|
||||||
${extraBefore+"${extraBefore[@]}"} \
|
if (( "${NIX_LD_USE_RESPONSE_FILE:-@use_response_file_by_default@}" >= 1 )); then
|
||||||
${params+"${params[@]}"} \
|
@prog@ @<(printf "%q\n" \
|
||||||
${extraAfter+"${extraAfter[@]}"}
|
${extraBefore+"${extraBefore[@]}"} \
|
||||||
|
${params+"${params[@]}"} \
|
||||||
|
${extraAfter+"${extraAfter[@]}"})
|
||||||
|
else
|
||||||
|
@prog@ \
|
||||||
|
${extraBefore+"${extraBefore[@]}"} \
|
||||||
|
${params+"${params[@]}"} \
|
||||||
|
${extraAfter+"${extraAfter[@]}"}
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -e "@out@/nix-support/post-link-hook" ]; then
|
if [ -e "@out@/nix-support/post-link-hook" ]; then
|
||||||
source @out@/nix-support/post-link-hook
|
source @out@/nix-support/post-link-hook
|
||||||
|
@ -89,6 +89,7 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit targetPrefix;
|
inherit targetPrefix;
|
||||||
|
isCCTools = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
, libuuid
|
, libuuid
|
||||||
, libobjc ? null, maloader ? null
|
, libobjc ? null, maloader ? null
|
||||||
, enableTapiSupport ? true, libtapi
|
, enableTapiSupport ? true, libtapi
|
||||||
|
, fetchpatch
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -42,6 +43,14 @@ stdenv.mkDerivation {
|
|||||||
patches = [
|
patches = [
|
||||||
./ld-ignore-rpath-link.patch
|
./ld-ignore-rpath-link.patch
|
||||||
./ld-rpath-nonfinal.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/025899b7b3593dedb0c681e689e57c0e7bbd9b80.patch";
|
||||||
|
hash = "sha256-SWVUzFaJHH2fu9y8RcU3Nx/QKx60hPE5zFx0odYDeQs=";
|
||||||
|
})
|
||||||
]
|
]
|
||||||
++ lib.optional stdenv.isDarwin ./darwin-no-memstream.patch;
|
++ lib.optional stdenv.isDarwin ./darwin-no-memstream.patch;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user