@@ -10,7 +10,6 @@ case $(uname -s) in
10
10
Darwin)
11
11
OS_SUFFIX=macos_x86_64
12
12
HOST_PRESET=webassembly-host-install
13
- TARGET_PRESET=webassembly-macos-target-install
14
13
HOST_SUFFIX=macosx-x86_64
15
14
;;
16
15
Linux)
@@ -23,7 +22,6 @@ case $(uname -s) in
23
22
exit 1
24
23
fi
25
24
HOST_PRESET=webassembly-linux-host-install
26
- TARGET_PRESET=webassembly-linux-target-install
27
25
HOST_SUFFIX=linux-x86_64
28
26
;;
29
27
* )
35
33
YEAR=$( date +" %Y" )
36
34
MONTH=$( date +" %m" )
37
35
DAY=$( date +" %d" )
38
- TOOLCHAIN_VERSION=" ${YEAR}${MONTH}${DAY} "
39
36
TOOLCHAIN_NAME=" swift-wasm-DEVELOPMENT-SNAPSHOT-${YEAR} -${MONTH} -${DAY} -a"
40
37
41
38
PACKAGE_ARTIFACT=" $SOURCE_PATH /swift-wasm-DEVELOPMENT-SNAPSHOT-${OS_SUFFIX} .tar.gz"
42
39
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
48
40
HOST_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
51
42
DIST_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
54
43
55
44
56
45
HOST_BUILD_ROOT=$SOURCE_PATH /host-build
57
46
TARGET_BUILD_ROOT=$SOURCE_PATH /target-build
58
47
HOST_BUILD_DIR=$HOST_BUILD_ROOT /Ninja-Release
59
- TARGET_BUILD_DIR=$TARGET_BUILD_ROOT /Ninja-Release
60
48
61
49
build_host_toolchain () {
62
50
# Build the host toolchain and SDK first.
@@ -71,49 +59,65 @@ build_host_toolchain() {
71
59
}
72
60
73
61
build_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 "
97
64
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 "
100
114
101
115
}
102
116
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 () {
108
118
# Merge wasi-sdk and the toolchain
109
119
cp -r " $WASI_SDK_PATH /share/wasi-sysroot" " $DIST_TOOLCHAIN_SDK /usr/share"
110
120
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
-
117
121
# Replace absolute sysroot path with relative path
118
122
sed -i.bak -e " s@\" .*/include@\" ../../../../share/wasi-sysroot/include@g" " $DIST_TOOLCHAIN_SDK /usr/lib/swift/wasi/wasm32/wasi.modulemap"
119
123
rm " $DIST_TOOLCHAIN_SDK /usr/lib/swift/wasi/wasm32/wasi.modulemap.bak"
@@ -164,7 +168,7 @@ create_darwin_info_plist() {
164
168
build_host_toolchain
165
169
build_target_toolchain
166
170
167
- merge_toolchains
171
+ embed_wasi_sysroot
168
172
169
173
if [[ " $( uname) " == " Darwin" ]]; then
170
174
create_darwin_info_plist
0 commit comments