| #!/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 |