NAME = os CC = i686-elf-gcc ASM = i686-elf-as CFLAGS = -std=gnu99 -ffreestanding -O2 -Wall -Wextra -g LFLAGS = -ffreestanding -O2 -nostdlib -lgcc -g SDIR = src ODIR = obj SRC = $(wildcard $(SDIR)/*.c) OBJ = $(patsubst $(SDIR)/%.c,$(ODIR)/%.o,$(SRC)) ASMODIR = asm_obj ASMSRC = $(wildcard $(SDIR)/*.s) ASMOBJ = $(patsubst $(SDIR)/%.s,$(ASMODIR)/%.o,$(ASMSRC)) default: kernel.bin kernel.bin: $(OBJ) $(ASMOBJ) $(CC) -T linker.ld -o $@ $^ $(LFLAGS) $(ODIR)/%.o: $(SDIR)/%.c $(ODIR) $(CC) $(CFLAGS) -c -o $@ $< $(ASMODIR)/%.o: $(SDIR)/%.s $(ASMODIR) $(ASM) -g -c -o $@ $< $(NAME).iso: kernel.bin mkdir -p isodir/boot/grub cp $< isodir/boot/ cp grub.cfg isodir/boot/grub/grub.cfg grub-mkrescue -o $@ isodir .PHONY: test debug test: os.iso qemu-system-i386 -cdrom os.iso debug: kernel.bin qemu-system-i386 -s -S -kernel kernel.bin $(ODIR): mkdir -p $@ $(ASMODIR): mkdir -p $@ .PHONY: clean clean: rm -rf $(ODIR) rm -rf $(ASMODIR) rm -f boot.o rm -rf isodir rm -f $(NAME).iso