mirror of
https://github.com/clearlinux/graphene.git
synced 2026-08-19 04:07:39 +00:00
09c6307631
- Extract parts that are common for all hosts - Remove some outdated/unnecessary options, we should now be closer to default configuration - Disable libthread_db loading (does not work and crashes GDB 9.2) - Disable pagination when loading debug maps
135 lines
3.9 KiB
Bash
Executable File
135 lines
3.9 KiB
Bash
Executable File
#!/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 <mkow@invisiblethingslab.com>
|
|
# Wojtek Porczyk <woju@invisiblethingslab.com>
|
|
|
|
|
|
# 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 [<application>] <args>..."
|
|
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[@]}"
|