CC = i686-elf-gcc LD = i686-elf-ld OBJCOPY = i686-elf-objcopy CFLAGS = -m32 -ffreestanding -O2 -Wall -Wextra -nostdlib ASFLAGS = -m32 BOOT_DIR := boot KERNEL_DIR := kernel BUILD_DIR := build BOOT_BIN := $(BUILD_DIR)/boot.bin KERNEL_BIN := $(BUILD_DIR)/kernel.bin IMAGE := os.img .PHONY: all clean run all: $(IMAGE) $(BUILD_DIR)/%.o: $(BOOT_DIR)/%.s | $(BUILD_DIR) $(CC) $(ASFLAGS) -c $< -o $@ $(BUILD_DIR)/%.o: $(KERNEL_DIR)/%.s | $(BUILD_DIR) $(CC) $(ASFLAGS) -c $< -o $@ $(BUILD_DIR)/%.o: $(KERNEL_DIR)/%.c | $(BUILD_DIR) $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/boot.elf: $(BUILD_DIR)/boot.o $(BOOT_DIR)/boot.ld $(LD) -T $(BOOT_DIR)/boot.ld -o $@ $(BUILD_DIR)/boot.o $(BOOT_BIN): $(BUILD_DIR)/boot.elf $(OBJCOPY) -O binary $< $@ KERNEL_OBJS := $(BUILD_DIR)/prekernel.o $(BUILD_DIR)/kmain.o $(BUILD_DIR)/kernel.elf: $(KERNEL_OBJS) $(KERNEL_DIR)/kernel.ld $(LD) -T $(KERNEL_DIR)/kernel.ld -o $@ $(KERNEL_OBJS) $(KERNEL_BIN): $(BUILD_DIR)/kernel.elf $(OBJCOPY) -O binary $< $@ $(BUILD_DIR): mkdir -p $(BUILD_DIR) $(IMAGE): $(BOOT_BIN) $(KERNEL_BIN) dd if=$(BOOT_BIN) of=$@ bs=512 count=1 dd if=$(KERNEL_BIN) of=$@ bs=512 seek=1 truncate -s 1440k $@ run: $(IMAGE) qemu-system-i386 -drive format=raw,file=$(IMAGE) clean: rm -rf $(BUILD_DIR) $(IMAGE)