Skip to content

Commit 0c72a54

Browse files
committed
Use the latest execinfo.h from the NDK on the CI, both when building the SDK and then in the bundle
Simply patch the header to work with API 24 instead, which works for older Android APIs because of the included backported libandroid-execinfo.
1 parent cd69769 commit 0c72a54

File tree

3 files changed

+6
-38
lines changed

3 files changed

+6
-38
lines changed

.github/workflows/sdks.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
SWIFT_TAG="swift-DEVELOPMENT-SNAPSHOT-${LATEST_TOOLCHAIN_VERSION}-a"
3232
fi
3333
echo "tag=$SWIFT_TAG" >> $GITHUB_OUTPUT
34-
echo "key=$SWIFT_TAG-ndk-${NDK_VERSION}-parch-bundle" >> $GITHUB_OUTPUT
34+
echo "key=$SWIFT_TAG-ndk-${NDK_VERSION}-bt-bundle" >> $GITHUB_OUTPUT
3535
- name: Get cached SDK bundle
3636
id: cache-bundle
3737
uses: actions/cache/restore@v4
@@ -137,7 +137,7 @@ jobs:
137137
fi
138138
git apply -C2 swift-android-ci-except-release.patch swift-android-testing-except-release.patch
139139
SDK_NAME=$(ls | grep swift-${{ matrix.version }}-android-aarch64)
140-
cp $SDK_NAME/usr/include/execinfo.h $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include
140+
perl -pi -e 's%33%24%' $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/execinfo.h
141141
fi
142142
143143
perl -pi -e 's%String\(cString: getpass%\"fake\" //%' swiftpm/Sources/PackageRegistryCommand/PackageRegistryCommand+Auth.swift
@@ -159,6 +159,10 @@ jobs:
159159
SDK_NAME=$(ls | grep swift-${{ matrix.version }}-android-$arch)
160160
SDK=`pwd`/$SDK_NAME
161161
162+
# Patch the NDK execinfo.h to work with the backported libandroid-execinfo
163+
cp $SYSROOT/usr/include/execinfo.h ${SDK_NAME}/usr/include
164+
perl -pi -e 's%33%24%' ${SDK_NAME}/usr/include/execinfo.h
165+
162166
./swift/utils/build-script -RA --skip-build-cmark --build-llvm=0 --android --android-ndk $ANDROID_NDK_HOME --android-arch $arch --android-api-level $ANDROID_API_LEVEL --build-swift-tools=0 --native-swift-tools-path=${TOOLCHAIN}/bin --native-clang-tools-path=${TOOLCHAIN}/bin --cross-compile-hosts=android-$arch --cross-compile-deps-path=$SDK --skip-local-build --build-swift-static-stdlib --xctest --install-swift --install-libdispatch --install-foundation --install-xctest --install-destdir=$SDK --swift-install-components='compiler;clang-resource-dir-symlink;license;stdlib;sdk-overlay' --cross-compile-append-host-target-to-destdir=False -b --install-llbuild --swift-testing --install-swift-testing -p $LSP_BUILD
163167
164168
rm $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/swift

swift-android-testing-except-release.patch

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,6 @@ index 468dc61..a90ae3d 100644
1313
endif()
1414
execute_process(COMMAND ${print_target_info_invocation} OUTPUT_VARIABLE target_info_json)
1515
message(CONFIGURE_LOG "Swift Target Info: ${print_target_info_invocation}\n"
16-
diff --git a/swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift b/swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift
17-
index 78227e3..e0db2e9 100644
18-
--- a/swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift
19-
+++ b/swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift
20-
@@ -65,11 +65,11 @@ public struct Backtrace: Sendable {
21-
} else {
22-
initializedCount = .init(clamping: backtrace(addresses.baseAddress!, .init(clamping: addresses.count)))
23-
}
24-
-#elseif os(Android)
25-
+#elseif os(Androi)
26-
initializedCount = addresses.withMemoryRebound(to: UnsafeMutableRawPointer.self) { addresses in
27-
.init(clamping: backtrace(addresses.baseAddress!, .init(clamping: addresses.count)))
28-
}
29-
-#elseif os(Linux) || os(FreeBSD) || os(OpenBSD)
30-
+#elseif os(Linux) || os(FreeBSD) || os(OpenBSD) || os(Android)
31-
initializedCount = .init(clamping: backtrace(addresses.baseAddress!, .init(clamping: addresses.count)))
32-
#elseif os(Windows)
33-
initializedCount = Int(clamping: RtlCaptureStackBackTrace(0, ULONG(clamping: addresses.count), addresses.baseAddress!, nil))
3416
diff --git a/swift-testing/cmake/modules/PlatformInfo.cmake b/swift-testing/cmake/modules/PlatformInfo.cmake
3517
index 94c60ef..ab8a491 100644
3618
--- a/swift-testing/cmake/modules/PlatformInfo.cmake

swift-android-testing-release.patch

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,6 @@ index 90f4aa78..0429425b 100644
4444
// Glibc versions prior to 2.29 don't support posix_spawn_file_actions_addchdir_np, impacting:
4545
// - Amazon Linux 2 (EoL mid-2025)
4646
return ENOSYS;
47-
diff --git a/swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift b/swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift
48-
index 78227e3..e0db2e9 100644
49-
--- a/swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift
50-
+++ b/swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift
51-
@@ -65,11 +65,11 @@ public struct Backtrace: Sendable {
52-
} else {
53-
initializedCount = .init(clamping: backtrace(addresses.baseAddress!, .init(clamping: addresses.count)))
54-
}
55-
-#elseif os(Android)
56-
+#elseif os(Androi)
57-
initializedCount = addresses.withMemoryRebound(to: UnsafeMutableRawPointer.self) { addresses in
58-
.init(clamping: backtrace(addresses.baseAddress!, .init(clamping: addresses.count)))
59-
}
60-
-#elseif os(Linux) || os(FreeBSD)
61-
+#elseif os(Linux) || os(FreeBSD) || os(Android)
62-
initializedCount = .init(clamping: backtrace(addresses.baseAddress!, .init(clamping: addresses.count)))
63-
#elseif os(Windows)
64-
initializedCount = Int(clamping: RtlCaptureStackBackTrace(0, ULONG(clamping: addresses.count), addresses.baseAddress!, nil))
6547
diff --git a/swift-testing/cmake/modules/SwiftModuleInstallation.cmake b/swift-testing/cmake/modules/SwiftModuleInstallation.cmake
6648
index 1553725..d9f9e5b 100644
6749
--- a/swift-testing/cmake/modules/SwiftModuleInstallation.cmake

0 commit comments

Comments
 (0)