blob: 7bcf235fb6454bce582eda7a4b3b3336883de23b [file] [log] [blame] [edit]
#!/usr/bin/env bash
if [ -z "$KUT_STANDALONE" ]; then
if [ ! -f config.mak ]; then
echo "run ./configure && make first. See ./configure -h"
exit 2
fi
source config.mak
source scripts/arch-run.bash
source scripts/vmm.bash
fi
vmm_check_supported
function arch_run_qemu()
{
# Allow user overrides of some config.mak variables
mach=$MACHINE_OVERRIDE
qemu_cpu=$TARGET_CPU_OVERRIDE
firmware=$FIRMWARE_OVERRIDE
: "${mach:=virt}"
: "${qemu_cpu:=$TARGET_CPU}"
: "${qemu_cpu:=$DEFAULT_QEMU_CPU}"
: "${firmware:=$FIRMWARE}"
[ "$firmware" ] && firmware="-bios $firmware"
set_qemu_accelerator || exit $?
[ "$ACCEL" = "kvm" ] && QEMU_ARCH=$HOST
acc="-accel $ACCEL$ACCEL_PROPS"
qemu=$(search_qemu_binary) || exit $?
if [ "$mach" = 'virt' ] && ! $qemu -machine '?' | grep -q 'RISC-V VirtIO board'; then
echo "$qemu doesn't support mach-virt ('-machine virt'). Exiting."
exit 2
fi
mach="-machine $mach"
command="$qemu -nodefaults -nographic -serial mon:stdio"
command+=" $mach $acc $firmware -cpu $qemu_cpu "
command="$(migration_cmd) $(timeout_cmd) $command"
if [ "$UEFI_SHELL_RUN" = "y" ]; then
ENVIRON_DEFAULT=n run_test_status $command "$@"
else
# We return the exit code via stdout, not via the QEMU return code
run_test_status $command -kernel "$@"
fi
}
function arch_run_kvmtool()
{
local command
if [ "$HOST" != "riscv32" ] && [ "$HOST" != "riscv64" ]; then
echo "kvmtool requires KVM but the host ('$HOST') is not riscv" >&2
exit 2
fi
kvmtool=$(search_kvmtool_binary) ||
exit $?
if [ "$ACCEL" ] && [ "$ACCEL" != "kvm" ]; then
echo "kvmtool does not support $ACCEL" >&2
exit 2
fi
if ! kvm_available; then
echo "kvmtool requires KVM but not available on the host" >&2
exit 2
fi
command="$(timeout_cmd) $kvmtool run"
if ( [ "$HOST" = "riscv64" ] && [ "$ARCH" = "riscv32" ] ) ||
( [ "$HOST" = "riscv32" ] && [ "$ARCH" = "riscv64" ] ); then
echo "Cannot run guests with a different xlen than the host" >&2
exit 2
else
run_test_status $command --kernel "$@"
fi
}
case $(vmm_get_target) in
qemu)
arch_run_qemu "$@"
;;
kvmtool)
arch_run_kvmtool "$@"
;;
esac