Skip to content

Commit 0701eb7

Browse files
committed
[utils/api_checker] Adjust the script for inferring imports from an SDK and add a couple of utility scripts
1 parent f911be8 commit 0701eb7

File tree

7 files changed

+92
-5
lines changed

7 files changed

+92
-5
lines changed

utils/api_checker/dump-sdk.sh

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/bin/bash
2+
set -e
3+
4+
DIR="$( cd "$( dirname "$0" )" && pwd )"
5+
sh "$DIR/sdk-module-lists/create-module-lists.sh"
6+
7+
MacSDKPath=$(xcrun -sdk macosx -show-sdk-path)
8+
IphoneOSSDKPath=$(xcrun -sdk iphoneos -show-sdk-path)
9+
AppleTVOSSDKPath=$(xcrun -sdk appletvos -show-sdk-path)
10+
WathOSSDKPath=$(xcrun -sdk watchos -show-sdk-path)
11+
12+
XCTestMac="$MacSDKPath/../../Library/Frameworks/"
13+
XCTestIphone="$IphoneOSSDKPath/../../Library/Frameworks/"
14+
XCTestTV="$AppleTVOSSDKPath/../../Library/Frameworks/"
15+
16+
BASEDIR="$DIR/../../swift-sdk-digests/"
17+
18+
mkdir -p "${BASEDIR}"
19+
20+
DumpDir="/tmp/SDKDump"
21+
rm -rf "/tmp/SDKDump"
22+
mkdir "/tmp/SDKDump"
23+
24+
XCODE_VER=$(xcodebuild -version | sed '1d' | sed 's/Build version //g')
25+
26+
SWIFT_VER=${SWIFT_VER-3}
27+
echo "SWIFT VERSION: ${SWIFT_VER}"
28+
29+
function sdk_info() {
30+
echo "Xcode Build: $XCODE_VER"
31+
echo "macOS SDK Build: $(xcodebuild -version -sdk macosx ProductBuildVersion)"
32+
echo "iOS SDK Build: $(xcodebuild -version -sdk iphoneos ProductBuildVersion)"
33+
echo "watchOS SDK Build: $(xcodebuild -version -sdk watchos ProductBuildVersion)"
34+
echo "tvOS SDK Build: $(xcodebuild -version -sdk appletvos ProductBuildVersion)"
35+
}
36+
37+
sdk_info
38+
39+
XCODE_VER=-base-$SWIFT_VER
40+
41+
if [[ -z "$MODULE" ]]; then
42+
$SWIFT_API_DIGESTER -target x86_64-apple-macosx10.15 -o "$BASEDIR/macos$XCODE_VER.json" -dump-sdk -sdk "$MacSDKPath" -module-list-file "/tmp/modules-osx.txt" -F "$XCTestMac" -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
43+
$SWIFT_API_DIGESTER -target arm64-apple-ios13.5 -o "$BASEDIR/ios$XCODE_VER.json" -dump-sdk -sdk "$IphoneOSSDKPath" -module-list-file "/tmp/modules-iphoneos.txt" -F "$XCTestIphone" -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
44+
$SWIFT_API_DIGESTER -target arm64-apple-tvos13.4 -o "$BASEDIR/tvos$XCODE_VER.json" -dump-sdk -sdk "$AppleTVOSSDKPath" -module-list-file "/tmp/modules-tvos.txt" -F "$XCTestTV" -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
45+
$SWIFT_API_DIGESTER -target armv7k-apple-watchos6.2 -o "$BASEDIR/watchos$XCODE_VER.json" -dump-sdk -sdk "$WathOSSDKPath" -module-list-file "/tmp/modules-watchos.txt" -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
46+
$SWIFT_API_DIGESTER -target x86_64-apple-macosx10.15 -o "$BASEDIR/macos-stdlib$XCODE_VER.json" -dump-sdk -sdk "$MacSDKPath" -module Swift -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
47+
else
48+
ALL_MODULE_DIR="$BASEDIR/Xcode$XCODE_VER"
49+
rm -rf "$ALL_MODULE_DIR"
50+
mkdir "$ALL_MODULE_DIR"
51+
declare -a MODULE_NAMES=("Accelerate" "Foundation" "AppKit" "UIKit" "AudioToolbox" "Automator" "AVFoundation"
52+
"AVKit" "CloudKit" "CoreBluetooth" "GameKit" "iAd" "Metal" "MetalKit"
53+
"MetalPerformanceShaders" "OpenGLES" "Quartz" "XCTest" "UserNotifications" "CoreMedia" "VideoToolbox" "MediaToolbox" "MapKit")
54+
for MODULE in "${MODULE_NAMES[@]}"
55+
do
56+
echo "Generating baseline for framework ${MODULE}"
57+
MODULE_DIR="$ALL_MODULE_DIR/$MODULE"
58+
rm -rf "$MODULE_DIR"
59+
mkdir "$MODULE_DIR"
60+
$SWIFT_API_DIGESTER -target x86_64-apple-macosx10.15 -o "$MODULE_DIR/macos.json" -dump-sdk -sdk "$MacSDKPath" -module "$MODULE" -F "$XCTestMac" -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
61+
$SWIFT_API_DIGESTER -target arm64-apple-ios13.5 -o "$MODULE_DIR/ios.json" -dump-sdk -sdk "$IphoneOSSDKPath" -module "$MODULE" -F "$XCTestIphone" -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
62+
$SWIFT_API_DIGESTER -target arm64-apple-tvos13.4 -o "$MODULE_DIR/tvos.json" -dump-sdk -sdk "$AppleTVOSSDKPath" -module "$MODULE" -F "$XCTestTV" -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
63+
$SWIFT_API_DIGESTER -target armv7k-apple-watchos6.2 -o "$MODULE_DIR/watchos.json" -dump-sdk -sdk "$WathOSSDKPath" -module "$MODULE" -module-cache-path "$DumpDir/ModuleCache" -swift-version $SWIFT_VER
64+
done
65+
fi
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
DIR="$( cd "$( dirname "$0" )" && pwd )"
2+
$DIR/infer-imports.py -s $(xcrun --sdk macosx --show-sdk-path) > /tmp/modules-osx.txt && \
3+
$DIR/infer-imports.py -s $(xcrun --sdk iphoneos --show-sdk-path) > /tmp/modules-iphoneos.txt && \
4+
$DIR/infer-imports.py -s $(xcrun --sdk appletvos --show-sdk-path) > /tmp/modules-tvos.txt && \
5+
$DIR/infer-imports.py -s $(xcrun --sdk watchos --show-sdk-path) > /tmp/modules-watchos.txt && \
6+
cat $DIR/fixed-clang-modules-common.txt >> /tmp/modules-osx.txt && \
7+
cat $DIR/fixed-clang-modules-macosx.txt >> /tmp/modules-osx.txt && \
8+
cat $DIR/fixed-clang-modules-common.txt >> /tmp/modules-iphoneos.txt && \
9+
cat $DIR/fixed-clang-modules-iphoneos.txt >> /tmp/modules-iphoneos.txt && \
10+
cat $DIR/fixed-clang-modules-common.txt >> /tmp/modules-tvos.txt && \
11+
cat $DIR/fixed-clang-modules-appletvos.txt >> /tmp/modules-tvos.txt && \
12+
cat $DIR/fixed-clang-modules-common.txt >> /tmp/modules-watchos.txt && \
13+
cat $DIR/fixed-clang-modules-watchos.txt >> /tmp/modules-watchos.txt
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
XCTest
1+
XCTest
2+
SceneKit.ModelIO
3+
CoreImage.CIFilterBuiltins
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
// Empty
2+
SceneKit.ModelIO
3+
CoreImage.CIFilterBuiltins
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
XCTest
1+
XCTest
2+
SceneKit.ModelIO
3+
CoreImage.CIFilterBuiltins
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
XPC
22
XCTest
3+
SceneKit.ModelIO
4+
CoreImage.CIFilterBuiltins

utils/api_checker/sdk-module-lists/infer-imports.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
denylist = [
99
"Kernel", "Ruby", "Tk",
1010
"DriverKit", "HIDDriverKit", "SkywalkDriverKit", # has C++ code
11-
"NetworkingDriverKit", "USBSerialDriverKit", # has C++ code
11+
"NetworkingDriverKit", "USBSerialDriverKit", "PCIDriverKit", # has C++ code
12+
"USBDriverKit", # has C++ code
1213
]
1314

1415

@@ -46,6 +47,8 @@ def get_frameworks(sdk_path, swift_frameworks_only):
4647
frameworks_path = sdk_path + "/System/Library/Frameworks"
4748
names = []
4849
for frame in os.listdir(frameworks_path):
50+
if frame[0] == '_':
51+
continue
4952
if frame.endswith(".framework"):
5053
name = frame[:-len(".framework")]
5154
header_dir_path = frameworks_path + '/' + frame + '/Headers'
@@ -106,8 +109,6 @@ def should_exclude_framework(frame_path):
106109
contents = open(module_map_path).read()
107110
if "requires !swift" in contents:
108111
return True
109-
if "requires unavailable" in contents:
110-
return True
111112

112113
return False
113114

0 commit comments

Comments
 (0)