Skip to content

Commit

Permalink
Merge pull request #2 from colemancda/feature/swift-5.7
Browse files Browse the repository at this point in the history
  • Loading branch information
colemancda authored Oct 15, 2022
2 parents 9274db6 + 1f78890 commit 8df7eda
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 88 deletions.
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

0 comments on commit 8df7eda

Please sign in to comment.