Files
os-the-second/build.sh
2026-05-01 12:43:49 +03:00

27 lines
1.1 KiB
Bash
Executable File

#!/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