From 1afa4c6e92cc0349f538f3a3ea115bd9e44edaed Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sat, 16 May 2020 14:24:08 +0100 Subject: [PATCH 01/15] Build host toolchain w/o copying it from snapshots --- utils/build-presets.ini | 57 ++++++++++++-------------- utils/webassembly/build-swiftpm.sh | 60 --------------------------- utils/webassembly/build-toolchain.sh | 61 +++++++++++++++------------- 3 files changed, 57 insertions(+), 121 deletions(-) delete mode 100755 utils/webassembly/build-swiftpm.sh diff --git a/utils/build-presets.ini b/utils/build-presets.ini index e80d899319a6b..fb1f538beb389 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -2437,39 +2437,44 @@ no-assertions [preset: webassembly] -wasm release -verbose cmake-c-launcher=%(C_CXX_LAUNCHER)s cmake-cxx-launcher=%(C_CXX_LAUNCHER)s skip-build-benchmarks +llvm-targets-to-build=X86;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=clang +install-swift +install-prefix=/%(TOOLCHAIN_NAME)s/usr + +[preset: webassembly-host] + +mixin-preset=webassembly +llbuild +swiftpm +install-swiftpm +extra-cmake-options= + -DSWIFT_BUILD_SOURCEKIT=FALSE + -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE + -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE + +[preset: webassembly-target] + +mixin-preset=webassembly +wasm +verbose 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 -llvm-targets-to-build=X86;WebAssembly stdlib-deployment-targets=wasi-wasm32 wasi-sdk=%(SOURCE_PATH)s/wasi-sdk -[preset: webassembly-installable] - -install_destdir=%(SOURCE_PATH)s/install -installable_package=%(INSTALLABLE_PACKAGE)s -install-prefix=/%(TOOLCHAIN_NAME)s/usr -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=clang -install-swift -darwin-toolchain-bundle-identifier=%(BUNDLE_IDENTIFIER)s -darwin-toolchain-display-name=%(DISPLAY_NAME)s -darwin-toolchain-display-name-short=%(DISPLAY_NAME_SHORT)s -darwin-toolchain-name=%(TOOLCHAIN_NAME)s -darwin-toolchain-version=%(TOOLCHAIN_VERSION)s -darwin-toolchain-alias=swift - [preset: webassembly-linux] -mixin-preset=webassembly +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" @@ -2484,7 +2489,7 @@ extra-cmake-options= [preset: webassembly-macos] -mixin-preset=webassembly +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" @@ -2496,15 +2501,3 @@ extra-cmake-options= -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE -DCMAKE_AR='/usr/local/opt/llvm/bin/llvm-ar' -DCMAKE_RANLIB='/usr/local/opt/llvm/bin/llvm-ranlib' - -[preset: webassembly-linux-installable] - -mixin-preset= - webassembly-linux - webassembly-installable - -[preset: webassembly-macos-installable] - -mixin-preset= - webassembly-macos - webassembly-installable diff --git a/utils/webassembly/build-swiftpm.sh b/utils/webassembly/build-swiftpm.sh deleted file mode 100755 index 5a7899166c7d7..0000000000000 --- a/utils/webassembly/build-swiftpm.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -set -e -DESTINATION_TOOLCHAIN=$1 -SOURCE_PATH="$(cd "$(dirname $0)/../../.." && pwd)" -NIGHTLY_TOOLCHAIN=${SOURCE_PATH}/swift-nightly-toolchain - -export PATH=$NIGHTLY_TOOLCHAIN/usr/bin:$PATH - -SWIFT_BUILD_FLAGS="-c release" -SWIFT_BUILD=${NIGHTLY_TOOLCHAIN}/usr/bin/swift-build - -build_swiftpm() { - local build_flags=$SWIFT_BUILD_FLAGS - if [[ "$(uname)" == "Darwin" ]]; then - rpath_prefix='@executable_path/../lib/swift/macosx' - else - rpath_prefix='$ORIGIN/../lib/swift/linux' - fi - build_flags="${build_flags} -Xlinker -rpath -Xlinker ${rpath_prefix}" - cd ${SOURCE_PATH}/swiftpm - ${SWIFT_BUILD} ${build_flags} -} - -install_binary() { - local src=$1 - local dest=${DESTINATION_TOOLCHAIN}/usr/bin - echo "Installing ${src} to ${dest}" - cp ${src} ${dest} -} - -install_runtime_file() { - local src=$1 - local dest=${DESTINATION_TOOLCHAIN}/usr/lib/swift/pm - echo "Installing ${src} to ${dest}/{4,4_2}" - for runtime in "4" "4_2" - do - mkdir -p ${dest}/${runtime} - cp ${src} ${dest}/${runtime} - done -} - -install_swiftpm() { - cd ${SOURCE_PATH}/swiftpm - local bin_path=$(${SWIFT_BUILD} ${SWIFT_BUILD_FLAGS} --show-bin-path) - for binary in ${bin_path}/{swift-build,swift-test,swift-run,swift-package} - do - install_binary ${binary} - done - - if [[ "$(uname)" == "Linux" ]]; then - install_runtime_file "${bin_path}/libPackageDescription.so" - else - install_runtime_file "${bin_path}/libPackageDescription.dylib" - fi - install_runtime_file "${bin_path}/PackageDescription.swiftmodule" - install_runtime_file "${bin_path}/PackageDescription.swiftdoc" -} - -build_swiftpm -install_swiftpm diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index fbfceedb83afe..5904690991a36 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -9,11 +9,11 @@ WASI_SDK_PATH=$SOURCE_PATH/wasi-sdk case $(uname -s) in Darwin) OS_SUFFIX=osx - PRESET_NAME=webassembly-macos-installable + PRESET_NAME=webassembly-macos ;; Linux) OS_SUFFIX=linux - PRESET_NAME=webassembly-linux-installable + PRESET_NAME=webassembly-linux ;; *) echo "Unrecognised platform $(uname -s)" @@ -35,9 +35,25 @@ BUNDLE_IDENTIFIER="swiftwasm.${YEAR}${MONTH}${DAY}" DISPLAY_NAME_SHORT="Swift for WebAssembly Development Snapshot" DISPLAY_NAME="${DISPLAY_NAME_SHORT} ${YEAR}-${MONTH}-${DAY}" -$SOURCE_PATH/swift/utils/build-script --preset=$PRESET_NAME \ +HOST_TOOLCHAIN_DESTDIR=$SOURCE_PATH/host-toolchain-sdk +HOST_TOOLCHAIN_SDK=$HOST_TOOLCHAIN_DESTDIR/$TOOLCHAIN_NAME + +# Build the host toolchain and SDK first. +$SOURCE_PATH/swift/utils/build-script --preset=webassembly-host \ + INSTALL_DESTDIR="$HOST_TOOLCHAIN_DESTDIR" \ + TOOLCHAIN_NAME="$TOOLCHAIN_NAME" \ + C_CXX_LAUNCHER="$(which sccache)" + +# Clean up the host toolchain build directory so that the next +# `build-script` invocation doesn't pick up wrong CMake config files. +# For some reason passing `--reconfigure` to `build-script` won't do this. +rm -rf $SOURCE_PATH/build/Ninja-ReleaseAssert/swift-macosx-x86_64 + +# build the cross-compilled toolchain +$SOURCE_PATH/swift/utils/build-script \ + --preset=$PRESET_NAME \ + INSTALL_DESTDIR="$SOURCE_PATH/install" \ SOURCE_PATH="$SOURCE_PATH" \ - INSTALLABLE_PACKAGE="$INSTALLABLE_PACKAGE" \ BUNDLE_IDENTIFIER="${BUNDLE_IDENTIFIER}" \ DISPLAY_NAME="${DISPLAY_NAME}" \ DISPLAY_NAME_SHORT="${DISPLAY_NAME_SHORT}" \ @@ -45,37 +61,24 @@ $SOURCE_PATH/swift/utils/build-script --preset=$PRESET_NAME \ TOOLCHAIN_VERSION="${TOOLCHAIN_VERSION}" \ C_CXX_LAUNCHER="$(which sccache)" - -NIGHTLY_TOOLCHAIN=$SOURCE_PATH/swift-nightly-toolchain -if [ ! -e $NIGHTLY_TOOLCHAIN ]; then - $UTILS_PATH/install-nightly-toolchain.sh -fi - -TMP_DIR=$(mktemp -d) -cd $TMP_DIR -tar xfz $INSTALLABLE_PACKAGE $TOOLCHAIN_NAME -cd $TMP_DIR/$TOOLCHAIN_NAME - -# Merge wasi-sdk and toolchain -cp -r $WASI_SDK_PATH/lib/clang usr/lib -cp -a $WASI_SDK_PATH/bin/{*ld,llvm-ar} usr/bin -cp -r $WASI_SDK_PATH/share/wasi-sysroot usr/share - -# Build SwiftPM and install it into toolchain -$UTILS_PATH/build-swiftpm.sh $TMP_DIR/$TOOLCHAIN_NAME +# Merge wasi-sdk and the toolchain +cp -a $WASI_SDK_PATH/lib/clang $HOST_TOOLCHAIN_SDK/usr/lib +cp -a $WASI_SDK_PATH/bin/{clang*,*ld,llvm-ar} $HOST_TOOLCHAIN_SDK/usr/bin +cp -r $WASI_SDK_PATH/share/wasi-sysroot $HOST_TOOLCHAIN_SDK/usr/share # Replace absolute sysroot path with relative path -sed -i -e "s@\".*/include@\"../../../../share/wasi-sysroot/include@g" $TMP_DIR/$TOOLCHAIN_NAME/usr/lib/swift/wasi/wasm32/glibc.modulemap +sed -i -e "s@\".*/include@\"../../../../share/wasi-sysroot/include@g" $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift/wasi/wasm32/glibc.modulemap -# Copy nightly-toolchain's host environment stdlib into toolchain +# Copy host environment stdlib into toolchain if [[ "$(uname)" == "Linux" ]]; then - # Avoid to copy usr/lib/swift/clang because our toolchain's one is a directory - # but nightly's one is symbolic link, so fail to merge them. - rsync -a $NIGHTLY_TOOLCHAIN/usr/lib/ $TMP_DIR/$TOOLCHAIN_NAME/usr/lib/ --exclude 'swift/clang' + # 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 -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib $HOST_TOOLCHAIN_SDK/usr/lib/ --exclude 'swift/clang' else - cp -r $NIGHTLY_TOOLCHAIN/usr/lib/swift/macosx $TMP_DIR/$TOOLCHAIN_NAME/usr/lib/swift + cp -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift_static $HOST_TOOLCHAIN_SDK/usr/lib/swift_static + cp -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift/wasi $HOST_TOOLCHAIN_SDK/usr/lib/swift fi -cd $TMP_DIR +cd $HOST_TOOLCHAIN_DESTDIR tar cfz $PACKAGE_ARTIFACT $TOOLCHAIN_NAME From a11836b3a0424e25fa374042229051c553421b7f Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sat, 16 May 2020 14:35:02 +0100 Subject: [PATCH 02/15] Fix comment in build-toolchain.sh --- utils/webassembly/build-toolchain.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index 5904690991a36..f85801ca5fb58 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -69,7 +69,7 @@ cp -r $WASI_SDK_PATH/share/wasi-sysroot $HOST_TOOLCHAIN_SDK/usr/share # Replace absolute sysroot path with relative path sed -i -e "s@\".*/include@\"../../../../share/wasi-sysroot/include@g" $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift/wasi/wasm32/glibc.modulemap -# Copy host environment stdlib into toolchain +# Copy the target environment stdlib into the toolchain if [[ "$(uname)" == "Linux" ]]; then # Avoid copying usr/lib/swift/clang because our toolchain's one is a directory From dc5e5da0563d4215db56424425477f8d68cc6597 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sat, 16 May 2020 14:37:06 +0100 Subject: [PATCH 03/15] Make formatting in build-toolchain.sh consistent --- utils/webassembly/build-toolchain.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index f85801ca5fb58..ac3703c05f815 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -39,7 +39,8 @@ HOST_TOOLCHAIN_DESTDIR=$SOURCE_PATH/host-toolchain-sdk HOST_TOOLCHAIN_SDK=$HOST_TOOLCHAIN_DESTDIR/$TOOLCHAIN_NAME # Build the host toolchain and SDK first. -$SOURCE_PATH/swift/utils/build-script --preset=webassembly-host \ +$SOURCE_PATH/swift/utils/build-script \ + --preset=webassembly-host \ INSTALL_DESTDIR="$HOST_TOOLCHAIN_DESTDIR" \ TOOLCHAIN_NAME="$TOOLCHAIN_NAME" \ C_CXX_LAUNCHER="$(which sccache)" From 3497630edf32e7eacc936acfb244fa84cdd1a460 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sat, 16 May 2020 22:15:40 +0100 Subject: [PATCH 04/15] Avoid clang headers symlink issues in build-toolchain.sh --- utils/webassembly/build-toolchain.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index ac3703c05f815..388d130afe605 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -38,6 +38,9 @@ DISPLAY_NAME="${DISPLAY_NAME_SHORT} ${YEAR}-${MONTH}-${DAY}" HOST_TOOLCHAIN_DESTDIR=$SOURCE_PATH/host-toolchain-sdk HOST_TOOLCHAIN_SDK=$HOST_TOOLCHAIN_DESTDIR/$TOOLCHAIN_NAME +# Avoid clang headers symlink issues +mkdir -p $HOST_TOOLCHAIN_SDK/usr/lib/clang/10.0.0 + # Build the host toolchain and SDK first. $SOURCE_PATH/swift/utils/build-script \ --preset=webassembly-host \ From f72f9903d6f04636fb9040da6adb09f0894e6849 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sun, 17 May 2020 01:15:22 +0100 Subject: [PATCH 05/15] Install Foundation and Dispatch in the host toolchain --- utils/build-presets.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/build-presets.ini b/utils/build-presets.ini index fb1f538beb389..0c073110b6476 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -2453,6 +2453,8 @@ install-prefix=/%(TOOLCHAIN_NAME)s/usr mixin-preset=webassembly llbuild swiftpm +install-foundation +install-libdispatch install-swiftpm extra-cmake-options= -DSWIFT_BUILD_SOURCEKIT=FALSE From 03f3aacdb7d201b9840c2e2194b5c9e994f4f905 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sun, 17 May 2020 09:51:42 +0100 Subject: [PATCH 06/15] Add install-xctest to the webassembly-host prest --- utils/build-presets.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/build-presets.ini b/utils/build-presets.ini index 0c073110b6476..996a53eff1c40 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -2456,6 +2456,7 @@ swiftpm install-foundation install-libdispatch install-swiftpm +install-xctest extra-cmake-options= -DSWIFT_BUILD_SOURCEKIT=FALSE -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE From 2a3eb28eace6ee82b833a12a3dbc56081e5bd526 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sun, 17 May 2020 20:47:48 +0100 Subject: [PATCH 07/15] Request XCTest in the webassembly-host preset --- utils/build-presets.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/build-presets.ini b/utils/build-presets.ini index 996a53eff1c40..2930cff7f4fdc 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -2451,6 +2451,7 @@ install-prefix=/%(TOOLCHAIN_NAME)s/usr [preset: webassembly-host] mixin-preset=webassembly +xctest llbuild swiftpm install-foundation From 6b6c945d28681690121e2067dda25913731cb673 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sun, 17 May 2020 22:29:02 +0100 Subject: [PATCH 08/15] Delete unused install-nightly-toolchain.sh script --- .../webassembly/install-nightly-toolchain.sh | 50 ------------------- 1 file changed, 50 deletions(-) delete mode 100755 utils/webassembly/install-nightly-toolchain.sh diff --git a/utils/webassembly/install-nightly-toolchain.sh b/utils/webassembly/install-nightly-toolchain.sh deleted file mode 100755 index cb0b814aad75b..0000000000000 --- a/utils/webassembly/install-nightly-toolchain.sh +++ /dev/null @@ -1,50 +0,0 @@ -set -x - -SOURCE_DIR="$(cd "$(dirname $0)/../../.." && pwd)" -DESTINATION="${SOURCE_DIR}/swift-nightly-toolchain" - -mkdir -p $DESTINATION - -install_linux() { - WORKSPACE=$(mktemp -d) - - pushd ${WORKSPACE} - - BASE_URL=https://swift.org/builds/development/ubuntu1804 - export $(/usr/bin/curl ${BASE_URL}/latest-build.yml | grep 'download:' | sed 's/:[^:\/\/]/=/g') - - DOWNLOAD_DIR=$(echo $download | sed "s/-ubuntu18.04.tar.gz//g") - DOWNLOAD_URL=${BASE_URL}/${DOWNLOAD_DIR}/${download} - /usr/bin/curl ${BASE_URL}/${DOWNLOAD_DIR}/${download} > ${WORKSPACE}/latest_toolchain.tar.gz - - mkdir -p ${WORKSPACE}/latest_toolchain - tar xzf ${WORKSPACE}/latest_toolchain.tar.gz -C ${WORKSPACE}/latest_toolchain - mv ${WORKSPACE}/latest_toolchain/${DOWNLOAD_DIR}-ubuntu18.04/usr ${DESTINATION}/usr - - popd -} - -install_macos() { - WORKSPACE=$(mktemp -d) - - pushd ${WORKSPACE} - - BASE_URL=https://swift.org/builds/development/ - export $(/usr/bin/curl --silent ${BASE_URL}/xcode/latest-build.yml | grep 'download:' | sed 's/:[^:\/\/]/=/g') - - DOWNLOAD_DIR=$(echo $download | sed "s/-osx.pkg//g") - DOWNLOAD_URL=${BASE_URL}/xcode/${DOWNLOAD_DIR}/${download} - - /usr/bin/curl --silent ${DOWNLOAD_URL} > ${WORKSPACE}/latest_xcode_toolchain.pkg - pkgutil --expand ${WORKSPACE}/latest_xcode_toolchain.pkg ${WORKSPACE}/latest_xcode_toolchain - tar xf latest_xcode_toolchain/${DOWNLOAD_DIR}-osx-package.pkg/Payload - mv ${WORKSPACE}/usr ${DESTINATION}/usr - - popd -} - -if [[ "$(uname)" == "Linux" ]]; then - install_linux -else - install_macos -fi From dfa5480ece45a88ea77fd4d99c6dd0cb00f6ad9c Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Mon, 18 May 2020 09:33:24 +0100 Subject: [PATCH 09/15] Avoid request Foundation/Dispatch/XCTest on macOS --- utils/build-presets.ini | 17 +++++++++++------ utils/webassembly/build-toolchain.sh | 10 ++++++---- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/utils/build-presets.ini b/utils/build-presets.ini index 2930cff7f4fdc..ad430809962d7 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -2451,18 +2451,23 @@ install-prefix=/%(TOOLCHAIN_NAME)s/usr [preset: webassembly-host] mixin-preset=webassembly -xctest llbuild swiftpm -install-foundation -install-libdispatch install-swiftpm -install-xctest extra-cmake-options= -DSWIFT_BUILD_SOURCEKIT=FALSE -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE +[preset: webassembly-linux-host] + +mixin-preset=webassembly-host +libicu +xctest +install-foundation +install-libdispatch +install-xctest + [preset: webassembly-target] mixin-preset=webassembly @@ -2476,7 +2481,7 @@ build-swift-static-stdlib stdlib-deployment-targets=wasi-wasm32 wasi-sdk=%(SOURCE_PATH)s/wasi-sdk -[preset: webassembly-linux] +[preset: webassembly-linux-target] mixin-preset=webassembly-target extra-cmake-options= @@ -2491,7 +2496,7 @@ extra-cmake-options= -DCMAKE_AR="%(SOURCE_PATH)s/wasi-sdk/bin/llvm-ar" -DCMAKE_RANLIB="%(SOURCE_PATH)s/wasi-sdk/bin/llvm-ranlib" -[preset: webassembly-macos] +[preset: webassembly-macos-target] mixin-preset=webassembly-target extra-cmake-options= diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index 388d130afe605..715ccbb15d16a 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -9,11 +9,13 @@ WASI_SDK_PATH=$SOURCE_PATH/wasi-sdk case $(uname -s) in Darwin) OS_SUFFIX=osx - PRESET_NAME=webassembly-macos + HOST_PRESET=webassembly-host + TARGET_PRESET=webassembly-macos-target ;; Linux) OS_SUFFIX=linux - PRESET_NAME=webassembly-linux + HOST_PRESET=webassembly-linux-host + TARGET_PRESET=webassembly-linux-target ;; *) echo "Unrecognised platform $(uname -s)" @@ -43,7 +45,7 @@ mkdir -p $HOST_TOOLCHAIN_SDK/usr/lib/clang/10.0.0 # Build the host toolchain and SDK first. $SOURCE_PATH/swift/utils/build-script \ - --preset=webassembly-host \ + --preset=$HOST_PRESET \ INSTALL_DESTDIR="$HOST_TOOLCHAIN_DESTDIR" \ TOOLCHAIN_NAME="$TOOLCHAIN_NAME" \ C_CXX_LAUNCHER="$(which sccache)" @@ -55,7 +57,7 @@ rm -rf $SOURCE_PATH/build/Ninja-ReleaseAssert/swift-macosx-x86_64 # build the cross-compilled toolchain $SOURCE_PATH/swift/utils/build-script \ - --preset=$PRESET_NAME \ + --preset=$TARGET_PRESET \ INSTALL_DESTDIR="$SOURCE_PATH/install" \ SOURCE_PATH="$SOURCE_PATH" \ BUNDLE_IDENTIFIER="${BUNDLE_IDENTIFIER}" \ From 46476bd82e6956cb3e23e4b2c99e0016edc700c0 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Mon, 18 May 2020 10:42:39 +0100 Subject: [PATCH 10/15] Reflect upstream presets more closely --- utils/build-presets.ini | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/utils/build-presets.ini b/utils/build-presets.ini index ad430809962d7..b33ce430476e8 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -2451,23 +2451,38 @@ install-prefix=/%(TOOLCHAIN_NAME)s/usr [preset: webassembly-host] mixin-preset=webassembly -llbuild -swiftpm -install-swiftpm extra-cmake-options= -DSWIFT_BUILD_SOURCEKIT=FALSE -DSWIFT_ENABLE_SOURCEKIT_TESTS=FALSE -DSWIFT_BUILD_SYNTAXPARSERLIB=FALSE +llbuild +swiftpm + +install-swift +install-llbuild +install-swiftpm +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 From 2a7b8b729b83302edc2aa98726ca6ac3d558a76c Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Mon, 18 May 2020 10:44:12 +0100 Subject: [PATCH 11/15] Remove install-libcxx from WebAssembly presets --- utils/build-presets.ini | 1 - 1 file changed, 1 deletion(-) diff --git a/utils/build-presets.ini b/utils/build-presets.ini index b33ce430476e8..cc72681723bc2 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -2462,7 +2462,6 @@ swiftpm install-swift install-llbuild install-swiftpm -install-libcxx [preset: webassembly-linux-host] From 93fe6c53b5fc941f64f287a934c7a9a7b321f560 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Mon, 18 May 2020 13:49:17 +0100 Subject: [PATCH 12/15] Fix directory cleanup command in build-toolchain.sh --- utils/webassembly/build-toolchain.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index 715ccbb15d16a..3dd0753a1d56d 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -53,7 +53,7 @@ $SOURCE_PATH/swift/utils/build-script \ # Clean up the host toolchain build directory so that the next # `build-script` invocation doesn't pick up wrong CMake config files. # For some reason passing `--reconfigure` to `build-script` won't do this. -rm -rf $SOURCE_PATH/build/Ninja-ReleaseAssert/swift-macosx-x86_64 +rm -rf $SOURCE_PATH/build/Ninja-ReleaseAssert/swift-* # build the cross-compilled toolchain $SOURCE_PATH/swift/utils/build-script \ From 9a87e5451e00cc8f30268adca2bd7bea99cb73e4 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Mon, 18 May 2020 20:10:17 +0100 Subject: [PATCH 13/15] Don't copy clang from wasi-sdk, which can't build for hosts --- utils/webassembly/build-toolchain.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index 3dd0753a1d56d..f8ce63eb3bed1 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -69,7 +69,7 @@ $SOURCE_PATH/swift/utils/build-script \ # Merge wasi-sdk and the toolchain cp -a $WASI_SDK_PATH/lib/clang $HOST_TOOLCHAIN_SDK/usr/lib -cp -a $WASI_SDK_PATH/bin/{clang*,*ld,llvm-ar} $HOST_TOOLCHAIN_SDK/usr/bin +cp -a $WASI_SDK_PATH/bin/{*ld,llvm-ar} $HOST_TOOLCHAIN_SDK/usr/bin cp -r $WASI_SDK_PATH/share/wasi-sysroot $HOST_TOOLCHAIN_SDK/usr/share # Replace absolute sysroot path with relative path From ae35be09ffa0815c5f5af787efb2f38556341829 Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Tue, 19 May 2020 10:13:00 +0100 Subject: [PATCH 14/15] Increase cp/rsync verbosity, fix destination path --- utils/webassembly/build-toolchain.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index f8ce63eb3bed1..aa7647192db6d 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -80,10 +80,10 @@ sed -i -e "s@\".*/include@\"../../../../share/wasi-sysroot/include@g" $SOURCE_PA if [[ "$(uname)" == "Linux" ]]; then # 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 -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib $HOST_TOOLCHAIN_SDK/usr/lib/ --exclude 'swift/clang' + rsync -v -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib $HOST_TOOLCHAIN_SDK/usr/lib --exclude 'swift/clang' else - cp -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift_static $HOST_TOOLCHAIN_SDK/usr/lib/swift_static - cp -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift/wasi $HOST_TOOLCHAIN_SDK/usr/lib/swift + cp -v -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift_static $HOST_TOOLCHAIN_SDK/usr/lib/swift_static + cp -v -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift/wasi $HOST_TOOLCHAIN_SDK/usr/lib/swift fi cd $HOST_TOOLCHAIN_DESTDIR From 080a3888c987a300c7f5c43c6f49bf36879a349b Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Tue, 19 May 2020 16:33:57 +0100 Subject: [PATCH 15/15] Use slashes at the end of rsync paths --- utils/webassembly/build-toolchain.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/webassembly/build-toolchain.sh b/utils/webassembly/build-toolchain.sh index aa7647192db6d..eec7d8f068108 100755 --- a/utils/webassembly/build-toolchain.sh +++ b/utils/webassembly/build-toolchain.sh @@ -80,7 +80,7 @@ sed -i -e "s@\".*/include@\"../../../../share/wasi-sysroot/include@g" $SOURCE_PA if [[ "$(uname)" == "Linux" ]]; then # 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 $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib $HOST_TOOLCHAIN_SDK/usr/lib --exclude 'swift/clang' + rsync -v -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/ $HOST_TOOLCHAIN_SDK/usr/lib/ --exclude 'swift/clang' else cp -v -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift_static $HOST_TOOLCHAIN_SDK/usr/lib/swift_static cp -v -a $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/swift/wasi $HOST_TOOLCHAIN_SDK/usr/lib/swift