177955fb5SAndrew Jones#!/usr/bin/env bash 277955fb5SAndrew Jones 377955fb5SAndrew Jonesif [ -z "$KUT_STANDALONE" ]; then 477955fb5SAndrew Jones if [ ! -f config.mak ]; then 577955fb5SAndrew Jones echo "run ./configure && make first. See ./configure -h" 677955fb5SAndrew Jones exit 2 777955fb5SAndrew Jones fi 877955fb5SAndrew Jones source config.mak 977955fb5SAndrew Jones source scripts/arch-run.bash 10db9c4e1cSAlexandru Elisei source scripts/vmm.bash 1177955fb5SAndrew Jonesfi 1277955fb5SAndrew Jones 13*734fe135SAndrew Jonesvmm_check_supported 14*734fe135SAndrew Jones 15*734fe135SAndrew Jonesfunction arch_run_qemu() 16*734fe135SAndrew Jones{ 1777955fb5SAndrew Jones # Allow user overrides of some config.mak variables 18bc315beaSAndrew Jones mach=$MACHINE_OVERRIDE 195f77b72dSJean-Philippe Brucker qemu_cpu=$TARGET_CPU_OVERRIDE 2077955fb5SAndrew Jones firmware=$FIRMWARE_OVERRIDE 2177955fb5SAndrew Jones 22bc315beaSAndrew Jones : "${mach:=virt}" 235f77b72dSJean-Philippe Brucker : "${qemu_cpu:=$TARGET_CPU}" 245f77b72dSJean-Philippe Brucker : "${qemu_cpu:=$DEFAULT_QEMU_CPU}" 2577955fb5SAndrew Jones : "${firmware:=$FIRMWARE}" 2677955fb5SAndrew Jones [ "$firmware" ] && firmware="-bios $firmware" 2777955fb5SAndrew Jones 2877955fb5SAndrew Jones set_qemu_accelerator || exit $? 2977955fb5SAndrew Jones [ "$ACCEL" = "kvm" ] && QEMU_ARCH=$HOST 3077955fb5SAndrew Jones acc="-accel $ACCEL$ACCEL_PROPS" 3177955fb5SAndrew Jones 3277955fb5SAndrew Jones qemu=$(search_qemu_binary) || exit $? 33bc315beaSAndrew Jones if [ "$mach" = 'virt' ] && ! $qemu -machine '?' | grep -q 'RISC-V VirtIO board'; then 3477955fb5SAndrew Jones echo "$qemu doesn't support mach-virt ('-machine virt'). Exiting." 3577955fb5SAndrew Jones exit 2 3677955fb5SAndrew Jones fi 37bc315beaSAndrew Jones mach="-machine $mach" 3877955fb5SAndrew Jones 3977955fb5SAndrew Jones command="$qemu -nodefaults -nographic -serial mon:stdio" 405f77b72dSJean-Philippe Brucker command+=" $mach $acc $firmware -cpu $qemu_cpu " 4177955fb5SAndrew Jones command="$(migration_cmd) $(timeout_cmd) $command" 4277955fb5SAndrew Jones 43a755990cSAndrew Jones if [ "$UEFI_SHELL_RUN" = "y" ]; then 44db9c4e1cSAlexandru Elisei ENVIRON_DEFAULT=n run_test_status $command "$@" 4577955fb5SAndrew Jones else 4677955fb5SAndrew Jones # We return the exit code via stdout, not via the QEMU return code 47db9c4e1cSAlexandru Elisei run_test_status $command -kernel "$@" 4877955fb5SAndrew Jones fi 49*734fe135SAndrew Jones} 50*734fe135SAndrew Jones 51*734fe135SAndrew Jonesfunction arch_run_kvmtool() 52*734fe135SAndrew Jones{ 53*734fe135SAndrew Jones local command 54*734fe135SAndrew Jones 55*734fe135SAndrew Jones if [ "$HOST" != "riscv32" ] && [ "$HOST" != "riscv64" ]; then 56*734fe135SAndrew Jones echo "kvmtool requires KVM but the host ('$HOST') is not riscv" >&2 57*734fe135SAndrew Jones exit 2 58*734fe135SAndrew Jones fi 59*734fe135SAndrew Jones 60*734fe135SAndrew Jones kvmtool=$(search_kvmtool_binary) || 61*734fe135SAndrew Jones exit $? 62*734fe135SAndrew Jones 63*734fe135SAndrew Jones if [ "$ACCEL" ] && [ "$ACCEL" != "kvm" ]; then 64*734fe135SAndrew Jones echo "kvmtool does not support $ACCEL" >&2 65*734fe135SAndrew Jones exit 2 66*734fe135SAndrew Jones fi 67*734fe135SAndrew Jones 68*734fe135SAndrew Jones if ! kvm_available; then 69*734fe135SAndrew Jones echo "kvmtool requires KVM but not available on the host" >&2 70*734fe135SAndrew Jones exit 2 71*734fe135SAndrew Jones fi 72*734fe135SAndrew Jones 73*734fe135SAndrew Jones command="$(timeout_cmd) $kvmtool run" 74*734fe135SAndrew Jones if ( [ "$HOST" = "riscv64" ] && [ "$ARCH" = "riscv32" ] ) || 75*734fe135SAndrew Jones ( [ "$HOST" = "riscv32" ] && [ "$ARCH" = "riscv64" ] ); then 76*734fe135SAndrew Jones echo "Cannot run guests with a different xlen than the host" >&2 77*734fe135SAndrew Jones exit 2 78*734fe135SAndrew Jones else 79*734fe135SAndrew Jones run_test_status $command --kernel "$@" 80*734fe135SAndrew Jones fi 81*734fe135SAndrew Jones} 82*734fe135SAndrew Jones 83*734fe135SAndrew Jonescase $(vmm_get_target) in 84*734fe135SAndrew Jonesqemu) 85*734fe135SAndrew Jones arch_run_qemu "$@" 86*734fe135SAndrew Jones ;; 87*734fe135SAndrew Joneskvmtool) 88*734fe135SAndrew Jones arch_run_kvmtool "$@" 89*734fe135SAndrew Jones ;; 90*734fe135SAndrew Jonesesac 91