Skip to content

Commit

Permalink
Merge pull request #5 from colemancda/feature/build-script
Browse files Browse the repository at this point in the history
Use upstream Swift build script
  • Loading branch information
colemancda authored Oct 25, 2022
2 parents 1cdf7ff + 1f60dd1 commit 1384cf5
Show file tree
Hide file tree
Showing 10 changed files with 184 additions and 153 deletions.
36 changes: 27 additions & 9 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,6 @@ jobs:
uses: actions/checkout@v3
- name: Swift Version
run: swift --version
- name: Download LLVM
run: |
export SRC_ROOT=$GITHUB_WORKSPACE
export LLVM_INSTALL_PREFIX=$SRC_ROOT/build/llvm-install
mkdir -p $LLVM_INSTALL_PREFIX
cd $LLVM_INSTALL_PREFIX
wget -q https://github.com/colemancda/swift-armv7/releases/download/0.4.0/llvm-swift.zip
unzip llvm-swift.zip
rm -rf llvm-swift.zip
- name: Build
run: |
export SRC_ROOT=$GITHUB_WORKSPACE
Expand Down Expand Up @@ -59,3 +50,30 @@ jobs:
with:
name: swift-hello
path: ./build/swift-hello/armv7-unknown-linux-gnueabihf/release/swift-hello

test-swift-hello-armv7:
name: Test Swift runtime
runs-on: [self-hosted, Linux, ARM]
container: colemancda/swift-armv7:5.7-debian11
needs: build-xctoolchain-armv7
steps:
- name: Download Swift runtime
uses: actions/download-artifact@v3
with:
name: swift-armv7
path: /tmp/
- name: Install Swift
run: |
rm -rf /usr/lib/swift*
cd /tmp/
tar -xf /tmp/swift-armv7.tar.gz
cp -rf /tmp/usr/* /usr/
rm -rf /tmp/usr
- name: Download swift-hello
uses: actions/download-artifact@v3
with:
name: swift-hello
- name: Test
run: |
chmod +x ./swift-hello
./swift-hello
32 changes: 0 additions & 32 deletions .github/workflows/release.yml

This file was deleted.

25 changes: 14 additions & 11 deletions build-llvm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@ 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)
cd $SWIFT_SRCDIR
export SKIP_XCODE_VERSION_CHECK=1
export SWIFT_NATIVE_SWIFT_TOOLS_PATH=$SWIFT_NATIVE_PATH
export SWIFT_NATIVE_CLANG_TOOLS_PATH=$SWIFT_NATIVE_PATH
export CC=$SWIFT_NATIVE_PATH/clang

echo "Install LLVM"
(cd $LLVM_BUILDDIR && ninja install)
./utils/build-script -RA --build-swift-tools=0 \
--skip-early-swift-driver --skip-build-llvm --skip-build-cmark \
--native-swift-tools-path=$SWIFT_NATIVE_PATH \
--native-clang-tools-path=$SWIFT_NATIVE_PATH \
--swift-install-components='clang-resource-dir-symlink;license;stdlib;sdk-overlay' \
--install-swift \
--cross-compile-append-host-target-to-destdir=False --build-swift-dynamic-stdlib \
--build-dir=$SRC_ROOT/build \
--workspace=$SRC_ROOT/downloads \
76 changes: 76 additions & 0 deletions build-swift-stdlib-cmake.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#!/bin/bash
set -e
source swift-define

echo "Create Swift build folder ${SWIFT_BUILDDIR}"
mkdir -p $SWIFT_BUILDDIR
mkdir -p $SWIFT_INSTALL_PREFIX

echo "Configure Swift"
rm -rf $SWIFT_BUILDDIR/CMakeCache.txt
LIBS="-latomic" cmake -S $SWIFT_SRCDIR -B $SWIFT_BUILDDIR -G Ninja \
-DCMAKE_INSTALL_PREFIX=${SWIFT_INSTALL_PREFIX} \
-DCMAKE_COLOR_MAKEFILE=OFF \
-DBUILD_DOC=OFF \
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLE=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TEST=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_TESTING=OFF \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=${SWIFT_BUILD_CONFIGURATION} \
-DCMAKE_C_COMPILER=$SWIFT_NATIVE_PATH/clang \
-DCMAKE_CXX_COMPILER=$SWIFT_NATIVE_PATH/clang++ \
-DCMAKE_C_FLAGS="${RUNTIME_FLAGS} ${EXTRA_INCLUDE_FLAGS}" \
-DCMAKE_CXX_FLAGS="${RUNTIME_FLAGS} ${EXTRA_INCLUDE_FLAGS}" \
-DCMAKE_C_LINK_FLAGS="${LINK_FLAGS}" \
-DCMAKE_CXX_LINK_FLAGS="${LINK_FLAGS}" \
-DSWIFT_USE_LINKER=lld \
-DLLVM_USE_LINKER=lld \
-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 \
-DSWIFT_NATIVE_SWIFT_TOOLS_PATH=$SWIFT_NATIVE_PATH \
-DSWIFT_BUILD_AST_ANALYZER=OFF \
-DSWIFT_BUILD_DYNAMIC_SDK_OVERLAY=ON \
-DSWIFT_BUILD_DYNAMIC_STDLIB=ON \
-DSWIFT_BUILD_REMOTE_MIRROR=OFF \
-DSWIFT_BUILD_SOURCEKIT=OFF \
-DSWIFT_BUILD_STDLIB_EXTRA_TOOLCHAIN_CONTENT=OFF \
-DSWIFT_BUILD_SYNTAXPARSERLIB=OFF \
-DSWIFT_BUILD_REMOTE_MIRROR=OFF \
-DSWIFT_ENABLE_SOURCEKIT_TESTS=OFF \
-DSWIFT_INCLUDE_DOCS=OFF \
-DSWIFT_INCLUDE_TOOLS=OFF \
-DSWIFT_INCLUDE_TESTS=OFF \
-DSWIFT_LIBRARY_EVOLUTION=0 \
-DSWIFT_RUNTIME_OS_VERSIONING=OFF \
-DSWIFT_HOST_VARIANT_ARCH=$SWIFT_TARGET_ARCH \
-DSWIFT_SDKS=LINUX \
-DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_PATH=${STAGING_DIR} \
-DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_LIBC_INCLUDE_DIRECTORY=${STAGING_DIR}/usr/include \
-DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY=${STAGING_DIR}/usr/include/arm-linux-gnueabihf \
-DSWIFT_LINUX_${SWIFT_TARGET_ARCH}_ICU_I18N=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicui18n.so \
-DSWIFT_LINUX_${SWIFT_TARGET_ARCH}_ICU_UC=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicuuc.so \
-DICU_I18N_LIBRARIES=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicui18n.so \
-DICU_UC_LIBRARIES=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicuuc.so \
-DZLIB_LIBRARY=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libz.so \
-DZLIB_INCLUDE_DIR=${STAGING_DIR}/usr/include \
-DSWIFT_PATH_TO_LIBDISPATCH_SOURCE=${LIBDISPATCH_SRCDIR} \
-DSWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY=ON \
-DCMAKE_Swift_FLAGS_DEBUG="" \
-DCMAKE_Swift_FLAGS_RELEASE="" \
-DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \
-DCMAKE_OSX_SYSROOT="" \

echo "Build Swift StdLib"
(cd $SWIFT_BUILDDIR && ninja)

echo "Install Swift StdLib"
(cd $SWIFT_BUILDDIR && ninja install)

echo "Install to Debian sysroot"
cp -rf ${SWIFT_INSTALL_PREFIX}/* ${STAGING_DIR}/usr/
97 changes: 34 additions & 63 deletions build-swift-stdlib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,71 +6,42 @@ echo "Create Swift build folder ${SWIFT_BUILDDIR}"
mkdir -p $SWIFT_BUILDDIR
mkdir -p $SWIFT_INSTALL_PREFIX

echo "Configure Swift"
rm -rf $SWIFT_BUILDDIR/CMakeCache.txt
LIBS="-latomic" cmake -S $SWIFT_SRCDIR -B $SWIFT_BUILDDIR -G Ninja \
-DCMAKE_INSTALL_PREFIX=${SWIFT_INSTALL_PREFIX} \
-DCMAKE_COLOR_MAKEFILE=OFF \
-DBUILD_DOC=OFF \
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLE=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TEST=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_TESTING=OFF \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=${SWIFT_BUILD_CONFIGURATION} \
-DCMAKE_C_COMPILER=$SWIFT_NATIVE_PATH/clang \
-DCMAKE_CXX_COMPILER=$SWIFT_NATIVE_PATH/clang++ \
-DCMAKE_C_FLAGS="${RUNTIME_FLAGS} ${EXTRA_INCLUDE_FLAGS}" \
-DCMAKE_CXX_FLAGS="${RUNTIME_FLAGS} ${EXTRA_INCLUDE_FLAGS}" \
-DCMAKE_C_LINK_FLAGS="${LINK_FLAGS}" \
-DCMAKE_CXX_LINK_FLAGS="${LINK_FLAGS}" \
-DSWIFT_USE_LINKER=lld \
echo "Build Swift"
cd $SWIFT_SRCDIR
export SKIP_XCODE_VERSION_CHECK=1
export SWIFT_NATIVE_SWIFT_TOOLS_PATH=$SWIFT_NATIVE_PATH
export SWIFT_NATIVE_CLANG_TOOLS_PATH=$SWIFT_NATIVE_PATH
export CC=$SWIFT_NATIVE_PATH/clang
export CFLAGS="${RUNTIME_FLAGS} ${EXTRA_INCLUDE_FLAGS}"
export CXXFLAGS="${RUNTIME_FLAGS} ${EXTRA_INCLUDE_FLAGS}"
export LDFLAGS="${LINK_FLAGS}"

./utils/build-script -RA --build-swift-tools=0 \
--skip-early-swift-driver --skip-build-llvm --skip-build-cmark \
--skip-local-build \
--native-swift-tools-path=$SWIFT_NATIVE_PATH \
--native-clang-tools-path=$SWIFT_NATIVE_PATH \
--cross-compile-hosts=linux-armv7 --cross-compile-deps-path=$STAGING_DIR \
--swift-install-components='clang-resource-dir-symlink;license;stdlib;sdk-overlay' \
--install-swift \
--install-destdir=$SWIFT_INSTALL_PREFIX \
--cross-compile-append-host-target-to-destdir=False --build-swift-dynamic-stdlib \
--build-dir=$SRC_ROOT/build \
--workspace=$SRC_ROOT/downloads \
--stdlib-deployment-targets="linux-armv7" \
--extra-cmake-options=" \
-DCMAKE_C_FLAGS=\"${RUNTIME_FLAGS} ${EXTRA_INCLUDE_FLAGS}\" \
-DCMAKE_CXX_FLAGS=\"${RUNTIME_FLAGS} ${EXTRA_INCLUDE_FLAGS}\" \
-DCMAKE_C_LINK_FLAGS=\"${LINK_FLAGS}\" \
-DCMAKE_CXX_LINK_FLAGS=\"${LINK_FLAGS}\" \
-DCMAKE_LINKER=/usr/bin/ld.lld \
-DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_PATH=${STAGING_DIR} \
-DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_LIBC_INCLUDE_DIRECTORY=${STAGING_DIR}/usr/include \
-DSWIFT_USE_LINKER=lld \
-DLLVM_USE_LINKER=lld \
-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 \
-DSWIFT_NATIVE_SWIFT_TOOLS_PATH=$SWIFT_NATIVE_PATH \
-DSWIFT_BUILD_AST_ANALYZER=OFF \
-DSWIFT_BUILD_DYNAMIC_SDK_OVERLAY=ON \
-DSWIFT_BUILD_DYNAMIC_STDLIB=ON \
-DSWIFT_BUILD_REMOTE_MIRROR=OFF \
-DSWIFT_BUILD_SOURCEKIT=OFF \
-DSWIFT_BUILD_STDLIB_EXTRA_TOOLCHAIN_CONTENT=OFF \
-DSWIFT_BUILD_SYNTAXPARSERLIB=OFF \
-DSWIFT_BUILD_REMOTE_MIRROR=OFF \
-DSWIFT_ENABLE_SOURCEKIT_TESTS=OFF \
-DSWIFT_INCLUDE_DOCS=OFF \
-DSWIFT_INCLUDE_TOOLS=OFF \
-DSWIFT_INCLUDE_TESTS=OFF \
-DSWIFT_LIBRARY_EVOLUTION=0 \
-DSWIFT_RUNTIME_OS_VERSIONING=OFF \
-DSWIFT_HOST_VARIANT_ARCH=$SWIFT_TARGET_ARCH \
-DSWIFT_SDKS=LINUX \
-DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_PATH=${STAGING_DIR} \
-DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_LIBC_INCLUDE_DIRECTORY=${STAGING_DIR}/usr/include \
-DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY=${STAGING_DIR}/usr/include/arm-linux-gnueabihf \
-DSWIFT_LINUX_${SWIFT_TARGET_ARCH}_ICU_I18N=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicui18n.so \
-DSWIFT_LINUX_${SWIFT_TARGET_ARCH}_ICU_UC=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicuuc.so \
-DICU_I18N_LIBRARIES=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicui18n.so \
-DICU_UC_LIBRARIES=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicuuc.so \
-DZLIB_LIBRARY=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libz.so \
-DZLIB_INCLUDE_DIR=${STAGING_DIR}/usr/include \
-DSWIFT_PATH_TO_LIBDISPATCH_SOURCE=${LIBDISPATCH_SRCDIR} \
-DSWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY=ON \
-DCMAKE_Swift_FLAGS_DEBUG="" \
-DCMAKE_Swift_FLAGS_RELEASE="" \
-DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \
-DCMAKE_OSX_SYSROOT="" \

echo "Build Swift StdLib"
(cd $SWIFT_BUILDDIR && ninja)

echo "Install Swift StdLib"
(cd $SWIFT_BUILDDIR && ninja install)
"

echo "Install to Debian sysroot"
cp -rf ${SWIFT_INSTALL_PREFIX}/* ${STAGING_DIR}/usr/
cp -rf ${SWIFT_INSTALL_PREFIX}/* ${STAGING_DIR}/
2 changes: 1 addition & 1 deletion build-tar.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ source swift-define
rm -rf $INSTALL_TAR
rm -rf $INSTALL_PREFIX
mkdir -p $INSTALL_PREFIX
cp -rf $SWIFT_INSTALL_PREFIX/* $INSTALL_PREFIX/
cp -rf $SWIFT_INSTALL_PREFIX/usr/* $INSTALL_PREFIX/
cp -rf $LIBDISPATCH_INSTALL_PREFIX/* $INSTALL_PREFIX/
cp -rf $FOUNDATION_INSTALL_PREFIX/* $INSTALL_PREFIX/
cp -rf $XCTEST_INSTALL_PREFIX/* $INSTALL_PREFIX/
Expand Down
6 changes: 1 addition & 5 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,7 @@ fi
rm -rf $STAGING_DIR/usr/lib/swift*

# Build LLVM
if [[ -d "$LLVM_INSTALL_PREFIX" ]]; then
echo "Using built LLVM"
else
./build-llvm.sh
fi
./build-llvm.sh

# Build Swift
./build-swift-stdlib.sh
Expand Down
10 changes: 0 additions & 10 deletions fetch-binaries.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,6 @@ else
rm -rf ./downloads/bullseye-armv7
fi

# Download prebuilt LLVM
if [[ ! -d "$LLVM_INSTALL_PREFIX" ]]; then
mkdir -p $LLVM_INSTALL_PREFIX
cd $LLVM_INSTALL_PREFIX
echo "Download prebuilt LLVM"
wget -q https://github.com/colemancda/swift-armv7/releases/download/0.4.0/llvm-swift.zip
unzip llvm-swift.zip
rm -rf llvm-swift.zip
fi

if [[ $OSTYPE == 'darwin'* ]]; then

# Download Swift Xcode toolchain
Expand Down
Loading

0 comments on commit 1384cf5

Please sign in to comment.