Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated to Swift 5.7 #2

Merged
merged 8 commits into from
Oct 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 6 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,13 @@ jobs:
run: |
export SRC_ROOT=$GITHUB_WORKSPACE
./build.sh
- name: Archive Build artifacts
- name: Archive Swift Build artifacts
uses: actions/upload-artifact@v3
with:
name: swift-armv7
path: ./build/swift-armv7.tar.gz
- name: Archive LLVM Build artifacts
uses: actions/upload-artifact@v3
with:
name: llvm-swift
path: ./build/llvm-install
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
build
downloads
llvm*
.config
.build
*-armv7
33 changes: 4 additions & 29 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
FROM swift:5.6.1-focal
FROM swift:5.7-jammy

# Install dependencies
RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true && apt-get -q update && \
apt-get -q install -y \
llvm-12-dev \
ninja-build \
proot \
wget \
build-essential \
bash \
bc \
binutils \
build-essential \
bzip2 \
cpio \
g++ \
Expand All @@ -24,37 +21,15 @@ RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true && ap
whois \
patch \
perl \
python \
python3 \
rsync \
sed \
tar \
unzip \
cmake \
gnupg \
&& rm -r /var/lib/apt/lists/*

# Install latest Cmake
RUN set -e; \
ARCH_NAME="$(dpkg --print-architecture)"; \
case "${ARCH_NAME##*-}" in \
'amd64') \
OS_ARCH_SUFFIX='-x86_64'; \
;; \
'arm64') \
OS_ARCH_SUFFIX='-aarch64'; \
;; \
*) echo >&2 "error: unsupported architecture: '$ARCH_NAME'"; exit 1 ;; \
esac; \
export CMAKE_VERSION="cmake-3.22.4-linux$OS_ARCH_SUFFIX"; \
cd /tmp; \
wget "https://github.com/Kitware/CMake/releases/download/v3.22.4/$CMAKE_VERSION.tar.gz"; \
tar -xf $CMAKE_VERSION.tar.gz; \
rm -rf $CMAKE_VERSION.tar.gz; \
rm -rf $CMAKE_VERSION/man; \
cp -rf $CMAKE_VERSION/* /usr/local/; \
rm -rf $CMAKE_VERSION;

# Modify LLVM headers
RUN cp /usr/lib/llvm-12/include/llvm/Config/llvm-config.h /usr/lib/llvm-12/include/llvm/Config/config.h

# Copy files
WORKDIR /usr/src/swift-armv7
COPY . .
Expand Down
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,9 @@ Swift runtime for Linux Armv7
Set the required environment variables for the scripts:

```
export SRC_ROOT=/home/coleman/Developer/swift-armv7
export STAGING_DIR="${STAGING_DIR:=$SRC_ROOT/bullseye-armv7}"
export SWIFT_NATIVE_PATH="${SWIFT_NATIVE_PATH:=/usr/bin}"
export SWIFT_LLVM_DIR="${SWIFT_LLVM_DIR:=/usr/lib/llvm-12}"
```

If using Debian or Ubuntu, install the `llvm-12` package for LLVM headers.
Make sure the Debian Bullseye armhf sysroot is at `STAGING_DIR` and `SWIFT_NATIVE_PATH` points to your Swift compiler installation.
`SWIFT_PACKAGE_SRCDIR` can be set to the root of your own packages to cross compile them using `build-swift-package.sh`.
`SWIFT_PACKAGE_SRCDIR` can be set to the root of your own packages to cross compile them using `build-swift-package.sh`.
21 changes: 21 additions & 0 deletions build-llvm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash
set -e
source swift-define

echo "Create LLVM build folder ${LLVM_BUILDDIR}"
mkdir -p $LLVM_BUILDDIR
mkdir -p $LLVM_INSTALL_PREFIX

echo "Configure LLVM"
cmake -S $LLVM_SRCDIR/llvm -B $LLVM_BUILDDIR -G Ninja \
-DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_PREFIX} \
-DCMAKE_C_COMPILER=$SWIFT_NATIVE_PATH/clang \
-DCMAKE_CXX_COMPILER=$SWIFT_NATIVE_PATH/clang++ \
-DLLVM_ENABLE_PROJECTS="llvm" \
-DCMAKE_BUILD_TYPE=Release

echo "Build LLVM"
(cd $LLVM_BUILDDIR && ninja)

echo "Install LLVM"
(cd $LLVM_BUILDDIR && ninja install)
4 changes: 2 additions & 2 deletions build-swift-stdlib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ LIBS="-latomic" cmake -S $SWIFT_SRCDIR -B $SWIFT_BUILDDIR -G Ninja \
-DCMAKE_CXX_LINK_FLAGS="${LINK_FLAGS}" \
-DSWIFT_USE_LINKER=lld \
-DLLVM_USE_LINKER=lld \
-DLLVM_DIR=${SWIFT_LLVM_DIR}/lib/cmake/llvm \
-DLLVM_BUILD_LIBRARY_DIR=${SWIFT_LLVM_DIR} \
-DLLVM_DIR=${LLVM_INSTALL_PREFIX}/lib/cmake/llvm \
-DLLVM_BUILD_LIBRARY_DIR=${LLVM_INSTALL_PREFIX} \
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
-DSWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER=ON \
-DSWIFT_NATIVE_CLANG_TOOLS_PATH=$SWIFT_NATIVE_PATH \
Expand Down
7 changes: 7 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
#!/bin/bash
set -e
source swift-define

# Fetch and patch sources
./fetch-sources.sh
# Build runtime
if [[ -d "$LLVM_INSTALL_PREFIX" ]]; then
echo "Using built LLVM"
else
./build-llvm.sh
fi
./build-swift-stdlib.sh
./build-dispatch.sh
./build-foundation.sh
Expand Down
68 changes: 19 additions & 49 deletions fetch-sources.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,54 +13,22 @@ if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download Swift ${SWIFT_VERSION}"
wget $SRCURL -O $DOWNLOAD_FILE
wget -q $SRCURL -O $DOWNLOAD_FILE
fi
rm -rf $SRCDIR
mkdir -p $SRCDIR
tar -xf $DOWNLOAD_FILE -C ./downloads

# Apply Swift patches
echo "Apply Swift patches"
DOWNLOAD_FILE=./downloads/swift-stdlib-refcount.patch
SRCURL=https://gist.githubusercontent.com/colemancda/ed295f963493726b1c01a6bc97945a3d/raw/8392d963c96ee5c910b816734afca4295a7e09c7/RefCount.patch
if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download ${DOWNLOAD_FILE}"
wget $SRCURL -O $DOWNLOAD_FILE
fi
patch ./downloads/swift-$SWIFT_VERSION/stdlib/public/SwiftShims/RefCount.h $DOWNLOAD_FILE

DOWNLOAD_FILE=./downloads/swift-stdlib-float16.patch
SRCURL=https://gist.githubusercontent.com/colemancda/ed295f963493726b1c01a6bc97945a3d/raw/8392d963c96ee5c910b816734afca4295a7e09c7/Float16.patch
if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download ${DOWNLOAD_FILE}"
wget $SRCURL -O $DOWNLOAD_FILE
wget -q $SRCURL -O $DOWNLOAD_FILE
fi
patch ./downloads/swift-$SWIFT_VERSION/stdlib/public/runtime/Float16Support.cpp $DOWNLOAD_FILE

DOWNLOAD_FILE=./downloads/swift-stdlib-AtomicWaitQueue.patch
SRCURL=https://gist.githubusercontent.com/colemancda/d88a775f2bf3e234f4fa705c46b66b37/raw/1d8d54f23f5564f847ab39c65b59d287bba4f333/swift-5.6-AtomicWaitQueue.patch
if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download ${DOWNLOAD_FILE}"
wget $SRCURL -O $DOWNLOAD_FILE
fi
patch ./downloads/swift-$SWIFT_VERSION/include/swift/Runtime/AtomicWaitQueue.h $DOWNLOAD_FILE

DOWNLOAD_FILE=./downloads/swift-stdlib-HeapObject.patch
SRCURL=https://gist.github.com/colemancda/d88a775f2bf3e234f4fa705c46b66b37/raw/1d8d54f23f5564f847ab39c65b59d287bba4f333/swift-5.6-HeapObject-cxx-newObject.patch
if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download ${DOWNLOAD_FILE}"
wget $SRCURL -O $DOWNLOAD_FILE
fi
patch ./downloads/swift-$SWIFT_VERSION/include/swift/Runtime/HeapObject.h $DOWNLOAD_FILE

# Download Dispatch
DOWNLOAD_FILE=./downloads/libdispatch-${SWIFT_VERSION}.tar.gz
SRCDIR=./downloads/swift-corelibs-libdispatch-$SWIFT_VERSION
Expand All @@ -69,24 +37,12 @@ if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download Dispatch ${SWIFT_VERSION}"
wget $SRCURL -O $DOWNLOAD_FILE
wget -q $SRCURL -O $DOWNLOAD_FILE
fi
rm -rf $SRCDIR
mkdir -p $SRCDIR
tar -xf $DOWNLOAD_FILE -C ./downloads

# Apply Dispatch patches
echo "Apply Dispatch patches"
DOWNLOAD_FILE=./downloads/libdispatch-yield.patch
SRCURL=https://gist.githubusercontent.com/colemancda/a7c116250ceb601da5b408a4fd36f239/raw/7de75208472e5ce04954715ea5b59d7980ce57ff/arm-yield.patch
if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download ${DOWNLOAD_FILE}"
wget $SRCURL -O $DOWNLOAD_FILE
fi
patch ./downloads/swift-corelibs-libdispatch-$SWIFT_VERSION/src/shims/yield.c $DOWNLOAD_FILE

# Download Foundation
DOWNLOAD_FILE=./downloads/foundation-${SWIFT_VERSION}.tar.gz
SRCDIR=./downloads/swift-corelibs-foundation-$SWIFT_VERSION
Expand All @@ -95,7 +51,7 @@ if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download Foundation ${SWIFT_VERSION}"
wget $SRCURL -O $DOWNLOAD_FILE
wget -q $SRCURL -O $DOWNLOAD_FILE
fi
rm -rf $SRCDIR
mkdir -p $SRCDIR
Expand All @@ -109,8 +65,22 @@ if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download XCTest ${SWIFT_VERSION}"
wget $SRCURL -O $DOWNLOAD_FILE
wget -q $SRCURL -O $DOWNLOAD_FILE
fi
rm -rf $SRCDIR
mkdir -p $SRCDIR
tar -xf $DOWNLOAD_FILE -C ./downloads

# Download LLVM
DOWNLOAD_FILE=./downloads/llvm-${SWIFT_VERSION}.tar.gz
SRCDIR=./downloads/llvm-project-$SWIFT_VERSION
SRCURL=https://github.com/apple/llvm-project/archive/refs/tags/$SWIFT_VERSION.tar.gz
if test -f "$DOWNLOAD_FILE"; then
echo "$DOWNLOAD_FILE exists"
else
echo "Download LLVM ${SWIFT_VERSION}"
wget $SRCURL -O $DOWNLOAD_FILE
fi
rm -rf $SRCDIR
mkdir -p $SRCDIR
tar -xf $DOWNLOAD_FILE -C ./downloads
8 changes: 5 additions & 3 deletions swift-define
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
# Version
SWIFT_VERSION=swift-5.6.1-RELEASE
SWIFT_VERSION=swift-5.7-RELEASE
SWIFT_TARGET_ARCH=armv7
SWIFT_TARGET_NAME=armv7-unknown-linux-gnueabihf

# Configurable
SRC_ROOT="${SRC_ROOT:=/usr/src/swift-armv7}"
SRC_ROOT="${SRC_ROOT:=$(pwd)}"
STAGING_DIR="${STAGING_DIR:=$SRC_ROOT/bullseye-armv7}"
SWIFT_NATIVE_PATH="${SWIFT_NATIVE_PATH:=/usr/bin}"
SWIFT_LLVM_DIR="${SWIFT_LLVM_DIR:=/usr/lib/llvm-12}"
SWIFT_BUILD_CONFIGURATION="${SWIFT_BUILD_CONFIGURATION:=Release}"
SWIFTPM_CONFIGURATION="${SWIFTPM_CONFIGURATION:=release}"
SWIFT_PACKAGE_SRCDIR="${SWIFT_PACKAGE_SRCDIR:=$SRC_ROOT/swift-hello}"
SWIFT_PACKAGE_BUILDDIR="${SWIFT_PACKAGE_BUILDDIR:=$SWIFT_PACKAGE_SRCDIR/.build}"

# Build Paths
LLVM_SRCDIR=$SRC_ROOT/downloads/llvm-project-$SWIFT_VERSION
LLVM_BUILDDIR=$SRC_ROOT/build/llvm
LLVM_INSTALL_PREFIX=$SRC_ROOT/build/llvm-install
SWIFT_SRCDIR=$SRC_ROOT/downloads/swift-$SWIFT_VERSION
SWIFT_BUILDDIR=$SRC_ROOT/build/swift-$SWIFT_TARGET_ARCH
SWIFT_INSTALL_PREFIX=$SRC_ROOT/build/swift-$SWIFT_TARGET_ARCH-install/usr
Expand Down