redox/mk/qemu.mk

190 lines
5 KiB
Makefile
Raw Normal View History

2022-08-30 19:09:49 +02:00
QEMU=SDL_VIDEO_X11_DGAMOUSE=0 qemu-system-$(QEMU_ARCH)
2023-05-06 20:51:07 +02:00
QEMUFLAGS=-d cpu_reset,guest_errors -name "Redox OS $(ARCH)"
2022-08-30 19:09:49 +02:00
2022-07-29 18:11:32 +02:00
ifeq ($(ARCH),i686)
2022-11-16 20:34:48 +01:00
audio?=ac97
2022-08-24 14:26:27 +02:00
efi=no
2022-07-29 20:13:32 +02:00
QEMU_ARCH=i386
QEMU_MACHINE?=pc
QEMU_CPU?=pentium2
QEMUFLAGS+=-smp 1 -m 1024
2022-07-29 18:15:18 +02:00
else ifeq ($(ARCH),x86_64)
2022-07-29 20:13:32 +02:00
QEMU_ARCH=x86_64
QEMU_MACHINE?=q35
QEMU_CPU?=core2duo
2022-07-29 20:13:32 +02:00
QEMU_EFI=/usr/share/OVMF/OVMF_CODE.fd
2022-08-30 19:09:49 +02:00
QEMUFLAGS+=-smp 4 -m 2048
2022-07-29 18:15:18 +02:00
else ifeq ($(ARCH),aarch64)
2022-08-24 14:22:40 +02:00
efi=yes
2022-08-26 19:30:14 +02:00
live=yes
2022-07-29 20:13:32 +02:00
QEMU_ARCH=aarch64
QEMU_MACHINE=virt
QEMU_CPU=max
ifeq ($(BOARD),raspi3bp)
QEMU_EFI=https://gitlab.redox-os.org/Ivan/redox_firmware/-/raw/main/platform/raspberry_pi/rpi3/u-boot-rpi-3-b-plus.bin
else
QEMU_EFI=https://gitlab.redox-os.org/Ivan/redox_firmware/-/raw/main/platform/qemu/qemu_arm64/u-boot-qemu-arm64.bin
endif
2022-08-30 19:09:49 +02:00
QEMUFLAGS+=-smp 1 -m 2048
2022-07-29 20:13:32 +02:00
ifneq ($(vga),no)
2023-04-04 16:14:43 +02:00
QEMUFLAGS+=-device ramfb
2022-07-29 20:13:32 +02:00
endif
2022-08-24 14:22:40 +02:00
ifneq ($(usb),no)
QEMUFLAGS+=-device usb-ehci -device usb-kbd -device usb-mouse
endif
2022-07-29 18:11:32 +02:00
else
2022-07-29 20:13:32 +02:00
$(error Unsupported ARCH for QEMU "$(ARCH)"))
2022-07-29 18:11:32 +02:00
endif
2022-07-29 18:15:18 +02:00
ifneq ($(ARCH),$(HOST_ARCH))
kvm?=no
endif
2022-08-24 14:22:40 +02:00
ifeq ($(efi),yes)
FIRMWARE=$(BUILD)/firmware.rom
QEMUFLAGS+=-bios $(BUILD)/firmware.rom
2022-08-24 14:22:40 +02:00
else
FIRMWARE=
endif
ifeq ($(live),yes)
DISK=$(BUILD)/livedisk.iso
else
DISK=$(BUILD)/harddrive.img
2022-08-24 14:22:40 +02:00
endif
2019-03-12 02:55:10 +01:00
ifeq ($(serial),no)
QEMUFLAGS+=-chardev stdio,id=debug -device isa-debugcon,iobase=0x402,chardev=debug
else
QEMUFLAGS+=-chardev stdio,id=debug,signal=off,mux=on,"$(if $(qemu_serial_logfile),logfile=$(qemu_serial_logfile))"
QEMUFLAGS+=-serial chardev:debug -mon chardev=debug
2019-03-12 02:55:10 +01:00
endif
2022-08-30 19:09:49 +02:00
2017-01-05 22:07:20 +01:00
ifeq ($(iommu),yes)
2022-07-29 18:11:32 +02:00
QEMUFLAGS+=-machine $(QEMU_MACHINE),iommu=on
2017-01-05 22:07:20 +01:00
else
2022-07-29 18:11:32 +02:00
QEMUFLAGS+=-machine $(QEMU_MACHINE)
2017-01-05 22:07:20 +01:00
endif
2022-08-30 19:09:49 +02:00
2022-11-15 23:11:38 +01:00
ifeq ($(audio),no)
# No audio
else ifeq ($(audio),ac97)
# AC'97
QEMUFLAGS+=-device AC97
else
# Intel High Definition Audio
QEMUFLAGS+=-device ich9-intel-hda -device hda-output
2017-06-18 00:59:01 +02:00
endif
2022-08-30 19:09:49 +02:00
2017-01-05 22:07:20 +01:00
ifeq ($(net),no)
QEMUFLAGS+=-net none
2023-07-07 16:21:57 +02:00
else ifeq ($(net),rtl8139)
# RTL8139
QEMUFLAGS+=-netdev user,id=net0 -device rtl8139,netdev=net0 \
-object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap
2023-07-07 17:23:52 +02:00
else ifeq ($(net),virtio)
# virtio-net
QEMUFLAGS+=-netdev user,id=net0 -device virtio-net,netdev=net0 \
-object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap
2017-01-05 22:07:20 +01:00
else
ifneq ($(bridge),)
QEMUFLAGS+=-netdev bridge,br=$(bridge),id=net0 -device e1000,netdev=net0,id=nic0
else
2020-06-17 19:04:24 +02:00
ifeq ($(net),redir)
# 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 -device e1000,netdev=net0,id=nic0
else
QEMUFLAGS+=-netdev user,id=net0 -device e1000,netdev=net0 \
-object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap
2020-06-17 19:04:24 +02:00
endif
2017-01-05 22:07:20 +01:00
endif
endif
2022-08-30 19:09:49 +02:00
2017-01-05 22:07:20 +01:00
ifeq ($(vga),no)
QEMUFLAGS+=-nographic -vga none
2023-01-20 19:53:29 +01:00
else ifeq ($(vga),multi)
QEMUFLAGS+=-display sdl -vga std -device secondary-vga
2023-07-07 16:47:44 +02:00
else ifeq ($(vga),virtio)
QEMUFLAGS+=-vga virtio
2017-01-05 22:07:20 +01:00
endif
2022-08-30 19:09:49 +02:00
2017-01-11 04:49:18 +01:00
ifneq ($(usb),no)
QEMUFLAGS+=-device nec-usb-xhci,id=xhci
2017-01-11 04:49:18 +01:00
endif
2022-08-30 19:09:49 +02:00
2019-09-08 04:01:03 +02:00
ifeq ($(gdb),yes)
2022-08-21 22:57:56 +02:00
QEMUFLAGS+=-s -S
endif
2022-08-30 19:09:49 +02:00
2017-01-05 22:07:20 +01:00
ifeq ($(UNAME),Linux)
ifneq ($(kvm),no)
QEMUFLAGS+=-enable-kvm -cpu host
else
2022-07-29 18:11:32 +02:00
QEMUFLAGS+=-cpu $(QEMU_CPU)
2017-01-05 22:07:20 +01:00
endif
endif
2023-04-29 16:27:20 +02:00
ifeq ($(UNAME),Darwin)
QEMUFLAGS+=-cpu $(QEMU_CPU)
endif
$(BUILD)/extra.img:
truncate -s 1g $@
2017-01-05 22:07:20 +01:00
$(BUILD)/firmware.rom:
ifeq ($(ARCH),aarch64)
wget -O $@ $(QEMU_EFI)
else
2022-07-29 20:13:32 +02:00
cp $(QEMU_EFI) $@
endif
2022-07-29 20:13:32 +02:00
qemu: $(DISK) $(FIRMWARE) $(BUILD)/extra.img
$(QEMU) $(QEMUFLAGS) \
2023-01-11 19:01:09 +01:00
-drive file=$(DISK),format=raw \
-drive file=$(BUILD)/extra.img,format=raw
2017-01-13 19:08:44 +01:00
qemu_no_build: $(FIRMWARE) $(BUILD)/extra.img
2020-01-14 11:56:09 +01:00
$(QEMU) $(QEMUFLAGS) \
2022-09-07 16:28:12 +02:00
-drive file=$(DISK),format=raw \
-drive file=$(BUILD)/extra.img,format=raw
2020-01-14 11:56:09 +01:00
qemu_cdrom: $(DISK) $(FIRMWARE) $(BUILD)/extra.img
$(QEMU) $(QEMUFLAGS) \
2022-09-07 16:28:12 +02:00
-boot d -cdrom $(DISK) \
-drive file=$(BUILD)/extra.img,format=raw
qemu_cdrom_no_build: $(FIRMWARE) $(BUILD)/extra.img
$(QEMU) $(QEMUFLAGS) \
2022-09-07 16:28:12 +02:00
-boot d -cdrom $(DISK) \
-drive file=$(BUILD)/extra.img,format=raw
qemu_nvme: $(DISK) $(FIRMWARE) $(BUILD)/extra.img
2018-04-13 05:24:07 +02:00
$(QEMU) $(QEMUFLAGS) \
2022-09-07 16:28:12 +02:00
-drive file=$(DISK),format=raw,if=none,id=drv0 -device nvme,drive=drv0,serial=NVME_SERIAL \
-drive file=$(BUILD)/extra.img,format=raw,if=none,id=drv1 -device nvme,drive=drv1,serial=NVME_EXTRA
2018-04-13 05:24:07 +02:00
qemu_nvme_no_build: $(FIRMWARE) $(BUILD)/extra.img
2018-04-13 05:24:07 +02:00
$(QEMU) $(QEMUFLAGS) \
2022-09-07 16:28:12 +02:00
-drive file=$(DISK),format=raw,if=none,id=drv0 -device nvme,drive=drv0,serial=NVME_SERIAL \
-drive file=$(BUILD)/extra.img,format=raw,if=none,id=drv1 -device nvme,drive=drv1,serial=NVME_EXTRA
2018-04-13 05:24:07 +02:00
2022-09-07 16:28:12 +02:00
qemu_usb: $(DISK) $(FIRMWARE)
$(QEMU) $(QEMUFLAGS) \
2022-09-07 16:28:12 +02:00
-drive if=none,id=usbstick,format=raw,file=$(DISK) \
-device usb-storage,drive=usbstick
2019-09-15 21:41:21 +02:00
qemu_extra: $(FIRMWARE) $(BUILD)/extra.img
2019-09-15 21:41:21 +02:00
$(QEMU) $(QEMUFLAGS) \
-drive file=$(BUILD)/extra.img,format=raw
2022-09-07 16:28:12 +02:00
qemu_nvme_extra: $(FIRMWARE) $(BUILD)/extra.img
2022-09-07 16:28:12 +02:00
$(QEMU) $(QEMUFLAGS) \
-drive file=$(BUILD)/extra.img,format=raw,if=none,id=drv1 -device nvme,drive=drv1,serial=NVME_EXTRA
#additional steps for $(DISK) are required!!!
qemu_raspi: $(FIRMWARE) $(DISK)
$(QEMU) -M raspi3b -smp 4,cores=1 \
-kernel $(FIRMWARE) \
-serial stdio -display none -sd $(DISK)