|
|
|
|
@@ -36,7 +36,7 @@ To follow along with this guide, you'll need:
|
|
|
|
|
instructions in the Swift project README.
|
|
|
|
|
2. The latest build of the Swift compiler for your Linux distro, available at
|
|
|
|
|
https://www.swift.org/download/ or sometimes your distro package manager.
|
|
|
|
|
3. The latest version of the Android LTS NDK (r26d at the time of this writing),
|
|
|
|
|
3. The latest version of the Android LTS NDK (r27c at the time of this writing),
|
|
|
|
|
available to download here:
|
|
|
|
|
https://developer.android.com/ndk/downloads
|
|
|
|
|
4. An Android device with remote debugging enabled or the emulator. We require
|
|
|
|
|
@@ -54,9 +54,9 @@ and the prebuilt Swift toolchain (add --skip-early-swift-driver if you already
|
|
|
|
|
have a Swift toolchain in your path):
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ NDK_PATH=path/to/android-ndk-r26d
|
|
|
|
|
$ SWIFT_PATH=path/to/swift-DEVELOPMENT-SNAPSHOT-2024-07-09-a-ubuntu22.04/usr/bin
|
|
|
|
|
$ git checkout swift-DEVELOPMENT-SNAPSHOT-2024-07-09-a
|
|
|
|
|
$ NDK_PATH=path/to/android-ndk-r27c
|
|
|
|
|
$ SWIFT_PATH=path/to/swift-DEVELOPMENT-SNAPSHOT-2024-11-09-a-ubuntu22.04/usr/bin
|
|
|
|
|
$ git checkout swift-DEVELOPMENT-SNAPSHOT-2024-11-09-a
|
|
|
|
|
$ utils/build-script \
|
|
|
|
|
-R \ # Build in ReleaseAssert mode.
|
|
|
|
|
--android \ # Build for Android.
|
|
|
|
|
@@ -83,8 +83,8 @@ Then use the standalone Swift stdlib from the previous step to compile a Swift
|
|
|
|
|
source file, targeting Android:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ NDK_PATH="path/to/android-ndk-r26d"
|
|
|
|
|
$ SWIFT_PATH=path/to/swift-DEVELOPMENT-SNAPSHOT-2024-07-09-a-ubuntu22.04/usr/bin
|
|
|
|
|
$ NDK_PATH="path/to/android-ndk-r27c"
|
|
|
|
|
$ SWIFT_PATH=path/to/swift-DEVELOPMENT-SNAPSHOT-2024-11-09-a-ubuntu22.04/usr/bin
|
|
|
|
|
$ $SWIFT_PATH/swiftc \ # The prebuilt Swift compiler you downloaded
|
|
|
|
|
# The location of the tools used to build Android binaries
|
|
|
|
|
-tools-directory ${NDK_PATH}/toolchains/llvm/prebuilt/linux-x86_64/bin/ \
|
|
|
|
|
@@ -122,10 +122,12 @@ commands to copy the Swift Android stdlib:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftCore.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftGlibc.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftAndroid.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftSwiftOnoneSupport.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswiftRemoteMirror.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswift_Concurrency.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswift_RegexParser.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libswift_StringProcessing.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libdispatch.so /data/local/tmp
|
|
|
|
|
$ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libBlocksRuntime.so /data/local/tmp
|
|
|
|
|
```
|
|
|
|
|
@@ -133,7 +135,7 @@ $ adb push build/Ninja-ReleaseAssert/swift-linux-x86_64/lib/swift/android/libBlo
|
|
|
|
|
In addition, you'll also need to copy the Android NDK's libc++:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
$ adb push /path/to/android-ndk-r26d/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so /data/local/tmp
|
|
|
|
|
$ adb push /path/to/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so /data/local/tmp
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Finally, you'll need to copy the `hello` executable you built in the
|
|
|
|
|
@@ -176,7 +178,7 @@ $ utils/build-script \
|
|
|
|
|
-R \ # Build in ReleaseAssert mode.
|
|
|
|
|
-T \ # Run all tests, including on the Android device (add --host-test to only run Android tests on the Linux host).
|
|
|
|
|
--android \ # Build for Android.
|
|
|
|
|
--android-ndk ~/android-ndk-r26d \ # Path to an Android NDK.
|
|
|
|
|
--android-ndk ~/android-ndk-r27c \ # Path to an Android NDK.
|
|
|
|
|
--android-arch aarch64 \ # Optionally specify Android architecture, alternately armv7 or x86_64
|
|
|
|
|
--android-api-level 21
|
|
|
|
|
```
|
|
|
|
|
|