Merge branch 'master' into staging
Let's drop i686-linux here as well.
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
, isGNU ? false, isClang ? cc.isClang or false, gnugrep ? null
|
||||
, buildPackages ? {}, hostPlatform, targetPlatform
|
||||
, runCommand ? null
|
||||
, useMacosReexportHack ? false
|
||||
}:
|
||||
|
||||
with stdenv.lib;
|
||||
@@ -278,7 +279,15 @@ stdenv.mkDerivation {
|
||||
ln -s $ldPath/${prefix}as $out/bin/${prefix}as
|
||||
fi
|
||||
|
||||
wrap ${prefix}ld ${preWrap ./ld-wrapper.sh} ''${ld:-$ldPath/${prefix}ld}
|
||||
'' + (if !useMacosReexportHack then ''
|
||||
wrap ${prefix}ld ${./ld-wrapper.sh} ''${ld:-$ldPath/${prefix}ld}
|
||||
'' else ''
|
||||
export binPrefix=${prefix}
|
||||
ldInner="${prefix}ld-reexport-delegate"
|
||||
wrap "$ldInner" ${./macos-sierra-reexport-hack.bash} ''${ld:-$ldPath/${prefix}ld}
|
||||
wrap "${prefix}ld" ${./ld-wrapper.sh} "$out/bin/$ldInner"
|
||||
unset ldInner
|
||||
'') + ''
|
||||
|
||||
if [ -e ${binutils_bin}/bin/${prefix}ld.gold ]; then
|
||||
wrap ${prefix}ld.gold ${preWrap ./ld-wrapper.sh} ${binutils_bin}/bin/${prefix}ld.gold
|
||||
@@ -386,5 +395,7 @@ stdenv.mkDerivation {
|
||||
{ description =
|
||||
stdenv.lib.attrByPath ["meta" "description"] "System C compiler" cc_
|
||||
+ " (wrapper script)";
|
||||
};
|
||||
} // optionalAttrs useMacosReexportHack {
|
||||
platforms = stdenv.lib.platforms.darwin;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
#! @shell@
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
path_backup="$PATH"
|
||||
if [ -n "@coreutils_bin@" ]; then
|
||||
PATH="@coreutils_bin@/bin"
|
||||
fi
|
||||
|
||||
declare -r recurThreshold=300
|
||||
|
||||
declare overflowCount=0
|
||||
for ((n=0; n < $#; ++n)); do
|
||||
case "${!n}" in
|
||||
-l*) let overflowCount+=1 ;;
|
||||
-reexport-l*) let overflowCount+=1 ;;
|
||||
*) ;;
|
||||
esac
|
||||
done
|
||||
|
||||
declare -a allArgs=()
|
||||
|
||||
if (( "$overflowCount" <= "$recurThreshold" )); then
|
||||
allArgs=("$@")
|
||||
else
|
||||
declare -a childrenLookup=() childrenLink=()
|
||||
|
||||
while (( $# )); do
|
||||
case "$1" in
|
||||
-L/*)
|
||||
childrenLookup+=("$1")
|
||||
allArgs+=("$1")
|
||||
;;
|
||||
-L)
|
||||
echo "cctools LD does not support '-L foo' or '-l foo'" >&2
|
||||
exit 1
|
||||
;;
|
||||
-l)
|
||||
echo "cctools LD does not support '-L foo' or '-l foo'" >&2
|
||||
exit 1
|
||||
;;
|
||||
-lazy_library | -lazy_framework | -lto_library)
|
||||
# We aren't linking any "azy_library", "to_library", etc.
|
||||
allArgs+=("$1")
|
||||
;;
|
||||
-lazy-l | -weak-l) allArgs+=("$1") ;;
|
||||
# We can't so easily prevent header issues from these.
|
||||
-lSystem) allArgs+=("$1") ;;
|
||||
# Special case as indirection seems like a bad idea for something
|
||||
# so fundamental. Can be removed for simplicity.
|
||||
-l?* | -reexport-l?*) childrenLink+=("$1") ;;
|
||||
*) allArgs+=("$1") ;;
|
||||
esac
|
||||
|
||||
shift
|
||||
done
|
||||
|
||||
declare n=0
|
||||
while (( $n < "${#childrenLink[@]}" )); do
|
||||
if [[ "${childrenLink[n]}" = -l* ]]; then
|
||||
childrenLink[n]="-reexport${childrenLink[n]}"
|
||||
fi
|
||||
let ++n
|
||||
done
|
||||
unset n
|
||||
|
||||
declare -r outputNameLibless=$(basename $( \
|
||||
if [[ -z "${outputName:+isUndefined}" ]]; then
|
||||
echo unnamed
|
||||
elif [[ "${outputName:0:3}" = lib ]]; then
|
||||
echo "${outputName:3}"
|
||||
else
|
||||
echo "${outputName}"
|
||||
fi))
|
||||
declare -ra children=("$outputNameLibless-reexport-delegate-0" \
|
||||
"$outputNameLibless-reexport-delegate-1")
|
||||
|
||||
mkdir -p "$out/lib"
|
||||
|
||||
PATH="$PATH:@out@/bin"
|
||||
|
||||
symbolBloatObject=$outputNameLibless-symbol-hack.o
|
||||
if [[ ! -e $symbolBloatObject ]]; then
|
||||
printf '.private_extern _______child_hack_foo\nchild_hack_foo:\n' \
|
||||
| @binPrefix@as -- -o $symbolBloatObject
|
||||
fi
|
||||
|
||||
# first half of libs
|
||||
@binPrefix@ld -macosx_version_min $MACOSX_DEPLOYMENT_TARGET -arch x86_64 -dylib \
|
||||
-o "$out/lib/lib${children[0]}.dylib" \
|
||||
-install_name "$out/lib/lib${children[0]}.dylib" \
|
||||
"${childrenLookup[@]}" "$symbolBloatObject" \
|
||||
"${childrenLink[@]:0:$((${#childrenLink[@]} / 2 ))}"
|
||||
|
||||
# second half of libs
|
||||
@binPrefix@ld -macosx_version_min $MACOSX_DEPLOYMENT_TARGET -arch x86_64 -dylib \
|
||||
-o "$out/lib/lib${children[1]}.dylib" \
|
||||
-install_name "$out/lib/lib${children[1]}.dylib" \
|
||||
"${childrenLookup[@]}" "$symbolBloatObject" \
|
||||
"${childrenLink[@]:$((${#childrenLink[@]} / 2 ))}"
|
||||
|
||||
allArgs+=("-L$out/lib" "-l${children[0]}" "-l${children[1]}")
|
||||
fi
|
||||
|
||||
PATH="$path_backup"
|
||||
exec @prog@ "${allArgs[@]}"
|
||||
Reference in New Issue
Block a user