CC = gcc CFLAGS = -m32 -nostdlib -fno-builtin -fno-stack-protector -ffreestanding -mno-red-zone -mno-mmx -mno-sse -mno-sse2 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 \ kernel/pmm.o \ drivers/serial.o \ drivers/vga.o \ drivers/speaker.o \ drivers/timer.o \ drivers/keyboard.o \ drivers/mouse.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 -audiodev sdl,id=snd0 -machine pcspk-audiodev=snd0 # Очистка мусора clean: @echo "[-] Очистка объектных файлов и образов..." rm -f boot/*.o kernel/*.o drivers/*.o $(TARGET) $(ISO_IMAGE) .PHONY: all clean run iso