summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile54
1 files changed, 19 insertions, 35 deletions
diff --git a/Makefile b/Makefile
index 7d3a97a..e9c8111 100644
--- a/Makefile
+++ b/Makefile
@@ -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