peredOS/Makefile
2026-07-01 18:42:51 +03:00

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