diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 70 |
1 files changed, 39 insertions, 31 deletions
@@ -1,8 +1,8 @@ ARCH=i686-elf -CC=$(ARCH)-gcc -AS=$(ARCH)-as -CFLAGS=-ffreestanding -O2 -Wall -Wextra +export CC=$(ARCH)-gcc +export AS=$(ARCH)-as +export CFLAGS=-ffreestanding -O2 -Wall -Wextra MKDIR=mkdir -p RM=rm -rf @@ -10,24 +10,49 @@ CP=cp QEMU=qemu-system-x86_64 SOURCE_DIR=src -BUILD_DIR=build +AS_SOURCE_DIR=$(SOURCE_DIR)/as +C_SOURCE_DIR=$(SOURCE_DIR)/c +export BUILD_DIR=${CURDIR}/build ISO_DIR=isodir TARGET=myos BINARY=$(BUILD_DIR)/$(TARGET).bin ISO=$(TARGET).iso -OBJ_FILES=boot.o kernel.o gdt.o idt.o keyboard.o keymap.o vga.o string.o tty.o stdio.o heap.o +CRTI_SOURCE=crti.s +CRTN_SOURCE=crtn.s +AS_SOURCE=boot.s +C_SOURCES=gdt.c heap.c idt.c kernel.c keyboard.c keymap.c stdio.c string.c tty.c vga.c + +C_SOURCE_FILES=$(patsubst %,$(C_SOURCE_DIR)/%,$(C_SOURCES)) +export C_OBJECTS=$(patsubst %,$(BUILD_DIR)/%,$(C_SOURCES:c=o)) + +AS_OBJECT=$(patsubst %,$(BUILD_DIR)/%,$(AS_SOURCE:s=o)) +CRTI_OBJECT=$(patsubst %,$(BUILD_DIR)/%,$(CRTI_SOURCE:s=o)) +CRTN_OBJECT=$(patsubst %,$(BUILD_DIR)/%,$(CRTN_SOURCE:s=o)) + +AS_SOURCES=$(AS_SOURCE) $(CRTI_SOURCE) $(CRTN_SOURCE) +AS_SOURCE_FILES=$(patsubst %,$(AS_SOURCE_DIR)/%,$(AS_SOURCES)) +export AS_OBJECTS=$(patsubst %,$(BUILD_DIR)/%,$(AS_SOURCES:s=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 +OBJ=$(CRTI_OBJECT) $(CRTBEGIN_OBJ) $(AS_OBJECT) $(C_OBJECTS) $(CRTEND_OBJ) $(CRTN_OBJECT) -# Default action is set to making kernel binary -.PHONY: all run run-iso clean -all: $(BINARY) -# Creating iso file +.PHONY: all compile run run-iso clean +all: compile + +$(BINARY): $(OBJ) + $(CC) -T $(SOURCE_DIR)/linker.ld -o $(BINARY) $(CFLAGS) -nostdlib -lgcc $(OBJ) + +compile: $(AS_SOURCE_FILES) $(C_SOURCE_FILES) + $(MKDIR) $(BUILD_DIR) + $(MAKE) --directory $(AS_SOURCE_DIR) + $(MAKE) --directory $(C_SOURCE_DIR) + $(MAKE) $(BINARY) + $(ISO): $(BINARY) grub-file --is-x86-multiboot $(BINARY) mkdir -p $(ISO_DIR)/boot/grub @@ -35,28 +60,11 @@ $(ISO): $(BINARY) $(CP) $(SOURCE_DIR)/grub.cfg $(ISO_DIR)/boot/grub/grub.cfg grub-mkrescue -o $(ISO) $(ISO_DIR) -# Linking object files into kernel binary -$(BINARY): $(OBJ) - $(CC) -T $(SOURCE_DIR)/linker.ld -o $@ $(CFLAGS) -nostdlib $^ -lgcc - -# Compiling as sources -$(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.s - $(MKDIR) $(BUILD_DIR) - $(AS) $< -o $@ - -# Compiling C sources -$(BUILD_DIR)/%.o: $(SOURCE_DIR)/%.c - $(MKDIR) $(BUILD_DIR) - $(CC) -c $< -o $@ -std=gnu99 $(CFLAGS) - -# Boot kernel binary in qemu -run: $(BINARY) - $(QEMU) -kernel $< +run: compile + $(QEMU) -kernel $(BINARY) -# Boot iso in qemu -run-iso: $(ISO) - $(QEMU) -cdrom $< +run-iso: compile $(ISO) + $(QEMU) -cdrom $(ISO) -# Clean build files clean: $(RM) $(BUILD_DIR) $(ISO_DIR) $(ISO) |
