#!/bin/sh COMMON_CC_EXTRA_FLAGS="-O3 -Wall -Wextra" COMMON_CC_FLAGS="-std=c23 ${COMMON_CC_EXTRA_FLAGS}" KERNEL_CC_FLAGS="-I dependencies/limine -I kernel/include -mno-sse -ffreestanding ${COMMON_CC_FLAGS}" if [ -e build.ninja ]; then echo build.ninja already exists. exit fi set -e echo "rule nasm" >> build.ninja echo " command = nasm -f elf64 \$in -o \$out" >> build.ninja echo "rule kernel_cc" >> build.ninja echo " depfile = \$out.d" >> build.ninja echo " command = cc -c -MD -MF \$out.d ${KERNEL_CC_FLAGS} \$in -o \$out" >> build.ninja echo "rule kernel_ld" >> build.ninja echo " command = ld -T kernel/link.ld \$in -o \$out" >> build.ninja ALL_KERNEL_OBJECTS="" for f in kernel/src/*.asm; do f=$(echo $f | sed -e 's/^kernel\/src\///') echo "build build/kernel/$f.o: nasm kernel/src/$f" >> build.ninja ALL_KERNEL_OBJECTS="${ALL_KERNEL_OBJECTS} build/kernel/$f.o" done for f in kernel/src/*.c; do f=$(echo $f | sed -e 's/^kernel\/src\///') echo "build build/kernel/$f.o: kernel_cc kernel/src/$f" >> build.ninja ALL_KERNEL_OBJECTS="${ALL_KERNEL_OBJECTS} build/kernel/$f.o" done echo "build build/kernel/kernel.elf: kernel_ld ${ALL_KERNEL_OBJECTS}" >> build.ninja echo "rule initfs" >> build.ninja echo " command =" \ "rm -rf build/initfs &&" \ "mkdir -p build/initfs/resx &&" \ "echo Hello! > build/initfs/resx/hello.txt &&" \ "cd build/initfs &&" \ "tar cf ../initfs.tar *" >> build.ninja echo "build build/initfs.tar: initfs" >> build.ninja echo "rule disk" >> build.ninja echo " command =" \ "rm -rf build/disk &&" \ "cp -r disk build/disk &&" \ "cp dependencies/limine/limine-uefi-cd.bin build/disk/limine/ &&" \ "cp dependencies/limine/limine-bios-cd.bin build/disk/limine/ &&" \ "cp dependencies/limine/limine-bios.sys build/disk/limine/ &&"\ "mkdir -p build/disk/EFI/BOOT &&" \ "cp dependencies/limine/BOOTX64.EFI build/disk/EFI/BOOT/ &&" \ "mkdir build/disk/calcite &&" \ "cp build/kernel/kernel.elf build/disk/calcite/ &&" \ "cp build/initfs.tar build/disk/calcite/ &&" \ "xorriso -as mkisofs -R -r -J -b limine/limine-bios-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table -hfsplus -apm-block-size 2048 --efi-boot limine/limine-uefi-cd.bin -efi-boot-part --efi-boot-image --protective-msdos-label build/disk -o build/disk.iso &&" \ "dependencies/limine/limine bios-install build/disk.iso" >> build.ninja echo "build build/disk.iso: disk | build/kernel/kernel.elf build/initfs.tar" >> build.ninja echo "default build/disk.iso" >> build.ninja