#!/usr/bin/env bash
# -*- mode: sh -*-

function show_help() {
    cat <<EOF
Usage: intel_stub_gpu [OPTION]... [--] COMMAND ARGUMENTS

Run COMMAND with ARGUMENTS faking a particular device.

  -g, --gdb           Launch GDB

  -p, --platform=NAME Override PCI ID using a platform name

      --help          Display this help message and exit

EOF

    exit 0
}

gdb=
valgrind=
platform="skl"

while true; do
    case "$1" in
        --gdb)
            gdb=1
            shift
            ;;
        -g)
            gdb=1
            shift
            ;;
        --valgrind)
            valgrind=1
            shift
            ;;
        -p)
            platform=$2
            shift 2
            ;;
        -p*)
            platform=${1##-p}
            shift
            ;;
        --platform=*)
            platform=${1##--platform=}
            shift
            ;;
        --help)
            show_help
            ;;
        --)
            shift
            break
            ;;
        -*)
            echo "intel_stub_gpu: invalid option: $1"
            echo
            show_help
            ;;
        *)
            break
            ;;
    esac
done

[ -z $1 ] && show_help

INTEL_STUB_GPU_PLATFORM=$platform

drm_shim_dir="/usr/lib64"

if [ -n "$MESON_DEVENV" ]; then
    drm_shim_dir=$(realpath "$(dirname "$0")")
fi

ld_preload="$drm_shim_dir/libintel_noop_drm_shim.so${LD_PRELOAD:+:$LD_PRELOAD}"
if [ -n "$gdb" ]; then
    gdb -iex "set exec-wrapper env LD_PRELOAD=$ld_preload INTEL_STUB_GPU_PLATFORM=$platform" --args "$@"
elif [ -n "$valgrind" ]; then
    LD_PRELOAD=$ld_preload INTEL_STUB_GPU_PLATFORM=$platform exec valgrind "$@"
else
    LD_PRELOAD=$ld_preload INTEL_STUB_GPU_PLATFORM=$platform exec "$@"
fi
