# SPDX-License-Identifier: GPL-3.0-or-later # Copyright (c) 2026 0xKSor 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 } RAM := "2G" 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 mod Runtime _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 just Runtime build @_image: build @echo "๐Ÿ’พ Creating image..." @dd if=/dev/zero of={{ IMG_FILE }} bs=1M count=128 status=none @mkfs.fat -F 32 {{ IMG_FILE }} > /dev/null @mmd -i {{ IMG_FILE }} ::/EFI ::/EFI/BOOT @mmd -i {{ IMG_FILE }} ::/System @mmd -i {{ IMG_FILE }} ::/Apps @mcopy -i {{ IMG_FILE }} {{ BOOT_BIN }} ::/EFI/BOOT/BOOTAA64.EFI @mcopy -i {{ IMG_FILE }} {{ BUILD_DIR }}/Kernel/ksOSKernel.elf ::/ksOSKernel.elf # Pack Runtime into ISO @if [ -d {{ BUILD_DIR }}/Runtime/System ] &&[ "$$(ls {{ BUILD_DIR }}/Runtime/System 2>/dev/null)" ]; then \ echo " ๐Ÿ“ฆ Packing System runtime..."; \ mcopy -s -i {{ IMG_FILE }} {{ BUILD_DIR }}/Runtime/System/* ::/System/ || true; \ fi @if [ -d {{ BUILD_DIR }}/Runtime/Apps ] &&[ "$$(ls {{ BUILD_DIR }}/Runtime/Apps 2>/dev/null)" ]; then \ echo " ๐Ÿ“ฆ Packing Apps runtime..."; \ mcopy -s -i {{ IMG_FILE }} {{ BUILD_DIR }}/Runtime/Apps/* ::/Apps/ || true; \ fi run *FLAGS: #!/usr/bin/env bash set -e FLAGS=" {{ FLAGS }} " if [[ "$FLAGS" == *" -clean "* ]]; then echo "๐Ÿงน Cleaning..." just clean fi just _image DEBUG_ARGS="" DISPLAY_ARGS="{{ DISPLAY_FLAGS }}" STATE_MSG="Launching" if [[ "$FLAGS" == *" -debug "* ]]; then DEBUG_ARGS="-s -S" STATE_MSG="Debugging" fi if [[ "$FLAGS" == *" -nographic "* ]]; then DISPLAY_ARGS="-nographic" fi echo "๐Ÿš€ $STATE_MSG (accel: {{ ACCEL_INFO }})..." qemu-system-aarch64 {{ ACCEL }} \ -machine virt,acpi=off \ -cpu {{ CPU }} \ -m {{ RAM }} \ -device ramfb \ $DISPLAY_ARGS \ -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 \ $DEBUG_ARGS @clean: just Bootloader clean just Kernel clean just Runtime clean rm -rf {{ BUILD_DIR }} rm -f compile_commands.json rm -f ide-swift-toolchain.txt