Files
smallboot/justfile
T
2025-10-05 00:39:57 +02:00

57 lines
1.6 KiB
Makefile
Executable File

#!/usr/bin/env just --justfile
IMG_FILE := 'small.img'
IMG_SIZE_MB := '36'
EFI_NAME := 'bootx64'
EFI_FILE := 'bootx64.efi'
MNT_DIR := 'esp_mnt'
default: image
build:
@echo ">>> Building UEFI executable ({{EFI_FILE}})..."
zig build-exe -OReleaseFast -target x86_64-uefi-msvc --name {{EFI_NAME}} main.zig
_image-init:
echo ">>> Creating blank disk image: {{IMG_FILE}} ({{IMG_SIZE_MB}}MB)..."
#dd if=/dev/zero of={{IMG_FILE}} bs=1M count={{IMG_SIZE_MB}}
fallocate -l {{IMG_SIZE_MB}}M {{IMG_FILE}}
sudo -v
echo ">>> Creating GPT and EFI System Partition..."
sudo sgdisk --new=1:0:0 --typecode=1:ef00 {{IMG_FILE}}
image: build _image-init
#!/usr/bin/env bash
set -euo pipefail
LOOP_DEV=$(sudo losetup --partscan --show --find {{IMG_FILE}})
trap 'sudo umount {{MNT_DIR}} 2>/dev/null || true; sudo losetup -d "$LOOP_DEV" 2>/dev/null || true; rm -rf {{MNT_DIR}};' EXIT
echo ">>> Using loop device: $LOOP_DEV"
echo ">>> Formatting EFI partition (FAT32)..."
sudo mkfs.vfat -F32 "${LOOP_DEV}p1"
echo ">>> Mounting partition..."
mkdir -p {{MNT_DIR}}
sudo mount "${LOOP_DEV}p1" {{MNT_DIR}}
echo ">>> Copying EFI executable to EFI/BOOT/BOOTX64.EFI..."
sudo mkdir -p {{MNT_DIR}}/EFI/BOOT
sudo cp {{EFI_FILE}} {{MNT_DIR}}/EFI/BOOT/BOOTX64.EFI
echo ">>> Syncing filesystem..."
sync
echo "Success! Bootable image created: {{IMG_FILE}}"
run: image
qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -drive format=raw,file={{IMG_FILE}}
clean:
@echo ">>> Cleaning up..."
-rm -vrf zig-cache zig-out
-rm -vf *.img bootx64*
@echo ">>> Cleanup complete."