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