summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorAleksa Vučković <aleksav013@gmail.com>2021-10-11 11:35:59 +0200
committerAleksa Vučković <aleksav013@gmail.com>2021-10-11 11:35:59 +0200
commit578d467b80015c52d0c96c8443b4c13936f33365 (patch)
tree05525782bc3baf5a01d8b657f01934e1e598a775 /Makefile
parent3a9ccbd8e762477f75d8b164a1d99383a01414ae (diff)
(IDT + keyboard) finally working
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile36
1 files changed, 27 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index b427918..127e576 100644
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,13 @@
-CC=i686-elf-gcc
-AS=i686-elf-as
-CFLAGS=-ffreestanding -O2 -Wall -Wextra
+ARCH=i686-elf
+
+CC=$(ARCH)-gcc
+AS=$(ARCH)-as
+CFLAGS=-ffreestanding -O2 -Wall -Wextra -ggdb
MKDIR=mkdir -p
RM=rm -rf
CP=cp
+QEMU=qemu-system-x86_64
SOURCE_DIR=src
BUILD_DIR=build
@@ -12,11 +15,16 @@ ISO_DIR=isodir
TARGET=myos
-OBJ_FILES=boot.o kernel.o gdt.o
+OBJ_FILES=boot.o kernel.o gdt.o idt.o
CRTBEGIN_OBJ=$(shell $(CC) -print-file-name=crtbegin.o)
CRTEND_OBJ=$(shell $(CC) -print-file-name=crtend.o)
OBJ=$(BUILD_DIR)/crti.o $(CRTBEGIN_OBJ) $(patsubst %,$(BUILD_DIR)/%,$(OBJ_FILES)) $(CRTEND_OBJ) $(BUILD_DIR)/crtn.o
+
+# Default action is set to making kernel binary
+.PHONY: all
+all: $(BUILD_DIR)/$(TARGET).bin
+
# Creating iso file
$(TARGET).iso: $(BUILD_DIR)/$(TARGET).bin
grub-file --is-x86-multiboot $(BUILD_DIR)/myos.bin
@@ -25,9 +33,8 @@ $(TARGET).iso: $(BUILD_DIR)/$(TARGET).bin
$(CP) $(SOURCE_DIR)/grub.cfg $(ISO_DIR)/boot/grub/grub.cfg
grub-mkrescue -o $(TARGET).iso $(ISO_DIR)
-# Linking object files
+# Linking object files into kernel binary
$(BUILD_DIR)/$(TARGET).bin: $(OBJ)
- $(MKDIR) $(BUILD_DIR)
$(CC) -T $(SOURCE_DIR)/linker.ld -o $@ $(CFLAGS) -nostdlib $^ -lgcc
# Compiling as sources
@@ -40,10 +47,21 @@ $(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.c
$(MKDIR) $(BUILD_DIR)
$(CC) -c $< -o $@ -std=gnu99 $(CFLAGS)
-# Boot kernel in qemu
+# Boot kernel binary in qemu
.PHONY: run
-run: $(TARGET).iso
- qemu-system-x86_64 -cdrom $(TARGET).iso
+run: $(BUILD_DIR)/$(TARGET).bin
+ $(QEMU) -kernel $^
+
+# Boot iso in qemu
+.PHONY: run-iso
+run-iso: $(TARGET).iso
+ $(QEMU) -cdrom $^
+
+# Debug kernel binary in gdb
+.PHONY: debug
+debug: $(TARGET).bin
+ $(QEMU) -kernel $^ -s -S &
+ gdb -x .gdbinit
# Clean build files
.PHONY: clean