41 lines
964 B
Makefile
41 lines
964 B
Makefile
CC = i686-elf-gcc
|
|
LD = i686-elf-ld
|
|
|
|
OSNAME := rockos
|
|
|
|
C_SOURCES := $(shell find kernel -type f -name '*.c')
|
|
S_SOURCES := $(shell find kernel -type f -name '*.S')
|
|
|
|
OBJECTS := $(patsubst %, obj/%.o, $(C_SOURCES) $(S_SOURCES))
|
|
|
|
CFLAGS := -ffreestanding -O2 -Wall -Wextra -Ikernel
|
|
LDFLAGS := -T kernel/linker.ld
|
|
|
|
.PHONY: all run clean
|
|
|
|
all: $(OSNAME).iso
|
|
|
|
$(OSNAME).bin: $(OBJECTS) kernel/linker.ld
|
|
$(LD) $(LDFLAGS) -o $@ $(OBJECTS)
|
|
|
|
$(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
|
|
|
|
obj/%.c.o: %.c
|
|
@mkdir -p $(dir $@)
|
|
$(CC) -c $< -o $@ $(CFLAGS)
|
|
|
|
obj/%.S.o: %.S
|
|
@mkdir -p $(dir $@)
|
|
$(CC) -c $< -o $@ $(CFLAGS)
|
|
|
|
run: $(OSNAME).iso
|
|
qemu-system-i386 -device VGA,edid=on -cdrom $(OSNAME).iso
|
|
|
|
clean:
|
|
@echo "Cleaning up build artifacts..."
|
|
rm -rf $(OSNAME).iso $(OSNAME).bin obj isodir compile_commands.json *.img
|
|
rm -rf .cache/
|