mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The SDK directory is now confusing as the Windows target also has a SDK overlay. In order to make this more uniform, move the SDK directory to Darwin which covers the fact that this covers the XNU family of OSes. The Windows directory contains the SDK overlay for the Windows target.
109 lines
3.4 KiB
Bash
Executable File
109 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env zsh
|
|
#===--- find-overlay-dependencies.sh - ...by looking at imported headers ---===#
|
|
#
|
|
## This source file is part of the Swift.org open source project
|
|
##
|
|
## Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
## Licensed under Apache License v2.0 with Runtime Library Exception
|
|
##
|
|
## See https://swift.org/LICENSE.txt for license information
|
|
## See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
#
|
|
#===------------------------------------------------------------------------===#
|
|
|
|
# This script uses zsh for its associative array support, because it is only
|
|
# intended to be run on macOS and macOS bash is very old.
|
|
|
|
function usage() {
|
|
echo 'usage:' $0 '<module-name> [update|print]' >&2
|
|
exit 1
|
|
}
|
|
|
|
# `update` edits the cmake file in-place; `print` just prints to console
|
|
UPDATE_CMAKE=0
|
|
case $# in
|
|
1) ;;
|
|
2) if [[ $2 == 'update' ]]; then
|
|
UPDATE_CMAKE=1
|
|
elif [[ $2 != 'print' ]]; then
|
|
usage
|
|
fi ;;
|
|
*)
|
|
usage ;;
|
|
esac
|
|
|
|
OVERLAYS_PATH=$(dirname "$0")/../stdlib/public/Darwin/
|
|
CMAKE_PATH=$OVERLAYS_PATH/$1/CMakeLists.txt
|
|
|
|
# Add both directions to associative array
|
|
typeset -A CUSTOM_NAMED_MODULES
|
|
CUSTOM_NAMED_MODULES[ObjectiveC]=objc
|
|
CUSTOM_NAMED_MODULES[objc]=ObjectiveC
|
|
CUSTOM_NAMED_MODULES[Dispatch]=dispatch
|
|
CUSTOM_NAMED_MODULES[dispatch]=Dispatch
|
|
CUSTOM_NAMED_MODULES[XPC]=xpc
|
|
CUSTOM_NAMED_MODULES[xpc]=XPC
|
|
|
|
# Exclude XCTest/ and CMakeLists.txt
|
|
ALL_OVERLAYS=()
|
|
for overlay in $(find "$OVERLAYS_PATH" -depth 1 -type d ! -name XCTest -exec basename \{\} \;); do
|
|
ALL_OVERLAYS+=${CUSTOM_NAMED_MODULES[$overlay]-$overlay}
|
|
done
|
|
|
|
typeset -A SDKS
|
|
SDKS[macosx]="x86_64"
|
|
SDKS[iphoneos]="arm64"
|
|
SDKS[appletvos]="arm64"
|
|
SDKS[watchos]="armv7k"
|
|
|
|
SDKS_ORDERED=(macosx iphoneos appletvos watchos)
|
|
|
|
typeset -A CMAKE_DEPENDS_NAME
|
|
CMAKE_DEPENDS_NAME[macosx]="SWIFT_MODULE_DEPENDS_OSX"
|
|
CMAKE_DEPENDS_NAME[iphoneos]="SWIFT_MODULE_DEPENDS_IOS"
|
|
CMAKE_DEPENDS_NAME[appletvos]="SWIFT_MODULE_DEPENDS_TVOS"
|
|
CMAKE_DEPENDS_NAME[watchos]="SWIFT_MODULE_DEPENDS_WATCHOS"
|
|
|
|
echo $1
|
|
for sdk in $SDKS_ORDERED; do
|
|
sdkfull="${sdk}${SUFFIX}"
|
|
arch=$SDKS[$sdk]
|
|
printf "%s:\n\t" "$sdkfull"
|
|
deps=$(echo "@import $1;" | xcrun -sdk "${sdkfull}" clang -arch $arch -x objective-c -F $(xcrun -show-sdk-path -sdk "${sdkfull}")/System/Library/PrivateFrameworks - -M -fmodules 2>/dev/null)
|
|
if [[ $? != 0 ]]; then
|
|
# Clear the cmake file of this unsupported platform and loop
|
|
echo "unsupported"
|
|
# Disable the unsupported platform and leave a note
|
|
sed -i "" -E -e "s/^([ \t]*)($CMAKE_DEPENDS_NAME[$sdk]).*$/\1# \2 # unsupported platform/" "$CMAKE_PATH"
|
|
continue
|
|
fi
|
|
|
|
# Everything depends on Darwin implicitly
|
|
DEPENDS_ON=("Darwin")
|
|
for overlay in $ALL_OVERLAYS; do
|
|
(echo "$deps" |
|
|
egrep -v 'module.(module)?map' |
|
|
egrep -v '\bos/object.h\b|\bos/availability.h\b|\bos/base.h\b|\bos/lock.h\b' |
|
|
egrep -v "\b${CUSTOM_NAMED_MODULES[$1]-$1}\b" |
|
|
egrep -q "\b$overlay\b") &&
|
|
DEPENDS_ON+=${CUSTOM_NAMED_MODULES[$overlay]-$overlay}
|
|
done
|
|
|
|
if [[ $sdk != macosx* ]]; then
|
|
DEPENDS_ON=("${(@)DEPENDS_ON:#XPC}")
|
|
fi
|
|
|
|
# Foundation depends on CoreGraphics in the .swift code.
|
|
# Hardcode the dependency.
|
|
if [[ "$1" == "Foundation" ]]; then
|
|
DEPENDS_ON+="CoreGraphics"
|
|
fi
|
|
|
|
|
|
echo "$DEPENDS_ON"
|
|
if [[ $UPDATE_CMAKE == 1 ]]; then
|
|
sed -i "" -E -e "s/^([ \t]*$CMAKE_DEPENDS_NAME[$sdk]).*$/\1 $DEPENDS_ON # auto-updated/" "$CMAKE_PATH"
|
|
fi
|
|
done
|
|
echo # newline
|