• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
58AR="${WASI_SDK_PATH}/bin/llvm-ar"
59RANLIB="${WASI_SDK_PATH}/bin/ranlib"
60
61# instruct pkg-config to use sysroot
62PKG_CONFIG_PATH=""
63PKG_CONFIG_LIBDIR="${WASI_SYSROOT}/lib/pkgconfig:${WASI_SYSROOT}/share/pkgconfig"
64PKG_CONFIG_SYSROOT_DIR="${WASI_SYSROOT}"
65
66PATH="${WASI_SDK_PATH}/bin:${PATH}"
67
68export WASI_SDK_PATH WASI_SYSROOT
69export CC CPP CXX LDSHARED AR RANLIB
70export CFLAGS LDFLAGS
71export PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PKG_CONFIG_SYSROOT_DIR
72export PATH
73
74# no exec, it makes arvg[0] path absolute.
75"$@"
76