@@ -11,11 +11,13 @@ case $(uname -s) in
11
11
OS_SUFFIX=osx
12
12
HOST_PRESET=webassembly-host
13
13
TARGET_PRESET=webassembly-macos-target
14
+ HOST_SUFFIX=macosx-x86_64
14
15
;;
15
16
Linux)
16
17
OS_SUFFIX=linux
17
18
HOST_PRESET=webassembly-linux-host
18
19
TARGET_PRESET=webassembly-linux-target
20
+ HOST_SUFFIX=linux-x86_64
19
21
;;
20
22
* )
21
23
echo " Unrecognised platform $( uname -s) "
@@ -37,54 +39,88 @@ BUNDLE_IDENTIFIER="swiftwasm.5.3-${YEAR}${MONTH}${DAY}"
37
39
DISPLAY_NAME_SHORT=" Swift for WebAssembly 5.3 Snapshot"
38
40
DISPLAY_NAME=" ${DISPLAY_NAME_SHORT} ${YEAR} -${MONTH} -${DAY} "
39
41
42
+ DIST_TOOLCHAIN_DESTDIR=$SOURCE_PATH /dist-toolchain-sdk
40
43
HOST_TOOLCHAIN_DESTDIR=$SOURCE_PATH /host-toolchain-sdk
41
- HOST_TOOLCHAIN_SDK= $HOST_TOOLCHAIN_DESTDIR / $TOOLCHAIN_NAME
44
+ TARGET_TOOLCHAIN_DESTDIR= $SOURCE_PATH /target-toolchain-sdk
42
45
43
- # Avoid clang headers symlink issues
44
- mkdir -p $HOST_TOOLCHAIN_SDK /usr/lib/clang/10.0.0
45
-
46
- # Build the host toolchain and SDK first.
47
- $SOURCE_PATH /swift/utils/build-script \
48
- --preset=$HOST_PRESET \
49
- INSTALL_DESTDIR=" $HOST_TOOLCHAIN_DESTDIR " \
50
- TOOLCHAIN_NAME=" $TOOLCHAIN_NAME " \
51
- C_CXX_LAUNCHER=" $( which sccache) "
52
-
53
- # Clean up the host toolchain build directory so that the next
54
- # `build-script` invocation doesn't pick up wrong CMake config files.
55
- # For some reason passing `--reconfigure` to `build-script` won't do this.
56
- rm -rf $SOURCE_PATH /build/Ninja-ReleaseAssert/swift-*
57
-
58
- # build the cross-compilled toolchain
59
- $SOURCE_PATH /swift/utils/build-script \
60
- --preset=$TARGET_PRESET \
61
- INSTALL_DESTDIR=" $SOURCE_PATH /install" \
62
- SOURCE_PATH=" $SOURCE_PATH " \
63
- BUNDLE_IDENTIFIER=" ${BUNDLE_IDENTIFIER} " \
64
- DISPLAY_NAME=" ${DISPLAY_NAME} " \
65
- DISPLAY_NAME_SHORT=" ${DISPLAY_NAME_SHORT} " \
66
- TOOLCHAIN_NAME=" ${TOOLCHAIN_NAME} " \
67
- TOOLCHAIN_VERSION=" ${TOOLCHAIN_VERSION} " \
68
- C_CXX_LAUNCHER=" $( which sccache) "
69
-
70
- # Merge wasi-sdk and the toolchain
71
- cp -a $WASI_SDK_PATH /lib/clang $HOST_TOOLCHAIN_SDK /usr/lib
72
- cp -a $WASI_SDK_PATH /bin/{* ld,llvm-ar} $HOST_TOOLCHAIN_SDK /usr/bin
73
- cp -r $WASI_SDK_PATH /share/wasi-sysroot $HOST_TOOLCHAIN_SDK /usr/share
74
-
75
- # Replace absolute sysroot path with relative path
76
- sed -i -e " s@\" .*/include@\" ../../../../share/wasi-sysroot/include@g" $SOURCE_PATH /install/$TOOLCHAIN_NAME /usr/lib/swift/wasi/wasm32/wasi.modulemap
77
-
78
- # Copy the target environment stdlib into the toolchain
79
-
80
- # Avoid copying usr/lib/swift/clang because our toolchain's one is a directory
81
- # but nightly's one is symbolic link. A simple copy fails to merge them.
82
- rsync -v -a $SOURCE_PATH /install/$TOOLCHAIN_NAME /usr/lib/ $HOST_TOOLCHAIN_SDK /usr/lib/ --exclude ' swift/clang'
83
- rsync -v -a $SOURCE_PATH /install/$TOOLCHAIN_NAME /usr/bin/ $HOST_TOOLCHAIN_SDK /usr/bin/
84
-
85
- # FIXME: avoid building foundation for now
86
- $UTILS_PATH /build-foundation.sh $HOST_TOOLCHAIN_SDK
87
- $UTILS_PATH /build-xctest.sh $HOST_TOOLCHAIN_SDK
88
-
89
- cd $HOST_TOOLCHAIN_DESTDIR
46
+ DIST_TOOLCHAIN_SDK=$DIST_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
47
+ HOST_TOOLCHAIN_SDK=$HOST_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
48
+ TARGET_TOOLCHAIN_SDK=$TARGET_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
49
+
50
+
51
+ HOST_BUILD_ROOT=$SOURCE_PATH /host-build
52
+ TARGET_BUILD_ROOT=$SOURCE_PATH /target-build
53
+ HOST_BUILD_DIR=$HOST_BUILD_ROOT /Ninja-ReleaseAssert
54
+ TARGET_BUILD_DIR=$TARGET_BUILD_ROOT /Ninja-ReleaseAssert
55
+
56
+ build_host_toolchain () {
57
+ # Avoid clang headers symlink issues
58
+ mkdir -p $HOST_TOOLCHAIN_SDK /usr/lib/clang/10.0.0
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
+ # Avoid clang headers symlink issues
79
+ mkdir -p $TARGET_TOOLCHAIN_SDK /usr/lib/clang/10.0.0
80
+
81
+ # build the cross-compilled toolchain
82
+ env SWIFT_BUILD_ROOT=" $TARGET_BUILD_ROOT " \
83
+ $SOURCE_PATH /swift/utils/build-script \
84
+ --preset=$TARGET_PRESET --reconfigure \
85
+ --build-dir=" $TARGET_BUILD_DIR " \
86
+ INSTALL_DESTDIR=" $TARGET_TOOLCHAIN_DESTDIR " \
87
+ SOURCE_PATH=" $SOURCE_PATH " \
88
+ BUNDLE_IDENTIFIER=" ${BUNDLE_IDENTIFIER} " \
89
+ DISPLAY_NAME=" ${DISPLAY_NAME} " \
90
+ DISPLAY_NAME_SHORT=" ${DISPLAY_NAME_SHORT} " \
91
+ TOOLCHAIN_NAME=" ${TOOLCHAIN_NAME} " \
92
+ TOOLCHAIN_VERSION=" ${TOOLCHAIN_VERSION} " \
93
+ C_CXX_LAUNCHER=" $( which sccache) "
94
+
95
+ $UTILS_PATH /build-foundation.sh $TARGET_TOOLCHAIN_SDK
96
+ $UTILS_PATH /build-xctest.sh $TARGET_TOOLCHAIN_SDK
97
+
98
+ }
99
+
100
+ merge_toolchains () {
101
+ rm -rf " $DIST_TOOLCHAIN_DESTDIR "
102
+ # Copy the base host toolchain
103
+ cp -r " $HOST_TOOLCHAIN_DESTDIR " " $DIST_TOOLCHAIN_DESTDIR "
104
+
105
+ # Merge wasi-sdk and the toolchain
106
+ cp -a $WASI_SDK_PATH /lib/clang $DIST_TOOLCHAIN_SDK /usr/lib
107
+ cp -a $WASI_SDK_PATH /bin/{* ld,llvm-ar} $DIST_TOOLCHAIN_SDK /usr/bin
108
+ cp -r $WASI_SDK_PATH /share/wasi-sysroot $DIST_TOOLCHAIN_SDK /usr/share
109
+
110
+ # Copy the target environment stdlib into the toolchain
111
+ # Avoid copying usr/lib/swift/clang because our toolchain's one is a directory
112
+ # but nightly's one is symbolic link. A simple copy fails to merge them.
113
+ rsync -v -a $TARGET_TOOLCHAIN_SDK /usr/lib/ $DIST_TOOLCHAIN_SDK /usr/lib/ --exclude ' swift/clang'
114
+ rsync -v -a $TARGET_TOOLCHAIN_SDK /usr/bin/ $DIST_TOOLCHAIN_SDK /usr/bin/
115
+
116
+ # Replace absolute sysroot path with relative path
117
+ sed -i -e " s@\" .*/include@\" ../../../../share/wasi-sysroot/include@g" $DIST_TOOLCHAIN_SDK /usr/lib/swift/wasi/wasm32/wasi.modulemap
118
+ }
119
+
120
+ build_host_toolchain
121
+ build_target_toolchain
122
+
123
+ merge_toolchains
124
+
125
+ cd $DIST_TOOLCHAIN_DESTDIR
90
126
tar cfz $PACKAGE_ARTIFACT $TOOLCHAIN_NAME
0 commit comments