2026-06-09 23:16:25 -05:00
|
|
|
CC = i686-elf-gcc
|
|
|
|
|
LD = i686-elf-ld
|
|
|
|
|
|
2026-06-10 18:28:33 -05:00
|
|
|
OSNAME := rockos
|
2026-06-09 23:16:25 -05:00
|
|
|
|
2026-06-10 18:28:33 -05:00
|
|
|
C_SOURCES := $(shell find kernel -type f -name '*.c')
|
|
|
|
|
S_SOURCES := $(shell find kernel -type f -name '*.s')
|
2026-06-10 09:39:37 -04:00
|
|
|
|
2026-06-12 23:03:00 -04:00
|
|
|
# This correctly generates paths like obj/kernel/main.o
|
2026-06-10 18:28:33 -05:00
|
|
|
OBJECTS := $(patsubst %.c, obj/%.o, $(C_SOURCES)) $(patsubst %.s, obj/%.o, $(S_SOURCES))
|
2026-06-10 09:39:37 -04:00
|
|
|
|
2026-06-10 18:28:33 -05:00
|
|
|
CFLAGS := -ffreestanding -O2 -Wall -Wextra -Ikernel
|
|
|
|
|
LDFLAGS := -T kernel/linker.ld
|
2026-06-09 23:16:25 -05:00
|
|
|
|
2026-06-10 18:28:33 -05:00
|
|
|
.PHONY: all run clean
|
2026-06-10 09:39:37 -04:00
|
|
|
|
2026-06-12 23:03:00 -04:00
|
|
|
all: $(OSNAME).iso
|
|
|
|
|
|
2026-06-10 18:28:33 -05:00
|
|
|
$(OSNAME).bin: $(OBJECTS)
|
|
|
|
|
$(LD) $(LDFLAGS) -o $@ $(OBJECTS)
|
2026-06-10 09:39:37 -04:00
|
|
|
|
2026-06-10 18:28:33 -05:00
|
|
|
$(OSNAME).iso: $(OSNAME).bin grub.cfg
|
|
|
|
|
mkdir -p isodir/boot/grub
|
|
|
|
|
cp $(OSNAME).bin isodir/boot/$(OSNAME)
|
|
|
|
|
cp grub.cfg isodir/boot/grub/grub.cfg
|
|
|
|
|
grub-mkrescue -o $(OSNAME).iso isodir
|
2026-06-09 23:16:25 -05:00
|
|
|
|
2026-06-12 23:03:00 -04:00
|
|
|
# FIX: Pattern rules now explicitly expect the 'kernel' directory layout
|
|
|
|
|
obj/kernel/%.o: kernel/%.c
|
2026-06-10 18:28:33 -05:00
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
|
$(CC) -c $< -o $@ $(CFLAGS)
|
2026-06-09 23:16:25 -05:00
|
|
|
|
2026-06-12 23:03:00 -04:00
|
|
|
obj/kernel/%.o: kernel/%.s
|
2026-06-10 18:28:33 -05:00
|
|
|
@mkdir -p $(dir $@)
|
|
|
|
|
$(CC) -c $< -o $@ $(CFLAGS)
|
2026-06-09 23:16:25 -05:00
|
|
|
|
2026-06-10 18:28:33 -05:00
|
|
|
run: $(OSNAME).iso
|
|
|
|
|
qemu-system-i386 -cdrom $(OSNAME).iso
|
2026-06-09 23:16:25 -05:00
|
|
|
|
2026-06-10 18:28:33 -05:00
|
|
|
clean:
|
|
|
|
|
@echo "Cleaning up build artifacts..."
|
|
|
|
|
rm -rf $(OSNAME).iso $(OSNAME).bin obj isodir
|