diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2017-10-02 17:57:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-02 17:57:30 +0200 |
commit | 3c3d8710b5d61baace6e412fd4b765a3a50e4188 (patch) | |
tree | 5357868c07d3b391d9ebcb95a6eafe7bace0968e /pkgs/build-support | |
parent | f795d78d86b453c7bc34ada886025edc0433e512 (diff) | |
parent | fdbda216b1864a23cb2582fa93793baa32821f46 (diff) | |
download | nixlib-3c3d8710b5d61baace6e412fd4b765a3a50e4188.tar nixlib-3c3d8710b5d61baace6e412fd4b765a3a50e4188.tar.gz nixlib-3c3d8710b5d61baace6e412fd4b765a3a50e4188.tar.bz2 nixlib-3c3d8710b5d61baace6e412fd4b765a3a50e4188.tar.lz nixlib-3c3d8710b5d61baace6e412fd4b765a3a50e4188.tar.xz nixlib-3c3d8710b5d61baace6e412fd4b765a3a50e4188.tar.zst nixlib-3c3d8710b5d61baace6e412fd4b765a3a50e4188.zip |
Merge pull request #29568 from obsidiansystems/cc-wrapper-32
cc-wrapper: Clean up dynamic linking with x86 multilib
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/cc-wrapper/cc-wrapper.sh | 4 | ||||
-rw-r--r-- | pkgs/build-support/cc-wrapper/ld-wrapper.sh | 33 |
2 files changed, 29 insertions, 8 deletions
diff --git a/pkgs/build-support/cc-wrapper/cc-wrapper.sh b/pkgs/build-support/cc-wrapper/cc-wrapper.sh index e6f5a5a9f7d8..f1f56cf5cec4 100644 --- a/pkgs/build-support/cc-wrapper/cc-wrapper.sh +++ b/pkgs/build-support/cc-wrapper/cc-wrapper.sh @@ -61,10 +61,6 @@ while (( "$n" < "$nParams" )); do cppInclude=0 elif [ "${p:0:1}" != - ]; then nonFlagArgs=1 - elif [ "$p" = -m32 ]; then - if [ -e @out@/nix-support/dynamic-linker-m32 ]; then - NIX_@infixSalt@_LDFLAGS+=" -dynamic-linker $(< @out@/nix-support/dynamic-linker-m32)" - fi fi n+=1 done diff --git a/pkgs/build-support/cc-wrapper/ld-wrapper.sh b/pkgs/build-support/cc-wrapper/ld-wrapper.sh index 355ea8818981..bbab3c43d6f8 100644 --- a/pkgs/build-support/cc-wrapper/ld-wrapper.sh +++ b/pkgs/build-support/cc-wrapper/ld-wrapper.sh @@ -67,12 +67,22 @@ fi extraAfter+=($NIX_@infixSalt@_LDFLAGS_AFTER) +# Three tasks: +# +# 1. Find all -L... switches for rpath +# +# 2. Find relocatable flag for build id. +# +# 3. Choose 32-bit dynamic linker if needed declare -a libDirs declare -A libs -relocatable= +declare -i relocatable=0 link32=0 -# Find all -L... switches for rpath, and relocatable flags for build id. -if [ "$NIX_@infixSalt@_DONT_SET_RPATH" != 1 ] || [ "$NIX_@infixSalt@_SET_BUILD_ID" = 1 ]; then +if + [ "$NIX_@infixSalt@_DONT_SET_RPATH" != 1 ] \ + || [ "$NIX_@infixSalt@_SET_BUILD_ID" = 1 ] \ + || [ -e @out@/nix-support/dynamic-linker-m32 ] +then prev= # Old bash thinks empty arrays are undefined, ugh. for p in \ @@ -87,6 +97,13 @@ if [ "$NIX_@infixSalt@_DONT_SET_RPATH" != 1 ] || [ "$NIX_@infixSalt@_SET_BUILD_I -l) libs["lib${p}.so"]=1 ;; + -m) + # Presumably only the last `-m` flag has any effect. + case "$p" in + elf_i386) link32=1;; + *) link32=0;; + esac + ;; -dynamic-linker | -plugin) # Ignore this argument, or it will match *.so and be added to rpath. ;; @@ -112,6 +129,14 @@ if [ "$NIX_@infixSalt@_DONT_SET_RPATH" != 1 ] || [ "$NIX_@infixSalt@_SET_BUILD_I done fi +if [ -e "@out@/nix-support/dynamic-linker-m32" ] && (( "$link32" )); then + # We have an alternate 32-bit linker and we're producing a 32-bit ELF, let's + # use it. + extraAfter+=( + '-dynamic-linker' + "$(< @out@/nix-support/dynamic-linker-m32)" + ) +fi # Add all used dynamic libraries to the rpath. if [ "$NIX_@infixSalt@_DONT_SET_RPATH" != 1 ]; then @@ -154,7 +179,7 @@ fi # Only add --build-id if this is a final link. FIXME: should build gcc # with --enable-linker-build-id instead? -if [ "$NIX_@infixSalt@_SET_BUILD_ID" = 1 ] && [ ! "$relocatable" ]; then +if [ "$NIX_@infixSalt@_SET_BUILD_ID" = 1 ] && ! (( "$relocatable" )); then extraAfter+=(--build-id) fi |