@@ -11,11 +11,13 @@ case $(uname -s) in
1111 OS_SUFFIX=osx
1212 HOST_PRESET=webassembly-host
1313 TARGET_PRESET=webassembly-macos-target
14+ HOST_SUFFIX=macosx-x86_64
1415 ;;
1516 Linux)
1617 OS_SUFFIX=linux
1718 HOST_PRESET=webassembly-linux-host
1819 TARGET_PRESET=webassembly-linux-target
20+ HOST_SUFFIX=linux-x86_64
1921 ;;
2022 * )
2123 echo " Unrecognised platform $( uname -s) "
@@ -29,69 +31,92 @@ DAY=$(date +"%d")
2931TOOLCHAIN_VERSION=" ${YEAR}${MONTH}${DAY} "
3032TOOLCHAIN_NAME=" swift-wasm-DEVELOPMENT-SNAPSHOT-${YEAR} -${MONTH} -${DAY} -a"
3133ARCHIVE=" ${TOOLCHAIN_NAME} -${OS_SUFFIX} .tar.gz"
32- INSTALLABLE_PACKAGE=$SOURCE_PATH /$ARCHIVE
3334
3435PACKAGE_ARTIFACT=" $SOURCE_PATH /swift-wasm-DEVELOPMENT-SNAPSHOT-${OS_SUFFIX} .tar.gz"
3536
3637BUNDLE_IDENTIFIER=" swiftwasm.${YEAR}${MONTH}${DAY} "
3738DISPLAY_NAME_SHORT=" Swift for WebAssembly Development Snapshot"
3839DISPLAY_NAME=" ${DISPLAY_NAME_SHORT} ${YEAR} -${MONTH} -${DAY} "
3940
41+ DIST_TOOLCHAIN_DESTDIR=$SOURCE_PATH /dist-toolchain-sdk
4042HOST_TOOLCHAIN_DESTDIR=$SOURCE_PATH /host-toolchain-sdk
43+ TARGET_TOOLCHAIN_DESTDIR=$SOURCE_PATH /target-toolchain-sdk
44+
45+ DIST_TOOLCHAIN_SDK=$DIST_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
4146HOST_TOOLCHAIN_SDK=$HOST_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
47+ TARGET_TOOLCHAIN_SDK=$TARGET_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
48+
4249
43- BUILD_DIR=$SOURCE_PATH /build/Ninja-ReleaseAssert
50+ HOST_BUILD_ROOT=$SOURCE_PATH /host-build
51+ TARGET_BUILD_ROOT=$SOURCE_PATH /target-build
52+ HOST_BUILD_DIR=$HOST_BUILD_ROOT /Ninja-ReleaseAssert
53+ TARGET_BUILD_DIR=$TARGET_BUILD_ROOT /Ninja-ReleaseAssert
4454
4555# Avoid clang headers symlink issues
4656mkdir -p $HOST_TOOLCHAIN_SDK /usr/lib/clang/10.0.0
4757
48- # Build the host toolchain and SDK first.
49- $SOURCE_PATH /swift/utils/build-script \
50- --preset=$HOST_PRESET \
51- INSTALL_DESTDIR=" $HOST_TOOLCHAIN_DESTDIR " \
52- TOOLCHAIN_NAME=" $TOOLCHAIN_NAME " \
53- C_CXX_LAUNCHER=" $( which sccache) "
54-
55- # Clean up the host toolchain build directory so that the next
56- # `build-script` invocation doesn't pick up wrong CMake config files.
57- # For some reason passing `--reconfigure` to `build-script` won't do this.
58- rm -rf $BUILD_DIR /swift-*
59- # Clean up compiler-rt dir to cross compile it for host and wasm32
60- (cd $BUILD_DIR /llvm-* && ninja compiler-rt-clear)
61-
62- # build the cross-compilled toolchain
63- $SOURCE_PATH /swift/utils/build-script \
64- --preset=$TARGET_PRESET --reconfigure \
65- INSTALL_DESTDIR=" $SOURCE_PATH /install" \
66- SOURCE_PATH=" $SOURCE_PATH " \
67- BUNDLE_IDENTIFIER=" ${BUNDLE_IDENTIFIER} " \
68- DISPLAY_NAME=" ${DISPLAY_NAME} " \
69- DISPLAY_NAME_SHORT=" ${DISPLAY_NAME_SHORT} " \
70- TOOLCHAIN_NAME=" ${TOOLCHAIN_NAME} " \
71- TOOLCHAIN_VERSION=" ${TOOLCHAIN_VERSION} " \
72- TOOLS_BIN_DIR=" ${HOST_TOOLCHAIN_SDK} /usr/bin" \
73- C_CXX_LAUNCHER=" $( which sccache) "
74-
75- # Merge wasi-sdk and the toolchain
76- cp -r $WASI_SDK_PATH /share/wasi-sysroot $HOST_TOOLCHAIN_SDK /usr/share
77-
78- # Replace absolute sysroot path with relative path
79- sed -i -e " s@\" .*/include@\" ../../../../share/wasi-sysroot/include@g" $SOURCE_PATH /install/$TOOLCHAIN_NAME /usr/lib/swift/wasi/wasm32/glibc.modulemap
80-
81- # Copy the target environment stdlib into the toolchain
82-
83- # Avoid copying usr/lib/swift/clang because our toolchain's one is a directory
84- # but nightly's one is symbolic link. A simple copy fails to merge them.
85- rsync -v -a $SOURCE_PATH /install/$TOOLCHAIN_NAME /usr/lib/ $HOST_TOOLCHAIN_SDK /usr/lib/ --exclude ' swift/clang'
86- rsync -v -a $SOURCE_PATH /install/$TOOLCHAIN_NAME /usr/bin/ $HOST_TOOLCHAIN_SDK /usr/bin/
87-
88- $UTILS_PATH /build-foundation.sh $HOST_TOOLCHAIN_SDK
89- $UTILS_PATH /build-xctest.sh $HOST_TOOLCHAIN_SDK
90-
91- # Cleanup build directory on Linux CI
92- if [[ -n " ${CI} " && " $( uname) " == " Linux" ]]; then
93- rm -rf $BUILD_DIR /foundation-* $BUILD_DIR /swiftpm-*
94- fi
95-
96- cd $HOST_TOOLCHAIN_DESTDIR
58+ build_host_toolchain () {
59+ # Build the host toolchain and SDK first.
60+ env SWIFT_BUILD_ROOT=" $HOST_BUILD_ROOT " \
61+ $SOURCE_PATH /swift/utils/build-script \
62+ --preset=$HOST_PRESET \
63+ --build-dir=" $HOST_BUILD_DIR " \
64+ INSTALL_DESTDIR=" $HOST_TOOLCHAIN_DESTDIR " \
65+ TOOLCHAIN_NAME=" $TOOLCHAIN_NAME " \
66+ C_CXX_LAUNCHER=" $( which sccache) "
67+ }
68+
69+ build_target_toolchain () {
70+ mkdir -p $HOST_BUILD_DIR /
71+ # Copy the host build dir to reuse it.
72+ if [[ ! -e " $HOST_BUILD_DIR /llvm-$HOST_SUFFIX " ]]; then
73+ cp -r " $HOST_BUILD_DIR /llvm-$HOST_SUFFIX " " $TARGET_BUILD_DIR /llvm-$HOST_SUFFIX "
74+ # Clean up compiler-rt dir to cross compile it for host and wasm32
75+ (cd " $TARGET_BUILD_DIR /llvm-$HOST_SUFFIX " && ninja compiler-rt-clear)
76+ fi
77+
78+ # build the cross-compilled toolchain
79+ env SWIFT_BUILD_ROOT=" $TARGET_BUILD_ROOT " \
80+ $SOURCE_PATH /swift/utils/build-script \
81+ --preset=$TARGET_PRESET --reconfigure \
82+ --build-dir=" $TARGET_BUILD_DIR " \
83+ INSTALL_DESTDIR=" $TARGET_TOOLCHAIN_DESTDIR " \
84+ SOURCE_PATH=" $SOURCE_PATH " \
85+ BUNDLE_IDENTIFIER=" ${BUNDLE_IDENTIFIER} " \
86+ DISPLAY_NAME=" ${DISPLAY_NAME} " \
87+ DISPLAY_NAME_SHORT=" ${DISPLAY_NAME_SHORT} " \
88+ TOOLCHAIN_NAME=" ${TOOLCHAIN_NAME} " \
89+ TOOLCHAIN_VERSION=" ${TOOLCHAIN_VERSION} " \
90+ TOOLS_BIN_DIR=" ${HOST_TOOLCHAIN_SDK} /usr/bin" \
91+ C_CXX_LAUNCHER=" $( which sccache) "
92+
93+ $UTILS_PATH /build-foundation.sh $TARGET_TOOLCHAIN_SDK
94+ $UTILS_PATH /build-xctest.sh $TARGET_TOOLCHAIN_SDK
95+
96+ }
97+
98+ merge_toolchains () {
99+ rm -rf " $DIST_TOOLCHAIN_DESTDIR "
100+ # Copy the base host toolchain
101+ cp -r " $HOST_TOOLCHAIN_DESTDIR " " $DIST_TOOLCHAIN_DESTDIR "
102+
103+ # Merge wasi-sdk and the toolchain
104+ cp -r $WASI_SDK_PATH /share/wasi-sysroot $DIST_TOOLCHAIN_SDK /usr/share
105+
106+ # Copy the target environment stdlib into the toolchain
107+ # Avoid copying usr/lib/swift/clang because our toolchain's one is a directory
108+ # but nightly's one is symbolic link. A simple copy fails to merge them.
109+ rsync -v -a $TARGET_TOOLCHAIN_SDK /usr/lib/ $DIST_TOOLCHAIN_SDK /usr/lib/ --exclude ' swift/clang'
110+ rsync -v -a $TARGET_TOOLCHAIN_SDK /usr/bin/ $DIST_TOOLCHAIN_SDK /usr/bin/
111+
112+ # Replace absolute sysroot path with relative path
113+ sed -i -e " s@\" .*/include@\" ../../../../share/wasi-sysroot/include@g" $DIST_TOOLCHAIN_SDK /usr/lib/swift/wasi/wasm32/glibc.modulemap
114+ }
115+
116+ build_host_toolchain
117+ build_target_toolchain
118+
119+ merge_toolchains
120+
121+ cd $DIST_TOOLCHAIN_DESTDIR
97122tar cfz $PACKAGE_ARTIFACT $TOOLCHAIN_NAME
0 commit comments