CC = i386-elf-gcc LD = i386-elf-ld CFLAGS = -m32 -ffreestanding -fno-builtin -Wall -Wextra -Wshadow -std=c23 LDFLAGS = SRC_C := src/kernel.c src/string.c src/vga.c SRC_ASM := src/boot.asm OBJ_C := $(SRC_C:src/%.c=.build/%.o) OBJ_ASM := $(SRC_ASM:src/%.asm=.build/%.o) OBJS := $(OBJ_C) $(OBJ_ASM) kernel: .build/kernel @echo "Kernel created at '.build/kernel'" iso: .build/nub-os.iso @echo "ISO created at '.build/nub-os.iso'" clean: @rm -r .build 2>/dev/null || true build-dir: mkdir .build 2>/dev/null || true .build/nub-os.iso: .build/kernel grub.cfg mkdir -p .build/nub-os/boot/grub cp grub.cfg .build/nub-os/boot/grub cp .build/kernel .build/nub-os/boot/ grub-mkrescue -o .build/nub-os.iso .build/nub-os/ .build/kernel: $(OBJS) | linker.ld $(LD) $(LDFLAGS) -m elf_i386 -T linker.ld -o $@ $^ .build/%.o: src/%.c | build-dir $(CC) $(CFLAGS) -c -o $@ $< .build/%.o: src/%.asm | build-dir nasm -f elf32 -o $@ $<