#!/bin/bash

print_usage() {
  echo "Usage: $(basename $0) --arch [arm|arm64] [options]"
  echo -e "Starts QEMU system mode emulation for the architecture.\n"
  echo -e "  --help\t\t\tDisplay this information."
  echo -e "  --arch {arm|arm64}\t\tSelects architecture QEMU system emulation."
  echo -e "  --sve\t\t\t\tEnables AArch64 SVE mode."
  echo -e "  --mte\t\t\t\tEnables AArch64 MTE mode.\n"
  echo -e "  --rootfs {path}\t\tPath of root file system image."
  echo -e "  --qemu {path}\t\t\tPath of pre-installed qemu-system-* executable."
  echo -e "  --kernel {path}\t\tPath of Linux kernel prebuilt image.\n"
  echo -e "By default this utility will use:"
  echo -e "  QEMU image built from source in qemu.git directory"
  echo -e "  Linux kernel image from linux.build/(arm or arm64) directory."
  echo -e "Custom Linux kernel image or QEMU binary can be provided using commandline."
  exit "$1"
}

invalid_arg() {
  echo "ERROR: Unrecognized argument: $1" >&2
  print_usage 1
}

run_qemu() {
  QEMU_CORES=2
  QEMU_MEMORY=1024

  $QEMU_BIN \
  -cpu $QEMU_CPU \
  -m $QEMU_MEMORY \
  -smp $QEMU_CORES \
  -kernel $KERNEL_IMG \
  -machine $QEMU_MACHINE \
  -drive file=$ROOTFS_IMG,if=none,format=raw,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
  -append "root=/dev/vda rw ip=dhcp mem=1024M raid=noautodetect  \
  crashkernel=128M rootwait console=ttyAMA0 devtmpfs.mount=0" \
  -netdev type=tap,id=net0 \
  -device virtio-net-device,netdev=net0 \
  -nographic
}

# Parse options
while [[ $# -gt 0 ]]; do
  case "${END_OF_OPT}${1}" in
    --arch)     ARCH=$2; shift;;
    --rootfs)   ROOTFS_IMG=$2; shift;;
    --kernel)   KERNEL_IMG=$2; shift;;
    --qemu)     QEMU_BIN=$2; shift;;
    --sve)      SVE=1;;
    --mte)      MTE=1;;
    --help)     print_usage 0 ;;
    *)          invalid_arg "$1" ;;
  esac
  shift
done

if [ "$ARCH" == "arm64" ] && [ "$ARCH" == "arm" ]; then
  echo "Invalid architecture: $ARCH"
  print_usage 1
fi

if [[ ! -f "$ROOTFS_IMG" ]]; then
  echo "No root file system image image available for emulation."
  exit
fi

if [[ ! -f "$KERNEL_IMG" ]]; then
  KERNEL_IMG_PATH=$(pwd)/linux.build/"$ARCH"/arch/"$ARCH"/boot/

  if [[ ! -d "$KERNEL_IMG_PATH" ]]; then
    echo "No Linux kernel image available for emulation."
    exit
  fi

  if [[ "$ARCH" == "arm" ]]; then
    KERNEL_IMG=$KERNEL_IMG_PATH/zImage
  elif [[ "$ARCH" == "arm64" ]]; then
    KERNEL_IMG=$KERNEL_IMG_PATH/Image
  fi
fi

if [[ ! -f "$QEMU_BIN" ]]; then
  if [[ "$ARCH" == "arm" ]]; then
    QEMU_BIN=$(pwd)/qemu.git/arm-softmmu/qemu-system-arm
  elif [[ "$ARCH" == "arm64" ]]; then
    QEMU_BIN=$(pwd)/qemu.git/aarch64-softmmu/qemu-system-aarch64
  fi

  if [[ ! -f "$QEMU_BIN" ]]; then
    echo "QEMU $ARCH system emulation executable not found."
    exit
  fi
fi

if [[ "$ARCH" == "arm" ]]; then
  QEMU_MACHINE="virt,highmem=off"
  QEMU_CPU="cortex-a15"

  if [[ $SVE ]]; then
    echo "warning: --sve is supported by AArch64 targets only"
  fi
  if [[ $MTE ]]; then
    echo "warning: --mte is supported by AArch64 targets only"
  fi
elif [[ "$ARCH" == "arm64" ]]; then
  QEMU_MACHINE=virt
  QEMU_SVE_MAX_VQ=4
  QEMU_CPU="cortex-a53"

  if [[ $SVE ]]; then
    QEMU_CPU="max,sve-max-vq=$QEMU_SVE_MAX_VQ"
  fi
  if [[ $MTE ]]; then
    QEMU_MACHINE="$QEMU_MACHINE,mte=on"
  fi
fi

run_qemu
