Skip to content
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
1 change: 1 addition & 0 deletions .github/scripts/build-matrix.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"main": "ghcr.io/swiftwasm/swift-ci:main-ubuntu-22.04",
"release-6.0": "ghcr.io/swiftwasm/swift-ci:main-ubuntu-20.04@sha256:06faf7795ea077b64986b1c821a27b2756242ebe6d73adcdae17f4e424c17dc5",
"release-6.1": "ghcr.io/swiftwasm/swift-ci:main-ubuntu-20.04@sha256:06faf7795ea077b64986b1c821a27b2756242ebe6d73adcdae17f4e424c17dc5",
"release-6.2": "ghcr.io/swiftwasm/swift-ci:main-ubuntu-20.04@sha256:ef0e9e4ff5b457103d8a060573050d9b33c91d9f680f7d4202412a99dc52cde0",
},
"run_stdlib_test": true,
"run_full_test": false,
Expand Down
60 changes: 60 additions & 0 deletions schemes/release-6.2/build/build-foundation.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/bin/bash
set -ex
DESTINATION_TOOLCHAIN=$1
LLVM_BIN_DIR=$2
CLANG_BIN_DIR=$3
SWIFT_BIN_DIR=$4
WASI_SYSROOT_PATH=$5
TRIPLE="$6"

SOURCE_PATH="$(cd "$(dirname $0)/../../../.." && pwd)"
BUILD_SDK_PATH="$SOURCE_PATH/build-sdk"
LIBXML2_PATH="$BUILD_SDK_PATH/libxml2-$TRIPLE"

# WORKAROUND: libxml2 is compiled as wasm32-unknown-wasi but we expect it to be wasm32-unknown-wasip1
if [[ "$TRIPLE" == "wasm32-unknown-wasip1" ]]; then
LIBXML2_PATH="$BUILD_SDK_PATH/libxml2-wasm32-unknown-wasi"
fi

FOUNDATION_BUILD="$SOURCE_PATH/build/WebAssembly/foundation-$TRIPLE"

swift_extra_flags=""
c_extra_flags=""
if [[ "$TRIPLE" == "wasm32-unknown-wasip1-threads" ]]; then
swift_extra_flags="-Xcc -matomics -Xcc -mbulk-memory -Xcc -mthread-model -Xcc posix -Xcc -pthread -Xcc -ftls-model=local-exec"
c_extra_flags="-mthread-model posix -pthread -ftls-model=local-exec"
fi

cmake -G Ninja \
-D CMAKE_BUILD_TYPE="Release" \
-D CMAKE_SYSROOT="$WASI_SYSROOT_PATH" \
-D CMAKE_Swift_COMPILER="$SWIFT_BIN_DIR/swiftc" \
-D CMAKE_STAGING_PREFIX="$DESTINATION_TOOLCHAIN/usr" \
-D CMAKE_SYSTEM_NAME=WASI \
-D CMAKE_SYSTEM_PROCESSOR=wasm32 \
-D CMAKE_C_COMPILER_TARGET="$TRIPLE" \
-D CMAKE_CXX_COMPILER_TARGET="$TRIPLE" \
-D CMAKE_Swift_COMPILER_TARGET="$TRIPLE" \
-D CMAKE_C_COMPILER="$CLANG_BIN_DIR/clang" \
-D CMAKE_CXX_COMPILER="$CLANG_BIN_DIR/clang++" \
-D CMAKE_AR="$LLVM_BIN_DIR/llvm-ar" \
-D CMAKE_RANLIB="$LLVM_BIN_DIR/llvm-ranlib" \
-D LIBXML2_INCLUDE_DIR="$LIBXML2_PATH/include/libxml2" \
-D LIBXML2_LIBRARY="$LIBXML2_PATH/lib" \
-D BUILD_SHARED_LIBS=OFF \
-D FOUNDATION_BUILD_TOOLS=OFF \
-D CMAKE_Swift_COMPILER_FORCED=ON \
-D CMAKE_C_COMPILER_FORCED=ON \
-D CMAKE_CXX_COMPILER_FORCED=ON \
-D CMAKE_Swift_FLAGS="-sdk $WASI_SYSROOT_PATH -resource-dir $DESTINATION_TOOLCHAIN/usr/lib/swift_static $swift_extra_flags" \
-D CMAKE_C_FLAGS="-resource-dir $DESTINATION_TOOLCHAIN/usr/lib/swift_static/clang -B $LLVM_BIN_DIR $c_extra_flags" \
-D CMAKE_CXX_FLAGS="-fno-exceptions -resource-dir $DESTINATION_TOOLCHAIN/usr/lib/swift_static/clang -B $LLVM_BIN_DIR $c_extra_flags" \
-D _SwiftCollections_SourceDIR="$SOURCE_PATH/swift-collections" \
-D _SwiftFoundation_SourceDIR="$SOURCE_PATH/swift-foundation" \
-D _SwiftFoundationICU_SourceDIR="$SOURCE_PATH/swift-foundation-icu" \
-D SwiftFoundation_MACRO="$SWIFT_BIN_DIR/../lib/swift/host/plugins" \
-B "$FOUNDATION_BUILD" \
"${SOURCE_PATH}/swift-corelibs-foundation"

cmake --build "$FOUNDATION_BUILD"
cmake --install "$FOUNDATION_BUILD"
173 changes: 173 additions & 0 deletions schemes/release-6.2/build/build-target-toolchain.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
#!/bin/bash
#
# Build the Swift standard library.

set -euo pipefail
set -x

print_help() {
echo "Usage: $0 [options]"
echo ""
echo "Options:"
echo " --help Display this help message."
echo " --llvm-bin Path to LLVM bin directory."
echo " --swift-bin Path to Swift bin directory."
}

SCHEMES_BUILD_PATH="$(cd "$(dirname "$0")" && pwd)"
SOURCE_PATH="$(cd "$(dirname "$0")/../../../.." && pwd)"
TARGET_BUILD_ROOT=$SOURCE_PATH/build/WebAssembly
WASI_SYSROOT_PATH="$TARGET_BUILD_ROOT/wasi-sysroot"
PACKAGING_DIR="$SOURCE_PATH/build/Packaging"
TARGET_TOOLCHAIN_DESTDIR=$PACKAGING_DIR/target-toolchain

build_target_toolchain() {

local LLVM_BIN_DIR="$1"
local CLANG_BIN_DIR="$2"
local SWIFT_BIN_DIR="$3"
local TRIPLE="$4"
local SHORT_TRIPLE="$5"
local CLANG_MULTIARCH_TRIPLE="$6"
local STDLIB_PRODUCT="$7"
local COMPILER_RT_OS_DIR="$8"

local HOST_SUFFIX
HOST_SUFFIX=$(find "$TARGET_BUILD_ROOT" -name "wasmstdlib-*" -exec basename {} \; | sed 's/wasmstdlib-//')

local TRIPLE_DESTDIR="$TARGET_TOOLCHAIN_DESTDIR/$TRIPLE"

env DESTDIR="$TRIPLE_DESTDIR" \
cmake --install "$TARGET_BUILD_ROOT/$STDLIB_PRODUCT-$HOST_SUFFIX" --prefix /usr

local swift_testing_build_dir="$TARGET_BUILD_ROOT/wasmswiftsdk-$HOST_SUFFIX/swift-testing/$TRIPLE"
if [[ -d "$swift_testing_build_dir" ]]; then
env DESTDIR="$TRIPLE_DESTDIR" \
cmake --install "$swift_testing_build_dir" --prefix /usr
fi

rm -rf "$TRIPLE_DESTDIR/usr/lib/swift_static/clang/lib/$COMPILER_RT_OS_DIR"
# XXX: Is this the right way to install compiler-rt?
cp -R "$TARGET_BUILD_ROOT/wasi-sysroot/$CLANG_MULTIARCH_TRIPLE/lib/$COMPILER_RT_OS_DIR" "$TRIPLE_DESTDIR/usr/lib/swift_static/clang/lib/$COMPILER_RT_OS_DIR"

# FIXME: The following is a workaround for the issue with wrong libxml2.a path
local LIBXML2_PATH_TO_FIX="$TARGET_BUILD_ROOT/wasi-sysroot/$CLANG_MULTIARCH_TRIPLE/lib/libxml2.a"
if [[ -f "$LIBXML2_PATH_TO_FIX" ]]; then
cp "$LIBXML2_PATH_TO_FIX" "$TRIPLE_DESTDIR/usr/lib/swift_static/wasi/libxml2.a"
fi
}

build_target_corelibs() {
local LLVM_BIN_DIR="$1"
local CLANG_BIN_DIR="$2"
local SWIFT_BIN_DIR="$3"
local TRIPLE="$4"
local SHORT_TRIPLE="$5"

local TRIPLE_DESTDIR="$TARGET_TOOLCHAIN_DESTDIR/$TRIPLE"
local CORELIBS_ARGS=(
"$TRIPLE_DESTDIR"
"$LLVM_BIN_DIR"
"$CLANG_BIN_DIR"
"$SWIFT_BIN_DIR"
"$WASI_SYSROOT_PATH/$SHORT_TRIPLE"
)
"$SCHEMES_BUILD_PATH/build-foundation.sh" "${CORELIBS_ARGS[@]}" "$TRIPLE"
"$SCHEMES_BUILD_PATH/build-xctest.sh" "${CORELIBS_ARGS[@]}" "$TRIPLE"
}

main() {
local OPTIONS_LLVM_BIN=""
local OPTIONS_CLANG_BIN=""
local OPTIONS_SWIFT_BIN=""

while [[ $# -gt 0 ]]; do
case "$1" in
--llvm-bin)
OPTIONS_LLVM_BIN="$2"
shift 2
;;
--clang-bin)
OPTIONS_CLANG_BIN="$2"
shift 2
;;
--swift-bin)
OPTIONS_SWIFT_BIN="$2"
shift 2
;;
--scheme)
OPTIONS_SCHEME="$2"
shift 2
;;
--help)
print_help
exit 0
;;
*)
echo "Unknown option: $1"
print_help
exit 1
;;
esac
done

if [[ -z "$OPTIONS_LLVM_BIN" ]]; then
echo "Missing --llvm-bin option"
print_help
exit 1
fi

if [[ -z "$OPTIONS_SWIFT_BIN" ]]; then
echo "Missing --swift-bin option"
print_help
exit 1
fi

if [[ -z "$OPTIONS_CLANG_BIN" ]]; then
OPTIONS_CLANG_BIN="$OPTIONS_LLVM_BIN"
fi

# NOTE: The llvm-cmake-options is a workaround for the issue on amazonlinux2
# See https://github.com/apple/swift/commit/40c7268e8f7d402b27e3ad16a84180e07c37f92c
# NOTE: Add llvm-bin directory to PATH so that wasmstdlib.py can find FileCheck during tests
env PATH="$OPTIONS_LLVM_BIN:$OPTIONS_SWIFT_BIN:$PATH" "$SOURCE_PATH/swift/utils/build-script" \
--build-subdir=WebAssembly \
--release \
--skip-build-llvm \
--skip-build-swift \
--skip-build-cmark \
--skip-build-benchmarks \
--skip-early-swift-driver \
--build-wasm-stdlib \
--skip-test-wasm-stdlib \
--native-swift-tools-path="$OPTIONS_SWIFT_BIN" \
--native-clang-tools-path="$OPTIONS_CLANG_BIN" \
--native-llvm-tools-path="$OPTIONS_LLVM_BIN" \
--extra-cmake-options="\
-DSWIFT_STDLIB_TRACING=NO \
-DSWIFT_STDLIB_HAS_ASL=NO \
-DSWIFT_STDLIB_CONCURRENCY_TRACING=NO \
-DSWIFT_RUNTIME_CRASH_REPORTER_CLIENT=NO \
-DSWIFT_STDLIB_INSTALL_PARENT_MODULE_FOR_SHIMS=NO \
" \
--llvm-cmake-options="\
-DCROSS_TOOLCHAIN_FLAGS_LLVM_NATIVE='-DCMAKE_C_COMPILER=clang;-DCMAKE_CXX_COMPILER=clang++' \
" \
--sccache

local BUILD_TOOLS_ARGS=(
"$OPTIONS_LLVM_BIN"
"$OPTIONS_CLANG_BIN"
"$OPTIONS_SWIFT_BIN"
)

build_target_toolchain "${BUILD_TOOLS_ARGS[@]}" "wasm32-unknown-wasip1" "wasip1-wasm32" "wasm32-wasip1" "wasmstdlib" "wasip1"
build_target_toolchain "${BUILD_TOOLS_ARGS[@]}" "wasm32-unknown-wasip1-threads" "wasip1-threads-wasm32" "wasm32-wasip1-threads" "wasmthreadsstdlib" "wasip1"

rsync -av "$WASI_SYSROOT_PATH/" "$PACKAGING_DIR/wasi-sysroot/"

build_target_corelibs "${BUILD_TOOLS_ARGS[@]}" "wasm32-unknown-wasip1" "wasm32-wasip1"
build_target_corelibs "${BUILD_TOOLS_ARGS[@]}" "wasm32-unknown-wasip1-threads" "wasm32-wasip1-threads"
}

main "$@"
39 changes: 39 additions & 0 deletions schemes/release-6.2/build/build-xctest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/bash
set -ex
DESTINATION_TOOLCHAIN=$1
LLVM_BIN_DIR=$2
CLANG_BIN_DIR=$3
SWIFT_BIN_DIR=$4
WASI_SYSROOT_PATH=$5
TRIPLE="$6"

SOURCE_PATH="$(cd "$(dirname $0)/../../../../" && pwd)"
SCHEME_BUILD_PATH="$(cd "$(dirname $0)" && pwd)"

BUILD_DIR="$SOURCE_PATH/build/WebAssembly/xctest-$TRIPLE"

mkdir -p $BUILD_DIR
cd $BUILD_DIR

swift_extra_flags=""
if [[ "$TRIPLE" == "wasm32-unknown-wasip1-threads" ]]; then
swift_extra_flags="-Xcc -matomics -Xcc -mbulk-memory -Xcc -mthread-model -Xcc posix -Xcc -pthread -Xcc -ftls-model=local-exec"
fi

cmake -G Ninja \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_SYSROOT="$WASI_SYSROOT_PATH" \
-DCMAKE_STAGING_PREFIX="$DESTINATION_TOOLCHAIN/usr" \
-DCMAKE_Swift_COMPILER="$SWIFT_BIN_DIR/swiftc" \
-DCMAKE_TOOLCHAIN_FILE="$SCHEME_BUILD_PATH/toolchain-wasi.cmake" \
-DTRIPLE="$TRIPLE" \
-DLLVM_BIN="$LLVM_BIN_DIR" \
-DCLANG_BIN="$CLANG_BIN_DIR" \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_Swift_COMPILER_FORCED=ON \
-DCMAKE_Swift_FLAGS="-sdk $WASI_SYSROOT_PATH -resource-dir $DESTINATION_TOOLCHAIN/usr/lib/swift_static $swift_extra_flags" \
-DSWIFT_FOUNDATION_PATH=$DESTINATION_TOOLCHAIN/usr/lib/swift_static/wasi/wasm32 \
"${SOURCE_PATH}/swift-corelibs-xctest"

ninja -v
ninja -v install
5 changes: 5 additions & 0 deletions schemes/release-6.2/build/run-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

set -euxo pipefail

echo "Skipping test because we now run tests in build-script"
23 changes: 23 additions & 0 deletions schemes/release-6.2/build/toolchain-wasi.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
set(CMAKE_SYSTEM_NAME WASI)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR wasm32)

set(CMAKE_C_COMPILER "${CLANG_BIN}/clang")
set(CMAKE_CXX_COMPILER "${CLANG_BIN}/clang++")
set(CMAKE_AR "${LLVM_BIN}/llvm-ar" CACHE STRING "LLVM Archiver for wasm32")
set(CMAKE_RANLIB "${LLVM_BIN}/llvm-ranlib" CACHE STRING "LLVM Ranlib for wasm32")
set(CMAKE_C_COMPILER_TARGET ${TRIPLE} CACHE STRING "")
set(CMAKE_CXX_COMPILER_TARGET ${TRIPLE} CACHE STRING "")
set(CMAKE_Swift_COMPILER_TARGET ${TRIPLE} CACHE STRING "")
set(CMAKE_ASM_COMPILER_TARGET ${TRIPLE} CACHE STRING "")

# Don't look in the sysroot for executables to run during the build
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Only look in the sysroot (not in the host paths) for the rest
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)

# Some other hacks
set(CMAKE_C_COMPILER_WORKS ON)
set(CMAKE_CXX_COMPILER_WORKS ON)
10 changes: 10 additions & 0 deletions schemes/release-6.2/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"update-checkout-scheme": "release/6.2",
"base-tag": "swift-6.2-DEVELOPMENT-SNAPSHOT-2025-08-14-a",
"icu4c": [],
"libxml2": [
"https://github.com/swiftwasm/libxml2-wasm/releases/download/2.0.0/libxml2-wasm32-unknown-wasi.tar.gz",
"https://github.com/swiftwasm/libxml2-wasm/releases/download/2.0.0/libxml2-wasm32-unknown-wasip1-threads.tar.gz"
],
"swift-org-download-channel": "swift-6.2-branch"
}
2 changes: 1 addition & 1 deletion test/swift-sdk/lit.local.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ else:
config.substitutions.append(("%{target_swift_build}", target_swift_build))

copy_cmd = 'cp %s %t.dir/Sources/Check/Check.swift'
if config.root.scheme in ["release-6.0", "release-6.1", "release-6.2"]:
if config.root.scheme in ["release-6.0", "release-6.1"]:
copy_cmd = 'cp %s %t.dir/Sources/main.swift'

simple_swift_build_steps = [
Expand Down
Loading