summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile54
1 files changed, 54 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b16507e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,54 @@
+ARCH = x86_64-elf-
+CC = $(ARCH)gcc
+AS = $(ARCH)as
+LD = $(ARCH)ld
+OBJDUMP = $(ARCH)objcopy
+OBJCOPY = $(ARCH)objdump
+
+
+CFLAGS = -Wall -Werror -Wno-error=infinite-recursion -O -fno-omit-frame-pointer -ggdb
+CFLAGS += -MD
+CFLAGS += -ffreestanding -fno-common -nostdlib
+CFLAGS += -I.
+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 \
+
+kernel.iso: kernel.bin
+ 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
+
+kernel.bin: $(OBJS) $K/kernel.ld Makefile
+ $(LD) $(LDFLAGS) -T $K/kernel.ld $(OBJS) -o kernel.bin
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c $< -o $@
+
+
+%.o: %.S
+ $(CC) $(CFLAGS) -c $< -o $@
+
+
+.PHONY: qemu clean run
+
+QEMU = qemu-system-x86_64
+QEMUFLAGS =
+
+qemu: kernel.iso
+ $(QEMU) $(QEMUFLAGS) -cdrom kernel.iso
+
+clean:
+ rm -f kernel.bin kernel.iso $K/*.o $K/*.d xbochs.log bx_enh_dbg.ini
+ rm -rf isodir
+
+run: qemu