mirror of
https://github.com/XunilGroup/XunilOS.git
synced 2026-06-02 12:44:24 +02:00
56c5da0742
remove incorrect timer frequency set, fix interrupt handler not restoring stack ptr, handle both user and kernel aborts, remove aarch64 ps2 support, fix ELF code mapped as code making it unwritable, add assets.rs to handle both arches automatically, make PS2 x86_64 compatible with linux keycodes, always try printing kernel panic to serial
256 lines
7.1 KiB
Makefile
256 lines
7.1 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: debug-x86_64
|
|
debug-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 \
|
|
-d in_asm,int,mmu -D /tmp/qemu_trace.log 2>/dev/null \
|
|
$(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: debug-aarch64
|
|
debug-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 \
|
|
-d in_asm,int,mmu -D /tmp/qemu_trace.log 2>/dev/null
|
|
$(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
|