1#!/bin/sh
2set -e
3
4# function
5usage() {
6    echo "wasi-env - Run command with WASI-SDK"
7    echo ""
8    echo "wasi-env is a helper to set various environment variables to"
9    echo "run configure and make with WASI-SDK. A WASI-SDK must be either"
10    echo "installed at /opt/wasi-sdk or the env var 'WASI_SDK_PATH' must"
11    echo "set to the root of a WASI-SDK."
12    echo ""
13    echo "Usage: wasi-env command [...]"
14    echo ""
15    echo "    -h --help     display this help and exit"
16    echo ""
17}
18
19case $1 in
20    -h|--help)
21        usage
22        exit
23        ;;
24esac
25
26if test -z "$1"; then
27    echo "ERROR: command required" >&2
28    usage
29    exit 1
30fi
31
32WASI_SDK_PATH="${WASI_SDK_PATH:-/opt/wasi-sdk}"
33WASI_SYSROOT="${WASI_SDK_PATH}/share/wasi-sysroot"
34
35if ! test -x "${WASI_SDK_PATH}/bin/clang"; then
36    echo "Error: ${WASI_SDK_PATH}/bin/clang does not exist." >&2
37    exit 2
38fi
39
40CC="${WASI_SDK_PATH}/bin/clang"
41CPP="${WASI_SDK_PATH}/bin/clang-cpp"
42CXX="${WASI_SDK_PATH}/bin/clang++"
43
44# --sysroot is required if WASI-SDK is not installed in /opt/wasi-sdk.
45if test "${WASI_SDK_PATH}" != "/opt/wasi-sdk"; then
46    CC="${CC} --sysroot=${WASI_SYSROOT}"
47    CPP="${CPP} --sysroot=${WASI_SYSROOT}"
48    CXX="${CXX} --sysroot=${WASI_SYSROOT}"
49fi
50
51# use ccache if available
52if command -v ccache >/dev/null 2>&1; then
53    CC="ccache ${CC}"
54    CPP="ccache ${CPP}"
55    CXX="ccache ${CXX}"
56fi
57
58LDSHARED="${WASI_SDK_PATH}/bin/wasm-ld"
59AR="${WASI_SDK_PATH}/bin/llvm-ar"
60RANLIB="${WASI_SDK_PATH}/bin/ranlib"
61
62# instruct pkg-config to use sysroot
63PKG_CONFIG_PATH=""
64PKG_CONFIG_LIBDIR="${WASI_SYSROOT}/lib/pkgconfig:${WASI_SYSROOT}/share/pkgconfig"
65PKG_CONFIG_SYSROOT_DIR="${WASI_SYSROOT}"
66
67PATH="${WASI_SDK_PATH}/bin:${PATH}"
68
69export WASI_SDK_PATH WASI_SYSROOT
70export CC CPP CXX LDSHARED AR RANLIB
71export CFLAGS LDFLAGS
72export PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR
73export PATH
74
75# no exec, it makes arvg[0] path absolute.
76"$@"
77