mirror of
https://github.com/clearlinux/graphene.git
synced 2026-09-05 21:31:36 +00:00
Meson is still optional and not needed to build or run anything. It is needed only to install Graphene in distro. Currently only a small subset of what is actually needed is installed: - graphene and graphene-sgx (for now those are slightly massaged copies of pal_loader), - libpal.so and sgx loader, - gdb scripts. Notably manifests should still point trusted_libs to Runtime/ dir in repo.
121 lines
3.3 KiB
Bash
Executable File
121 lines
3.3 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
|
|
|
|
MANIFEST=
|
|
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_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 [ "$MANIFEST" == "" ]; then
|
|
MANIFEST=$1
|
|
shift
|
|
continue
|
|
fi
|
|
|
|
break
|
|
done
|
|
|
|
if [ "$MANIFEST" == "" ]; then
|
|
echo "Usage: $0 [<executable_path>|<manifest_path>] <args>..."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$PAL_CMD" ]; then
|
|
echo "$PAL_CMD not found"
|
|
exit 1
|
|
fi
|
|
|
|
CMD=("${ENVS[@]}")
|
|
CMD+=("${PREFIX[@]}")
|
|
CMD+=("$PAL_CMD" "$LIBPAL_PATH" init "$MANIFEST" "$@")
|
|
exec env "${CMD[@]}"
|