#!/bin/bash set -e export LC_ALL=C nasm -fbin -o 1.bin src/boot/x86/1.asm nasm -DSTAGE2_SIZE=$(stat --printf="%s" 1.bin) -fbin -o 0.bin src/boot/x86/0.asm i386-unknown-elf-gcc -s -Wl,--export-dynamic -fno-pic -flto -Os -mgeneral-regs-only -Isrc/kernel/ -ffreestanding -nostdlib -nostartfiles -o kernel src/kernel/x86/ppm.c src/kernel/x86/vpm.c src/kernel/x86/log.c src/kernel/tinyubsan.c src/kernel/main.c -fsanitize=undefined dd if=/dev/zero of=drive.bin bs=1024 count=10240 /bin/echo -e 'mklabel msdos\nmkpart primary 8192b -1s\nquit\n' | parted drive.bin [[ "$(udisksctl loop-setup -f drive.bin)" =~ (/dev/loop[0-9]+) ]] && LOOPDEV="${BASH_REMATCH[1]}" sudo mkfs.ext2 -E root_perms=777 -b 1024 "${LOOPDEV}p1" sleep 0.5 [[ "$(udisksctl mount -b ${LOOPDEV}p1)" =~ (/run/.+) ]] && MOUNTDIR="${BASH_REMATCH[1]}" cp ./kernel "${MOUNTDIR}/kernel" udisksctl unmount -b "${LOOPDEV}p1" udisksctl loop-delete -b "${LOOPDEV}" # Copy first stage bootloader without overwriting MBR dd if=0.bin of=drive.bin bs=1 count=440 seek=0 conv=notrunc,nocreat # Copy second stage bootloader, hope it's not too fat dd if=1.bin of=drive.bin bs=1 seek=512 conv=notrunc,nocreat