56 lines
1.3 KiB
Makefile
56 lines
1.3 KiB
Makefile
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)
|