Files
ksOS/justfile
T
2026-04-25 16:04:10 +04:00

113 lines
3.2 KiB
Makefile

set quiet := true
OS_NAME := os()
ARCH_NAME := arch()
HB_PREFIX := if ARCH_NAME == "aarch64" { "/opt/homebrew" } else { "/usr/local" }
export PATH := HB_PREFIX + "/bin:" + HB_PREFIX + "/sbin:" + env_var("PATH")
ACCEL := if OS_NAME == "macos" {
if ARCH_NAME == "aarch64" { "-accel hvf" } else { "" }
} else {
if ARCH_NAME == "aarch64" { "-accel kvm" } else { "" }
}
CPU := if ARCH_NAME == "aarch64" { "host" } else { "max" }
OVMF_ARM := if OS_NAME == "macos" {
HB_PREFIX + "/share/qemu/edk2-aarch64-code.fd"
} else {
BUILD_DIR + "/edk2/edk2-aarch64-code.fd"
}
DISPLAY_FLAGS := if OS_NAME == "macos" {
"-display cocoa,show-cursor=on"
} else {
env_var_or_default("QEMU_DISPLAY", "-display sdl")
}
ACCEL_INFO := if ACCEL == "" { "none (TCG)" } else { ACCEL }
export BUILD_DIR := justfile_directory() + "/.build"
export TEMP_DIR := BUILD_DIR + "/temp"
export BOOT_BIN := BUILD_DIR + "/Bootloader/BOOTAA64.EFI"
export IMG_FILE := BUILD_DIR + "/ksOS.img"
mod Bootloader
mod Kernel
_default:
just --list
_prep:
@mkdir -p {{BUILD_DIR}}/Bootloader
@mkdir -p {{TEMP_DIR}}/Bootloader
@mkdir -p {{BUILD_DIR}}/Kernel
@if [ "{{OS_NAME}}" != "macos" ]; then \
mkdir -p {{BUILD_DIR}}/edk2; \
if [ ! -f "{{OVMF_ARM}}" ]; then \
echo "⬇️ Downloading vanilla EDK2 for Linux..."; \
curl -sL -o "{{OVMF_ARM}}.bz2" "https://github.com/qemu/qemu/raw/master/pc-bios/edk2-aarch64-code.fd.bz2"; \
bzip2 -d "{{OVMF_ARM}}.bz2"; \
fi \
fi
@build: _prep
@echo "🛠️ Building everything..."
just Bootloader build
just Kernel build
@_image: build
@echo "💾 Creating image..."
@dd if=/dev/zero of={{IMG_FILE}} bs=1M count=64 status=none
@mkfs.fat -F 32 {{IMG_FILE}} > /dev/null
@mmd -i {{IMG_FILE}} ::/EFI ::/EFI/BOOT
@mcopy -i {{IMG_FILE}} {{BOOT_BIN}} ::/EFI/BOOT/BOOTAA64.EFI
@mcopy -i {{IMG_FILE}} {{BUILD_DIR}}/Kernel/ksOSKernel.bin ::/ksOSKernel.bin
@run: _image
@echo "🚀 Launching (accel: {{ACCEL_INFO}})..."
qemu-system-aarch64 {{ACCEL}} \
-machine virt,acpi=off \
-cpu {{CPU}} \
-m 512M \
-device ramfb \
{{DISPLAY_FLAGS}} \
-drive if=pflash,format=raw,readonly=on,file={{OVMF_ARM}} \
-drive file={{IMG_FILE}},format=raw,if=none,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-serial stdio \
-monitor telnet:127.0.0.1:5555,server,nowait
@drun: _image
@echo "🚀 Debugging (accel: {{ACCEL_INFO}})..."
qemu-system-aarch64 {{ACCEL}} \
-machine virt,acpi=off \
-cpu {{CPU}} \
-m 512M \
-device ramfb \
{{DISPLAY_FLAGS}} \
-drive if=pflash,format=raw,readonly=on,file={{OVMF_ARM}} \
-drive file={{IMG_FILE}},format=raw,if=none,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-serial stdio \
-monitor telnet:127.0.0.1:5555,server,nowait
-s -S
@crun:
@echo "🧹 Cleaning and running.."
just clean
just run
@dcrun:
@echo "🧹 Cleaning and debugging.."
just clean
just drun
@clean:
just Bootloader clean
just Kernel clean
rm -rf {{BUILD_DIR}}
rm -f compile_commands.json
rm -f ide-swift-toolchain.txt