67 lines
2.5 KiB
Bash
67 lines
2.5 KiB
Bash
#!/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
|