diff --git a/Makefile b/Makefile index bd02965..e945ab9 100644 --- a/Makefile +++ b/Makefile @@ -1,57 +1,66 @@ -# Makefile +###CONFIGURATION +ARCH := i686 +CROSS := $(ARCH)-elf- +AS := $(CROSS)as +CC := $(CROSS)gcc +LD := $(CROSS)ld +QEMU := qemu-system-i386 -#Some definitions -SRC_DIR = src -BUILD_DIR = build -LOADER_DIR = module_bootloader -LOADER_NAME = uOS.iso -LOADER_IMG = $(BUILD_DIR)/$(LOADER_NAME) +CFLAGS := -ffreestanding -nostdlib -lgcc -g +LDFLAGS := -T linker.ld -nostdlib -KERNEL_MAIN = $(SRC_DIR)/main.c -KERNEL_MAIN_OBJ = $(BUILD_DIR)/main.o +SRC_DIR := src +OBJ_DIR := obj +BIN_DIR := build +LOADER_DIR := module_bootloader -ENTRY_ASM = $(SRC_DIR)/start.s -ENTRY_ASM_OBJ = $(BUILD_DIR)/start.o +SOURCES := $(wildcard $(SRC_DIR)/*.c) $(wildcard $(SRC_DIR)/*.s) +OBJECTS := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(SOURCES:.c=.o)) +OBJECTS := $(OBJECTS:.s=.o) -LINKING_RECIPE = $(SRC_DIR)/linker.ld -KERNEL_IMG = $(BUILD_DIR)/ukern.elf +OUT_ELF := $(BIN_DIR)/ukern.elf +OUT_ISO := $(BIN_DIR)/uOS.iso -QEMU = qemu-system-i386 -GCC = i686-elf-gcc +###RULES -#Actual recipe -all: $(KERNEL_IMG) +.PHONY: all +all: $(OUT_ELF) -$(BUILD_DIR): - mkdir -p $(BUILD_DIR) +#Build Targets +$(OUT_ELF): $(OBJECTS) + @mkdir -p $(BIN_DIR) + $(LD) $(LDFLAGS) -o $@ $^ -$(KERNEL_MAIN_OBJ): - $(GCC) -std=gnu99 -ffreestanding -g -c $(KERNEL_MAIN) -o $(BUILD_DIR)/main.o +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) -c $< -o $@ -$(ENTRY_ASM_OBJ): - $(GCC) -std=gnu99 -ffreestanding -g -c $(ENTRY_ASM) -o $(ENTRY_ASM_OBJ) +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.s + @mkdir -p $(dir $@) + $(AS) $< -o $@ -#now kith (link) -$(KERNEL_IMG): $(KERNEL_MAIN_OBJ) $(ENTRY_ASM_OBJ) - $(GCC) -ffreestanding -nostdlib -g -T $(LINKING_RECIPE) $(ENTRY_ASM_OBJ) $(KERNEL_MAIN_OBJ) -o $(KERNEL_IMG) -lgcc +#Related targets -run: all - $(QEMU) -kernel $(KERNEL_IMG) -$(LOADER_IMG): $(KERNEL_IMG) - cp $(KERNEL_IMG) $(LOADER_DIR)/src/boot/; \ - cd $(LOADER_DIR); \ - make all; \ - cd ..; \ - cp $(LOADER_DIR)/$(LOADER_IMG) $(BUILD_DIR)/ - -iso: $(LOADER_IMG) - -run_iso: iso - $(QEMU) -cdrom $(LOADER_IMG) +$(OUT_ISO): $(OUT_ELF) + @cp $(OUT_ELF) $(LOADER_DIR)/src/boot/ + @$(MAKE) -C $(LOADER_DIR) all + @cp $(LOADER_DIR)/$(OUT_ISO) $(BIN_DIR)/ +#Utility +.PHONY: clean clean: - rm -rf $(BUILD_DIR)/* + rm -rf $(OBJ_DIR) $(BIN_DIR)i +.PHONY: iso +iso: $(OUT_ISO) + +.PHONY: run +run: + $(QEMU) -kernel $(OUT_ELF) + +.PHONY: run_iso +run_iso: + $(QEMU) -cdrom $(OUT_ISO) diff --git a/src/linker.ld b/linker.ld similarity index 100% rename from src/linker.ld rename to linker.ld diff --git a/module_bootloader/Makefile b/module_bootloader/Makefile index 072aca3..a153f28 100644 --- a/module_bootloader/Makefile +++ b/module_bootloader/Makefile @@ -7,3 +7,7 @@ BUILD_DIR = build all: grub-mkrescue -o $(BUILD_DIR)/uOS.iso $(SRC_DIR) + +.PHONY: clean +clean: + rm $(BUILD_DIR)/*