Skip to content

Commit 13127d1

Browse files
committed
Updating Helios to 0.1.3
1 parent 4637b24 commit 13127d1

File tree

10 files changed

+345
-153
lines changed

10 files changed

+345
-153
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
xcuserdata/
66
DerivedData/
77
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8+
Tests/HeliosKitTests/Config.swift

Build Scripts/0.1.0.sh

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
#! /bin/sh -e
2+
3+
set -e
4+
5+
HELIOS_VERSION=0.1.0
6+
ROOT_DIRECTORY=`pwd`
7+
BUILD_DIRECTORY="$ROOT_DIRECTORY/.build/helios-rs"
8+
HELIOS_DIRECTORY="$BUILD_DIRECTORY/helios"
9+
OPENSSL_DIRECTORY="$BUILD_DIRECTORY/openssl"
10+
11+
if [ -z $1 ]; then
12+
BUILD_MODE="release"
13+
echo "\033[0;36m▸ Building for release\033[0m"
14+
elif [ $1 = "debug" ]; then
15+
BUILD_MODE="debug"
16+
echo "\033[0;36m▸ Building for debug\033[0m"
17+
else
18+
BUILD_MODE="release"
19+
echo "\033[0;36m▸ Building for release\033[0m"
20+
fi
21+
22+
if [ ! -d "$BUILD_DIRECTORY" ]; then
23+
echo "\033[0;36m▸ Create build directory\033[0m"
24+
mkdir -p $BUILD_DIRECTORY
25+
fi
26+
27+
echo "\033[0;36m▸ Checkout rust-openssl\033[0m"
28+
if [ ! -d $OPENSSL_DIRECTORY ]; then
29+
git clone https://github.com/sfackler/rust-openssl $OPENSSL_DIRECTORY
30+
fi
31+
cd $OPENSSL_DIRECTORY
32+
git checkout -f b30313a9775ed861ce9456745952e3012e5602ea
33+
# For compatibility issues with iOS simulator
34+
sed -i '' 's/openssl-src = { version = "111", optional = true }/openssl-src = { version = "300", optional = true }/' "$OPENSSL_DIRECTORY/openssl-sys/Cargo.toml"
35+
36+
echo "\033[0;36m▸ Checkout helios version $HELIOS_VERSION\033[0m"
37+
if [ ! -d $HELIOS_DIRECTORY ]; then
38+
git clone https://github.com/a16z/helios $HELIOS_DIRECTORY
39+
fi
40+
cd $HELIOS_DIRECTORY
41+
git checkout -f tags/$HELIOS_VERSION
42+
43+
echo "\033[0;36m▸ Modify helios crate\033[0m"
44+
sed -i '' "s/^version = .*$/version = \"$HELIOS_VERSION\"/" "$HELIOS_DIRECTORY/Cargo.toml"
45+
sed -i '' '/^[[]patch.crates-io[]]/a\'$'\n'"openssl-sys = { path = \"$OPENSSL_DIRECTORY/openssl-sys\" }"$'\n' "$HELIOS_DIRECTORY/Cargo.toml"
46+
sed -i '' '/^[[]package[]]/a\'$'\n''build = "build.rs"'$'\n' "$HELIOS_DIRECTORY/Cargo.toml"
47+
sed -i '' 's/^[[]dependencies[]]/[build-dependencies]\nswift-bridge-build = "0.1"\n\n[dependencies]/' "$HELIOS_DIRECTORY/Cargo.toml"
48+
sed -i '' '/^[[]dependencies[]]/a\'$'\n''swift-bridge = { version = "0.1", features = ["async"] }'$'\n' "$HELIOS_DIRECTORY/Cargo.toml"
49+
sed -i '' '/^[[]dependencies[]]/a\'$'\n''env_logger = "0.9.0"'$'\n' "$HELIOS_DIRECTORY/Cargo.toml"
50+
echo "[lib]" >> "$HELIOS_DIRECTORY/Cargo.toml"
51+
echo "name = \"helios\"" >> "$HELIOS_DIRECTORY/Cargo.toml"
52+
echo "crate-type = [\"staticlib\"]" >> "$HELIOS_DIRECTORY/Cargo.toml"
53+
# Create build.rs
54+
echo 'dXNlIHN0ZDo6cGF0aDo6UGF0aEJ1ZjsKCmZuIG1haW4oKSB7CiAgbGV0IG91dF9kaXIgPSBQYXRoQnVmOjpmcm9tKCIuL2dlbmVyYXRlZCIpOwogIGxldCBicmlkZ2VzID0gdmVjIVsic3JjL2xpYi5ycyJdOwogIGZvciBwYXRoIGluICZicmlkZ2VzIHsKICAgIHByaW50bG4hKCJjYXJnbzpyZXJ1bi1pZi1jaGFuZ2VkPXt9IiwgcGF0aCk7CiAgfQogIHN3aWZ0X2JyaWRnZV9idWlsZDo6cGFyc2VfYnJpZGdlcyhicmlkZ2VzKQogICAgLndyaXRlX2FsbF9jb25jYXRlbmF0ZWQob3V0X2RpciwgZW52ISgiQ0FSR09fUEtHX05BTUUiKSk7Cn0K' | base64 --decode -o $HELIOS_DIRECTORY/build.rs
55+
# Create src/lib.rs
56+
echo 'dXNlIDo6Y2xpZW50Ojp7ZGF0YWJhc2U6OkZpbGVEQiwgQ2xpZW50LCBDbGllbnRCdWlsZGVyfTsKdXNlIDo6Y29uZmlnOjp7bmV0d29ya3N9OwoKI1tzd2lmdF9icmlkZ2U6OmJyaWRnZV0KbW9kIGZmaSB7CgogIGVudW0gSGVsaW9zTmV0d29yayB7CiAgICBNQUlOTkVULAogICAgR09FUkxJLAogIH0KCiAgI1tzd2lmdF9icmlkZ2Uoc3dpZnRfcmVwciA9ICJzdHJ1Y3QiKV0KICBzdHJ1Y3QgU3RhcnRVcFN0YXRlIHsKICAgIHN0YXJ0ZWQ6IGJvb2wsCiAgICBlcnJvcjogU3RyaW5nLAogIH0KCiAgZXh0ZXJuICJSdXN0IiB7CiAgICB0eXBlIEhlbGlvc0NsaWVudDsKCiAgICAjW3N3aWZ0X2JyaWRnZShpbml0KV0KICAgIGZuIG5ldygpIC0+IEhlbGlvc0NsaWVudDsKCiAgICBhc3luYyBmbiBzdGFydCgKICAgICAgJm11dCBzZWxmLCAKICAgICAgdW50cnVzdGVkX3JwY191cmw6IFN0cmluZywgCiAgICAgIGNvbnNlbnN1c19ycGNfdXJsOiBTdHJpbmcsCiAgICAgIGNoZWNrcG9pbnQ6IE9wdGlvbjxTdHJpbmc+LAogICAgICBycGNfcG9ydDogdTE2LAogICAgICBuZXR3b3JrOiBIZWxpb3NOZXR3b3JrCiAgICApIC0+IFN0YXJ0VXBTdGF0ZTsKCiAgICBhc3luYyBmbiBzaHV0ZG93bigmbXV0IHNlbGYpOwogIH0KfQoKaW1wbCBIZWxpb3NDbGllbnQgewoKICBwdWIgZm4gbmV3KCkgLT4gSGVsaW9zQ2xpZW50IHsKICAgIEhlbGlvc0NsaWVudCB7CiAgICAgIGNsaWVudDogTm9uZSwKICAgICAgaXNfbG9nZ2luZzogZmFsc2UsCiAgICB9CiAgfQoKICBhc3luYyBmbiBzdGFydCgKICAgICZtdXQgc2VsZiwKICAgIHVudHJ1c3RlZF9ycGNfdXJsOiBTdHJpbmcsCiAgICBjb25zZW5zdXNfcnBjX3VybDogU3RyaW5nLAogICAgY2hlY2twb2ludDogT3B0aW9uPFN0cmluZz4sCiAgICBycGNfcG9ydDogdTE2LAogICAgbmV0d29yazogZmZpOjpIZWxpb3NOZXR3b3JrLAogICkgLT4gZmZpOjpTdGFydFVwU3RhdGUgewogICAgaWYgbGV0IFNvbWUoX2NsaWVudCkgPSAmc2VsZi5jbGllbnQgewogICAgICByZXR1cm4gZmZpOjpTdGFydFVwU3RhdGUgewogICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLAogICAgICAgIGVycm9yOiAiQ2xpZW50IGhhcyBhbHJlYWR5IHN0YXJ0ZWQuIi50b19zdHJpbmcoKSwKICAgICAgfTsKICAgIH0KCiAgICBpZiAhc2VsZi5pc19sb2dnaW5nIHsKICAgICAgc2VsZi5pc19sb2dnaW5nID0gdHJ1ZTsKICAgICAgZW52X2xvZ2dlcjo6aW5pdCgpOwogICAgfQoKICAgIGxldCBtdXQgY2xpZW50X2J1aWxkZXIgPSBDbGllbnRCdWlsZGVyOjpuZXcoKQogICAgICAubmV0d29yayhuZXR3b3JrLnRvX2Jhc2VfbmV0d29yaygpKQogICAgICAuZXhlY3V0aW9uX3JwYygmdW50cnVzdGVkX3JwY191cmwpCiAgICAgIC5jb25zZW5zdXNfcnBjKCZjb25zZW5zdXNfcnBjX3VybCkKICAgICAgLnJwY19wb3J0KHJwY19wb3J0KTsKICAgIAogICAgaWYgbGV0IFNvbWUoY2hlY2twb2ludCkgPSAmY2hlY2twb2ludCB7CiAgICAgIGNsaWVudF9idWlsZGVyID0gY2xpZW50X2J1aWxkZXIuY2hlY2twb2ludCgmY2hlY2twb2ludCk7CiAgICB9CgogICAgbWF0Y2ggY2xpZW50X2J1aWxkZXIuYnVpbGQoKSB7CiAgICAgIEVycihlcnJvcikgPT4gcmV0dXJuIGZmaTo6U3RhcnRVcFN0YXRlIHsKICAgICAgICBzdGFydGVkOiBmYWxzZSwKICAgICAgICBlcnJvcjogZXJyb3IudG9fc3RyaW5nKCksCiAgICAgIH0sCiAgICAgIE9rKG11dCBjbGllbnQpID0+IHsKICAgICAgICBtYXRjaCBjbGllbnQuc3RhcnQoKS5hd2FpdCB7CiAgICAgICAgICBFcnIoZXJyb3IpID0+IHJldHVybiBmZmk6OlN0YXJ0VXBTdGF0ZSB7CiAgICAgICAgICAgIHN0YXJ0ZWQ6IGZhbHNlLAogICAgICAgICAgICBlcnJvcjogZXJyb3IudG9fc3RyaW5nKCksCiAgICAgICAgICB9LAogICAgICAgICAgT2soKCkpID0+IHsKICAgICAgICAgICAgc2VsZi5jbGllbnQgPSBTb21lKGNsaWVudCk7CiAgICAgICAgICAgIHJldHVybiBmZmk6OlN0YXJ0VXBTdGF0ZSB7CiAgICAgICAgICAgICAgc3RhcnRlZDogdHJ1ZSwKICAgICAgICAgICAgICBlcnJvcjogIiIudG9fc3RyaW5nKCksCiAgICAgICAgICAgIH07CiAgICAgICAgICB9LAogICAgICAgIH0KICAgICAgfSwKICAgIH0KICB9CgogIGFzeW5jIGZuIHNodXRkb3duKCZtdXQgc2VsZikgewogICAgaWYgbGV0IFNvbWUoY2xpZW50KSA9ICZzZWxmLmNsaWVudCB7CiAgICAgIGNsaWVudC5zaHV0ZG93bigpLmF3YWl0OwogICAgICBzZWxmLmNsaWVudCA9IE5vbmU7CiAgICB9CiAgfQp9CgppbXBsIGZmaTo6SGVsaW9zTmV0d29yayB7CgogIGZuIHRvX2Jhc2VfbmV0d29yaygmc2VsZikgLT4gbmV0d29ya3M6Ok5ldHdvcmsgewogICAgICBtYXRjaCBzZWxmIHsKICAgICAgICAgIFNlbGY6Ok1BSU5ORVQgPT4gbmV0d29ya3M6Ok5ldHdvcms6Ok1BSU5ORVQsCiAgICAgICAgICBTZWxmOjpHT0VSTEkgPT4gbmV0d29ya3M6Ok5ldHdvcms6OkdPRVJMSSwKICAgICAgfQogIH0KfQoKcHViIHN0cnVjdCBIZWxpb3NDbGllbnQgewogIGNsaWVudDogT3B0aW9uPENsaWVudDxGaWxlREI+PiwKICBpc19sb2dnaW5nOiBib29sLAp9Cg==' | base64 --decode -o $HELIOS_DIRECTORY/src/lib.rs
57+
58+
export SWIFT_BRIDGE_OUT_DIR="$HELIOS_DIRECTORY/generated"
59+
60+
echo "\033[0;36m▸ Update toolchain\033[0m"
61+
rustup update
62+
63+
echo "\033[0;36m▸ Install nightly toolchain\033[0m"
64+
rustup toolchain install nightly
65+
66+
echo "\033[0;36m▸ Install targets\033[0m"
67+
rustup target add --toolchain nightly aarch64-apple-ios
68+
rustup target add --toolchain nightly aarch64-apple-ios-sim
69+
rustup target add --toolchain nightly x86_64-apple-ios
70+
rustup target add --toolchain nightly aarch64-apple-darwin
71+
rustup target add --toolchain nightly x86_64-apple-darwin
72+
73+
echo "\033[0;36m▸ Install rustup components\033[0m"
74+
rustup component add rust-src --toolchain nightly-x86_64-apple-darwin
75+
76+
echo "\033[0;36m▸ Build aarch64-apple-ios\033[0m"
77+
cargo +nightly build --target aarch64-apple-ios $([[ $BUILD_MODE = "release" ]] && echo --release)
78+
79+
echo "\033[0;36m▸ Build aarch64-apple-ios-sim\033[0m"
80+
cargo +nightly build -Z build-std --target aarch64-apple-ios-sim $([[ $BUILD_MODE = "release" ]] && echo --release)
81+
82+
echo "\033[0;36m▸ Build x86_64-apple-ios\033[0m"
83+
cargo +nightly build --target x86_64-apple-ios $([[ $BUILD_MODE = "release" ]] && echo --release)
84+
85+
echo "\033[0;36m▸ Build aarch64-apple-darwin\033[0m"
86+
cargo +nightly build --target aarch64-apple-darwin $([[ $BUILD_MODE = "release" ]] && echo --release)
87+
88+
echo "\033[0;36m▸ Build x86_64-apple-darwin\033[0m"
89+
cargo +nightly build --target x86_64-apple-darwin $([[ $BUILD_MODE = "release" ]] && echo --release)
90+
91+
echo "\033[0;36m▸ Lipo simulator\033[0m"
92+
mkdir -p ./target/apple-ios-simulator/$BUILD_MODE
93+
lipo -create \
94+
./target/x86_64-apple-ios/$BUILD_MODE/libhelios.a \
95+
./target/aarch64-apple-ios-sim/$BUILD_MODE/libhelios.a \
96+
-output ./target/apple-ios-simulator/$BUILD_MODE/libhelios.a
97+
98+
echo "\033[0;36m▸ Lipo macOS\033[0m"
99+
mkdir -p ./target/apple-darwin/$BUILD_MODE
100+
lipo -create \
101+
./target/x86_64-apple-darwin/$BUILD_MODE/libhelios.a \
102+
./target/aarch64-apple-darwin/$BUILD_MODE/libhelios.a \
103+
-output ./target/apple-darwin/$BUILD_MODE/libhelios.a
104+
105+
echo "\033[0;36m▸ Generate C headers\033[0m"
106+
if [ -d $HELIOS_DIRECTORY/headers ]; then
107+
rm -rf $HELIOS_DIRECTORY/headers
108+
fi
109+
mkdir $HELIOS_DIRECTORY/headers
110+
cp $HELIOS_DIRECTORY/generated/SwiftBridgeCore.h $HELIOS_DIRECTORY/headers/SwiftBridgeCore.h
111+
cp $HELIOS_DIRECTORY/generated/helios/helios.h $HELIOS_DIRECTORY/headers/helios.h
112+
echo "bW9kdWxlIGhlbGlvcyB7CiAgICBoZWFkZXIgIlN3aWZ0QnJpZGdlQ29yZS5oIgogICAgaGVhZGVyICJoZWxpb3MuaCIKICAgIGV4cG9ydCAqCn0K" | base64 --decode -o $HELIOS_DIRECTORY/headers/module.modulemap
113+
114+
if [ -d "$BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE" ]; then
115+
echo "\033[0;36m▸ Delete old build artefacts\033[0m"
116+
rm -rf $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE
117+
fi
118+
119+
echo "\033[0;36m▸ Create helios.xcframework\033[0m"
120+
xcodebuild -create-xcframework \
121+
-library $HELIOS_DIRECTORY/target/apple-ios-simulator/$BUILD_MODE/libhelios.a \
122+
-headers $HELIOS_DIRECTORY/headers \
123+
-library $HELIOS_DIRECTORY/target/aarch64-apple-ios/$BUILD_MODE/libhelios.a \
124+
-headers $HELIOS_DIRECTORY/headers \
125+
-library $HELIOS_DIRECTORY/target/apple-darwin/$BUILD_MODE/libhelios.a \
126+
-headers $HELIOS_DIRECTORY/headers \
127+
-output $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/helios.xcframework
128+
129+
if [ $BUILD_MODE = "release" ]; then
130+
echo "\033[0;36m▸ Compress helios.xcframework\033[0m"
131+
ditto -c -k --sequesterRsrc --keepParent $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/helios.xcframework $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/helios.xcframework.zip
132+
133+
echo "\033[0;36m▸ Compute helios.xcframework checksum\033[0m"
134+
swift package compute-checksum $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/helios.xcframework.zip > $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/helios.xcframework.zip.checksum
135+
fi
136+
137+
echo "\033[0;36m▸ Copy Swift bridging files\033[0m"
138+
cp $HELIOS_DIRECTORY/generated/SwiftBridgeCore.swift $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/SwiftBridgeCore.swift
139+
sed -i '' '1i\'$'\n''import helios'$'\n' $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/SwiftBridgeCore.swift
140+
sed -i '' 's/public //' $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/SwiftBridgeCore.swift
141+
cp $HELIOS_DIRECTORY/generated/helios/helios.swift $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/helios.swift
142+
sed -i '' '1i\'$'\n''import helios'$'\n' $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/helios.swift
143+
sed -i '' 's/public //' $BUILD_DIRECTORY/build/$HELIOS_VERSION/$BUILD_MODE/helios.swift
144+
145+
echo "\033[0;32m▸ BUILD SUCCESSFUL!"
146+
echo ''
147+
echo "Built artefacts can be found at $BUILD_DIRECTORY/build/$HELIOS_VERSION\033[0m"

0 commit comments

Comments
 (0)