Makefile avanzado que crea la estructura del proyecto, compila los archivos, enlaza los binarios y genera una imagen ISO

 Makefile avanzado que crea la estructura del proyecto, compila los archivos, enlaza los binarios y genera una imagen ISO lista para ejecutarse en hardware real. 🚀

# Definición de directorios principales
DIRS := ProyectoSO bootloader bootloader/build kernel kernel/drivers kernel/memory \
        kernel/scheduler kernel/syscall kernel/src kernel/build user user/build tools docs

# Archivos fuente
BOOTLOADER_SRC := bootloader/boot.asm bootloader/stage1.asm bootloader/stage2.asm
KERNEL_SRC := kernel/src/kernel_entry.asm kernel/src/kernel_main.c
USER_SRC := user/shell.c

# Archivos generados
BOOTLOADER_OBJ := bootloader/build/boot.o bootloader/build/stage1.o bootloader/build/stage2.o
KERNEL_OBJ := kernel/build/kernel_entry.o kernel/build/kernel_main.o
USER_OBJ := user/build/shell.o
KERNEL_BIN := kernel/build/kernel.bin
BOOTLOADER_BIN := bootloader/build/bootloader.bin

FINAL_BIN := ProyectoSO/build/bootload_x8664.bin ProyectoSO/build/bootload_x8664.elf ProyectoSO/build/bootload_x8664.iso ProyectoSO/build/boot.cat

# Herramientas de compilación
ASM := nasm
CC := gcc
LD := ld
ISO_TOOL := xorriso

.PHONY: all setup compile link iso clean

all: setup compile link iso

# Creación de estructura de directorios
setup:
    mkdir -p $(DIRS)

# Compilación de archivos fuente
compile:
    $(ASM) -f elf64 bootloader/boot.asm -o bootloader/build/boot.o
    $(ASM) -f elf64 bootloader/stage1.asm -o bootloader/build/stage1.o
    $(ASM) -f elf64 bootloader/stage2.asm -o bootloader/build/stage2.o
    $(ASM) -f elf64 kernel/src/kernel_entry.asm -o kernel/build/kernel_entry.o
    $(CC) -c kernel/src/kernel_main.c -o kernel/build/kernel_main.o
    $(CC) -c user/shell.c -o user/build/shell.o

# Enlace de los binarios finales
link:
    $(LD) -T bootloader/linker.ld -o $(BOOTLOADER_BIN) $(BOOTLOADER_OBJ)
    $(LD) -T kernel/linker.ld -o $(KERNEL_BIN) $(KERNEL_OBJ)
    $(LD) -T ProyectoSO/linker.ld -o ProyectoSO/build/bootload_x8664.elf $(BOOTLOADER_BIN) $(KERNEL_BIN) $(USER_OBJ)
    objcopy -O binary ProyectoSO/build/bootload_x8664.elf ProyectoSO/build/bootload_x8664.bin

# Creación de la imagen ISO para hardware real y pruebas en QEMU
iso:
    $(ISO_TOOL) -as mkisofs -o ProyectoSO/build/bootload_x8664.iso -b boot.cat -no-emul-boot ProyectoSO/build

# Limpieza de archivos generados
clean:
    rm -rf $(DIRS)

 

Características clave:

  • Automatización total de la estructura del proyecto. 
  • Compilación de archivos en ensamblador (nasm) y C (gcc). 
  • Enlace correcto del núcleo y el bootloader. 
  • Generación de una imagen ISO funcional para hardware real y pruebas en QEMU.

Este Makefile garantiza una arquitectura organizada y modular, facilitando la evolución del sistema operativo. 🚀

 

Publicar un comentario

0 Comentarios