diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 42 |
1 files changed, 22 insertions, 20 deletions
@@ -2,41 +2,43 @@ AS = i686-elf-as CC = i686-elf-gcc CFLAGS = -std=gnu99 -ffreestanding -O2 -Wall -Wextra CFLAGS += -mgeneral-regs-only -CFLAGS += -I. +CFLAGS += -Isrc/ LFLAGS = -ffreestanding -O2 -nostdlib -lgcc QFLAGS = -no-reboot -d guest_errors,int,pcall,cpu_reset -OBJ = $(patsubst %.s,%.o,$(wildcard platform/*.s)) -OBJ += $(patsubst %.c,%.o,$(wildcard kernel/*.c)) +OBJ = $(patsubst src/%.s,out/obj/%.s.o,$(shell find src/ -type f -name '*.s')) +OBJ += $(patsubst src/%.c,out/obj/%.c.o,$(shell find src/ -type f -name '*.c')) .PHONY: boot debug clean -boot: kernel.bin - qemu-system-i386 -kernel kernel.bin $(QFLAGS) -no-shutdown +boot: out/fs/boot/kernel.bin + qemu-system-i386 -kernel $< $(QFLAGS) -no-shutdown debug: kernel.bin - qemu-system-i386 -kernel kernel.bin $(QFLAGS) -s -S & + qemu-system-i386 -kernel $< $(QFLAGS) -s -S & sleep 1 gdb clean: - rm -vf kernel.bin - rm -vf **/*.o - -boot.iso: kernel.bin grub.cfg - mkdir iso_tmp - mkdir -p iso_tmp/boot/grub - cp kernel.bin iso_tmp/boot - cp grub.cfg iso_tmp/boot/grub - grub-mkrescue -o $@ iso_tmp - rm -rv iso_tmp - -kernel.bin: $(OBJ) + rm -rv out/ + + +out/boot.iso: out/fs/boot/kernel.bin out/fs/boot/grub/grub.cfg + grub-mkrescue -o $@ out/fs/ + +out/fs/boot/grub/grub.cfg: grub.cfg + @mkdir -p $(@D) + cp $< $@ + +out/fs/boot/kernel.bin: $(OBJ) + @mkdir -p $(@D) $(CC) $(LFLAGS) -T linker.ld $^ -o $@ grub-file --is-x86-multiboot $@ -platform/%.o: platform/%.s +out/obj/%.s.o: src/%.s + @mkdir -p $(@D) $(AS) $^ -o $@ -%.o: %.c +out/obj/%.c.o: src/%.c + @mkdir -p $(@D) $(CC) $(CFLAGS) -c $^ -o $@ |