aboutsummaryrefslogtreecommitdiff
path: root/infra/chat/build-openssl-wasi.sh
blob: 7cdd9b6368f6b5f4bf1bfef16ba00b5d3dfbe93c (plain)
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
#!/bin/sh
# Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

set -eu
ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)"
SOURCE="$ROOT/.tools/wasi-source"
SDK="$SOURCE/wasi-sdk-34.0-x86_64-linux"
PREFIX="$ROOT/.tools/openssl-wasi"
mkdir -p "$SOURCE"

fetch() {
    file="$1"
    digest="$2"
    url="$3"
    if ! test -f "$file"; then
        curl --fail --location --retry 2 "$url" --output "$file.download"
        printf '%s  %s\n' "$digest" "$file.download" | sha256sum --check --status
        mv "$file.download" "$file"
    fi
    printf '%s  %s\n' "$digest" "$file" | sha256sum --check
}

fetch "$SOURCE/sdk.tar.gz" b761e3a0721dbae9c09a0059e5fdb2bf917d1b4a8a7b430fb3b5aafb0984b2c4 https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-34/wasi-sdk-34.0-x86_64-linux.tar.gz
fetch "$SOURCE/openssl.tar.gz" a2157c2830efdec3788939b00c9b0638306d3f0bbb76dc4832ee503bb397df98 https://github.com/openssl/openssl/releases/download/openssl-3.6.5/openssl-3.6.5.tar.gz
if ! test -x "$SDK/bin/clang"; then tar -xzf "$SOURCE/sdk.tar.gz" -C "$SOURCE"; fi
if ! test -f "$SOURCE/openssl-3.6.5/Configure"; then tar -xzf "$SOURCE/openssl.tar.gz" -C "$SOURCE"; fi
cp "$ROOT/infra/chat/openssl-wasi.conf" "$SOURCE/openssl-3.6.5/Configurations/99-stack-wasi.conf"
cd "$SOURCE/openssl-3.6.5"
env CC="$SDK/bin/clang" AR="$SDK/bin/llvm-ar" RANLIB="$SDK/bin/llvm-ranlib"     CFLAGS='-O2 -D_WASI_EMULATED_GETPID -Dgetuid=getpagesize -Dgeteuid=getpagesize -Dgetgid=getpagesize -Dgetegid=getpagesize'     LDFLAGS='-lwasi-emulated-getpid'     ./Configure stack-wasi --prefix="$PREFIX" --libdir=lib --with-rand-seed=getrandom     no-asm no-async no-autoload-config no-dso no-module no-posix-io no-secure-memory     no-shared no-sock no-stdio no-thread-pool no-threads no-ui-console
make -j"${CHAT_BUILD_JOBS:-8}" build_libs
make install_dev
cd "$ROOT"
rustup target add wasm32-wasip1
RUST_LIB="$(rustc --print target-libdir --target wasm32-wasip1)/self-contained"
env LIBCLANG_PATH="$SDK/lib" OPENSSL_DIR="$PREFIX" OPENSSL_STATIC=1     CC_wasm32_wasip1="$SDK/bin/clang" AR_wasm32_wasip1="$SDK/bin/llvm-ar"     BINDGEN_EXTRA_CLANG_ARGS_wasm32_wasip1="--sysroot=$SDK/share/wasi-sysroot --target=wasm32-wasip1 -fvisibility=default"     RUSTFLAGS="-Lnative=$RUST_LIB -Lnative=$SDK/share/wasi-sysroot/lib/wasm32-wasip1 -Clink-arg=-lwasi-emulated-getpid"     cargo build --locked --release -p stack-chat-crypto --bin stack-chat-crypto --target wasm32-wasip1
sha256sum target/wasm32-wasip1/release/stack-chat-crypto.wasm