c1ad0fc5/1/2026, 8:41:11 PM
~Makefile
.mak
Makefile
(text/x-cmake)
ASMCC = nasm
CC = gcc
LD = ld
CFLAGS = -m64 -ffreestanding -fno-stack-protector -nostdlib -nostartfiles -O2
LDFLAGS = -T kernel/linker.ld -nostdlib

SRCS = kernel/main.c kernel/vga.c kernel/pmm.c kernel/idt.c kernel/ps2.c kernel/timer.c
OBJS = $(SRCS:.c=.o) kernel/idt_asm.o kernel/multiboot.o kernel/entry.o modules/example_mod.o

all: kernel.bin

kernel/entry.o: kernel/entry.asm
	$(ASMCC) -f elf64 kernel/entry.asm -o kernel/entry.o

kernel/multiboot.o: kernel/multiboot.asm
	$(ASMCC) -f elf64 kernel/multiboot.asm -o kernel/multiboot.o

kernel/idt_asm.o: kernel/idt.S
	$(CC) -c kernel/idt.S -o kernel/idt_asm.o

kernel/%.o: kernel/%.c
	$(CC) $(CFLAGS) -c $< -o $@

modules/example_mod.o: modules/example_mod.c
	$(CC) $(CFLAGS) -c modules/example_mod.c -o modules/example_mod.o

kernel.bin: $(OBJS)
	$(LD) $(LDFLAGS) -o kernel.bin $(OBJS)

iso:
	mkdir -p iso/boot/grub
	cp kernel.bin iso/boot/kernel.bin
	printf 'set timeout=0\nset default=0\nmenuentry "CrystalOS" { multiboot2 /boot/kernel.bin }\n' > iso/boot/grub/grub.cfg
	grub-mkrescue -o crystalos.iso iso

start:
	qemu-system-x86_64 -cdrom crystalos.iso -m 512 -serial stdio -display sdl

clean:
	rm -f $(OBJS) kernel.bin crystalos.iso