mirror of
https://github.com/XunilGroup/XunilOS.git
synced 2026-04-25 11:49:03 +02:00
allocation, adding a timer, a framebuffer swap, rectangle and buffer draw syscall, moving the header files to the correct directory, disabling stack protection, AVX and MMX, while enabling SSE, fix interrupt handler popping in the wrong order, improve load_segment_to_memory alignment, add load_from_ptr to framebuffer for very quick drawing, serial_print as well as render font in consolewriter, zero the memory in sbrk, add a fake file system and methods to libxunil for DOOM, add correct printf, vsnprintf add _start which calls the main function in libxunil, mark all registers as used inside syscalls for no memory corruption, add build_helloworld.sh script
253 lines
8.0 KiB
Makefile
253 lines
8.0 KiB
Makefile
# Nuke built-in rules and variables.
|
|
MAKEFLAGS += -rR
|
|
.SUFFIXES:
|
|
|
|
# Convenience macro to reliably declare user overridable variables.
|
|
override USER_VARIABLE = $(if $(filter $(origin $(1)),default undefined),$(eval override $(1) := $(2)))
|
|
|
|
# Target architecture to build for. Default to x86_64.
|
|
$(call USER_VARIABLE,KARCH,x86_64)
|
|
|
|
# Default user QEMU flags. These are appended to the QEMU command calls.
|
|
$(call USER_VARIABLE,QEMUFLAGS,-m 2G)
|
|
|
|
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: ovmf/ovmf-code-$(KARCH).fd ovmf/ovmf-vars-$(KARCH).fd $(IMAGE_NAME).iso
|
|
qemu-system-$(KARCH) \
|
|
-M q35 \
|
|
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-drive if=pflash,unit=1,format=raw,file=ovmf/ovmf-vars-$(KARCH).fd \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-x86_64
|
|
run-hdd-x86_64: ovmf/ovmf-code-$(KARCH).fd ovmf/ovmf-vars-$(KARCH).fd $(IMAGE_NAME).hdd
|
|
qemu-system-$(KARCH) \
|
|
-M q35 \
|
|
-drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-drive if=pflash,unit=1,format=raw,file=ovmf/ovmf-vars-$(KARCH).fd \
|
|
-hda $(IMAGE_NAME).hdd \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-aarch64
|
|
run-aarch64: ovmf/ovmf-code-$(KARCH).fd ovmf/ovmf-vars-$(KARCH).fd $(IMAGE_NAME).iso
|
|
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=ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-drive if=pflash,unit=1,format=raw,file=ovmf/ovmf-vars-$(KARCH).fd \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-aarch64
|
|
run-hdd-aarch64: ovmf/ovmf-code-$(KARCH).fd ovmf/ovmf-vars-$(KARCH).fd $(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=ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-drive if=pflash,unit=1,format=raw,file=ovmf/ovmf-vars-$(KARCH).fd \
|
|
-hda $(IMAGE_NAME).hdd \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-riscv64
|
|
run-riscv64: ovmf/ovmf-code-$(KARCH).fd ovmf/ovmf-vars-$(KARCH).fd $(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=ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-drive if=pflash,unit=1,format=raw,file=ovmf/ovmf-vars-$(KARCH).fd \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-riscv64
|
|
run-hdd-riscv64: ovmf/ovmf-code-$(KARCH).fd ovmf/ovmf-vars-$(KARCH).fd $(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=ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-drive if=pflash,unit=1,format=raw,file=ovmf/ovmf-vars-$(KARCH).fd \
|
|
-hda $(IMAGE_NAME).hdd \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-loongarch64
|
|
run-loongarch64: ovmf/ovmf-code-$(KARCH).fd ovmf/ovmf-vars-$(KARCH).fd $(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=ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-drive if=pflash,unit=1,format=raw,file=ovmf/ovmf-vars-$(KARCH).fd \
|
|
-cdrom $(IMAGE_NAME).iso \
|
|
$(QEMUFLAGS)
|
|
|
|
.PHONY: run-hdd-loongarch64
|
|
run-hdd-loongarch64: ovmf/ovmf-code-$(KARCH).fd ovmf/ovmf-vars-$(KARCH).fd $(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=ovmf/ovmf-code-$(KARCH).fd,readonly=on \
|
|
-drive if=pflash,unit=1,format=raw,file=ovmf/ovmf-vars-$(KARCH).fd \
|
|
-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)
|
|
|
|
ovmf/ovmf-code-$(KARCH).fd:
|
|
mkdir -p ovmf
|
|
curl -Lo $@ https://github.com/osdev0/edk2-ovmf-nightly/releases/latest/download/ovmf-code-$(KARCH).fd
|
|
case "$(KARCH)" in \
|
|
aarch64) dd if=/dev/zero of=$@ bs=1 count=0 seek=67108864 2>/dev/null;; \
|
|
loongarch64) dd if=/dev/zero of=$@ bs=1 count=0 seek=5242880 2>/dev/null;; \
|
|
riscv64) dd if=/dev/zero of=$@ bs=1 count=0 seek=33554432 2>/dev/null;; \
|
|
esac
|
|
|
|
ovmf/ovmf-vars-$(KARCH).fd:
|
|
mkdir -p ovmf
|
|
curl -Lo $@ https://github.com/osdev0/edk2-ovmf-nightly/releases/latest/download/ovmf-vars-$(KARCH).fd
|
|
case "$(KARCH)" in \
|
|
aarch64) dd if=/dev/zero of=$@ bs=1 count=0 seek=67108864 2>/dev/null;; \
|
|
loongarch64) dd if=/dev/zero of=$@ bs=1 count=0 seek=5242880 2>/dev/null;; \
|
|
riscv64) dd if=/dev/zero of=$@ bs=1 count=0 seek=33554432 2>/dev/null;; \
|
|
esac
|
|
|
|
limine/limine:
|
|
rm -rf limine
|
|
git clone https://github.com/limine-bootloader/limine.git --branch=v9.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
|
|
qemu-system-$(KARCH) -cdrom $(IMAGE_NAME).iso -m 1G -serial stdio
|
|
|
|
$(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
|