diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3d52bf6 --- /dev/null +++ b/Makefile @@ -0,0 +1,54 @@ +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 |