diff --git a/.github/scripts/build-matrix.rb b/.github/scripts/build-matrix.rb index 650d087..2c6c4c3 100644 --- a/.github/scripts/build-matrix.rb +++ b/.github/scripts/build-matrix.rb @@ -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, diff --git a/schemes/release-6.2/build/build-foundation.sh b/schemes/release-6.2/build/build-foundation.sh new file mode 100755 index 0000000..12ab8dd --- /dev/null +++ b/schemes/release-6.2/build/build-foundation.sh @@ -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" diff --git a/schemes/release-6.2/build/build-target-toolchain.sh b/schemes/release-6.2/build/build-target-toolchain.sh new file mode 100755 index 0000000..9c47422 --- /dev/null +++ b/schemes/release-6.2/build/build-target-toolchain.sh @@ -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 "$@" diff --git a/schemes/release-6.2/build/build-xctest.sh b/schemes/release-6.2/build/build-xctest.sh new file mode 100755 index 0000000..472cc66 --- /dev/null +++ b/schemes/release-6.2/build/build-xctest.sh @@ -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 diff --git a/schemes/release-6.2/build/run-test.sh b/schemes/release-6.2/build/run-test.sh new file mode 100755 index 0000000..701e6c6 --- /dev/null +++ b/schemes/release-6.2/build/run-test.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -euxo pipefail + +echo "Skipping test because we now run tests in build-script" diff --git a/schemes/release-6.2/build/toolchain-wasi.cmake b/schemes/release-6.2/build/toolchain-wasi.cmake new file mode 100644 index 0000000..56a5bd0 --- /dev/null +++ b/schemes/release-6.2/build/toolchain-wasi.cmake @@ -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) diff --git a/schemes/release-6.2/manifest.json b/schemes/release-6.2/manifest.json new file mode 100644 index 0000000..fdd2c94 --- /dev/null +++ b/schemes/release-6.2/manifest.json @@ -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" +} diff --git a/test/swift-sdk/lit.local.cfg b/test/swift-sdk/lit.local.cfg index 81cb523..4b0f8dd 100644 --- a/test/swift-sdk/lit.local.cfg +++ b/test/swift-sdk/lit.local.cfg @@ -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 = [