Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
5f1dbac
Add Android workflow
marcprux Mar 31, 2025
1b7e52f
Merge branch 'swiftlang:main' into main
marcprux Apr 7, 2025
c263e80
Merge branch 'swiftlang:main' into main
marcprux Apr 15, 2025
dd6d09f
Merge branch 'swiftlang:main' into main
marcprux Apr 22, 2025
6565052
Build Android image (#1)
marcprux Apr 22, 2025
5f9dab4
Merge branch 'swiftlang:main' into main
marcprux Apr 28, 2025
412e6b0
Merge branch 'swiftlang:main' into main
marcprux Apr 28, 2025
40733f7
Swift Android build 6.2 (#2)
marcprux May 1, 2025
53e361a
Swift Android build 6.2 (#3)
marcprux May 8, 2025
72964f5
Build SDK in Docker container (#4)
marcprux May 18, 2025
9160168
Merge branch 'swiftlang:main' into main
marcprux May 18, 2025
4987bcc
Checkout patches repo instead of using a git submodule
marcprux May 18, 2025
ff3f274
Update libcurl to 8.13.0
marcprux May 18, 2025
595efc3
Remove resources that we no longer use
marcprux May 18, 2025
27b1bf4
Update libcurl to 8.13.0
marcprux May 18, 2025
b898129
Update libxml2 to 2.14.2
marcprux May 18, 2025
f566b23
Build libxml2, libcurl, and boringssl with support for Android 16kb p…
marcprux May 18, 2025
529e3f1
Add build-script --extra-cmake-options=-DCMAKE_EXTRA_LINK_FLAGS=-Wl,-…
marcprux May 18, 2025
c82587d
Add 16KB page size linker flags to linker flags in swift-toolset.json
marcprux May 18, 2025
217f1d7
Add 16KB page size linker flags to linker flags in swift-toolset.json
marcprux May 19, 2025
95046b3
Build with ndk-r28b
marcprux May 19, 2025
8b18b5f
Revert to building with ndk-r27c
marcprux May 19, 2025
f67f9bf
Use official endpoints for discovering latest Swift release/devel/tru…
marcprux May 19, 2025
7011a45
Typo fix in version script
marcprux May 19, 2025
4c65a93
Cleanup for PR
marcprux May 19, 2025
d80c80b
Change BUILD_VERSION to BUILD_SCHEME and have it match release, swift…
marcprux May 19, 2025
2c07eef
Update Android README
marcprux May 19, 2025
51d93f8
Update how patches are applied
marcprux May 21, 2025
46a06df
Fix source directory for patch target
marcprux May 21, 2025
afb2918
Harmonize timestamps in artifactbundle with the swift source tag date…
marcprux May 21, 2025
a469e85
Simplify toolchain-vars.sh
marcprux May 22, 2025
dea39d7
Merge branch 'swiftlang:main' into main
marcprux May 26, 2025
b3cddbd
Merge branch 'swiftlang:main' into main
marcprux Jun 2, 2025
abd3fd1
Merge branch 'swiftlang:main' into main
marcprux Jun 13, 2025
ad24ea5
Merge branch 'swiftlang:main' into main
marcprux Jun 26, 2025
50ba1cd
Run the compiler validation suite for Android (#8)
marcprux Jun 29, 2025
71b7131
Build compiler-validated bundles from latest branch commits, not olde…
finagolfin Jun 30, 2025
e2f696a
Merge pull request #9 from swift-android-sdk/Testing
finagolfin Jul 4, 2025
3f4cd4a
gcpd 'Update patches'
marcprux Jul 16, 2025
bd0df11
Update patches and build matrix
marcprux Jul 17, 2025
80291aa
Disable compiler validated builds on self-hosted
marcprux Jul 17, 2025
18c563f
Centralize cmake variable for 6.2 in patches, as done for trunk upstream
finagolfin Jul 6, 2025
ed09034
Update disabled tests
finagolfin Jul 12, 2025
e4a96b2
Merge branch 'main' into update-patches2
marcprux Jul 17, 2025
f472e9e
Try running Docker build on macOS host
marcprux Jul 17, 2025
22a4320
Remove separate checks of libxml2, curl, and yams
marcprux Jul 18, 2025
bc3f105
Merge pull request #11 from swift-android-sdk/update-patches2
marcprux Jul 18, 2025
a7b303a
Remove upstreamed 6.2 branch patches
finagolfin Jul 18, 2025
4ed1375
Merge branch 'swiftlang:main' into main
marcprux Jul 18, 2025
3f36409
Use command-line flags to work around CMake 3.30+ linker flag bug, ra…
finagolfin Jul 21, 2025
f658604
Create an Android CMake toolchain file instead to cross-compile Testi…
finagolfin Jul 23, 2025
c9fc3d8
Install the native host LLVM tools for full compiler builds
finagolfin Jul 23, 2025
b881e14
Extend `--cross-compile-build-swift-tools=False` to disable building …
finagolfin Jul 26, 2025
9af1d90
Don't copy any libraries from the NDK: link the NDK's clang resource …
finagolfin Aug 8, 2025
5693797
Wildcard the clang version link in the post-install script in order t…
marcprux Aug 18, 2025
31f00b1
Merge pull request #13 from swift-android-sdk/clang-wildcard
marcprux Aug 22, 2025
db10f68
Merge branch 'swiftlang:main' into main
marcprux Aug 22, 2025
1221544
Switch generated shell header to use #!/usr/bin/env bash
marcprux Aug 22, 2025
f555f48
SBOM and nits (#14)
marcprux Aug 22, 2025
7696a44
Remove upstreamed patches and turn the last modifications into perl s…
finagolfin Aug 9, 2025
606ab7a
Remove self-hosted build on github CI
finagolfin Sep 3, 2025
8eb982e
Remove android_build job from pull_request workflow
marcprux Sep 4, 2025
534175d
Add license headers to Android build scripts
marcprux Sep 4, 2025
d139654
Remove unnecessary .gitignore
marcprux Sep 4, 2025
510addd
Add license header to Dockerfile
marcprux Sep 4, 2025
ee191ee
Merge branch 'swiftlang:main' into main
marcprux Sep 4, 2025
87bf6a2
Switch over to using explicit tags and branches when invoking build-d…
finagolfin Sep 7, 2025
9987e54
Merge branch 'swiftlang:main' into main
marcprux Sep 12, 2025
110ab52
Merge branch 'swiftlang:main' into main
marcprux Sep 13, 2025
811583e
Merge branch 'swiftlang:main' into main
marcprux Sep 16, 2025
3070fba
Fix build script arguments to use false instead of False due to true_…
marcprux Sep 16, 2025
bd87b1a
Build swift-6.2-RELEASE
marcprux Sep 16, 2025
ead9ba9
Apply patch from https://github.com/swiftlang/swift/pull/84061 for 6.…
marcprux Sep 16, 2025
1a19b03
Update patch application for 6.2
marcprux Sep 16, 2025
fab74d2
Change 6.2 to perform local build
marcprux Sep 16, 2025
d05b59d
Change 6.2 to perform local build on ubuntu-24.04
marcprux Sep 16, 2025
bf5d18d
Switch back to building 6.2 from a tag
marcprux Sep 16, 2025
7f71402
Switch back to building 6.2 from a tag
marcprux Sep 16, 2025
233b535
Switch back to building 6.2 from a tag
marcprux Sep 16, 2025
f8fcf04
Build the Swift 6.2 release self-hosted with compiler validation
marcprux Sep 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 161 additions & 0 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,164 @@ jobs:
name: docker-logs
path: |
*.log

android-build:
name: Android ${{ matrix.build-type }} ${{ matrix.swift-version }} ${{ matrix.arch }} ${{ matrix.runner }} (compiler=${{ matrix.build-compiler }})
strategy:
fail-fast: false
matrix:
include:
#- swift-version: 'tag:swift-6.2-RELEASE'
#- swift-version: 'tag:swift-DEVELOPMENT-SNAPSHOT-2025-09-14-a'
#- swift-version: 'tag:swift-6.2-DEVELOPMENT-SNAPSHOT-2025-09-10-a'
- swift-version: 'tag:swift-6.2-RELEASE'
# build-type: 'local'
# runner: 'ubuntu-24.04'
build-type: 'docker'
build-compiler: '1'
runner: 'self-hosted'
runs-on: ${{ matrix.runner }}
# 16 hour timeout
timeout-minutes: 960
steps:
- name: Free Disk Space
if: ${{ matrix.runner != 'self-hosted' }}
run: |
df -h
# brings available space from 25G to 32G
# otherwise we sometimes run out of space during the build
sudo rm -rf /usr/share/miniconda /usr/share/az* /usr/share/glade* /usr/local/share/chromium /usr/local/share/powershell /usr/share/dotnet /opt/ghc /opt/hostedtoolcache /usr/local/graalvm/ /usr/local/.ghcup/ /usr/local/lib/node_modules /usr/local/share/boost
sudo docker image prune --all --force
sudo docker builder prune -a
df -h
- name: Setup
id: config
run: |
# these variabes are used by build-docker and build-local
# to determine which Swift version to build for
echo "SWIFT_VERSION=${{ matrix.swift-version }}" >> $GITHUB_ENV
# pass the build-compiler matrix through to the build script
echo "BUILD_COMPILER=${{ matrix.build-compiler }}" >> $GITHUB_ENV
echo "TARGET_ARCHS=${{ matrix.arch }}" >> $GITHUB_ENV
echo "WORKDIR=${{ runner.temp }}/swift-android-sdk" >> $GITHUB_ENV
- name: Checkout repository
uses: actions/checkout@v4
- name: Build Android SDK (Local)
if: ${{ matrix.build-type == 'local' }}
working-directory: swift-ci/sdks/android
run: |
sudo apt install -q patchelf build-essential cmake ninja-build python3 golang git gnupg2 libcurl4-openssl-dev libedit-dev libicu-dev libncurses5-dev libpython3-dev libsqlite3-dev libxml2-dev rsync uuid-dev uuid-runtime tzdata curl unzip
./build-local ${SWIFT_VERSION} ${WORKDIR}
- name: Build Android SDK (Docker)
if: ${{ matrix.build-type == 'docker' }}
working-directory: swift-ci/sdks/android
run: |
./build-docker ${SWIFT_VERSION} ${WORKDIR}
- name: Install Host Toolchain
if: ${{ matrix.build-type == 'docker' }}
working-directory: swift-ci/sdks/android
run: |
# when building in a Docker container, we don't have a local host toolchain,
# but we need one in order to run the SDK validation tests, so we install it now
HOST_OS=ubuntu$(lsb_release -sr)
source ./scripts/toolchain-vars.sh
mkdir -p ${WORKDIR}/host-toolchain
./scripts/install-swift.sh ${WORKDIR}/host-toolchain/$SWIFT_BASE/usr
ls ${WORKDIR}/host-toolchain
${WORKDIR}/host-toolchain/*/usr/bin/swift --version
- name: Get artifact info
id: info
shell: bash
run: |
set -ex
SWIFT_ROOT=$(dirname ${WORKDIR}/host-toolchain/*/usr)
echo "swift-root=${SWIFT_ROOT}" >> $GITHUB_OUTPUT
echo "swift-path=${SWIFT_ROOT}/usr/bin/swift" >> $GITHUB_OUTPUT

ARTIFACT_PATH=$(realpath ${WORKDIR}/products/*.artifactbundle.tar.gz)
echo "artifact-path=${ARTIFACT_PATH}" >> $GITHUB_OUTPUT
echo "sdk-id=x86_64-unknown-linux-android28" >> $GITHUB_OUTPUT

ARTIFACT_EXT=".artifactbundle.tar.gz"
ARTIFACT_NAME="$(basename ${ARTIFACT_PATH} ${ARTIFACT_EXT})"
# depending on whether we are building locally or in a container, add a maker to the name
if [[ "${{ matrix.build-type }}" == 'local' ]]; then
ARTIFACT_NAME="${ARTIFACT_NAME}-local"
fi
if [[ "${{ matrix.build-compiler }}" == '1' ]]; then
ARTIFACT_NAME="${ARTIFACT_NAME}-hostbuild"
fi
# artifacts need a unique name so we suffix with the matrix arch(s)
if [[ ! -z "${{ matrix.arch }}" ]]; then
ARTIFACT_NAME="${ARTIFACT_NAME}-$(echo ${{ matrix.arch }} | tr ',' '-')"
fi
ARTIFACT_NAME="${ARTIFACT_NAME}${ARTIFACT_EXT}"

# There is no way to prevent even a single-file artifact from being zipped:
# https://github.com/actions/upload-artifact?tab=readme-ov-file#zip-archives
# so the actual artifact download will look like:
# swift-6.1-RELEASE_android-0.1-x86_64.artifactbundle.tar.gz.zip
echo "artifact-name=${ARTIFACT_NAME}" >> $GITHUB_OUTPUT
- name: Upload SDK artifactbundle
uses: actions/upload-artifact@v4
with:
compression-level: 0
name: ${{ steps.info.outputs.artifact-name }}
path: ${{ steps.info.outputs.artifact-path }}
- name: Cleanup
if: ${{ matrix.runner != 'self-hosted' }}
run: |
# need to free up some space or else when installing we get: No space left on device
df -h
rm -rf ${WORKDIR}/{build,source}
sudo docker image prune --all --force
sudo docker builder prune -a
df -h
- name: Install artifactbundle
if: ${{ matrix.runner != 'self-hosted' }}
shell: bash
run: |
set -ex
${{ steps.info.outputs.swift-path }} sdk install ${{ steps.info.outputs.artifact-path }}
${{ steps.info.outputs.swift-path }} sdk configure --show-configuration $(${{ steps.info.outputs.swift-path }} sdk list | head -n 1) ${{ steps.info.outputs.sdk-id }}
# recent releases require that ANDROID_NDK_ROOT *not* be set
# see https://github.com/swiftlang/swift-driver/pull/1879
echo "ANDROID_NDK_ROOT=" >> $GITHUB_ENV

- name: Create Demo Project
if: ${{ matrix.runner != 'self-hosted' }}
run: |
cd ${{ runner.temp }}
mkdir DemoProject
cd DemoProject
${{ steps.info.outputs.swift-path }} --version
${{ steps.info.outputs.swift-path }} package init
echo 'import Foundation' >> Sources/DemoProject/DemoProject.swift
echo 'import FoundationEssentials' >> Sources/DemoProject/DemoProject.swift
echo 'import FoundationXML' >> Sources/DemoProject/DemoProject.swift
echo 'import FoundationNetworking' >> Sources/DemoProject/DemoProject.swift
echo 'import Dispatch' >> Sources/DemoProject/DemoProject.swift
echo 'import Android' >> Sources/DemoProject/DemoProject.swift
- name: Test Demo Project on Android
uses: skiptools/swift-android-action@main
if: ${{ matrix.runner != 'self-hosted' }}
with:
# only test for the complete arch SDK build to speed up CI
#run-tests: ${{ matrix.arch == '' }}
package-path: ${{ runner.temp }}/DemoProject
installed-sdk: ${{ steps.info.outputs.sdk-id }}
installed-swift: ${{ steps.info.outputs.swift-root }}

- name: Checkout swift-algorithms
if: ${{ matrix.runner != 'self-hosted' }}
uses: actions/checkout@v4
with:
repository: apple/swift-algorithms
path: swift-algorithms
- name: Test swift-algorithms
if: ${{ matrix.runner != 'self-hosted' }}
uses: skiptools/swift-android-action@main
with:
package-path: swift-algorithms
installed-sdk: ${{ steps.info.outputs.sdk-id }}
installed-swift: ${{ steps.info.outputs.swift-root }}
5 changes: 5 additions & 0 deletions swift-ci/sdks/android/scripts/fetch-source.sh
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,11 @@ else
utils/update-checkout ${clone_arg} --tag swift-${SWIFT_VERSION}-RELEASE ${extra_args}
fi

if [[ $SWIFT_VERSION == '6.2' || $SWIFT_VERSION == 'tag:swift-6.2-RELEASE' ]]; then
curl -fsSL https://github.com/swiftlang/swift/pull/84061.patch > 84061.patch
git apply 84061.patch
fi

popd >/dev/null
groupend

Expand Down
4 changes: 2 additions & 2 deletions swift-ci/sdks/android/scripts/toolchain-vars.sh
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ elif [[ $SWIFT_VERSION == scheme:* ]]; then
echo "Building $SWIFT_VERSION with prebuilt Swift $RELEASE_TAG compiler"
BUILD_COMPILER=yes
echo "Branch scheme builds always build the Swift compiler from source and take much longer."
else
echo "Invalid Swift version=${SWIFT_VERSION}"
else
echo "Invalid SWIFT_VERSION: $SWIFT_VERSION"
exit 1
fi

Expand Down
Loading