commit
7483832263
@ -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[@]}"
|
@ -177,9 +177,9 @@ rec {
|
|||||||
|
|
||||||
# Copy binutils.
|
# Copy binutils.
|
||||||
for i in as ld ar ranlib nm strip readelf objdump; do
|
for i in as ld ar ranlib nm strip readelf objdump; do
|
||||||
cp ${binutils.out}/bin/$i $out/bin
|
cp ${binutils.binutils.out}/bin/$i $out/bin
|
||||||
done
|
done
|
||||||
cp -d ${binutils.lib}/lib/lib*.so* $out/lib
|
cp -d ${binutils.binutils.lib}/lib/lib*.so* $out/lib
|
||||||
|
|
||||||
chmod -R u+w $out
|
chmod -R u+w $out
|
||||||
|
|
||||||
|
@ -126,9 +126,9 @@ rec {
|
|||||||
|
|
||||||
# Copy binutils.
|
# Copy binutils.
|
||||||
for i in as ld ar ranlib nm strip readelf objdump; do
|
for i in as ld ar ranlib nm strip readelf objdump; do
|
||||||
cp ${binutils.out}/bin/$i $out/bin
|
cp ${binutils.binutils.out}/bin/$i $out/bin
|
||||||
done
|
done
|
||||||
cp -d ${binutils.lib}/lib/lib*.so* $out/lib
|
cp -d ${binutils.binutils.lib}/lib/lib*.so* $out/lib
|
||||||
|
|
||||||
chmod -R u+w $out
|
chmod -R u+w $out
|
||||||
|
|
||||||
|
@ -11910,7 +11910,11 @@ with pkgs;
|
|||||||
crda = callPackage ../os-specific/linux/crda { };
|
crda = callPackage ../os-specific/linux/crda { };
|
||||||
|
|
||||||
# Darwin package set
|
# Darwin package set
|
||||||
darwin = callPackages ./darwin-packages.nix { };
|
#
|
||||||
|
# Even though this is a set of packages not single package, use `callPackage`
|
||||||
|
# not `callPackages` so the per-package callPackages don't have their
|
||||||
|
# `.override` clobbered. C.F. `llvmPackages` which does the same.
|
||||||
|
darwin = callPackage ./darwin-packages.nix { };
|
||||||
|
|
||||||
devicemapper = lvm2;
|
devicemapper = lvm2;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user