NAME = os CC = i686-elf-gcc ASM = i686-elf-as CFLAGS = -std=gnu99 -ffreestanding -O2 -Wall -Wextra -msse -g -Isrc -Isrc/lua LFLAGS = -ffreestanding -O2 -nostdlib -lgcc -g SDIR = src ODIR = obj SRC = $(wildcard $(SDIR)/*.c) OBJ = $(patsubst $(SDIR)/%.c,$(ODIR)/%.o,$(SRC)) LUADIR = src/lua LUAODIR = obj/lua LUASRC = $(wildcard $(LUADIR)/*.c) LUAOBJ = $(patsubst $(LUADIR)/%.c,$(LUAODIR)/%.o,$(LUASRC)) LUACFLAGS = -DLUA_C89_NUMBERS -Wno-unused-variable -Wno-unused-value -Wno-unused-parameter -Wno-unused-but-set-variable ASMODIR = obj/asm ASMSRC = $(wildcard $(SDIR)/*.s) ASMOBJ = $(patsubst $(SDIR)/%.s,$(ASMODIR)/%.o,$(ASMSRC)) default: kernel.bin kernel.bin: $(OBJ) $(ASMOBJ) $(LUAOBJ) $(CC) -T linker.ld -o $@ $^ $(LFLAGS) $(ODIR)/%.o: $(SDIR)/%.c $(ODIR) $(CC) $(CFLAGS) -c -o $@ $< $(ASMODIR)/%.o: $(SDIR)/%.s $(ASMODIR) $(ASM) -g -c -o $@ $< $(LUAODIR)/%.o: $(LUADIR)/%.c $(LUAODIR) $(CC) $(CFLAGS) $(LUACFLAGS) -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 -cpu coreduo debug: kernel.bin qemu-system-i386 -s -S -kernel kernel.bin -cpu coreduo $(ODIR): mkdir -p $@ $(ASMODIR): mkdir -p $@ $(LUAODIR): mkdir -p $@ .PHONY: clean clean: rm -rf $(ODIR) rm -rf $(ASMODIR) rm -rf $(LUAODIR) rm -f boot.o rm -rf isodir rm -f $(NAME).iso