###CONFIGURATION ARCH := i686 CROSS := $(ARCH)-elf- AS := $(CROSS)as CC := $(CROSS)gcc LD := $(CROSS)ld QEMU := qemu-system-i386 CFLAGS := -ffreestanding -nostdlib -lgcc -g LDFLAGS := -T linker.ld -nostdlib SRC_DIR := src OBJ_DIR := obj BIN_DIR := build LOADER_DIR := module_bootloader SOURCES := $(wildcard $(SRC_DIR)/*.c) $(wildcard $(SRC_DIR)/*.s) OBJECTS := $(patsubst $(SRC_DIR)/%, $(OBJ_DIR)/%, $(SOURCES:.c=.o)) OBJECTS := $(OBJECTS:.s=.o) OUT_ELF := $(BIN_DIR)/ukern.elf OUT_ISO := $(BIN_DIR)/uOS.iso ###RULES .PHONY: all all: $(OUT_ELF) #Build Targets $(OUT_ELF): $(OBJECTS) @mkdir -p $(BIN_DIR) $(LD) $(LDFLAGS) -o $@ $^ $(shell $(CC) -print-libgcc-file-name) $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -c $< -o $@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.s @mkdir -p $(dir $@) $(AS) $< -o $@ #Related targets $(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 $(OBJ_DIR) $(BIN_DIR) .PHONY: iso iso: $(OUT_ISO) .PHONY: run run: $(QEMU) -kernel $(OUT_ELF) .PHONY: run_iso run_iso: $(QEMU) -cdrom $(OUT_ISO)