mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-26 09:30:24 +00:00
Meta: Detect nested KVM support for WSL2 and use that when available
This allows running QEMU inside WSL2 for hosts which have nested KVM and WSLg support (e.g. Windows 11). Running QEMU inside the WSL2 VM is slightly slower than running QEMU on Windows, probably because of how WSLg handles screen updates.
This commit is contained in:
parent
723c89af67
commit
d9d2287a11
Notes:
sideshowbarker
2024-07-18 07:28:59 +09:00
Author: https://github.com/gunnarbeutner Commit: https://github.com/SerenityOS/serenity/commit/d9d2287a11f Pull-request: https://github.com/SerenityOS/serenity/pull/9199
1 changed files with 19 additions and 8 deletions
27
Meta/run.sh
27
Meta/run.sh
|
@ -10,7 +10,8 @@ die() {
|
||||||
|
|
||||||
#SERENITY_PACKET_LOGGING_ARG="-object filter-dump,id=hue,netdev=breh,file=e1000.pcap"
|
#SERENITY_PACKET_LOGGING_ARG="-object filter-dump,id=hue,netdev=breh,file=e1000.pcap"
|
||||||
|
|
||||||
[ -e /dev/kvm ] && [ -r /dev/kvm ] && [ -w /dev/kvm ] && SERENITY_VIRT_TECH_ARG="-enable-kvm"
|
KVM_SUPPORT="0"
|
||||||
|
[ -e /dev/kvm ] && [ -r /dev/kvm ] && [ -w /dev/kvm ] && KVM_SUPPORT="1"
|
||||||
|
|
||||||
[ -z "$SERENITY_BOCHS_BIN" ] && SERENITY_BOCHS_BIN="bochs"
|
[ -z "$SERENITY_BOCHS_BIN" ] && SERENITY_BOCHS_BIN="bochs"
|
||||||
|
|
||||||
|
@ -41,10 +42,14 @@ if [ -z "$SERENITY_QEMU_BIN" ]; then
|
||||||
if command -v wslpath >/dev/null; then
|
if command -v wslpath >/dev/null; then
|
||||||
QEMU_INSTALL_DIR=$(reg.exe query 'HKLM\Software\QEMU' /v Install_Dir /t REG_SZ | grep '^ Install_Dir' | sed 's/ / /g' | cut -f4- -d' ')
|
QEMU_INSTALL_DIR=$(reg.exe query 'HKLM\Software\QEMU' /v Install_Dir /t REG_SZ | grep '^ Install_Dir' | sed 's/ / /g' | cut -f4- -d' ')
|
||||||
if [ -z "$QEMU_INSTALL_DIR" ]; then
|
if [ -z "$QEMU_INSTALL_DIR" ]; then
|
||||||
die "Could not determine where QEMU for Windows is installed. Please make sure QEMU is installed or set SERENITY_QEMU_BIN if it is already installed."
|
if [ "$KVM_SUPPORT" -eq "0" ]; then
|
||||||
|
die "Could not determine where QEMU for Windows is installed. Please make sure QEMU is installed or set SERENITY_QEMU_BIN if it is already installed."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
KVM_SUPPORT="0"
|
||||||
|
QEMU_BINARY_PREFIX="$(wslpath -- "${QEMU_INSTALL_DIR}" | tr -d '\r\n')/"
|
||||||
|
QEMU_BINARY_SUFFIX=".exe"
|
||||||
fi
|
fi
|
||||||
QEMU_BINARY_PREFIX="$(wslpath -- "${QEMU_INSTALL_DIR}" | tr -d '\r\n')/"
|
|
||||||
QEMU_BINARY_SUFFIX=".exe"
|
|
||||||
fi
|
fi
|
||||||
if command -v "${QEMU_BINARY_PREFIX}qemu-system-x86_64${QEMU_BINARY_SUFFIX}" >/dev/null; then
|
if command -v "${QEMU_BINARY_PREFIX}qemu-system-x86_64${QEMU_BINARY_SUFFIX}" >/dev/null; then
|
||||||
SERENITY_QEMU_BIN="${QEMU_BINARY_PREFIX}qemu-system-x86_64${QEMU_BINARY_SUFFIX}"
|
SERENITY_QEMU_BIN="${QEMU_BINARY_PREFIX}qemu-system-x86_64${QEMU_BINARY_SUFFIX}"
|
||||||
|
@ -56,6 +61,8 @@ if [ -z "$SERENITY_QEMU_BIN" ]; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
[ "$KVM_SUPPORT" -eq "1" ] && SERENITY_VIRT_TECH_ARG="-enable-kvm"
|
||||||
|
|
||||||
[ -z "$SERENITY_KERNEL_CMDLINE" ] && SERENITY_KERNEL_CMDLINE="hello"
|
[ -z "$SERENITY_KERNEL_CMDLINE" ] && SERENITY_KERNEL_CMDLINE="hello"
|
||||||
|
|
||||||
[ -z "$SERENITY_RAM_SIZE" ] && SERENITY_RAM_SIZE=512M
|
[ -z "$SERENITY_RAM_SIZE" ] && SERENITY_RAM_SIZE=512M
|
||||||
|
@ -90,6 +97,8 @@ if [ "$installed_major_version" -lt "$SERENITY_QEMU_MIN_REQ_VERSION" ]; then
|
||||||
die
|
die
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
NATIVE_WINDOWS_QEMU="0"
|
||||||
|
|
||||||
if command -v wslpath >/dev/null; then
|
if command -v wslpath >/dev/null; then
|
||||||
case "$SERENITY_QEMU_BIN" in
|
case "$SERENITY_QEMU_BIN" in
|
||||||
/mnt/?/*)
|
/mnt/?/*)
|
||||||
|
@ -102,6 +111,8 @@ if command -v wslpath >/dev/null; then
|
||||||
fi
|
fi
|
||||||
[ -z "$SERENITY_QEMU_CPU" ] && SERENITY_QEMU_CPU="max,vmx=off"
|
[ -z "$SERENITY_QEMU_CPU" ] && SERENITY_QEMU_CPU="max,vmx=off"
|
||||||
SERENITY_KERNEL_CMDLINE="$SERENITY_KERNEL_CMDLINE disable_virtio"
|
SERENITY_KERNEL_CMDLINE="$SERENITY_KERNEL_CMDLINE disable_virtio"
|
||||||
|
NATIVE_WINDOWS_QEMU="1"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -115,7 +126,7 @@ fi
|
||||||
|
|
||||||
if [ "$(uname)" = "Darwin" ]; then
|
if [ "$(uname)" = "Darwin" ]; then
|
||||||
SERENITY_AUDIO_BACKEND="-audiodev coreaudio,id=snd0"
|
SERENITY_AUDIO_BACKEND="-audiodev coreaudio,id=snd0"
|
||||||
elif command -v wslpath >/dev/null; then
|
elif [ "$NATIVE_WINDOWS_QEMU" -eq "1" ]; then
|
||||||
SERENITY_AUDIO_BACKEND="-audiodev dsound,id=snd0"
|
SERENITY_AUDIO_BACKEND="-audiodev dsound,id=snd0"
|
||||||
elif "$SERENITY_QEMU_BIN" -audio-help 2>&1 | grep -- "-audiodev id=sdl" >/dev/null; then
|
elif "$SERENITY_QEMU_BIN" -audio-help 2>&1 | grep -- "-audiodev id=sdl" >/dev/null; then
|
||||||
SERENITY_AUDIO_BACKEND="-audiodev sdl,id=snd0"
|
SERENITY_AUDIO_BACKEND="-audiodev sdl,id=snd0"
|
||||||
|
@ -130,15 +141,15 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SERENITY_SCREENS="${SERENITY_SCREENS:-1}"
|
SERENITY_SCREENS="${SERENITY_SCREENS:-1}"
|
||||||
if [ "$SERENITY_SPICE" ]; then
|
if [ "$SERENITY_SPICE" ]; then
|
||||||
SERENITY_QEMU_DISPLAY_BACKEND="${SERENITY_QEMU_DISPLAY_BACKEND:-spice-app}"
|
SERENITY_QEMU_DISPLAY_BACKEND="${SERENITY_QEMU_DISPLAY_BACKEND:-spice-app}"
|
||||||
elif command -v wslpath >/dev/null; then
|
elif [ "$NATIVE_WINDOWS_QEMU" -eq "1" ]; then
|
||||||
# QEMU for windows does not like gl=on, so detect if we are building in wsl, and if so, disable it
|
# QEMU for windows does not like gl=on, so detect if we are building in wsl, and if so, disable it
|
||||||
# Also, when using the GTK backend we run into this problem: https://github.com/SerenityOS/serenity/issues/7657
|
# Also, when using the GTK backend we run into this problem: https://github.com/SerenityOS/serenity/issues/7657
|
||||||
SERENITY_QEMU_DISPLAY_BACKEND="${SERENITY_QEMU_DISPLAY_BACKEND:-sdl,gl=off}"
|
SERENITY_QEMU_DISPLAY_BACKEND="${SERENITY_QEMU_DISPLAY_BACKEND:-sdl,gl=off}"
|
||||||
elif [ $SERENITY_SCREENS -gt 1 ] && "${SERENITY_QEMU_BIN}" --display help | grep -iq sdl; then
|
elif [ $SERENITY_SCREENS -gt 1 ] && "${SERENITY_QEMU_BIN}" --display help | grep -iq sdl; then
|
||||||
SERENITY_QEMU_DISPLAY_BACKEND="${SERENITY_QEMU_DISPLAY_BACKEND:-sdl,gl=off}"
|
SERENITY_QEMU_DISPLAY_BACKEND="${SERENITY_QEMU_DISPLAY_BACKEND:-sdl,gl=off}"
|
||||||
elif ("${SERENITY_QEMU_BIN}" --display help | grep -iq sdl) && (ldconfig -p | grep -iq virglrenderer); then
|
elif ! command -v wslpath >/dev/null && ("${SERENITY_QEMU_BIN}" --display help | grep -iq sdl) && (ldconfig -p | grep -iq virglrenderer); then
|
||||||
SERENITY_QEMU_DISPLAY_BACKEND="${SERENITY_QEMU_DISPLAY_BACKEND:-sdl,gl=on}"
|
SERENITY_QEMU_DISPLAY_BACKEND="${SERENITY_QEMU_DISPLAY_BACKEND:-sdl,gl=on}"
|
||||||
elif "${SERENITY_QEMU_BIN}" --display help | grep -iq cocoa; then
|
elif "${SERENITY_QEMU_BIN}" --display help | grep -iq cocoa; then
|
||||||
# QEMU for OSX seems to only support cocoa
|
# QEMU for OSX seems to only support cocoa
|
||||||
|
|
Loading…
Reference in a new issue