|
1 | | -#!/bin/bash -e |
2 | | -# Swift Android SDK: Top-level Build Script |
3 | | - |
4 | | -# default architectures to build for |
5 | | -TARGET_ARCHS=${TARGET_ARCHS:-aarch64,x86_64,armv7} |
6 | | - |
7 | | -ANDROID_NDK_VERSION=android-ndk-r27c |
8 | | -ANDROID_API=28 |
9 | | - |
10 | | -SDKROOT=${RUNNER_TEMP:-${TMPDIR:-'/tmp'}}/swift-android-sdk |
11 | | -mkdir -p ${SDKROOT} |
12 | | - |
13 | | -# Install a Swift host toolchain if it isn't already present |
14 | | -SWIFT_ROOT=${SDKROOT}/host-toolchain |
15 | | -HOST_OS=ubuntu$(lsb_release -sr) |
16 | | - |
17 | | -#BUILD_VERSION='release' |
18 | | -#BUILD_VERSION='trunk' |
19 | | -BUILD_VERSION=${BUILD_VERSION:-'devel'} |
20 | | - |
21 | | -if [ "${BUILD_VERSION}" = 'release' ]; then |
22 | | - LATEST_TOOLCHAIN_VERSION=$(curl -sL https://github.com/apple/swift/releases | grep -m1 swift-6.1 | cut -d- -f2) |
23 | | - SWIFT_TAG="swift-${LATEST_TOOLCHAIN_VERSION}-RELEASE" |
24 | | - SWIFT_BRANCH="swift-$(echo $SWIFT_TAG | cut -d- -f2)-release" |
25 | | -elif [ "${BUILD_VERSION}" = 'devel' ]; then |
26 | | - LATEST_TOOLCHAIN_VERSION=$(curl -sL https://github.com/apple/swift/tags | grep -m1 swift-6.2-DEV | cut -d- -f8-10) |
27 | | - SWIFT_TAG="swift-6.2-DEVELOPMENT-SNAPSHOT-${LATEST_TOOLCHAIN_VERSION}-a" |
28 | | - SWIFT_BRANCH="swift-$(echo $SWIFT_TAG | cut -d- -f2)-branch" |
29 | | -elif [ "${BUILD_VERSION}" = 'trunk' ]; then |
30 | | - LATEST_TOOLCHAIN_VERSION=$(curl -sL https://github.com/apple/swift/tags | grep -m1 swift-DEV | cut -d- -f7-9) |
31 | | - SWIFT_TAG="swift-DEVELOPMENT-SNAPSHOT-${LATEST_TOOLCHAIN_VERSION}-a" |
32 | | - SWIFT_BRANCH="development" |
33 | | -else |
34 | | - echo "$0: invalid BUILD_VERSION=${BUILD_VERSION}" |
35 | | - exit 1 |
| 1 | +#!/bin/bash |
| 2 | +# |
| 3 | +# ===----------------------------------------------------------------------=== |
| 4 | +# |
| 5 | +# Swift Android SDK: Top-level Build Script |
| 6 | +# |
| 7 | +# ===----------------------------------------------------------------------=== |
| 8 | + |
| 9 | +if [[ "$DOCKER" == "" ]]; then |
| 10 | + DOCKER=docker |
36 | 11 | fi |
37 | 12 |
|
38 | | -SWIFT_BASE=$SWIFT_TAG-$HOST_OS |
39 | | - |
40 | | -if [[ ! -d "$SWIFT_ROOT/$SWIFT_BASE" ]]; then |
41 | | - mkdir -p $SWIFT_ROOT |
42 | | - pushd $SWIFT_ROOT |
43 | | - |
44 | | - SWIFT_URL="https://download.swift.org/$SWIFT_BRANCH/$(echo $HOST_OS | tr -d '.')/$SWIFT_TAG/$SWIFT_BASE.tar.gz" |
45 | | - wget -q $SWIFT_URL |
46 | | - tar xzf $SWIFT_BASE.tar.gz |
47 | | - |
48 | | - popd |
49 | | -fi |
50 | | - |
51 | | -#HOST_TOOLCHAIN=${HOST_TOOLCHAIN:-$(dirname $(dirname $(which swiftc)))} |
52 | | -HOST_TOOLCHAIN=$SWIFT_ROOT/$SWIFT_BASE/usr |
53 | | -$HOST_TOOLCHAIN/bin/swift --version |
54 | | - |
55 | | -# ensure the correct Swift is first in the PATH |
56 | | -export PATH=$HOST_TOOLCHAIN/bin:$PATH |
57 | | - |
58 | | -export ANDROID_NDK_HOME=${SDKROOT}/ndk/${ANDROID_NDK_VERSION} |
59 | | -export ANDROID_NDK=${ANDROID_NDK_HOME} |
60 | | - |
61 | | -if [[ ! -d ${ANDROID_NDK_HOME} ]]; then |
62 | | - mkdir -p $(dirname ${ANDROID_NDK_HOME}) |
63 | | - pushd $(dirname ${ANDROID_NDK_HOME}) |
64 | | - NDKFILE=$(basename $ANDROID_NDK_HOME)-linux.zip |
65 | | - wget -q https://dl.google.com/android/repository/${NDKFILE} |
66 | | - unzip -q ${NDKFILE} |
67 | | - popd |
68 | | -fi |
69 | | - |
70 | | -mkdir -p ${SDKROOT}/products |
| 13 | +case $(arch) in |
| 14 | + arm64|aarch64) |
| 15 | + OS_ARCH_SUFFIX=-aarch64 |
| 16 | + ;; |
| 17 | + amd64|x86_64) |
| 18 | + OS_ARCH_SUFFIX= |
| 19 | + ;; |
| 20 | + *) |
| 21 | + echo "Unknown architecture $(arch)" |
| 22 | + exit 1 |
| 23 | + ;; |
| 24 | +esac |
| 25 | + |
| 26 | +# Build the Docker image |
| 27 | +$DOCKER build --build-arg OS_ARCH_SUFFIX=$OS_ARCH_SUFFIX -t swift-android . |
71 | 28 |
|
72 | 29 | # Check-out the sources |
73 | | -if [[ ! -d ${SDKROOT}/src ]]; then |
74 | | - scripts/fetch-source.sh --source-dir ${SDKROOT}/src --swift-tag ${SWIFT_TAG} |
75 | | -fi |
76 | | - |
77 | | -# fetch and apply the patches |
78 | | -PATCHDIR=${SDKROOT}/patches |
79 | | -if [[ ! -d ${PATCHDIR} ]]; then |
80 | | - git clone https://github.com/finagolfin/swift-android-sdk.git ${PATCHDIR} |
81 | | - |
82 | | - # TODO: need to selectively apply patches based on release or not release |
83 | | - pushd ${SDKROOT}/src/swift-project |
84 | | - echo "Applying patches" |
85 | | - |
86 | | - # patch the patch, which seems to only be needed for an API less than 28 |
87 | | - # https://github.com/finagolfin/swift-android-sdk/blob/main/swift-android.patch#L110 |
88 | | - perl -pi -e 's/#if os\(Windows\)/#if os\(Android\)/g' $PATCHDIR/swift-android.patch |
89 | | - |
90 | | - # remove the need to link in android-execinfo |
91 | | - perl -pi -e 's/dispatch android-execinfo/dispatch/g' $PATCHDIR/swift-android.patch |
92 | | - |
93 | | - git apply -v $PATCHDIR/swift-android.patch |
94 | | - # swift-android-ci.patch is not needed, since it is only used for llbuild, etc. |
95 | | - #git apply -C1 $PATCHDIR/swift-android-ci.patch |
96 | | - #git apply -v $PATCHDIR/swift-android-ci-release.patch |
97 | | - if [ "${BUILD_VERSION}" = 'release' ]; then |
98 | | - git apply -v $PATCHDIR/swift-android-testing-release.patch |
99 | | - else |
100 | | - git apply -v $PATCHDIR/swift-android-testing-except-release.patch |
101 | | - fi |
102 | | - |
103 | | - perl -pi -e 's%String\(cString: getpass%\"fake\" //%' swiftpm/Sources/PackageRegistryCommand/PackageRegistryCommand+Auth.swift |
104 | | - # disable backtrace() for Android (needs either API33+ or libandroid-execinfo, or to manually add in backtrace backport) |
105 | | - perl -pi -e 's/os\(Android\)/os\(AndroidDISABLED\)/g' swift-testing/Sources/Testing/SourceAttribution/Backtrace.swift |
106 | | - |
107 | | - # need to un-apply libandroid-spawn since we don't need it for API28+ |
108 | | - perl -pi -e 's/MATCHES "Android"/MATCHES "AndroidDISABLED"/g' llbuild/lib/llvm/Support/CMakeLists.txt |
109 | | - perl -pi -e 's/ STREQUAL Android\)/ STREQUAL AndroidDISABLED\)/g' swift-corelibs-foundation/Sources/Foundation/CMakeLists.txt |
110 | | - popd |
111 | | -fi |
| 30 | +scripts/fetch-source.sh --source-dir source |
112 | 31 |
|
113 | | -./scripts/build.sh --products-dir ${SDKROOT}/products --source-dir ${SDKROOT}/src --build-dir ${SDKROOT}/build --ndk-home ${ANDROID_NDK_HOME} --android-api ${ANDROID_API} --host-toolchain ${HOST_TOOLCHAIN} --archs ${TARGET_ARCHS} ${@} |
| 32 | +mkdir -p products |
114 | 33 |
|
| 34 | +# Run the build |
| 35 | +$DOCKER run -it --rm \ |
| 36 | + -v ./source:/source \ |
| 37 | + -v ./products:/products \ |
| 38 | + swift-android \ |
| 39 | + /scripts/build.sh --source-dir /source --products-dir /products |
0 commit comments