mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 16:33:15 +00:00
9142a07030
This reduces code duplication, makes the SDK variables available earlier in the wrappers, and makes the behaviour between the two wrappers more consistent.
82 lines
3.0 KiB
Bash
82 lines
3.0 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
|