From 1e3b0d308117536efc6505342c44d4332dd0ca14 Mon Sep 17 00:00:00 2001 From: Alex Zenla Date: Sat, 3 Oct 2026 18:53:36 -0700 Subject: [PATCH] fix(hack): use Homebrew's firmware for accelerated aarch64 VMs The firmware in the dev image hangs before it starts Sprout when run with hvf on Apple Silicon. QEMU_FIRMWARE overrides which firmware is used. --- hack/dev/boot.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/hack/dev/boot.sh b/hack/dev/boot.sh index f9aa8b0..aa00ab2 100755 --- a/hack/dev/boot.sh +++ b/hack/dev/boot.sh @@ -73,8 +73,16 @@ if [ "${NO_NETWORK}" != "1" ]; then -device 'virtio-net-pci,netdev=network0' fi +# The firmware in the dev image hangs before it starts Sprout when accelerated on Apple Silicon, +# so use the firmware that comes with Homebrew's QEMU there. QEMU_FIRMWARE overrides the choice. +if [ -z "${QEMU_FIRMWARE}" ] && [ "${TARGET_ARCH}" = "aarch64" ] && [ "${QEMU_ACCEL}" = "hvf" ] && + command -v brew >/dev/null 2>&1; then + BREW_FIRMWARE="$(brew --prefix qemu 2>/dev/null)/share/qemu/edk2-aarch64-code.fd" + [ -f "${BREW_FIRMWARE}" ] && QEMU_FIRMWARE="${BREW_FIRMWARE}" +fi + rm -f "${FINAL_DIR}/ovmf-boot.fd" -cp "${FINAL_DIR}/ovmf.fd" "${FINAL_DIR}/ovmf-boot.fd" +cp "${QEMU_FIRMWARE:-${FINAL_DIR}/ovmf.fd}" "${FINAL_DIR}/ovmf-boot.fd" if [ "${TARGET_ARCH}" = "aarch64" ]; then dd if=/dev/zero of="${FINAL_DIR}/ovmf-boot.fd" bs=1 count=1 seek=67108863 >/dev/null 2>&1 fi