diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 54 |
1 files changed, 19 insertions, 35 deletions
@@ -1,3 +1,5 @@ +export + ARCH = x86_64-elf- CC = $(ARCH)gcc AS = $(ARCH)as @@ -5,51 +7,33 @@ LD = $(ARCH)ld OBJDUMP = $(ARCH)objcopy OBJCOPY = $(ARCH)objdump - CFLAGS = -Wall -Werror -Wno-error=infinite-recursion -O -fno-omit-frame-pointer # -mgeneral-regs-only disables SIMD instructions CFLAGS += -MD -O3 -mgeneral-regs-only CFLAGS += -ffreestanding -fno-common -nostdlib -CFLAGS += -I include CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) CFLAGS += -fno-pie -no-pie -fno-pic LDFLAGS = -z max-page-size=4096 -K=kernel - -OBJS = \ - $K/header.o \ - $K/boot.o \ - $K/boot64.o \ - $K/main.o \ - $K/graphics.o \ - $K/multiboot2.o \ - $K/debug.o \ - $K/idt.o \ - $K/irq.o \ - $K/irq_stub.o \ - $K/io.o \ - $K/pic.o \ - $K/keyboard.o \ +MAKE:=$(MAKE) -s -kernel.iso: kernel.bin $K/grub.cfg - mkdir -p isodir/boot/grub - cp kernel.bin isodir/boot/kernel.bin - cp $K/grub.cfg isodir/boot/grub/grub.cfg - grub-mkrescue -o kernel.iso isodir +K = kernel -kernel.bin: $(OBJS) $K/kernel.ld Makefile - $(LD) $(LDFLAGS) -T $K/kernel.ld $(OBJS) -o kernel.bin +all: kernel.iso -%.o: %.c - $(CC) $(CFLAGS) -c $< -o $@ +$K/kernel.bin: FORCE + @$(MAKE) -C $(@D) +FORCE: +kernel.iso: $K/kernel.bin $K/src/grub.cfg Makefile + $(info [all] $@) + @mkdir -p isodir/boot/grub + @cp $K/kernel.bin isodir/boot/kernel.bin + @cp $K/src/grub.cfg isodir/boot/grub/grub.cfg + @grub-mkrescue -o kernel.iso isodir 2> /dev/null -%.o: %.S - $(CC) $(CFLAGS) -c $< -o $@ - -.PHONY: qemu bochs clean run +.PHONY: all build qemu bochs clean QEMU = qemu-system-x86_64 BOCHS = bochs -q @@ -61,7 +45,7 @@ bochs: kernel.iso $(BOCHS) -qf .bochsrc clean: - rm -f kernel.bin kernel.iso $K/*.o $K/*.d xbochs.log bx_enh_dbg.ini - rm -rf isodir - -run: qemu + @find -name "*.o" -exec rm {} \; + @find -name "*.d" -exec rm {} \; + @rm -f kernel.iso $K/kernel.bin xbochs.log bx_enh_dbg.ini + @rm -rf isodir |
