Skip to content

Commit 89ce759

Browse files
Simplify build script (#2733)
* [WASM] Simplify Foundation build script * [WASM] Remove WASI ICU related code from CMake build system * Refactoring build-toolchain script * [WASM] Fix prebuilt libraries path * [WASM] Always install ubuntu wasi-sdk * Fix unarchive command
1 parent e499018 commit 89ce759

File tree

13 files changed

+91
-93
lines changed

13 files changed

+91
-93
lines changed

CMakeLists.txt

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -921,36 +921,6 @@ function(swift_icu_variables_set sdk arch result)
921921
endif()
922922
endfunction()
923923

924-
if(SWIFT_PRIMARY_VARIANT_SDK STREQUAL "WASI")
925-
set(WASI_ICU_URL "" CACHE STRING
926-
"Download URL for the WASI ICU distribution")
927-
set(WASI_ICU_MD5 "" CACHE STRING
928-
"The expected MD5 hash of the WASI ICU distribution archive")
929-
930-
file(DOWNLOAD "${WASI_ICU_URL}" "${SWIFT_SOURCE_DIR}/../icu.tar.xz"
931-
EXPECTED_HASH MD5=${WASI_ICU_MD5})
932-
933-
get_filename_component(SWIFT_SOURCE_BASEDIR "${SWIFT_SOURCE_DIR}" DIRECTORY)
934-
set(WASI_ICU_OUT_LIB "${SWIFT_SOURCE_BASEDIR}/icu_out/lib")
935-
set(SWIFT_WASI_wasm32_ICU_UC_INCLUDE "${SWIFT_SOURCE_BASEDIR}/icu_out/include")
936-
set(SWIFT_WASI_wasm32_ICU_I18N_INCLUDE "${SWIFT_SOURCE_BASEDIR}/icu_out/include")
937-
set(SWIFT_WASI_wasm32_ICU_UC "${WASI_ICU_OUT_LIB}/libicuuc.a")
938-
set(SWIFT_WASI_wasm32_ICU_I18N "${WASI_ICU_OUT_LIB}/libicui18n.a")
939-
set(SWIFT_WASI_wasm32_ICU_DATA "${WASI_ICU_OUT_LIB}/libicudata.a")
940-
941-
set(WASI_ICU_DISTRIBUTION_TARGET)
942-
add_custom_command_target(WASI_ICU_DISTRIBUTION_TARGET
943-
COMMAND
944-
${CMAKE_COMMAND} -E
945-
tar xfv "${SWIFT_SOURCE_BASEDIR}/icu.tar.xz"
946-
WORKING_DIRECTORY
947-
"${SWIFT_SOURCE_BASEDIR}"
948-
OUTPUT
949-
"${SWIFT_WASI_wasm32_ICU_DATA}"
950-
"${SWIFT_WASI_wasm32_ICU_I18N}"
951-
"${SWIFT_WASI_wasm32_ICU_UC}")
952-
endif()
953-
954924
# ICU is provided through CoreFoundation on Darwin. On other hosts, if the ICU
955925
# unicode and i18n include and library paths are not defined, perform a standard
956926
# package lookup. Otherwise, rely on the paths specified by the user. These

cmake/caches/Runtime-WASI-wasm32.cmake

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,4 @@ set(SWIFT_STDLIB_ENABLE_THINCMO YES CACHE BOOL "")
2727
# build with the host compiler
2828
set(SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER YES CACHE BOOL "")
2929

30-
set(WASI_ICU_URL "https://github.com/swiftwasm/icu4c-wasi/releases/download/0.5.0/icu4c-wasi.tar.xz" CACHE STRING "")
31-
set(WASI_ICU_MD5 "25943864ebbfff15cf5aee8d9d5cc4d7" CACHE STRING "")
32-
33-
3430
set(SWIFT_STDLIB_SINGLE_THREADED_RUNTIME YES CACHE BOOL "")

stdlib/public/stubs/CMakeLists.txt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,7 @@ set(swift_stubs_c_compile_flags ${SWIFT_RUNTIME_CORE_CXX_FLAGS})
2727
list(APPEND swift_stubs_c_compile_flags -DswiftCore_EXPORTS)
2828
list(APPEND swift_stubs_c_compile_flags -I${SWIFT_SOURCE_DIR}/include)
2929

30-
set(swift_stubs_dependencies)
31-
if(SWIFT_PRIMARY_VARIANT_SDK STREQUAL "WASI")
32-
list(APPEND swift_stubs_dependencies ${WASI_ICU_DISTRIBUTION_TARGET})
33-
endif()
34-
3530
add_swift_target_library(swiftStdlibStubs
36-
DEPENDS
37-
${swift_stubs_dependencies}
3831
OBJECT_LIBRARY
3932
${swift_stubs_sources}
4033
${swift_stubs_objc_sources}

utils/webassembly/amazonlinux/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,6 @@ WORKDIR /home/ec2-user/swift
4040
RUN git fetch origin $SWIFT_GIT_SHA
4141
RUN git checkout $SWIFT_GIT_SHA
4242
RUN ./utils/update-checkout --clone --scheme $SWIFT_CHECKOUT_SCHEME --skip-repository swift
43-
RUN ./utils/webassembly/install-wasi-sdk.sh linux ubuntu-18.04
43+
RUN ./utils/webassembly/install-build-sdk.sh
4444

4545
RUN ./utils/webassembly/build-toolchain.sh

utils/webassembly/build-foundation.sh

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ set -ex
33
DESTINATION_TOOLCHAIN=$1
44
WASI_SYSROOT_PATH=$2
55
SOURCE_PATH="$(cd "$(dirname $0)/../../.." && pwd)"
6+
BUILD_SDK_PATH="$SOURCE_PATH/build-sdk"
7+
LIBXML2_PATH="$BUILD_SDK_PATH/libxml2"
68

79
FOUNDATION_BUILD="$SOURCE_PATH/target-build/foundation-wasi-wasm32"
810

@@ -15,11 +17,15 @@ cmake -G Ninja \
1517
-DCMAKE_STAGING_PREFIX="$DESTINATION_TOOLCHAIN/usr" \
1618
-DCMAKE_TOOLCHAIN_FILE="$SOURCE_PATH/swift/utils/webassembly/toolchain-wasi.cmake" \
1719
-DLLVM_BIN="$DESTINATION_TOOLCHAIN/usr/bin" \
18-
-DICU_ROOT="$SOURCE_PATH/icu_out" \
20+
-DICU_ROOT="$BUILD_SDK_PATH/icu" \
21+
-DLIBXML2_INCLUDE_DIR="$LIBXML2_PATH/include/libxml2" \
22+
-DLIBXML2_LIBRARY="$LIBXML2_PATH/lib" \
1923
-DBUILD_SHARED_LIBS=OFF \
24+
-DBUILD_NETWORKING=OFF \
25+
-DBUILD_TOOLS=OFF \
26+
-DHAS_LIBDISPATCH_API=OFF \
2027
-DCMAKE_Swift_COMPILER_FORCED=ON \
21-
-DCMAKE_ASM_FLAGS="-target wasm32-unknown-wasi" \
2228
"${SOURCE_PATH}/swift-corelibs-foundation"
2329

24-
ninja -v
25-
ninja -v install
30+
ninja
31+
ninja install

utils/webassembly/build-presets.ini

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
#===----------------------------------------------------------------------===#
44

55
[preset: webassembly]
6-
cmake-c-launcher=%(C_CXX_LAUNCHER)s
7-
cmake-cxx-launcher=%(C_CXX_LAUNCHER)s
6+
sccache
87
skip-build-benchmarks
98
llvm-targets-to-build=X86;AArch64;WebAssembly
109
swift-darwin-supported-archs=%(HOST_ARCHITECTURE)s

utils/webassembly/build-toolchain.sh

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ set -ex
44
SOURCE_PATH="$(cd "$(dirname "$0")/../../.." && pwd)"
55
UTILS_PATH="$(cd "$(dirname "$0")" && pwd)"
66

7-
WASI_SDK_PATH="$SOURCE_PATH/wasi-sdk"
7+
BUILD_SDK_PATH="$SOURCE_PATH/build-sdk"
8+
WASI_SDK_PATH="$BUILD_SDK_PATH/wasi-sdk"
89
WASI_SYSROOT_PATH="$WASI_SDK_PATH/share/wasi-sysroot"
910

1011
case $(uname -s) in
@@ -33,6 +34,21 @@ case $(uname -s) in
3334
;;
3435
esac
3536

37+
BUILD_HOST_TOOLCHAIN=1
38+
39+
while [ $# -ne 0 ]; do
40+
case "$1" in
41+
--skip-build-host-toolchain)
42+
BUILD_HOST_TOOLCHAIN=0
43+
;;
44+
*)
45+
echo "Unrecognised argument \"$1\""
46+
exit 1
47+
;;
48+
esac
49+
shift
50+
done
51+
3652
YEAR=$(date +"%Y")
3753
MONTH=$(date +"%m")
3854
DAY=$(date +"%d")
@@ -56,15 +72,12 @@ build_host_toolchain() {
5672
--preset-file="$UTILS_PATH/build-presets.ini" \
5773
--preset=$HOST_PRESET \
5874
--build-dir="$HOST_BUILD_DIR" \
59-
HOST_ARCHITECTURE=$(uname -m) \
75+
HOST_ARCHITECTURE="$(uname -m)" \
6076
INSTALL_DESTDIR="$HOST_TOOLCHAIN_DESTDIR" \
61-
TOOLCHAIN_NAME="$TOOLCHAIN_NAME" \
62-
C_CXX_LAUNCHER="$(which sccache)"
77+
TOOLCHAIN_NAME="$TOOLCHAIN_NAME"
6378
}
6479

6580
build_target_toolchain() {
66-
rm -rf "$DIST_TOOLCHAIN_DESTDIR"
67-
rsync -a "$HOST_TOOLCHAIN_DESTDIR/" "$DIST_TOOLCHAIN_DESTDIR"
6881

6982
COMPILER_RT_BUILD_DIR="$TARGET_BUILD_ROOT/compiler-rt-wasi-wasm32"
7083
cmake -B "$COMPILER_RT_BUILD_DIR" \
@@ -97,6 +110,11 @@ build_target_toolchain() {
97110
-D LLVM_DIR="$HOST_BUILD_DIR/llvm-$HOST_SUFFIX/lib/cmake/llvm/" \
98111
-D SWIFT_NATIVE_SWIFT_TOOLS_PATH="$HOST_BUILD_DIR/swift-$HOST_SUFFIX/bin" \
99112
-D SWIFT_WASI_SYSROOT_PATH="$WASI_SYSROOT_PATH" \
113+
-D SWIFT_WASI_wasm32_ICU_UC_INCLUDE="$BUILD_SDK_PATH/icu/include" \
114+
-D SWIFT_WASI_wasm32_ICU_UC="$BUILD_SDK_PATH/icu/lib/libicuuc.a" \
115+
-D SWIFT_WASI_wasm32_ICU_I18N_INCLUDE="$BUILD_SDK_PATH/icu/include" \
116+
-D SWIFT_WASI_wasm32_ICU_I18N="$BUILD_SDK_PATH/icu/lib/libicui18n.a" \
117+
-D SWIFT_WASI_wasm32_ICU_DATA="$BUILD_SDK_PATH/icu/lib/libicudata.a" \
100118
-G Ninja \
101119
-S "$SOURCE_PATH/swift"
102120

@@ -169,7 +187,12 @@ create_darwin_info_plist() {
169187
chmod a+r "${DARWIN_TOOLCHAIN_INFO_PLIST}"
170188
}
171189

172-
build_host_toolchain
190+
if [ ${BUILD_HOST_TOOLCHAIN} -eq 1 ]; then
191+
build_host_toolchain
192+
rm -rf "$DIST_TOOLCHAIN_DESTDIR"
193+
rsync -a "$HOST_TOOLCHAIN_DESTDIR/" "$DIST_TOOLCHAIN_DESTDIR"
194+
fi
195+
173196
build_target_toolchain
174197

175198
embed_wasi_sysroot

utils/webassembly/ci.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ RUN_TEST_BIN=$SWIFT_PATH/utils/run-test
2626
TARGET_STDLIB_BUILD_DIR=$SOURCE_PATH/target-build/swift-stdlib-wasi-wasm32
2727

2828
$DEPENDENCIES_SCRIPT
29+
$UTILS_PATH/install-build-sdk.sh
2930

3031
export PATH="$HOME/.wasmer/bin:$PATH"
3132

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/bin/bash
2+
3+
set -eux
4+
5+
SOURCE_PATH="$( cd "$(dirname "$0")/../../../" && pwd )"
6+
BUILD_SDK_PATH="$SOURCE_PATH/build-sdk"
7+
8+
install_libxml2() {
9+
LIBXML2_URL="https://github.com/swiftwasm/libxml2-wasm/releases/download/1.0.0/libxml2-wasm32-unknown-wasi.tar.gz"
10+
curl -L "$LIBXML2_URL" | tar xz
11+
rm -rf "$BUILD_SDK_PATH/libxml2"
12+
mv libxml2-wasm32-unknown-wasi "$BUILD_SDK_PATH/libxml2"
13+
}
14+
15+
install_icu() {
16+
ICU_URL="https://github.com/swiftwasm/icu4c-wasi/releases/download/0.5.0/icu4c-wasi.tar.xz"
17+
curl -L "$ICU_URL" | tar Jx
18+
rm -rf "$BUILD_SDK_PATH/icu"
19+
mv icu_out "$BUILD_SDK_PATH/icu"
20+
}
21+
22+
install_wasi-sdk() {
23+
# We only use wasi-sysroot and do not use binaries in wasi-sdk,
24+
# so build machine's os and wasi-sdk's host os don't have to be matched
25+
WASI_SDK_URL="https://github.com/swiftwasm/wasi-sdk/releases/download/0.2.2-swiftwasm/dist-ubuntu-18.04.zip"
26+
27+
curl -L -o dist-wasi-sdk.zip "$WASI_SDK_URL"
28+
unzip -u dist-wasi-sdk.zip -d .
29+
30+
WASI_SDK_TAR_PATH=$(find . -type f -name "wasi-sdk-*")
31+
WASI_SDK_FULL_NAME=$(basename "$WASI_SDK_TAR_PATH" -linux.tar.gz)
32+
tar xfz "$WASI_SDK_TAR_PATH"
33+
34+
rm -rf "$BUILD_SDK_PATH/wasi-sdk"
35+
mv "$WASI_SDK_FULL_NAME" "$BUILD_SDK_PATH/wasi-sdk"
36+
}
37+
38+
workdir=$(mktemp -d)
39+
pushd "$workdir"
40+
41+
mkdir -p "$BUILD_SDK_PATH"
42+
43+
install_libxml2
44+
install_icu
45+
install_wasi-sdk

utils/webassembly/install-wasi-sdk.sh

Lines changed: 0 additions & 23 deletions
This file was deleted.

utils/webassembly/linux/install-dependencies.sh

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,6 @@ fi
5252

5353
cmake --version
5454

55-
$SWIFT_PATH/utils/webassembly/install-wasi-sdk.sh linux ubuntu-18.04
56-
57-
# Link wasm32-wasi-unknown to wasm32-wasi because clang finds crt1.o from sysroot
58-
# with os and environment name `getMultiarchTriple`.
59-
ln -s wasm32-wasi wasi-sdk/share/wasi-sysroot/lib/wasm32-wasi-unknown
60-
6155
# Install sccache
6256

6357
if [ -z $(which sccache) ]; then

utils/webassembly/macos/install-dependencies.sh

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,3 @@ cd $SWIFT_PATH
2626

2727
cd $SOURCE_PATH
2828

29-
$SWIFT_PATH/utils/webassembly/install-wasi-sdk.sh macos macos-10.15
30-
31-
# Link sysroot/usr/include to sysroot/include because Darwin sysroot doesn't
32-
# find header files in sysroot/include but sysroot/usr/include
33-
mkdir wasi-sdk/share/wasi-sysroot/usr/
34-
ln -s ../include wasi-sdk/share/wasi-sysroot/usr/include
35-
# Link wasm32-wasi-unknown to wasm32-wasi because clang finds crt1.o from sysroot
36-
# with os and environment name `getMultiarchTriple`.
37-
ln -s wasm32-wasi wasi-sdk/share/wasi-sysroot/lib/wasm32-wasi-unknown

utils/webassembly/toolchain-wasi.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ set(CMAKE_AR "${LLVM_BIN}/llvm-ar" CACHE STRING "LLVM Archiver for wasm32")
99
set(CMAKE_RANLIB "${LLVM_BIN}/llvm-ranlib" CACHE STRING "LLVM Ranlib for wasm32")
1010
set(CMAKE_C_COMPILER_TARGET ${triple} CACHE STRING "")
1111
set(CMAKE_CXX_COMPILER_TARGET ${triple} CACHE STRING "")
12+
set(CMAKE_Swift_COMPILER_TARGET ${triple} CACHE STRING "")
13+
set(CMAKE_ASM_COMPILER_TARGET ${triple} CACHE STRING "")
14+
1215
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-threads" CACHE STRING "Single thread options")
1316

1417
# Don't look in the sysroot for executables to run during the build

0 commit comments

Comments
 (0)