summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--Makefile54
-rw-r--r--kernel/Makefile37
-rw-r--r--kernel/include/debug.h (renamed from include/debug.h)0
-rw-r--r--kernel/include/font.h (renamed from include/font.h)0
-rw-r--r--kernel/include/graphics.h (renamed from include/graphics.h)0
-rw-r--r--kernel/include/idt.h (renamed from include/idt.h)0
-rw-r--r--kernel/include/io.h (renamed from include/io.h)0
-rw-r--r--kernel/include/irq.h (renamed from include/irq.h)0
-rw-r--r--kernel/include/keyboard.h (renamed from include/keyboard.h)0
-rw-r--r--kernel/include/multiboot2.h (renamed from include/multiboot2.h)0
-rw-r--r--kernel/include/pic.h (renamed from include/pic.h)0
-rw-r--r--kernel/src/boot/boot.S (renamed from kernel/boot.S)0
-rw-r--r--kernel/src/boot/boot64.S (renamed from kernel/boot64.S)0
-rw-r--r--kernel/src/boot/header.S (renamed from kernel/header.S)0
-rw-r--r--kernel/src/boot/multiboot2.c (renamed from kernel/multiboot2.c)0
-rw-r--r--kernel/src/cpu/idt.c (renamed from kernel/idt.c)0
-rw-r--r--kernel/src/cpu/io.c (renamed from kernel/io.c)0
-rw-r--r--kernel/src/cpu/irq.c (renamed from kernel/irq.c)0
-rw-r--r--kernel/src/cpu/irq_stub.S (renamed from kernel/irq_stub.S)0
-rw-r--r--kernel/src/cpu/pic.c (renamed from kernel/pic.c)0
-rw-r--r--kernel/src/devices/keyboard.c (renamed from kernel/keyboard.c)0
-rw-r--r--kernel/src/grub.cfg (renamed from kernel/grub.cfg)0
-rw-r--r--kernel/src/kernel.ld (renamed from kernel/kernel.ld)0
-rw-r--r--kernel/src/main.c (renamed from kernel/main.c)0
-rw-r--r--kernel/src/misc/debug.c (renamed from kernel/debug.c)0
-rw-r--r--kernel/src/misc/graphics.c (renamed from kernel/graphics.c)0
27 files changed, 59 insertions, 38 deletions
diff --git a/.gitignore b/.gitignore
index 5d17157..4e18914 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,7 @@
-kernel.bin
+kernel/kernel.bin
kernel.iso
-kernel/*.o
-kernel/*.d
+**/*.o
+**/*.d
isodir
xbochs.log
bx_enh_dbg.ini
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
diff --git a/kernel/Makefile b/kernel/Makefile
new file mode 100644
index 0000000..8bdb9f7
--- /dev/null
+++ b/kernel/Makefile
@@ -0,0 +1,37 @@
+CFLAGS += -I include
+
+OBJS = \
+ src/boot/boot64.o \
+ src/boot/boot.o \
+ src/boot/header.o \
+ src/boot/multiboot2.o \
+ src/cpu/idt.o \
+ src/cpu/io.o \
+ src/cpu/irq.o \
+ src/cpu/irq_stub.o \
+ src/cpu/pic.o \
+ src/devices/keyboard.o \
+ src/main.o \
+ src/misc/debug.o \
+ src/misc/graphics.o \
+
+all: kernel.bin
+
+kernel.bin: $(OBJS) src/kernel.ld ../Makefile Makefile
+ $(info [kernel] $@)
+ @$(LD) $(LDFLAGS) -T src/kernel.ld $(OBJS) -o kernel.bin
+
+
+%.o: %.c
+ $(info [kernel] $@)
+ @$(CC) $(CFLAGS) -c $< -o $@
+
+
+%.o: %.S
+ $(info [kernel] $@)
+ @$(CC) $(CFLAGS) -c $< -o $@
+
+
+.PHONY: all
+
+-include $(OBJS:.o=.d)
diff --git a/include/debug.h b/kernel/include/debug.h
index ebe3a52..ebe3a52 100644
--- a/include/debug.h
+++ b/kernel/include/debug.h
diff --git a/include/font.h b/kernel/include/font.h
index 678a6c2..678a6c2 100644
--- a/include/font.h
+++ b/kernel/include/font.h
diff --git a/include/graphics.h b/kernel/include/graphics.h
index 84505d8..84505d8 100644
--- a/include/graphics.h
+++ b/kernel/include/graphics.h
diff --git a/include/idt.h b/kernel/include/idt.h
index 9ca9c3a..9ca9c3a 100644
--- a/include/idt.h
+++ b/kernel/include/idt.h
diff --git a/include/io.h b/kernel/include/io.h
index 76c401d..76c401d 100644
--- a/include/io.h
+++ b/kernel/include/io.h
diff --git a/include/irq.h b/kernel/include/irq.h
index f0e38d6..f0e38d6 100644
--- a/include/irq.h
+++ b/kernel/include/irq.h
diff --git a/include/keyboard.h b/kernel/include/keyboard.h
index 3a1b7f1..3a1b7f1 100644
--- a/include/keyboard.h
+++ b/kernel/include/keyboard.h
diff --git a/include/multiboot2.h b/kernel/include/multiboot2.h
index f22fd8e..f22fd8e 100644
--- a/include/multiboot2.h
+++ b/kernel/include/multiboot2.h
diff --git a/include/pic.h b/kernel/include/pic.h
index f1f4e44..f1f4e44 100644
--- a/include/pic.h
+++ b/kernel/include/pic.h
diff --git a/kernel/boot.S b/kernel/src/boot/boot.S
index ee35eeb..ee35eeb 100644
--- a/kernel/boot.S
+++ b/kernel/src/boot/boot.S
diff --git a/kernel/boot64.S b/kernel/src/boot/boot64.S
index be87412..be87412 100644
--- a/kernel/boot64.S
+++ b/kernel/src/boot/boot64.S
diff --git a/kernel/header.S b/kernel/src/boot/header.S
index bbcb9be..bbcb9be 100644
--- a/kernel/header.S
+++ b/kernel/src/boot/header.S
diff --git a/kernel/multiboot2.c b/kernel/src/boot/multiboot2.c
index e228ce1..e228ce1 100644
--- a/kernel/multiboot2.c
+++ b/kernel/src/boot/multiboot2.c
diff --git a/kernel/idt.c b/kernel/src/cpu/idt.c
index bf285b7..bf285b7 100644
--- a/kernel/idt.c
+++ b/kernel/src/cpu/idt.c
diff --git a/kernel/io.c b/kernel/src/cpu/io.c
index 6bf67d0..6bf67d0 100644
--- a/kernel/io.c
+++ b/kernel/src/cpu/io.c
diff --git a/kernel/irq.c b/kernel/src/cpu/irq.c
index 1e02f23..1e02f23 100644
--- a/kernel/irq.c
+++ b/kernel/src/cpu/irq.c
diff --git a/kernel/irq_stub.S b/kernel/src/cpu/irq_stub.S
index ddd197a..ddd197a 100644
--- a/kernel/irq_stub.S
+++ b/kernel/src/cpu/irq_stub.S
diff --git a/kernel/pic.c b/kernel/src/cpu/pic.c
index 801556d..801556d 100644
--- a/kernel/pic.c
+++ b/kernel/src/cpu/pic.c
diff --git a/kernel/keyboard.c b/kernel/src/devices/keyboard.c
index 105c3a8..105c3a8 100644
--- a/kernel/keyboard.c
+++ b/kernel/src/devices/keyboard.c
diff --git a/kernel/grub.cfg b/kernel/src/grub.cfg
index 05a13f7..05a13f7 100644
--- a/kernel/grub.cfg
+++ b/kernel/src/grub.cfg
diff --git a/kernel/kernel.ld b/kernel/src/kernel.ld
index da5c87c..da5c87c 100644
--- a/kernel/kernel.ld
+++ b/kernel/src/kernel.ld
diff --git a/kernel/main.c b/kernel/src/main.c
index 96f3572..96f3572 100644
--- a/kernel/main.c
+++ b/kernel/src/main.c
diff --git a/kernel/debug.c b/kernel/src/misc/debug.c
index 5f3c327..5f3c327 100644
--- a/kernel/debug.c
+++ b/kernel/src/misc/debug.c
diff --git a/kernel/graphics.c b/kernel/src/misc/graphics.c
index d4fc7c7..d4fc7c7 100644
--- a/kernel/graphics.c
+++ b/kernel/src/misc/graphics.c