#!/usr/bin/env bash

L4IMAGE="${OBJ_BASE}/source/tool/bin/l4image"
MAKECONF="${OBJ_BASE}/source/tool/bin/makeconf"

# Sets MAKECONF_ARCH
if [[ -z "${ARCH}" || -z "${CPU}" ]]; then
    . <("$MAKECONF" "$OBJ_BASE" ARCH CPU)
    ARCH=${MAKECONF_ARCH}
    CPU=${MAKECONF_CPU}
fi

L4_SYSTEM="${ARCH}_${CPU}"

if [[ ( "${ARCH}" == "amd64" || "${ARCH}" == "x86" ) && -z "${QEMU_IMAGE_TYPE}" ]] ; then

    # Trigger rebuild on binary "bootstrap" if necessary
    BOOTSTRAP_BIN="${OBJ_BASE}/bin/${L4_SYSTEM}/plain/bootstrap"
    "$(dirname $0)/_platform_rebuild.pl" "$BOOTSTRAP_BIN" || exit 1

    source <("$MAKECONF" "$OBJ_BASE" QEMU_PATH QEMU_OPTIONS MODULE_SEARCH_PATH BUILDDIR_SEARCHPATH)
    export QEMU="$MAKECONF_QEMU_PATH"
    export QEMU_OPTIONS="$MAKECONF_QEMU_OPTIONS"
    export SEARCHPATH="${MODULE_SEARCH_PATH}:${SEARCHPATH}:${MAKECONF_MODULE_SEARCH_PATH}:${MAKECONF_BUILDDIR_SEARCHPATH}"
    export L4DIR="$(realpath "${OBJ_BASE}/source")"

    exec "${L4DIR}/tool/bin/qemu-x86-launch" "${MODULES_LIST}" "${ENTRY:-${E}}"
fi

if [[ -z "$TARGET_IMAGE" ]]; then
    export TARGET_IMAGE="$(mktemp --tmpdir "l4re-qemu-XXXXXXXXXX.elf")"
    trap 'rm $TARGET_IMAGE' EXIT
fi

"$(dirname $0)"/"${QEMU_IMAGE_TYPE:-elfimage}" || exit $?

$L4IMAGE --verbose -i "$TARGET_IMAGE" launch; exit $?
