81 lines
2.2 KiB
Makefile
81 lines
2.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 {
|
|
env_var_or_default("OVMF_PATH", "/usr/share/edk2/aarch64/QEMU_EFI.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
|
|
|
|
@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
|
|
|
|
@crun:
|
|
@echo "🧹 Cleaning and running.."
|
|
just clean
|
|
just run
|
|
|
|
@clean:
|
|
rm -rf {{BUILD_DIR}}
|