#!/usr/bin/env bash # SPDX-License-Identifier: LGPL-3.0-or-later */ # Copyright (C) 2014 Stony Brook University # Copyright (C) 2019 Invisible Things Lab # Copyright (C) 2020 Intel Corporation # MichaƂ Kowalczyk # Wojtek Porczyk # This is how we detect whether we're installed or running from inside git repo. # If unchanged (i.e., if this reads IN_GIT between "at" characters), this is an # ordinary string and test -n "$IN_GIT" is true. But when installing, this is # rewritten using meson's configure_file() function to an empty string and the # else branch is taken. See also: ./meson.build and # https://mesonbuild.com/Reference-manual.html#configure_file. IN_GIT=@IN_GIT@ if test -n "$IN_GIT" then while : do case "$1" in "SGX") SGX=1 export SGX ;; "GDB") GDB=1 ;; *) break ;; esac shift done RUNTIME_DIR=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")") if [ -z "$PAL_HOST" ]; then if ! command -v make >/dev/null; then libpal="$RUNTIME_DIR/libpal-*.so" libpal="$(echo -n "$libpal")" libpal="${libpal//$RUNTIME_DIR\//}" if [ "$libpal" = 'libpal-*.so' ]; then echo "Unable to detect PAL_HOST. Please install the make program." exit 1 fi array=("$libpal") if [ ${#array[@]} -ne 1 ]; then echo "Multiple libpal detected ($libpal). Please explicitly set the environment variable PAL_HOST." exit 1 fi PAL_HOST="${libpal%.so}" PAL_HOST="${PAL_HOST#libpal-}" else PAL_HOST=$(make --no-print-directory --quiet -f "$RUNTIME_DIR/../Scripts/Makefile.configs" print_host 2>&1) fi fi PAL_CMD="$RUNTIME_DIR/pal-$PAL_HOST" LIBPAL_PATH=$(realpath "$RUNTIME_DIR/libpal-$PAL_HOST.so") HOST_PAL_PATH=$(realpath "$RUNTIME_DIR/../Pal/src/host/$PAL_HOST") else PAL_CMD=@PAL_CMD@ LIBPAL_PATH=@LIBPAL_PATH@ HOST_PAL_PATH=@HOST_PAL_PATH@ SGX=@SGX@ fi APPLICATION= ENVS=() PREFIX=() if [ "$GDB" == "1" ]; then PREFIX=("gdb" "-q") if [ -n "$INSIDE_EMACS" ]; then PREFIX+=("-i=mi") fi if [ 0"$SGX" -gt 0 ]; then PREFIX+=("-x" "$HOST_PAL_PATH/gdb_integration/graphene_sgx_gdb.py") ENVS+=("LD_PRELOAD=$HOST_PAL_PATH/gdb_integration/sgx_gdb.so:$LD_PRELOAD") else PREFIX+=("-x" "$HOST_PAL_PATH/gdb_integration/graphene_linux_gdb.py") fi if [ "$GDB_SCRIPT" != "" ]; then # Run a script in batch mode, and without TTY (so that it can be piped, redirected etc.) PREFIX+=("-x" "$GDB_SCRIPT" "-batch" "-tty=/dev/null") fi PREFIX+=("--args") fi if [ "$PERF" == "1" ]; then PREFIX=(perf stat) fi while [ "$1" != "" ]; do if [ "$APPLICATION" == "" ]; then APPLICATION=$1 shift continue fi break done if [ "$APPLICATION" == "" ]; then echo "Usage: $0 [] ..." exit 2 fi if [ "$SGX" == "1" ] && [ ! -e "$APPLICATION.manifest.sgx" ]; then echo "Invalid application path specified ($APPLICATION.manifest.sgx does not exist)." >&2 echo "The path should point to application configuration files, so that they can be" >&2 echo "found after appending corresponding extensions." >&2 exit 2 fi if [ ! "$SGX" == "1" ] && [ ! -e "$APPLICATION.manifest" ]; then echo "Invalid application path specified ($APPLICATION.manifest does not exist)." >&2 echo "The path should point to application configuration files, so that they can be" >&2 echo "found after appending corresponding extensions." >&2 exit 2 fi if [ ! -f "$PAL_CMD" ]; then echo "$PAL_CMD not found" exit 1 fi CMD=("${ENVS[@]}") CMD+=("${PREFIX[@]}") CMD+=("$PAL_CMD" "$LIBPAL_PATH" init "$APPLICATION" "$@") exec env "${CMD[@]}"