@@ -10,7 +10,6 @@ case $(uname -s) in
1010 Darwin)
1111 OS_SUFFIX=macos_x86_64
1212 HOST_PRESET=webassembly-host-install
13- TARGET_PRESET=webassembly-macos-target-install
1413 HOST_SUFFIX=macosx-x86_64
1514 ;;
1615 Linux)
@@ -23,7 +22,6 @@ case $(uname -s) in
2322 exit 1
2423 fi
2524 HOST_PRESET=webassembly-linux-host-install
26- TARGET_PRESET=webassembly-linux-target-install
2725 HOST_SUFFIX=linux-x86_64
2826 ;;
2927 * )
3533YEAR=$( date +" %Y" )
3634MONTH=$( date +" %m" )
3735DAY=$( date +" %d" )
38- TOOLCHAIN_VERSION=" ${YEAR}${MONTH}${DAY} "
3936TOOLCHAIN_NAME=" swift-wasm-DEVELOPMENT-SNAPSHOT-${YEAR} -${MONTH} -${DAY} -a"
4037
4138PACKAGE_ARTIFACT=" $SOURCE_PATH /swift-wasm-DEVELOPMENT-SNAPSHOT-${OS_SUFFIX} .tar.gz"
4239
43- BUNDLE_IDENTIFIER=" swiftwasm.${YEAR}${MONTH}${DAY} "
44- DISPLAY_NAME_SHORT=" Swift for WebAssembly Development Snapshot"
45- DISPLAY_NAME=" ${DISPLAY_NAME_SHORT} ${YEAR} -${MONTH} -${DAY} "
46-
47- DIST_TOOLCHAIN_DESTDIR=$SOURCE_PATH /dist-toolchain-sdk
4840HOST_TOOLCHAIN_DESTDIR=$SOURCE_PATH /host-toolchain-sdk
49- TARGET_TOOLCHAIN_DESTDIR=$SOURCE_PATH /target-toolchain-sdk
50-
41+ DIST_TOOLCHAIN_DESTDIR=$SOURCE_PATH /dist-toolchain-sdk
5142DIST_TOOLCHAIN_SDK=$DIST_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
52- HOST_TOOLCHAIN_SDK=$HOST_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
53- TARGET_TOOLCHAIN_SDK=$TARGET_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
5443
5544
5645HOST_BUILD_ROOT=$SOURCE_PATH /host-build
5746TARGET_BUILD_ROOT=$SOURCE_PATH /target-build
5847HOST_BUILD_DIR=$HOST_BUILD_ROOT /Ninja-Release
59- TARGET_BUILD_DIR=$TARGET_BUILD_ROOT /Ninja-Release
6048
6149build_host_toolchain () {
6250 # Build the host toolchain and SDK first.
@@ -71,49 +59,65 @@ build_host_toolchain() {
7159}
7260
7361build_target_toolchain () {
74- mkdir -p " $HOST_BUILD_DIR /"
75- # Copy the host build dir to reuse it.
76- if [[ ! -e " $HOST_BUILD_DIR /llvm-$HOST_SUFFIX " ]]; then
77- cp -r " $HOST_BUILD_DIR /llvm-$HOST_SUFFIX " " $TARGET_BUILD_DIR /llvm-$HOST_SUFFIX "
78- # Clean up compiler-rt dir to cross compile it for host and wasm32
79- (cd " $TARGET_BUILD_DIR /llvm-$HOST_SUFFIX " && ninja compiler-rt-clear)
80- fi
81-
82- # build the cross-compilled toolchain
83- env SWIFT_BUILD_ROOT=" $TARGET_BUILD_ROOT " \
84- " $SOURCE_PATH /swift/utils/build-script" \
85- --preset-file=" $UTILS_PATH /build-presets.ini" \
86- --preset=$TARGET_PRESET \
87- --build-dir=" $TARGET_BUILD_DIR " \
88- INSTALL_DESTDIR=" $TARGET_TOOLCHAIN_DESTDIR " \
89- SOURCE_PATH=" $SOURCE_PATH " \
90- BUNDLE_IDENTIFIER=" ${BUNDLE_IDENTIFIER} " \
91- DISPLAY_NAME=" ${DISPLAY_NAME} " \
92- DISPLAY_NAME_SHORT=" ${DISPLAY_NAME_SHORT} " \
93- TOOLCHAIN_NAME=" ${TOOLCHAIN_NAME} " \
94- TOOLCHAIN_VERSION=" ${TOOLCHAIN_VERSION} " \
95- LLVM_BIN_DIR=" ${HOST_TOOLCHAIN_SDK} /usr/bin" \
96- C_CXX_LAUNCHER=" $( which sccache) "
62+ rm -rf " $DIST_TOOLCHAIN_DESTDIR "
63+ cp -r " $HOST_TOOLCHAIN_DESTDIR " " $DIST_TOOLCHAIN_DESTDIR "
9764
98- " $UTILS_PATH /build-foundation.sh" " $TARGET_TOOLCHAIN_SDK "
99- " $UTILS_PATH /build-xctest.sh" " $TARGET_TOOLCHAIN_SDK "
65+ COMPILER_RT_BUILD_DIR=" $TARGET_BUILD_ROOT /compiler-rt-wasi-wasm32"
66+ cmake -B " $COMPILER_RT_BUILD_DIR " \
67+ -D CMAKE_TOOLCHAIN_FILE=" $SOURCE_PATH /swift/utils/webassembly/compiler-rt-cache.cmake" \
68+ -D CMAKE_BUILD_TYPE=Release \
69+ -D CMAKE_C_COMPILER=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/clang" \
70+ -D CMAKE_CXX_COMPILER=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/clang++" \
71+ -D CMAKE_RANLIB=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/llvm-ranlib" \
72+ -D CMAKE_AR=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/llvm-ar" \
73+ -D CMAKE_C_COMPILER_LAUNCHER=" $( which sccache) " \
74+ -D CMAKE_CXX_COMPILER_LAUNCHER=" $( which sccache) " \
75+ -D CMAKE_INSTALL_PREFIX=" $DIST_TOOLCHAIN_SDK /usr/lib/clang/10.0.0/" \
76+ -D COMPILER_RT_SWIFT_WASI_SDK_PATH=" $WASI_SDK_PATH " \
77+ -G Ninja \
78+ -S " $SOURCE_PATH /llvm-project/compiler-rt"
79+
80+ ninja install -C " $COMPILER_RT_BUILD_DIR "
81+
82+ SWIFT_STDLIB_BUILD_DIR=" $TARGET_BUILD_ROOT /swift-stdlib-wasi-wasm32"
83+ cmake -B " $TARGET_BUILD_ROOT /swift-stdlib-wasi-wasm32" \
84+ -C " $SOURCE_PATH /swift/cmake/caches/Runtime-WASI-wasm32.cmake" \
85+ -D CMAKE_BUILD_TYPE=Release \
86+ -D CMAKE_C_COMPILER=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/clang" \
87+ -D CMAKE_CXX_COMPILER=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/clang++" \
88+ -D CMAKE_RANLIB=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/llvm-ranlib" \
89+ -D CMAKE_AR=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/llvm-ar" \
90+ -D CMAKE_C_COMPILER_LAUNCHER=" $( which sccache) " \
91+ -D CMAKE_CXX_COMPILER_LAUNCHER=" $( which sccache) " \
92+ -D CMAKE_INSTALL_PREFIX=" $DIST_TOOLCHAIN_SDK /usr" \
93+ -D LLVM_DIR=" $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /lib/cmake/llvm/" \
94+ -D SWIFT_NATIVE_SWIFT_TOOLS_PATH=" $HOST_BUILD_DIR /swift-$HOST_SUFFIX /bin" \
95+ -D SWIFT_WASI_SDK_PATH=" $WASI_SDK_PATH " \
96+ -G Ninja \
97+ -S " $SOURCE_PATH /swift"
98+
99+ ninja install -C " $SWIFT_STDLIB_BUILD_DIR "
100+
101+ # Copy tool binaries in target build dir to test stdlib
102+ rsync -a " $HOST_BUILD_DIR /llvm-$HOST_SUFFIX /bin/" " $SWIFT_STDLIB_BUILD_DIR /bin/"
103+ rsync -a " $HOST_BUILD_DIR /swift-$HOST_SUFFIX /bin/" " $SWIFT_STDLIB_BUILD_DIR /bin/"
104+
105+ # Link compiler-rt libs to stdlib build dir
106+ mkdir -p " $SWIFT_STDLIB_BUILD_DIR /lib/clang/10.0.0/"
107+ ln -fs " $COMPILER_RT_BUILD_DIR /lib" " $SWIFT_STDLIB_BUILD_DIR /lib/clang/10.0.0/lib"
108+
109+ # Remove host CoreFoundation module directory to avoid module conflict
110+ # while building Foundation
111+ rm -rf " $DIST_TOOLCHAIN_SDK /usr/lib/swift_static/CoreFoundation"
112+ " $UTILS_PATH /build-foundation.sh" " $DIST_TOOLCHAIN_SDK "
113+ " $UTILS_PATH /build-xctest.sh" " $DIST_TOOLCHAIN_SDK "
100114
101115}
102116
103- merge_toolchains () {
104- rm -rf " $DIST_TOOLCHAIN_DESTDIR "
105- # Copy the base host toolchain
106- cp -r " $HOST_TOOLCHAIN_DESTDIR " " $DIST_TOOLCHAIN_DESTDIR "
107-
117+ embed_wasi_sysroot () {
108118 # Merge wasi-sdk and the toolchain
109119 cp -r " $WASI_SDK_PATH /share/wasi-sysroot" " $DIST_TOOLCHAIN_SDK /usr/share"
110120
111- # Copy the target environment stdlib into the toolchain
112- # Avoid copying usr/lib/swift/clang because our toolchain's one is a directory
113- # but nightly's one is symbolic link. A simple copy fails to merge them.
114- rsync -v -a " $TARGET_TOOLCHAIN_SDK /usr/lib/" " $DIST_TOOLCHAIN_SDK /usr/lib/" --exclude ' swift/clang'
115- rsync -v -a " $TARGET_TOOLCHAIN_SDK /usr/bin/" " $DIST_TOOLCHAIN_SDK /usr/bin/"
116-
117121 # Replace absolute sysroot path with relative path
118122 sed -i.bak -e " s@\" .*/include@\" ../../../../share/wasi-sysroot/include@g" " $DIST_TOOLCHAIN_SDK /usr/lib/swift/wasi/wasm32/wasi.modulemap"
119123 rm " $DIST_TOOLCHAIN_SDK /usr/lib/swift/wasi/wasm32/wasi.modulemap.bak"
@@ -164,7 +168,7 @@ create_darwin_info_plist() {
164168build_host_toolchain
165169build_target_toolchain
166170
167- merge_toolchains
171+ embed_wasi_sysroot
168172
169173if [[ " $( uname) " == " Darwin" ]]; then
170174 create_darwin_info_plist
0 commit comments