mirror of
https://github.com/XunilGroup/XunilOS.git
synced 2026-06-02 13:44:25 +02:00
1205d8ce7a
mouse and other io logic to an io folder, make ps2 convert to linux event codes like virtio, force modern mmio and gic version 2 on aarch64
228 lines
6.3 KiB
Makefile
228 lines
6.3 KiB
Makefile
include config.mk
|
|
|
|
# Nuke built-in rules and variables.
|
|
MAKEFLAGS += -rR
|
|
.SUFFIXES:
|
|
|
|
override QEMUFLAGS := -m $(MEMORY) -global virtio-mmio.force-legacy=false
|
|
override IMAGE_NAME := XunilOS-$(KARCH)
|
|
|
|
.PHONY: all
|
|
all: $(IMAGE_NAME).iso
|
|
|
|
.PHONY: all-hdd
|
|
all-hdd: $(IMAGE_NAME).hdd
|
|
|
|
.PHONY: run
|
|
run: run-$(KARCH)
|
|
|
|
.PHONY: run-hdd
|
|
run-hdd: run-hdd-$(KARCH)
|
|
|
|
.PHONY: run-x86_64
|
|
run-x86_64: edk2-ovmf $(IMAGE_NAME).iso
|
|
qemu-system-$(KARCH) \
|
|
-M q35 \
|
|
-serial stdio \
|
|
-drive if=pflash,unit=0,format=raw,file=edk2-ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-x86_64
|
|
run-hdd-x86_64: edk2-ovmf $(IMAGE_NAME).hdd
|
|
qemu-system-$(KARCH) \
|
|
-M q35 \
|
|
-drive if=pflash,unit=0,format=raw,file=edk2-ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-hda $(IMAGE_NAME).hdd \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-aarch64
|
|
run-aarch64: edk2-ovmf $(IMAGE_NAME).iso
|
|
qemu-system-$(KARCH) \
|
|
-M virt,gic-version=2,secure=off \
|
|
-cpu cortex-a72 \
|
|
-device ramfb \
|
|
-device qemu-xhci \
|
|
-device usb-kbd \
|
|
-device usb-mouse \
|
|
-device virtio-keyboard-device \
|
|
-device virtio-mouse-device \
|
|
-serial stdio \
|
|
-drive if=pflash,unit=0,format=raw,file=edk2-ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
-semihosting-config enable=on,target=native \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-aarch64
|
|
run-hdd-aarch64: edk2-ovmf $(IMAGE_NAME).hdd
|
|
qemu-system-$(KARCH) \
|
|
-M virt \
|
|
-cpu cortex-a72 \
|
|
-device ramfb \
|
|
-device qemu-xhci \
|
|
-device usb-kbd \
|
|
-device usb-mouse \
|
|
-drive if=pflash,unit=0,format=raw,file=edk2-ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-hda $(IMAGE_NAME).hdd \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-riscv64
|
|
run-riscv64: edk2-ovmf $(IMAGE_NAME).iso
|
|
qemu-system-$(KARCH) \
|
|
-M virt \
|
|
-cpu rv64 \
|
|
-device ramfb \
|
|
-device qemu-xhci \
|
|
-device usb-kbd \
|
|
-device usb-mouse \
|
|
-drive if=pflash,unit=0,format=raw,file=edk2-ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-riscv64
|
|
run-hdd-riscv64: edk2-ovmf $(IMAGE_NAME).hdd
|
|
qemu-system-$(KARCH) \
|
|
-M virt \
|
|
-cpu rv64 \
|
|
-device ramfb \
|
|
-device qemu-xhci \
|
|
-device usb-kbd \
|
|
-device usb-mouse \
|
|
-drive if=pflash,unit=0,format=raw,file=edk2-ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-hda $(IMAGE_NAME).hdd \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-loongarch64
|
|
run-loongarch64: edk2-ovmf $(IMAGE_NAME).iso
|
|
qemu-system-$(KARCH) \
|
|
-M virt \
|
|
-cpu la464 \
|
|
-device ramfb \
|
|
-device qemu-xhci \
|
|
-device usb-kbd \
|
|
-device usb-mouse \
|
|
-drive if=pflash,unit=0,format=raw,file=edk2-ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-loongarch64
|
|
run-hdd-loongarch64: edk2-ovmf $(IMAGE_NAME).hdd
|
|
qemu-system-$(KARCH) \
|
|
-M virt \
|
|
-cpu la464 \
|
|
-device ramfb \
|
|
-device qemu-xhci \
|
|
-device usb-kbd \
|
|
-device usb-mouse \
|
|
-drive if=pflash,unit=0,format=raw,file=edk2-ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-hda $(IMAGE_NAME).hdd \
|
|
$(QEMUFLAGS)
|
|
|
|
|
|
.PHONY: run-bios
|
|
run-bios: $(IMAGE_NAME).iso
|
|
qemu-system-$(KARCH) \
|
|
-M q35 \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
-boot d \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-bios
|
|
run-hdd-bios: $(IMAGE_NAME).hdd
|
|
qemu-system-$(KARCH) \
|
|
-M q35 \
|
|
-hda $(IMAGE_NAME).hdd \
|
|
$(QEMUFLAGS)
|
|
|
|
edk2-ovmf:
|
|
curl -L https://github.com/osdev0/edk2-ovmf-nightly/releases/latest/download/edk2-ovmf.tar.gz | gunzip | tar -xf -
|
|
|
|
limine/limine:
|
|
rm -rf limine
|
|
git clone https://github.com/limine-bootloader/limine.git --branch=v10.x-binary --depth=1
|
|
$(MAKE) -C limine
|
|
|
|
.PHONY: kernel
|
|
kernel:
|
|
$(MAKE) -C kernel
|
|
|
|
$(IMAGE_NAME).iso: limine/limine kernel
|
|
rm -rf iso_root
|
|
mkdir -p iso_root/boot
|
|
cp -v kernel/kernel iso_root/boot/
|
|
mkdir -p iso_root/boot/limine
|
|
cp -v limine.conf iso_root/boot/limine/
|
|
mkdir -p iso_root/EFI/BOOT
|
|
ifeq ($(KARCH),x86_64)
|
|
cp -v limine/limine-bios.sys limine/limine-bios-cd.bin limine/limine-uefi-cd.bin iso_root/boot/limine/
|
|
cp -v limine/BOOTX64.EFI iso_root/EFI/BOOT/
|
|
cp -v limine/BOOTIA32.EFI iso_root/EFI/BOOT/
|
|
xorriso -as mkisofs -b boot/limine/limine-bios-cd.bin \
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
|
--efi-boot boot/limine/limine-uefi-cd.bin \
|
|
-efi-boot-part --efi-boot-image --protective-msdos-label \
|
|
iso_root -o $(IMAGE_NAME).iso
|
|
./limine/limine bios-install $(IMAGE_NAME).iso
|
|
endif
|
|
ifeq ($(KARCH),aarch64)
|
|
cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/
|
|
cp -v limine/BOOTAA64.EFI iso_root/EFI/BOOT/
|
|
xorriso -as mkisofs \
|
|
--efi-boot boot/limine/limine-uefi-cd.bin \
|
|
-efi-boot-part --efi-boot-image --protective-msdos-label \
|
|
iso_root -o $(IMAGE_NAME).iso
|
|
endif
|
|
ifeq ($(KARCH),riscv64)
|
|
cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/
|
|
cp -v limine/BOOTRISCV64.EFI iso_root/EFI/BOOT/
|
|
xorriso -as mkisofs \
|
|
--efi-boot boot/limine/limine-uefi-cd.bin \
|
|
-efi-boot-part --efi-boot-image --protective-msdos-label \
|
|
iso_root -o $(IMAGE_NAME).iso
|
|
endif
|
|
ifeq ($(KARCH),loongarch64)
|
|
cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/
|
|
cp -v limine/BOOTLOONGARCH64.EFI iso_root/EFI/BOOT/
|
|
xorriso -as mkisofs \
|
|
--efi-boot boot/limine/limine-uefi-cd.bin \
|
|
-efi-boot-part --efi-boot-image --protective-msdos-label \
|
|
iso_root -o $(IMAGE_NAME).iso
|
|
endif
|
|
rm -rf iso_root
|
|
|
|
$(IMAGE_NAME).hdd: limine/limine kernel
|
|
rm -f $(IMAGE_NAME).hdd
|
|
dd if=/dev/zero bs=1M count=0 seek=64 of=$(IMAGE_NAME).hdd
|
|
sgdisk $(IMAGE_NAME).hdd -n 1:2048 -t 1:ef00
|
|
ifeq ($(KARCH),x86_64)
|
|
./limine/limine bios-install $(IMAGE_NAME).hdd
|
|
endif
|
|
mformat -i $(IMAGE_NAME).hdd@@1M
|
|
mmd -i $(IMAGE_NAME).hdd@@1M ::/EFI ::/EFI/BOOT ::/boot ::/boot/limine
|
|
mcopy -i $(IMAGE_NAME).hdd@@1M kernel/bin-$(KARCH)/kernel ::/boot
|
|
mcopy -i $(IMAGE_NAME).hdd@@1M limine.conf ::/boot/limine
|
|
ifeq ($(KARCH),x86_64)
|
|
mcopy -i $(IMAGE_NAME).hdd@@1M limine/limine-bios.sys ::/boot/limine
|
|
mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTX64.EFI ::/EFI/BOOT
|
|
mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTIA32.EFI ::/EFI/BOOT
|
|
endif
|
|
ifeq ($(KARCH),aarch64)
|
|
mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTAA64.EFI ::/EFI/BOOT
|
|
endif
|
|
ifeq ($(KARCH),riscv64)
|
|
mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTRISCV64.EFI ::/EFI/BOOT
|
|
endif
|
|
ifeq ($(KARCH),loongarch64)
|
|
mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTLOONGARCH64.EFI ::/EFI/BOOT
|
|
endif
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
$(MAKE) -C kernel clean
|
|
rm -rf iso_root $(IMAGE_NAME).iso $(IMAGE_NAME).hdd
|
|
|
|
.PHONY: distclean
|
|
distclean: clean
|
|
$(MAKE) -C kernel distclean
|
|
rm -rf limine ovmf
|