57 lines
1.5 KiB
Makefile
57 lines
1.5 KiB
Makefile
NASM = nasm
|
|
GCC = gcc
|
|
LD = ld
|
|
GRUB_RESCUE = grub-mkrescue
|
|
|
|
# Исходники
|
|
BOOT_SRC = boot/boot.asm
|
|
KERNEL_SRCS = kernel/kmain.c
|
|
DRIVER_SRCS = drivers/vga.c
|
|
|
|
# Автоматически собираем список всех объектных файлов
|
|
BOOT_OBJ = boot/boot.o
|
|
OBJS = kernel/kmain.o drivers/vga.o
|
|
|
|
ISO_DIR = iso
|
|
KERNEL_BIN = $(ISO_DIR)/boot/kernel.bin
|
|
ISO_OUT = peredOS.iso
|
|
|
|
NASM_FLAGS = -f elf32
|
|
GCC_FLAGS = -m32 -ffreestanding -O2 -Wall -Wextra -c
|
|
LD_FLAGS = -m elf_i386 -T linker.ld
|
|
GRUB_FLAGS =
|
|
|
|
all: $(ISO_OUT)
|
|
|
|
# Сборка ISO
|
|
$(ISO_OUT): $(KERNEL_BIN)
|
|
@echo "[+] Крафтим ISO..."
|
|
$(GRUB_RESCUE) $(GRUB_FLAGS) -o $(ISO_OUT) $(ISO_DIR)
|
|
|
|
# Линковка ядра
|
|
$(KERNEL_BIN): $(BOOT_OBJ) $(OBJS)
|
|
@echo "[+] Линкуем ядро..."
|
|
@mkdir -p $(ISO_DIR)/boot
|
|
$(LD) $(LD_FLAGS) $(BOOT_OBJ) $(OBJS) -o $(KERNEL_BIN)
|
|
|
|
# Компиляция ассемблера
|
|
$(BOOT_OBJ): $(BOOT_SRC)
|
|
$(NASM) $(NASM_FLAGS) $(BOOT_SRC) -o $(BOOT_OBJ)
|
|
|
|
# Универсальное правило для компиляции Си-файлов в kernel/
|
|
kernel/%.o: kernel/%.c
|
|
@echo "[+] Компилируем ядро: $<"
|
|
$(GCC) $(GCC_FLAGS) $< -o $@
|
|
|
|
# Универсальное правило для компиляции Си-файлов в drivers/
|
|
drivers/%.o: drivers/%.c
|
|
@echo "[+] Компилируем драйвер: $<"
|
|
$(GCC) $(GCC_FLAGS) $< -o $@
|
|
|
|
run: all
|
|
qemu-system-i386 -cdrom $(ISO_OUT)
|
|
|
|
clean:
|
|
rm -f boot/*.o kernel/*.o drivers/*.o $(KERNEL_BIN) $(ISO_OUT)
|
|
|
|
.PHONY: all run clean
|