diff --git a/mk/qemu.mk b/mk/qemu.mk index 88611c87b..9ab81160d 100644 --- a/mk/qemu.mk +++ b/mk/qemu.mk @@ -129,6 +129,18 @@ ifneq ($(ARCH),$(HOST_ARCH)) kvm?=no endif +# wsl2: run qemu on windows instead +ifeq ($(QEMU_ON_WINDOWS),1) + QEMU:=$(QEMU).exe + WINDOWS_DISK=/mnt/c/ProgramData/redox.img + disk=windows + net=windows + QEMU_MACHINE=pc + FIRMWARE= + QEMU_KERNEL= + QEMUFLAGS+=-device usb-tablet +endif + ifneq ($(FIRMWARE),) QEMUFLAGS+=-bios $(FIRMWARE) endif @@ -191,6 +203,8 @@ else # port 8080 and 8083 - webservers # port 64126 - our gdbserver implementation QEMUFLAGS+=-netdev user,id=net0,hostfwd=tcp::8080-:8080,hostfwd=tcp::8083-:8083,hostfwd=tcp::64126-:64126$(EXTRANETARGS) + else ifeq ($(net),windows) + QEMUFLAGS+=-netdev user,id=net0$(EXTRANETARGS) else QEMUFLAGS+=-netdev user,id=net0$(EXTRANETARGS) -object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap endif @@ -230,9 +244,10 @@ else ifeq ($(disk),cdrom) QEMUFLAGS+= \ -boot d -cdrom $(DISK) \ -drive file=$(EXTRA_DISK),format=raw - else ifeq ($(disk),sdcard) QEMUFLAGS+=-drive file=$(DISK),if=sd,format=raw +else ifeq ($(disk),windows) + QEMUFLAGS+=-drive file="$(shell wslpath -w $(WINDOWS_DISK))",format=raw,if=virtio endif ifeq ($(gdb),yes) @@ -241,7 +256,11 @@ endif ifeq ($(UNAME),Linux) ifneq ($(kvm),no) - QEMUFLAGS+=-enable-kvm -cpu host + ifeq ($(QEMU_ON_WINDOWS),1) + QEMUFLAGS+=-accel whpx,kernel-irqchip=off -cpu Broadwell,x2apic=off + else + QEMUFLAGS+=-enable-kvm -cpu host + endif else QEMUFLAGS+=-cpu $(QEMU_CPU) endif @@ -269,6 +288,8 @@ qemu-deps: $(DISK) ifeq ($(disk),usb) else ifeq ($(disk),sdcard) +else ifeq ($(disk),windows) +qemu-deps: $(WINDOWS_DISK) else qemu-deps: $(EXTRA_DISK) endif @@ -290,6 +311,11 @@ endif $(EXTRA_DISK): truncate -s 1g $@ +$(WINDOWS_DISK): $(BUILD)/harddrive.img + rm -f $@ + mkdir -p $(shell dirname $@) + cp "$<" "$@" + $(BUILD)/raspi3bp_uboot.rom: wget -O $@ https://gitlab.redox-os.org/Ivan/redox_firmware/-/raw/main/platform/raspberry_pi/rpi3/u-boot-rpi-3-b-plus.bin