@@ -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) "
@@ -29,69 +31,92 @@ DAY=$(date +"%d")
29
31
TOOLCHAIN_VERSION=" ${YEAR}${MONTH}${DAY} "
30
32
TOOLCHAIN_NAME=" swift-wasm-DEVELOPMENT-SNAPSHOT-${YEAR} -${MONTH} -${DAY} -a"
31
33
ARCHIVE=" ${TOOLCHAIN_NAME} -${OS_SUFFIX} .tar.gz"
32
- INSTALLABLE_PACKAGE=$SOURCE_PATH /$ARCHIVE
33
34
34
35
PACKAGE_ARTIFACT=" $SOURCE_PATH /swift-wasm-DEVELOPMENT-SNAPSHOT-${OS_SUFFIX} .tar.gz"
35
36
36
37
BUNDLE_IDENTIFIER=" swiftwasm.${YEAR}${MONTH}${DAY} "
37
38
DISPLAY_NAME_SHORT=" Swift for WebAssembly Development Snapshot"
38
39
DISPLAY_NAME=" ${DISPLAY_NAME_SHORT} ${YEAR} -${MONTH} -${DAY} "
39
40
41
+ DIST_TOOLCHAIN_DESTDIR=$SOURCE_PATH /dist-toolchain-sdk
40
42
HOST_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
41
46
HOST_TOOLCHAIN_SDK=$HOST_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
47
+ TARGET_TOOLCHAIN_SDK=$TARGET_TOOLCHAIN_DESTDIR /$TOOLCHAIN_NAME
48
+
42
49
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
44
54
45
55
# Avoid clang headers symlink issues
46
56
mkdir -p $HOST_TOOLCHAIN_SDK /usr/lib/clang/10.0.0
47
57
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
97
122
tar cfz $PACKAGE_ARTIFACT $TOOLCHAIN_NAME
0 commit comments