73 lines
2.2 KiB
Makefile
73 lines
2.2 KiB
Makefile
CC = gcc
|
|
CFLAGS = -m32 -ffreestanding -O2 -Wall -Wextra -Iinclude
|
|
|
|
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 \
|
|
drivers/serial.o \
|
|
drivers/vga.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
|