97 lines
4 KiB
Bash
97 lines
4 KiB
Bash
# Unconditionally adding in platform version flags will result in warnings that
|
|
# will be treated as errors by some packages. Add any missing flags here.
|
|
|
|
# There are two things to be configured: the "platform version" (oldest
|
|
# supported version of macos, ios, etc), and the "sdk version".
|
|
#
|
|
# The modern way of configuring these is to use:
|
|
# -platform_version $platform $platform_version $sdk_version"
|
|
#
|
|
# The old way is still supported, and uses flags like:
|
|
# -${platform}_version_min $platform_version
|
|
# -sdk_version $sdk_version
|
|
#
|
|
# If both styles are specified ld will combine them. If multiple versions are
|
|
# specified for the same platform, ld will emit an error.
|
|
#
|
|
# The following adds flags for whichever properties have not already been
|
|
# provided.
|
|
|
|
havePlatformVersionFlag=
|
|
haveDarwinSDKVersion=
|
|
haveDarwinPlatformVersion=
|
|
|
|
# Roles will set by add-flags.sh, but add-flags.sh can be skipped when the
|
|
# cc-wrapper has added the linker flags. Both the cc-wrapper and the binutils
|
|
# wrapper mangle the same variable (MACOSX_DEPLOYMENT_TARGET), so if roles are
|
|
# empty due to being run through the cc-wrapper then the mangle here is a no-op
|
|
# and we still do the right thing.
|
|
#
|
|
# To be robust, make sure we always have the correct set of roles.
|
|
accumulateRoles
|
|
|
|
mangleVarSingle @darwinMinVersionVariable@ ${role_suffixes[@]+"${role_suffixes[@]}"}
|
|
|
|
n=0
|
|
nParams=${#params[@]}
|
|
while (( n < nParams )); do
|
|
p=${params[n]}
|
|
case "$p" in
|
|
# the current platform
|
|
-@darwinPlatform@_version_min)
|
|
haveDarwinPlatformVersion=1
|
|
;;
|
|
|
|
# legacy aliases
|
|
-macosx_version_min|-iphoneos_version_min|-iosmac_version_min|-uikitformac_version_min)
|
|
haveDarwinPlatformVersion=1
|
|
;;
|
|
|
|
-sdk_version)
|
|
haveDarwinSDKVersion=1
|
|
;;
|
|
|
|
-platform_version)
|
|
havePlatformVersionFlag=1
|
|
|
|
# If clang can't determine the sdk version it will pass 0.0.0. This
|
|
# has runtime effects so we override this to use the known sdk
|
|
# version.
|
|
if [ "${params[n+3]-}" = 0.0.0 ]; then
|
|
params[n+3]=@darwinSdkVersion@
|
|
fi
|
|
;;
|
|
esac
|
|
n=$((n + 1))
|
|
done
|
|
|
|
# If the caller has set -platform_version, trust they're doing the right thing.
|
|
# This will be the typical case for clang in nixpkgs.
|
|
if [ ! "$havePlatformVersionFlag" ]; then
|
|
if [ ! "$haveDarwinSDKVersion" ] && [ ! "$haveDarwinPlatformVersion" ]; then
|
|
# Nothing provided. Use the modern "-platform_version" to set both.
|
|
extraBefore+=(-platform_version @darwinPlatform@ "${@darwinMinVersionVariable@_@suffixSalt@:-@darwinMinVersion@}" @darwinSdkVersion@)
|
|
elif [ ! "$haveDarwinSDKVersion" ]; then
|
|
# Add missing sdk version
|
|
extraBefore+=(-sdk_version @darwinSdkVersion@)
|
|
elif [ ! "$haveDarwinPlatformVersion" ]; then
|
|
# Add missing platform version
|
|
extraBefore+=(-@darwinPlatform@_version_min "${@darwinMinVersionVariable@_@suffixSalt@:-@darwinMinVersion@}")
|
|
fi
|
|
fi
|
|
|
|
mangleVarSingle DEVELOPER_DIR ${role_suffixes[@]+"${role_suffixes[@]}"}
|
|
|
|
# Allow wrapped bintools to do something useful when no `DEVELOPER_DIR` is set, which can happen when
|
|
# the compiler is run outside of a stdenv or intentionally in an environment with no environment variables set.
|
|
DEVELOPER_DIR=${DEVELOPER_DIR_@suffixSalt@:-@fallback_sdk@}
|
|
|
|
# Darwin looks for frameworks in the SDK located at `DEVELOPER_DIR`.
|
|
extraBefore+=("-F$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks")
|
|
extraBefore+=("-L$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib")
|
|
|
|
# While the Swift wrapper should take care of this, anything that needs to link Swift auto-linked frameworks
|
|
# also needs these paths. Note: Test and conditionally add it because the path may not exist in older SDKs.
|
|
if [ -d "$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/swift" ]; then
|
|
extraBefore+=("-L$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/swift")
|
|
fi
|