-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding GitHub Action to test swift compilation
- Loading branch information
Showing
3 changed files
with
210 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
name: Build | ||
|
||
defaults: | ||
run: | ||
shell: bash -exu {0} | ||
|
||
on: | ||
push: | ||
branches: | ||
- master | ||
|
||
jobs: | ||
build: | ||
runs-on: [self-hosted, linux, '${{ matrix.arch }}'] | ||
container: | ||
image: fedora:39 | ||
volumes: | ||
- /home/builder/.work:/work | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
# system means use the clang provided by the operating system, | ||
# from-source means build clang from source, | ||
# and prebuilt means use the clang provided by the swift toolchain | ||
arch: [x64, arm64] | ||
clang: [system, from-source] | ||
include: | ||
- arch: arm64 | ||
clang: prebuilt | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Copy checkout | ||
run: | | ||
mkdir -p /work/src/build-script | ||
cp -R . /work/src/build-script | ||
- name: Install dependencies | ||
run: | | ||
# Basic dependencies | ||
deps="curl git which patch ninja-build dnf-plugins-core" | ||
dnf install -y ${deps} | ||
# Install build dependencies for swift | ||
dnf builddep -y swift-lang | ||
- name: Build clang | ||
if: matrix.clang == 'from-source' | ||
run: | | ||
echo "PATH=$PATH" | ||
# Install build dependencies for clang | ||
dnf builddep -y clang | ||
dnf install -y lld | ||
# Checkout llvm-project | ||
mkdir -p /work/src | ||
cd /work/src | ||
git clone https://github.com/llvm/llvm-project --no-checkout || true | ||
cd llvm-project | ||
TAG="llvmorg-17.0.6" | ||
git fetch origin "$TAG" | ||
git checkout -f "$TAG" | ||
# Build clang | ||
CC=$(which clang) | ||
CXX=$(which clang++) | ||
BUILD_DIR="$PWD/build" | ||
INSTALL_DIR=/usr/local | ||
targets_to_build="" | ||
if [[ "${{ matrix.arch }}" == "x64" ]]; then | ||
targets_to_build="X86" | ||
elif [[ "${{ matrix.arch }}" == "arm64" ]]; then | ||
targets_to_build="AArch64" | ||
else | ||
echo "Unknown arch: ${{ matrix.arch }}" | ||
exit 1 | ||
fi | ||
cmake \ | ||
-B "$BUILD_DIR" \ | ||
-G Ninja \ | ||
llvm \ | ||
-DLLVM_ENABLE_PROJECTS='clang' \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \ | ||
-DCMAKE_C_COMPILER="$CC" \ | ||
-DCMAKE_CXX_COMPILER="$CXX" \ | ||
-DLLVM_ENABLE_ASSERTIONS=ON \ | ||
-DLLVM_TARGETS_TO_BUILD="$targets_to_build" \ | ||
-DLLVM_ENABLE_LLD=ON \ | ||
-DLLVM_ENABLE_ZSTD=OFF | ||
cmake --build "$BUILD_DIR" | ||
cmake --build "$BUILD_DIR" --target install | ||
# verify clang | ||
/usr/local/bin/clang --version | ||
# Check if the build succeeded | ||
tmpdir=$(mktemp -d) | ||
trap 'rm -rf -- "$tmpdir"' EXIT | ||
cat > "$tmpdir/test.cpp" <<EOF | ||
#include <iostream> | ||
int main() { | ||
std::cout << "Hello, world!" << std::endl; | ||
return 0; | ||
} | ||
EOF | ||
/usr/local/bin/clang++ -o "$tmpdir/test" "$tmpdir/test.cpp" | ||
"$tmpdir/test" | grep -q "Hello, world!" | ||
echo "clang build succeeded" | ||
- name: Download old swift | ||
run: | | ||
mkdir -p /work/toolchain | ||
cd /work/toolchain | ||
if [[ -d swift-5.8.1-RELEASE-ubi9 ]]; then | ||
echo "swift-5.8.1-RELEASE-ubi9 already exists" | ||
exit 0 | ||
fi | ||
suffix="" | ||
if [[ $(uname -m) == "aarch64" ]]; then | ||
suffix="-aarch64" | ||
fi | ||
curl -OL "https://download.swift.org/swift-5.8.1-release/ubi9$suffix/swift-5.8.1-RELEASE/swift-5.8.1-RELEASE-ubi9$suffix.tar.gz" | ||
tar -xf "swift-5.8.1-RELEASE-ubi9$suffix.tar.gz" | ||
rm "swift-5.8.1-RELEASE-ubi9$suffix.tar.gz" | ||
if [[ -n "$suffix" ]]; then | ||
mv swift-5.8.1-RELEASE-ubi9* swift-5.8.1-RELEASE-ubi9 | ||
fi | ||
- name: Build swift | ||
run: | | ||
if [[ "${{ matrix.clang }}" == "build-from-source" ]]; then | ||
export PATH="/usr/bin:/usr/sbin:/bin:/sbin:/work/toolchain/swift-5.8.1-RELEASE-ubi9/usr/bin" | ||
elif [[ "${{ matrix.clang }}" == "prebuilt" ]]; then | ||
export PATH="/work/toolchain/swift-5.8.1-RELEASE-ubi9/usr/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin" | ||
else | ||
export PATH="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin:/work/toolchain/swift-5.8.1-RELEASE-ubi9/usr/bin" | ||
fi | ||
echo "PATH=$PATH" | ||
echo "clang: $(which clang)" | ||
echo "swift: $(which swift)" | ||
# Checkout swift | ||
mkdir -p /work/src/swift | ||
cd /work/src/swift | ||
if [[ ! -d swift ]]; then | ||
git clone https://github.com/apple/swift -b release/5.9 | ||
else | ||
# Reset all git repositories to remove any local changes | ||
for dir in $(find . -type d -name ".git"); do | ||
git -C "$dir/.." reset --hard | ||
done | ||
fi | ||
args="" | ||
if [[ ! -d llvm-project ]]; then | ||
args="--clone" | ||
fi | ||
cd swift | ||
utils/update-checkout ${args} --scheme release/5.9 | ||
# Download patch | ||
mkdir -p /work/src/patches | ||
cd /work/src/patches | ||
curl -OL https://src.fedoraproject.org/rpms/swift-lang/raw/b1cf890222c620e4be45ae54a48fb6c1ac52465a/f/fclose_issues.patch | ||
curl -OL https://src.fedoraproject.org/rpms/swift-lang/raw/b1cf890222c620e4be45ae54a48fb6c1ac52465a/f/new_glibc.patch | ||
cd /work/src/swift | ||
pushd swift | ||
patch -p1 < /work/src/build-script/patches/wdocumentation.patch | ||
popd | ||
pushd swift-corelibs-foundation | ||
patch -p1 < /work/src/patches/new_glibc.patch | ||
popd | ||
pushd swift-tools-support-core | ||
patch -p1 < /work/src/patches/fclose_issues.patch | ||
popd | ||
# Build swift | ||
rm -rf build | ||
swift/utils/build-script \ | ||
--preset=buildbot_linux,no_test \ | ||
install_destdir=$(pwd)/build-${{ matrix.clang }} \ | ||
installable_package=$(pwd)/swift-${{ matrix.clang }}.tar.gz |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Test swift build | ||
|
||
This repo contains a GitHub Action that builds a Swift itself with various | ||
compilers and architectures. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
This patch removes the -Wdocumentation flag from the CMake build. | ||
See https://github.com/llvm/llvm-project/issues/68524 and | ||
https://github.com/apple/swift/issues/69154 for more details. | ||
--- swift/cmake/modules/SwiftSharedCMakeConfig.cmake | ||
+++ swift/cmake/modules/SwiftSharedCMakeConfig.cmake | ||
@@ -323,9 +323,6 @@ macro(swift_common_cxx_warnings) | ||
append_if(CXX_SUPPORTS_WE4062 "/we4062" CMAKE_CXX_FLAGS) | ||
endif() | ||
|
||
- check_cxx_compiler_flag("-Werror -Wdocumentation" CXX_SUPPORTS_DOCUMENTATION_FLAG) | ||
- append_if(CXX_SUPPORTS_DOCUMENTATION_FLAG "-Wdocumentation" CMAKE_CXX_FLAGS) | ||
- | ||
check_cxx_compiler_flag("-Werror -Wimplicit-fallthrough" CXX_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG) | ||
append_if(CXX_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG "-Wimplicit-fallthrough" CMAKE_CXX_FLAGS) |