diff --git a/utils/build-presets.ini b/utils/build-presets.ini index ff14d391f824a..7d9a5c264c863 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -2567,113 +2567,3 @@ no-assertions mixin-preset=source_compat_suite_linux_base debug no-assertions - -#===----------------------------------------------------------------------===# -# Preset for the WebAssembly toolchain and SDK -#===----------------------------------------------------------------------===# - -[preset: webassembly] -no-assertions -release -cmake-c-launcher=%(C_CXX_LAUNCHER)s -cmake-cxx-launcher=%(C_CXX_LAUNCHER)s -skip-build-benchmarks -llvm-targets-to-build=X86;AArch64;WebAssembly -install-destdir=%(INSTALL_DESTDIR)s -swift-install-components=autolink-driver;compiler;clang-builtin-headers;stdlib;sdk-overlay;parser-lib;editor-integration;tools;testsuite-tools;toolchain-tools;license;sourcekit-inproc;swift-remote-mirror;swift-remote-mirror-headers;clang-resource-dir-symlink -llvm-install-components=llvm-cov;llvm-profdata;IndexStore;clang;clang-resource-headers;compiler-rt;clangd;dsymutil;lld;llvm-ar;llvm-ranlib -install-swift -install-prefix=/%(TOOLCHAIN_NAME)s/usr -swift-darwin-supported-archs=x86_64 - -[preset: webassembly-host] - -mixin-preset=webassembly -extra-cmake-options= - -DSWIFT_BUILD_SOURCEKIT=FALSE - -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE - -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE - -llbuild -swiftpm -indexstore-db -sourcekit-lsp -libcxx - -install-llvm -install-swift -install-llbuild -install-swiftpm -install-sourcekit-lsp -install-libcxx - -[preset: webassembly-linux-host] - -mixin-preset=webassembly-host - -libdispatch -libicu -foundation -xctest - -install-libicu -install-foundation -install-libdispatch -install-xctest - -skip-test-libicu -skip-test-foundation -skip-test-libdispatch -skip-test-xctest - -[preset: webassembly-target] - -mixin-preset=webassembly -wasm -verbose -# Install lld, compiler-rt and clang -install-llvm -build-stdlib-deployment-targets=wasi-wasm32 -build-swift-dynamic-sdk-overlay=false -build-swift-dynamic-stdlib=false -build-swift-static-sdk-overlay -build-swift-static-stdlib -stdlib-deployment-targets=wasi-wasm32 -wasi-sdk=%(SOURCE_PATH)s/wasi-sdk - -[preset: webassembly-linux-target] - -mixin-preset=webassembly-target -extra-cmake-options= - -DWASI_ICU_URL:STRING="https://github.com/swiftwasm/icu4c-wasi/releases/download/0.5.0/icu4c-wasi.tar.xz" - -DWASI_ICU_MD5:STRING="25943864ebbfff15cf5aee8d9d5cc4d7" - -DSWIFT_PRIMARY_VARIANT_SDK:STRING=WASI - -DSWIFT_PRIMARY_VARIANT_ARCH:STRING=wasm32 - -DSWIFT_SDKS='WASI;LINUX' - -DSWIFT_STDLIB_SINGLE_THREADED_RUNTIME=TRUE - -DSWIFT_BUILD_SOURCEKIT=FALSE - -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE - -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE - -DCMAKE_AR="%(TOOLS_BIN_DIR)s/llvm-ar" - -DCMAKE_RANLIB="%(TOOLS_BIN_DIR)s/llvm-ranlib" - -DCLANG_COMPILER_RT_CMAKE_ARGS='-DCMAKE_TOOLCHAIN_FILE=%(SOURCE_PATH)s/swift/utils/webassembly/compiler-rt-cache.cmake' - -DSWIFTWASM_DISABLE_REFLECTION_TEST=TRUE - -[preset: webassembly-macos-target] - -mixin-preset=webassembly-target -extra-cmake-options= - -DWASI_ICU_URL:STRING="https://github.com/swiftwasm/icu4c-wasi/releases/download/0.5.0/icu4c-wasi.tar.xz" - -DWASI_ICU_MD5:STRING="25943864ebbfff15cf5aee8d9d5cc4d7" - -DSWIFT_PRIMARY_VARIANT_SDK:STRING=WASI - -DSWIFT_PRIMARY_VARIANT_ARCH:STRING=wasm32 - -DSWIFT_SDKS='WASI' - -DSWIFT_STDLIB_SINGLE_THREADED_RUNTIME=TRUE - -DSWIFT_OSX_x86_64_ICU_STATICLIB=TRUE - -DSWIFT_BUILD_SOURCEKIT=FALSE - -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE - -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE - -DCMAKE_AR='%(TOOLS_BIN_DIR)s/llvm-ar' - -DCMAKE_RANLIB='%(TOOLS_BIN_DIR)s/llvm-ranlib' - -DCLANG_COMPILER_RT_CMAKE_ARGS='-DCMAKE_TOOLCHAIN_FILE=%(SOURCE_PATH)s/swift/utils/webassembly/compiler-rt-cache.cmake' - -DSWIFTWASM_DISABLE_REFLECTION_TEST=TRUE diff --git a/utils/webassembly/build-presets.ini b/utils/webassembly/build-presets.ini new file mode 100644 index 0000000000000..8fca4eac9df05 --- /dev/null +++ b/utils/webassembly/build-presets.ini @@ -0,0 +1,134 @@ +#===----------------------------------------------------------------------===# +# Preset for the WebAssembly toolchain and SDK +#===----------------------------------------------------------------------===# + +[preset: webassembly] +cmake-c-launcher=%(C_CXX_LAUNCHER)s +cmake-cxx-launcher=%(C_CXX_LAUNCHER)s +skip-build-benchmarks +llvm-targets-to-build=X86;AArch64;WebAssembly +swift-darwin-supported-archs=x86_64 + +[preset: webassembly-install] + +release +no-assertions +install-swift +install-destdir=%(INSTALL_DESTDIR)s +swift-install-components=autolink-driver;compiler;clang-builtin-headers;stdlib;sdk-overlay;parser-lib;editor-integration;tools;testsuite-tools;toolchain-tools;license;sourcekit-inproc;swift-remote-mirror;swift-remote-mirror-headers;clang-resource-dir-symlink +llvm-install-components=llvm-cov;llvm-profdata;IndexStore;clang;clang-resource-headers;compiler-rt;clangd;dsymutil;lld;llvm-ar;llvm-ranlib +install-prefix=/%(TOOLCHAIN_NAME)s/usr + + +[preset: webassembly-host] + +mixin-preset=webassembly +extra-cmake-options= + -DSWIFT_BUILD_SOURCEKIT=FALSE + -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE + -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE + +[preset: webassembly-host-install] +mixin-preset= + webassembly-host + webassembly-install + +llbuild +swiftpm +indexstore-db +sourcekit-lsp +libcxx + +install-llvm +install-swift +install-llbuild +install-swiftpm +install-sourcekit-lsp +install-libcxx + +[preset: webassembly-linux-host-install] + +mixin-preset=webassembly-host-install + +libdispatch +libicu +foundation +xctest + +install-libicu +install-foundation +install-libdispatch +install-xctest + +skip-test-libicu +skip-test-foundation +skip-test-libdispatch +skip-test-xctest + +[preset: webassembly-target] + +mixin-preset=webassembly +wasm +build-stdlib-deployment-targets=wasi-wasm32 +build-swift-dynamic-sdk-overlay=false +build-swift-dynamic-stdlib=false +build-swift-static-sdk-overlay +build-swift-static-stdlib +stdlib-deployment-targets=wasi-wasm32 +wasi-sdk=%(SOURCE_PATH)s/wasi-sdk + + +[preset: webassembly-target-install] +mixin-preset= + webassembly-target + webassembly-install +# Install lld, compiler-rt and clang +install-llvm + + +[preset: webassembly-linux-target] + +mixin-preset=webassembly-target +extra-cmake-options= + -DWASI_ICU_URL:STRING="https://github.com/swiftwasm/icu4c-wasi/releases/download/0.5.0/icu4c-wasi.tar.xz" + -DWASI_ICU_MD5:STRING="25943864ebbfff15cf5aee8d9d5cc4d7" + -DSWIFT_PRIMARY_VARIANT_SDK:STRING=WASI + -DSWIFT_PRIMARY_VARIANT_ARCH:STRING=wasm32 + -DSWIFT_SDKS='WASI;LINUX' + -DSWIFT_STDLIB_SINGLE_THREADED_RUNTIME=TRUE + -DSWIFT_BUILD_SOURCEKIT=FALSE + -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE + -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE + -DCMAKE_AR="%(LLVM_BIN_DIR)s/llvm-ar" + -DCMAKE_RANLIB="%(LLVM_BIN_DIR)s/llvm-ranlib" + -DCLANG_COMPILER_RT_CMAKE_ARGS='-DCMAKE_TOOLCHAIN_FILE=%(SOURCE_PATH)s/swift/utils/webassembly/compiler-rt-cache.cmake' + -DSWIFTWASM_DISABLE_REFLECTION_TEST=TRUE + +[preset: webassembly-macos-target] + +mixin-preset=webassembly-target +extra-cmake-options= + -DWASI_ICU_URL:STRING="https://github.com/swiftwasm/icu4c-wasi/releases/download/0.5.0/icu4c-wasi.tar.xz" + -DWASI_ICU_MD5:STRING="25943864ebbfff15cf5aee8d9d5cc4d7" + -DSWIFT_PRIMARY_VARIANT_SDK:STRING=WASI + -DSWIFT_PRIMARY_VARIANT_ARCH:STRING=wasm32 + -DSWIFT_SDKS='WASI' + -DSWIFT_STDLIB_SINGLE_THREADED_RUNTIME=TRUE + -DSWIFT_OSX_x86_64_ICU_STATICLIB=TRUE + -DSWIFT_BUILD_SOURCEKIT=FALSE + -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE + -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE + -DCMAKE_AR='%(LLVM_BIN_DIR)s/llvm-ar' + -DCMAKE_RANLIB='%(LLVM_BIN_DIR)s/llvm-ranlib' + -DCLANG_COMPILER_RT_CMAKE_ARGS='-DCMAKE_TOOLCHAIN_FILE=%(SOURCE_PATH)s/swift/utils/webassembly/compiler-rt-cache.cmake' + -DSWIFTWASM_DISABLE_REFLECTION_TEST=TRUE + +[preset: webassembly-linux-target-install] +mixin-preset= + webassembly-target-install + webassembly-linux-target + +[preset: webassembly-macos-target-install] +mixin-preset= + webassembly-target-install + webassembly-macos-target \ No newline at end of file diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index a0bee16b75c08..cc28c402cf6ea 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -1,29 +1,29 @@ -#/bin/bash +#!/bin/bash set -ex -SOURCE_PATH="$(cd "$(dirname $0)/../../.." && pwd)" -UTILS_PATH="$(cd "$(dirname $0)" && pwd)" +SOURCE_PATH="$(cd "$(dirname "$0")/../../.." && pwd)" +UTILS_PATH="$(cd "$(dirname "$0")" && pwd)" WASI_SDK_PATH=$SOURCE_PATH/wasi-sdk case $(uname -s) in Darwin) OS_SUFFIX=osx - HOST_PRESET=webassembly-host - TARGET_PRESET=webassembly-macos-target + HOST_PRESET=webassembly-host-install + TARGET_PRESET=webassembly-macos-target-install HOST_SUFFIX=macosx-x86_64 ;; Linux) - if [ $(grep RELEASE /etc/lsb-release) == "DISTRIB_RELEASE=18.04" ]; then + if [ "$(grep RELEASE /etc/lsb-release)" == "DISTRIB_RELEASE=18.04" ]; then OS_SUFFIX=ubuntu18.04 - elif [ $(grep RELEASE /etc/lsb-release) == "DISTRIB_RELEASE=20.04" ]; then + elif [ "$(grep RELEASE /etc/lsb-release)" == "DISTRIB_RELEASE=20.04" ]; then OS_SUFFIX=ubuntu20.04 else echo "Unknown Ubuntu version" exit 1 fi - HOST_PRESET=webassembly-linux-host - TARGET_PRESET=webassembly-linux-target + HOST_PRESET=webassembly-linux-host-install + TARGET_PRESET=webassembly-linux-target-install HOST_SUFFIX=linux-x86_64 ;; *) @@ -37,7 +37,6 @@ MONTH=$(date +"%m") DAY=$(date +"%d") TOOLCHAIN_VERSION="${YEAR}${MONTH}${DAY}" TOOLCHAIN_NAME="swift-wasm-DEVELOPMENT-SNAPSHOT-${YEAR}-${MONTH}-${DAY}-a" -ARCHIVE="${TOOLCHAIN_NAME}-${OS_SUFFIX}.tar.gz" PACKAGE_ARTIFACT="$SOURCE_PATH/swift-wasm-DEVELOPMENT-SNAPSHOT-${OS_SUFFIX}.tar.gz" @@ -60,12 +59,13 @@ HOST_BUILD_DIR=$HOST_BUILD_ROOT/Ninja-Release TARGET_BUILD_DIR=$TARGET_BUILD_ROOT/Ninja-Release # Avoid clang headers symlink issues -mkdir -p $HOST_TOOLCHAIN_SDK/usr/lib/clang/10.0.0 +mkdir -p "$HOST_TOOLCHAIN_SDK/usr/lib/clang/10.0.0" build_host_toolchain() { # Build the host toolchain and SDK first. env SWIFT_BUILD_ROOT="$HOST_BUILD_ROOT" \ - $SOURCE_PATH/swift/utils/build-script \ + "$SOURCE_PATH/swift/utils/build-script" \ + --preset-file="$UTILS_PATH/build-presets.ini" \ --preset=$HOST_PRESET \ --build-dir="$HOST_BUILD_DIR" \ INSTALL_DESTDIR="$HOST_TOOLCHAIN_DESTDIR" \ @@ -74,7 +74,7 @@ build_host_toolchain() { } build_target_toolchain() { - mkdir -p $HOST_BUILD_DIR/ + mkdir -p "$HOST_BUILD_DIR/" # Copy the host build dir to reuse it. if [[ ! -e "$HOST_BUILD_DIR/llvm-$HOST_SUFFIX" ]]; then cp -r "$HOST_BUILD_DIR/llvm-$HOST_SUFFIX" "$TARGET_BUILD_DIR/llvm-$HOST_SUFFIX" @@ -84,8 +84,9 @@ build_target_toolchain() { # build the cross-compilled toolchain env SWIFT_BUILD_ROOT="$TARGET_BUILD_ROOT" \ - $SOURCE_PATH/swift/utils/build-script \ - --preset=$TARGET_PRESET --reconfigure \ + "$SOURCE_PATH/swift/utils/build-script" \ + --preset-file="$UTILS_PATH/build-presets.ini" \ + --preset=$TARGET_PRESET \ --build-dir="$TARGET_BUILD_DIR" \ INSTALL_DESTDIR="$TARGET_TOOLCHAIN_DESTDIR" \ SOURCE_PATH="$SOURCE_PATH" \ @@ -94,11 +95,11 @@ build_target_toolchain() { DISPLAY_NAME_SHORT="${DISPLAY_NAME_SHORT}" \ TOOLCHAIN_NAME="${TOOLCHAIN_NAME}" \ TOOLCHAIN_VERSION="${TOOLCHAIN_VERSION}" \ - TOOLS_BIN_DIR="${HOST_TOOLCHAIN_SDK}/usr/bin" \ + LLVM_BIN_DIR="${HOST_TOOLCHAIN_SDK}/usr/bin" \ C_CXX_LAUNCHER="$(which sccache)" - $UTILS_PATH/build-foundation.sh $TARGET_TOOLCHAIN_SDK - $UTILS_PATH/build-xctest.sh $TARGET_TOOLCHAIN_SDK + "$UTILS_PATH/build-foundation.sh" "$TARGET_TOOLCHAIN_SDK" + "$UTILS_PATH/build-xctest.sh" "$TARGET_TOOLCHAIN_SDK" } @@ -108,16 +109,16 @@ merge_toolchains() { cp -r "$HOST_TOOLCHAIN_DESTDIR" "$DIST_TOOLCHAIN_DESTDIR" # Merge wasi-sdk and the toolchain - cp -r $WASI_SDK_PATH/share/wasi-sysroot $DIST_TOOLCHAIN_SDK/usr/share + cp -r "$WASI_SDK_PATH/share/wasi-sysroot" "$DIST_TOOLCHAIN_SDK/usr/share" # Copy the target environment stdlib into the toolchain # Avoid copying usr/lib/swift/clang because our toolchain's one is a directory # but nightly's one is symbolic link. A simple copy fails to merge them. - rsync -v -a $TARGET_TOOLCHAIN_SDK/usr/lib/ $DIST_TOOLCHAIN_SDK/usr/lib/ --exclude 'swift/clang' - rsync -v -a $TARGET_TOOLCHAIN_SDK/usr/bin/ $DIST_TOOLCHAIN_SDK/usr/bin/ + rsync -v -a "$TARGET_TOOLCHAIN_SDK/usr/lib/" "$DIST_TOOLCHAIN_SDK/usr/lib/" --exclude 'swift/clang' + rsync -v -a "$TARGET_TOOLCHAIN_SDK/usr/bin/" "$DIST_TOOLCHAIN_SDK/usr/bin/" # Replace absolute sysroot path with relative path - sed -i -e "s@\".*/include@\"../../../../share/wasi-sysroot/include@g" $DIST_TOOLCHAIN_SDK/usr/lib/swift/wasi/wasm32/wasi.modulemap + sed -i -e "s@\".*/include@\"../../../../share/wasi-sysroot/include@g" "$DIST_TOOLCHAIN_SDK/usr/lib/swift/wasi/wasm32/wasi.modulemap" } build_host_toolchain @@ -125,5 +126,5 @@ build_target_toolchain merge_toolchains -cd $DIST_TOOLCHAIN_DESTDIR -tar cfz $PACKAGE_ARTIFACT $TOOLCHAIN_NAME +cd "$DIST_TOOLCHAIN_DESTDIR" +tar cfz "$PACKAGE_ARTIFACT" "$TOOLCHAIN_NAME" diff --git a/utils/webassembly/install-wasi-sdk.sh b/utils/webassembly/install-wasi-sdk.sh index 636480ecd7ab5..acccbc0184cbb 100755 --- a/utils/webassembly/install-wasi-sdk.sh +++ b/utils/webassembly/install-wasi-sdk.sh @@ -1,18 +1,23 @@ -#/bin/bash +#!/bin/bash -set -ex +set -eux -SOURCE_PATH="$( cd "$(dirname $0)/../../../" && pwd )" +SOURCE_PATH="$( cd "$(dirname "$0")/../../../" && pwd )" -cd $SOURCE_PATH +cd "$SOURCE_PATH" WASI_SDK_URL="https://github.com/swiftwasm/wasi-sdk/releases/download/0.2.2-swiftwasm/dist-$2.zip" -[ ! -e dist-wasi-sdk.zip ] && \ - wget -O dist-wasi-sdk.zip $WASI_SDK_URL +workdir=$(mktemp -d) +pushd $workdir + +wget -O dist-wasi-sdk.zip "$WASI_SDK_URL" unzip -u dist-wasi-sdk.zip -d . -WASI_SDK_TAR_PATH=$(find . -type f -name "wasi-sdk-*") -WASI_SDK_FULL_NAME=$(basename $WASI_SDK_TAR_PATH -$1.tar.gz) -tar xfz $WASI_SDK_TAR_PATH -rm -rf ./wasi-sdk -mv $WASI_SDK_FULL_NAME ./wasi-sdk + +WASI_SDK_TAR_PATH=$(find "$workdir" -type f -name "wasi-sdk-*") +WASI_SDK_FULL_NAME=$(basename "$WASI_SDK_TAR_PATH" -"$1".tar.gz) +tar xfz "$WASI_SDK_TAR_PATH" +popd + +rm -rf $SOURCE_PATH/wasi-sdk +mv "$workdir/$WASI_SDK_FULL_NAME" $SOURCE_PATH/wasi-sdk diff --git a/utils/webassembly/linux/install-dependencies.sh b/utils/webassembly/linux/install-dependencies.sh index a0c1e1a7c94c9..9f6200729b0f3 100755 --- a/utils/webassembly/linux/install-dependencies.sh +++ b/utils/webassembly/linux/install-dependencies.sh @@ -1,4 +1,4 @@ -#/bin/bash +#!/bin/bash set -ex diff --git a/utils/webassembly/macos/install-dependencies.sh b/utils/webassembly/macos/install-dependencies.sh index d31428694cbbc..85cf0a30c1105 100755 --- a/utils/webassembly/macos/install-dependencies.sh +++ b/utils/webassembly/macos/install-dependencies.sh @@ -1,17 +1,19 @@ -#/bin/bash +#!/bin/bash set -ex -brew uninstall $(brew list | grep python@2) +if [[ ! -z "$CI" ]]; then + brew uninstall $(brew list | grep python@2) +fi + brew install cmake ninja llvm sccache # Install latest wasmer - if [ ! -e ~/.wasmer/bin/wasmer ]; then curl https://get.wasmer.io -sSfL | sh fi -SOURCE_PATH="$( cd "$(dirname $0)/../../../../" && pwd )" +SOURCE_PATH="$(cd "$(dirname $0)/../../../../" && pwd)" SWIFT_PATH=$SOURCE_PATH/swift cd $SWIFT_PATH