-
-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathbootstrap.sh
executable file
·71 lines (62 loc) · 2.83 KB
/
bootstrap.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
# Bootstrap Swift environment for Playground
function program_is_installed {
# set to 1 initially
local return_=1
# set to 0 if not found
type $1 >/dev/null 2>&1 || { local return_=0; }
# return value
echo "$return_"
}
function install_toolchain {
SWIFT_VERSION=$1
BRANCH=$2
RELEASE=$3
SWIFT_TARGET=$4
LINUX_DISTRO=$5
if [ ! -d "Toolchains/swift-$SWIFT_VERSION-$RELEASE.xctoolchain" ]; then
case "$SWIFT_TARGET" in
*osx)
mkdir -p Toolchains/swift-$SWIFT_VERSION-$RELEASE.xctoolchain
# download
curl -LO https://swift.org/builds/swift-$SWIFT_VERSION-$BRANCH/xcode/swift-$SWIFT_VERSION-$RELEASE/swift-$SWIFT_VERSION-$RELEASE-$SWIFT_TARGET.pkg
# extract
xar -xf swift-$SWIFT_VERSION-$RELEASE-$SWIFT_TARGET.pkg -C Toolchains/
tar -xzf Toolchains/swift-$SWIFT_VERSION-$RELEASE-$SWIFT_TARGET-package.pkg/Payload -C Toolchains/swift-$SWIFT_VERSION-$RELEASE.xctoolchain
# cleanup
rm Toolchains/Distribution
rm -r Toolchains/swift-$SWIFT_VERSION-$RELEASE-$SWIFT_TARGET-package.pkg
rm -r swift-$SWIFT_VERSION-$RELEASE-$SWIFT_TARGET.pkg
;;
ubuntu*)
# select toolchain binary based on cpu architecture
if [[ $(arch) = aarch* ]]; then ARCH=-$(arch); fi
mkdir -p Toolchains/swift-$SWIFT_VERSION-$RELEASE.xctoolchain
# download
curl -LO https://download.swift.org/swift-$SWIFT_VERSION-$BRANCH/$LINUX_DISTRO$ARCH/swift-$SWIFT_VERSION-$RELEASE/swift-$SWIFT_VERSION-$RELEASE-$SWIFT_TARGET$ARCH.tar.gz
# extract
tar -xvzf swift-$SWIFT_VERSION-$RELEASE-$SWIFT_TARGET$ARCH.tar.gz -C Toolchains/swift-$SWIFT_VERSION-$RELEASE.xctoolchain --strip-components=1
# # cleanup
rm -rf swift-$SWIFT_VERSION-$RELEASE-$SWIFT_TARGET$ARCH.tar.gz
;;
esac
fi
}
function build_onlineplayground {
RELEASE=$2
SWIFT_VERSION="$1-$RELEASE"
ONLINE_PLAYGROUND_DIR="OnlinePlayground/OnlinePlayground-$SWIFT_VERSION"
Toolchains/swift-$SWIFT_VERSION.xctoolchain/usr/bin/swift build --package-path $ONLINE_PLAYGROUND_DIR --static-swift-stdlib --scratch-path $ONLINE_PLAYGROUND_DIR/.build -c release
Toolchains/swift-$SWIFT_VERSION.xctoolchain/usr/bin/swift build --package-path $ONLINE_PLAYGROUND_DIR --static-swift-stdlib --scratch-path $ONLINE_PLAYGROUND_DIR/.build -c debug -Xswiftc -DDEBUG -Xswiftc -Xfrontend -Xswiftc -validate-tbd-against-ir=none
}
npm install -y
npx webpack
if [ $(program_is_installed xcrun) == 1 ]; then
# Install Toolchains
install_toolchain "5.7" "release" "RELEASE" "osx"
else
# Install Toolchains
install_toolchain "5.7" "release" "RELEASE" "ubuntu22.04" "ubuntu2204"
fi
# Build OnlinePlayground
build_onlineplayground "5.7" "RELEASE"