WIP: modules
This commit is contained in:
@@ -3,57 +3,38 @@
|
||||
|
||||
set quiet := true
|
||||
|
||||
OS_NAME := os()
|
||||
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 { "" }
|
||||
}
|
||||
|
||||
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")
|
||||
}
|
||||
|
||||
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"
|
||||
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 \
|
||||
@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"; \
|
||||
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
|
||||
|
||||
@@ -61,21 +42,32 @@ _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=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.elf ::/ksOSKernel.elf
|
||||
|
||||
@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}} "
|
||||
FLAGS=" {{ FLAGS }} "
|
||||
|
||||
if [[ "$FLAGS" == *" -clean "* ]]; then
|
||||
echo "🧹 Cleaning..."
|
||||
@@ -85,7 +77,7 @@ run *FLAGS:
|
||||
just _image
|
||||
|
||||
DEBUG_ARGS=""
|
||||
DISPLAY_ARGS="{{DISPLAY_FLAGS}}"
|
||||
DISPLAY_ARGS="{{ DISPLAY_FLAGS }}"
|
||||
STATE_MSG="Launching"
|
||||
|
||||
if [[ "$FLAGS" == *" -debug "* ]]; then
|
||||
@@ -97,16 +89,16 @@ run *FLAGS:
|
||||
DISPLAY_ARGS="-nographic"
|
||||
fi
|
||||
|
||||
echo "🚀 $STATE_MSG (accel: {{ACCEL_INFO}})..."
|
||||
echo "🚀 $STATE_MSG (accel: {{ ACCEL_INFO }})..."
|
||||
|
||||
qemu-system-aarch64 {{ACCEL}} \
|
||||
qemu-system-aarch64 {{ ACCEL }} \
|
||||
-machine virt,acpi=off \
|
||||
-cpu {{CPU}} \
|
||||
-m {{RAM}} \
|
||||
-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 \
|
||||
-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 \
|
||||
@@ -115,6 +107,7 @@ run *FLAGS:
|
||||
@clean:
|
||||
just Bootloader clean
|
||||
just Kernel clean
|
||||
rm -rf {{BUILD_DIR}}
|
||||
just Runtime clean
|
||||
rm -rf {{ BUILD_DIR }}
|
||||
rm -f compile_commands.json
|
||||
rm -f ide-swift-toolchain.txt
|
||||
|
||||
Reference in New Issue
Block a user