52 lines
1.4 KiB
Makefile
52 lines
1.4 KiB
Makefile
IMG_FILE := 'small.img'
|
|
IMG_SIZE := '36'
|
|
EFI_NAME := 'bootx64'
|
|
EFI_FILE := 'bootx64.efi'
|
|
MNT_DIR := 'esp_mnt'
|
|
|
|
set quiet
|
|
|
|
default: image
|
|
|
|
build:
|
|
echo ">>> Building UEFI executable ({{EFI_FILE}})..."
|
|
zig build-exe -OReleaseFast -target x86_64-uefi-msvc --name {{EFI_NAME}} main.zig
|
|
|
|
_init:
|
|
echo ">>> Creating blank disk image: {{IMG_FILE}} ({{IMG_SIZE}}MB)..."
|
|
dd if=/dev/zero of={{IMG_FILE}} bs=1M count={{IMG_SIZE}}
|
|
|
|
sudo -v
|
|
|
|
echo ">>> Creating GPT and EFI System Partition..."
|
|
sudo sgdisk --new=1:0:0 --typecode=1:ef00 {{IMG_FILE}}
|
|
|
|
image: build _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 ">>> Installing EFI executable..."
|
|
sudo mkdir -p {{MNT_DIR}}/EFI/BOOT
|
|
sudo cp {{EFI_FILE}} {{MNT_DIR}}/EFI/BOOT/BOOTX64.EFI
|
|
sync
|
|
|
|
run: image
|
|
echo ">>> Booting image in qemu..."
|
|
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-cache zig-out
|
|
rm -vf *.efi *.pdb *.img
|