|
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