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