peredOS/Makefile

77 lines
2.3 KiB
Makefile

CC = gcc
CFLAGS = -m32 -ffreestanding -O2 -Wall -Wextra -Iinclude -fno-stack-protector
AS = nasm
ASFLAGS = -f elf32
LD = ld
LDFLAGS = -m elf_i386 -T linker.ld
TARGET = iso/boot/kernel.bin
ISO_IMAGE = peredOS.iso
# Жесткий список всех объектов, идущих в линкер
OBJ = boot/boot.o \
kernel/kmain.o \
kernel/gdt.o \
kernel/gdt_asm.o \
kernel/idt.o \
kernel/interrupt.o \
kernel/logger.o \
kernel/io.o \
kernel/pic.o \
kernel/string.o \
drivers/serial.o \
drivers/vga.o \
drivers/timer.o \
drivers/keyboard.o
# Дефолтное правило (просто сборка бинарника)
all: $(TARGET)
@echo "[+] Сборка бинарника успешно завершена!"
# Линковка ядра
$(TARGET): $(OBJ)
@echo "[+] Линкуем ядро..."
$(LD) $(LDFLAGS) $(OBJ) -o $(TARGET)
# Компиляция Си-файлов ядра
kernel/%.o: kernel/%.c
@echo "[+] Компилируем ядро (C): $<"
$(CC) $(CFLAGS) -c $< -o $@
# Компиляция ассемблера GDT
kernel/gdt_asm.o: kernel/gdt.asm
@echo "[+] Компилируем gdt.asm..."
$(AS) $(ASFLAGS) kernel/gdt.asm -o kernel/gdt_asm.o
# Компиляция ассемблера IDT
kernel/interrupt.o: kernel/interrupt.asm
@echo "[+] Компилируем interrupt.asm..."
$(AS) $(ASFLAGS) kernel/interrupt.asm -o kernel/interrupt.o
# Компиляция драйверов
drivers/%.o: drivers/%.c
@echo "[+] Компилируем драйвер: $<"
$(CC) $(CFLAGS) -c $< -o $@
# Компиляция загрузочного сектора
boot/boot.o: boot/boot.asm
@echo "[+] Компилируем бутлоадер..."
$(AS) $(ASFLAGS) boot/boot.asm -o boot/boot.o
# Сборка полноценного ISO-образа через GRUB
iso: $(TARGET)
@echo "[+] Собираем загрузочный ISO-образ..."
grub-mkrescue -o $(ISO_IMAGE) iso/
# Честный запуск через ISO в QEMU
run: iso
@echo "[+] Запускаем peredOS в QEMU через CD-ROM..."
qemu-system-i386 -cdrom $(ISO_IMAGE) -serial stdio
# Очистка мусора
clean:
@echo "[-] Очистка объектных файлов и образов..."
rm -f boot/*.o kernel/*.o drivers/*.o $(TARGET) $(ISO_IMAGE)
.PHONY: all clean run iso