Skip to content

Commit 1e8e77a

Browse files
Merge pull request #1000 from swiftwasm/maxd/build-foundation
Build Foundation and add it to the distribution
2 parents 4499dd3 + 688b6aa commit 1e8e77a

7 files changed

+82
-36
lines changed

utils/update_checkout/update-checkout-config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
"cmark": "master",
6868
"llbuild": "master",
6969
"swiftpm": "swiftwasm",
70-
"swift-argument-parser": "0.0.5",
70+
"swift-argument-parser": "0.0.6",
7171
"swift-driver": "master",
7272
"swift-syntax": "master",
7373
"swift-stress-tester": "master",

utils/webassembly/build-foundation.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/bin/bash
2+
set -ex
3+
DESTINATION_TOOLCHAIN=$1
4+
SOURCE_PATH="$(cd "$(dirname $0)/../../.." && pwd)"
5+
6+
# Remove host CoreFoundation (which can be different from the target) headers
7+
# to avoid shadowing the wasm32 target CoreFoundation
8+
rm -rf $DESTINATION_TOOLCHAIN/usr/lib/swift/CoreFoundation
9+
10+
FOUNDATION_BUILD="$SOURCE_PATH/build/Ninja-ReleaseAssert/foundation-wasi-wasm32"
11+
12+
mkdir -p $FOUNDATION_BUILD
13+
cd $FOUNDATION_BUILD
14+
15+
cmake -G Ninja \
16+
-DCMAKE_Swift_COMPILER="$DESTINATION_TOOLCHAIN/usr/bin/swiftc" \
17+
-DCMAKE_STAGING_PREFIX="$DESTINATION_TOOLCHAIN/usr" \
18+
-DCMAKE_TOOLCHAIN_FILE="$SOURCE_PATH/swift/utils/webassembly/toolchain-wasi.cmake" \
19+
-DWASI_SDK_PATH="$SOURCE_PATH/wasi-sdk" \
20+
-DICU_ROOT="$SOURCE_PATH/icu_out" \
21+
-DBUILD_SHARED_LIBS=OFF \
22+
"${SOURCE_PATH}/swift-corelibs-foundation"
23+
24+
ninja -v
25+
ninja -v install
26+
27+
# On macOS the target CoreFoundation shadows the CoreFoundation suppplied by Xcode.
28+
# On Linux though there's no system CoreFoundation, its headers have to be shipped
29+
# in the installable archive and serve for both host and target.
30+
if [[ "$(uname)" == "Darwin" ]]; then
31+
mv $DESTINATION_TOOLCHAIN/usr/lib/swift/CoreFoundation \
32+
$DESTINATION_TOOLCHAIN/usr/lib/swift/wasi/wasm32/CoreFoundation
33+
fi

utils/webassembly/build-toolchain.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ BUNDLE_IDENTIFIER="swiftwasm.${YEAR}${MONTH}${DAY}"
3535
DISPLAY_NAME_SHORT="Swift for WebAssembly Development Snapshot"
3636
DISPLAY_NAME="${DISPLAY_NAME_SHORT} ${YEAR}-${MONTH}-${DAY}"
3737

38+
# Make sure Clang headers install dir exists to avoid broken symlinks
39+
mkdir -p $SOURCE_PATH/install/$TOOLCHAIN_NAME/usr/lib/clang/10.0.0
40+
3841
$SOURCE_PATH/swift/utils/build-script --preset=$PRESET_NAME \
3942
SOURCE_PATH="$SOURCE_PATH" \
4043
INSTALLABLE_PACKAGE="$INSTALLABLE_PACKAGE" \
@@ -77,5 +80,7 @@ else
7780
cp -r $NIGHTLY_TOOLCHAIN/usr/lib/swift/macosx $TMP_DIR/$TOOLCHAIN_NAME/usr/lib/swift
7881
fi
7982

83+
$UTILS_PATH/build-foundation.sh $TMP_DIR/$TOOLCHAIN_NAME
84+
8085
cd $TMP_DIR
8186
tar cfz $PACKAGE_ARTIFACT $TOOLCHAIN_NAME

utils/webassembly/install-wasi-sdk.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#/bin/bash
2+
3+
set -ex
4+
5+
SOURCE_PATH="$( cd "$(dirname $0)/../../../" && pwd )"
6+
7+
cd $SOURCE_PATH
8+
9+
WASI_SDK_URL="https://github.com/swiftwasm/wasi-sdk/releases/download/0.2.0-swiftwasm/dist-$2-latest.tgz.zip"
10+
11+
[ ! -e dist-wasi-sdk.tgz.zip ] && \
12+
wget -O dist-wasi-sdk.tgz.zip $WASI_SDK_URL
13+
unzip -u dist-wasi-sdk.tgz.zip -d .
14+
WASI_SDK_TAR_PATH=$(find . -type f -name "wasi-sdk-*")
15+
WASI_SDK_FULL_NAME=$(basename $WASI_SDK_TAR_PATH -$1.tar.gz)
16+
tar xfz $WASI_SDK_TAR_PATH
17+
rm -rf ./wasi-sdk
18+
mv $WASI_SDK_FULL_NAME ./wasi-sdk

utils/webassembly/linux/install-dependencies.sh

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,33 @@ cd $SWIFT_PATH
2020

2121
# Install wasmer
2222

23-
curl https://get.wasmer.io -sSfL | sh
23+
if [ ! -e ~/.wasmer/bin/wasmer ]; then
24+
curl https://get.wasmer.io -sSfL | sh
25+
fi
2426

2527
cd $SOURCE_PATH
2628

27-
wget -O install_cmake.sh "https://github.com/Kitware/CMake/releases/download/v3.17.1/cmake-3.17.1-Linux-x86_64.sh"
28-
chmod +x install_cmake.sh
29-
sudo mkdir -p /opt/cmake
30-
sudo ./install_cmake.sh --skip-license --prefix=/opt/cmake
31-
sudo ln -sf /opt/cmake/bin/* /usr/local/bin
29+
if [ -z $(which cmake) ]; then
30+
wget -O install_cmake.sh "https://github.com/Kitware/CMake/releases/download/v3.17.2/cmake-3.17.2-Linux-x86_64.sh"
31+
chmod +x install_cmake.sh
32+
sudo mkdir -p /opt/cmake
33+
sudo ./install_cmake.sh --skip-license --prefix=/opt/cmake
34+
sudo ln -sf /opt/cmake/bin/* /usr/local/bin
35+
fi
36+
3237
cmake --version
3338

34-
wget -O dist-wasi-sdk.tgz.zip "https://github.com/swiftwasm/wasi-sdk/releases/download/0.2.0-swiftwasm/dist-ubuntu-latest.tgz.zip"
35-
unzip dist-wasi-sdk.tgz.zip -d .
36-
WASI_SDK_TAR_PATH=$(find . -type f -name "wasi-sdk-*")
37-
WASI_SDK_FULL_NAME=$(basename $WASI_SDK_TAR_PATH -linux.tar.gz)
38-
tar xfz $WASI_SDK_TAR_PATH
39-
mv $WASI_SDK_FULL_NAME ./wasi-sdk
39+
$SWIFT_PATH/utils/webassembly/install-wasi-sdk.sh linux ubuntu
4040

4141
# Link wasm32-wasi-unknown to wasm32-wasi because clang finds crt1.o from sysroot
4242
# with os and environment name `getMultiarchTriple`.
4343
ln -s wasm32-wasi wasi-sdk/share/wasi-sysroot/lib/wasm32-wasi-unknown
4444

4545
# Install sccache
4646

47-
sudo mkdir /opt/sccache && cd /opt/sccache
48-
wget -O - "https://github.com/mozilla/sccache/releases/download/0.2.13/sccache-0.2.13-x86_64-unknown-linux-musl.tar.gz" | \
49-
sudo tar xz --strip-components 1
50-
sudo ln -sf /opt/sccache/sccache /usr/local/bin
47+
if [ -z $(which sccache) ]; then
48+
sudo mkdir /opt/sccache && cd /opt/sccache
49+
wget -O - "https://github.com/mozilla/sccache/releases/download/0.2.13/sccache-0.2.13-x86_64-unknown-linux-musl.tar.gz" | \
50+
sudo tar xz --strip-components 1
51+
sudo ln -sf /opt/sccache/sccache /usr/local/bin
52+
fi

utils/webassembly/macos/install-dependencies.sh

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,7 @@ cd $SWIFT_PATH
1313

1414
cd $SOURCE_PATH
1515

16-
WASI_SDK_URL="https://github.com/swiftwasm/wasi-sdk/releases/download/0.2.0-swiftwasm/dist-macos-latest.tgz.zip"
17-
18-
[ ! -e dist-wasi-sdk.tgz.zip ] && \
19-
wget -O dist-wasi-sdk.tgz.zip $WASI_SDK_URL
20-
unzip -u dist-wasi-sdk.tgz.zip -d .
21-
WASI_SDK_TAR_PATH=$(find . -type f -name "wasi-sdk-*")
22-
WASI_SDK_FULL_NAME=$(basename $WASI_SDK_TAR_PATH -macos.tar.gz)
23-
tar xfz $WASI_SDK_TAR_PATH
24-
rm -rf ./wasi-sdk
25-
mv $WASI_SDK_FULL_NAME ./wasi-sdk
16+
$SWIFT_PATH/utils/webassembly/install-wasi-sdk.sh macos macos
2617

2718
# Link sysroot/usr/include to sysroot/include because Darwin sysroot doesn't
2819
# find header files in sysroot/include but sysroot/usr/include

utils/webassembly/toolchain-wasi.cmake

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
1-
set(CMAKE_SYSTEM_NAME Generic)
1+
set(CMAKE_SYSTEM_NAME WASI)
22
set(CMAKE_SYSTEM_VERSION 1)
33
set(CMAKE_SYSTEM_PROCESSOR wasm32)
44
set(triple wasm32-unknown-wasi)
55

6-
set(WASI_SDK_PREFIX "${SWIFT_SOURCE_PREFIX}/wasi-sdk")
7-
8-
set(CMAKE_C_COMPILER ${WASI_SDK_PREFIX}/bin/clang)
9-
set(CMAKE_CXX_COMPILER ${WASI_SDK_PREFIX}/bin/clang++)
10-
set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar CACHE STRING "wasi-sdk build")
11-
set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib CACHE STRING "wasi-sdk build")
6+
set(CMAKE_C_COMPILER "${WASI_SDK_PATH}/bin/clang")
7+
set(CMAKE_CXX_COMPILER "${WASI_SDK_PATH}/bin/clang++")
8+
set(CMAKE_AR "${WASI_SDK_PATH}/bin/llvm-ar" CACHE STRING "wasi-sdk build")
9+
set(CMAKE_RANLIB "${WASI_SDK_PATH}/bin/llvm-ranlib" CACHE STRING "wasi-sdk build")
1210
set(CMAKE_C_COMPILER_TARGET ${triple} CACHE STRING "wasi-sdk build")
1311
set(CMAKE_CXX_COMPILER_TARGET ${triple} CACHE STRING "wasi-sdk build")
1412
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-threads" CACHE STRING "wasi-sdk build")
1513

16-
set(CMAKE_SYSROOT ${WASI_SDK_PREFIX}/share/wasi-sysroot CACHE STRING "wasi-sdk build")
17-
set(CMAKE_STAGING_PREFIX ${WASI_SDK_PREFIX}/share/wasi-sysroot CACHE STRING "wasi-sdk build")
14+
set(CMAKE_SYSROOT ${WASI_SDK_PATH}/share/wasi-sysroot CACHE STRING "wasi-sdk build")
1815

1916
# Don't look in the sysroot for executables to run during the build
2017
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

0 commit comments

Comments
 (0)