Wiki / Technical / GDExtension Build

GDExtension Build Guide

Guia completa para compilar la GDExtension de OhMyDialogSystem con integracion de llama.cpp.

// Prerequisitos

Todas las Plataformas

Linux

Paquete Fedora/Bazzite Ubuntu/Debian
Compilador C++ gcc-c++ build-essential
Headers de desarrollo libstdc++-devel libstdc++-dev

Bazzite/Fedora Silverblue (rpm-ostree): Si hay conflictos de version con gcc, descargar la version exacta desde

Koji.

Windows

macOS

// Flujo de Compilacion

🛠️ build_all.sh / build_all.bat
build.sh / build.bat editor
  • build_llama.sh (CMake)
  • SCons + llama.py (GDExtension)
build.sh / build.bat release
  • SCons + llama.py
build.sh / build.bat debug
  • SCons + llama.py

// Compilacion

1. Clonar con submodulos

git clone --recursive https://github.com/lobinuxsoft/OhMyDialogSystem.git
cd OhMyDialogSystem

Si ya esta clonado:

git submodule update --init --recursive

2. Compilar llama.cpp (primera vez)

# Linux/macOS (Vulkan por defecto, fallback a CPU si no disponible)
./gdextension/scripts/build_llama.sh

# Windows (requiere Vulkan SDK instalado)
gdextension\scripts\build_llama.bat

# Forzar solo CPU (sin aceleracion GPU)
./gdextension/scripts/build_llama.sh --cpu

3. Compilar GDExtension

Usando los scripts de build (recomendado)

Los scripts build.bat (Windows) y build.sh (Linux/macOS) simplifican el proceso:

cd gdextension

# Windows
build.bat editor          # Para desarrollo en el editor
build.bat debug           # Para exportar en modo debug
build.bat release         # Para exportar en modo release

# Linux/macOS
./build.sh editor
./build.sh debug
./build.sh release

# Compilar los 3 targets de una vez
./build_all.sh                              # (CPU + Vulkan)
./build_all.sh --all-backends --native      # CPU + Vulkan + optimizaciones

# Windows - Compilar los 3 targets
build_all.bat
build_all.bat --all-backends --native

Importante: Para abrir el proyecto en el editor de Godot, debes compilar con editor. El target template_debug solo sirve para exportar el juego, no para desarrollo.

Entendiendo los targets

Target Uso Cuando compilar
editor Desarrollo en el editor de Godot Siempre - necesario para abrir el proyecto
template_debug Exportar juego con debug habilitado Cuando quieras probar exports con debugging
template_release Exportar juego optimizado para produccion Para distribuir el juego final

Usando SCons directamente

Si prefieres control manual:

cd gdextension

# Linux
scons platform=linux target=editor

# Windows
scons platform=windows target=editor

# macOS
scons platform=macos target=editor

// Opciones de Build

Opciones de llama.cpp

Opcion Valores Default Descripcion
llama_backend vulkan, cpu, metal vulkan Backend de computo (Vulkan recomendado para GPU)
llama_native yes, no no Optimizaciones nativas de CPU (no portable)
llama_avx2 yes, no yes Instrucciones AVX2 (x86_64)
llama_rebuild yes, no no Forzar rebuild de llama.cpp
llama_all_backends yes, no no Compilar todos los backends (CPU + Vulkan en Linux/Win, CPU + Metal en macOS)
llama_dynamic yes, no no Carga dinamica de backends (deteccion en runtime)

Ejemplos:

# Backend unico con optimizaciones
scons platform=linux target=template_release llama_backend=vulkan llama_native=yes

# Todos los backends (CPU + Vulkan)
scons platform=linux target=editor llama_all_backends=yes

# Carga dinamica de backends
scons platform=linux target=editor llama_all_backends=yes llama_dynamic=yes

Modos de Backend

Modo Comando Descripcion
Single Backend --vulkan / --cpu Compila solo un backend. Mas simple, menos dependencias.
All Backends (Static) --all-backends CPU + Vulkan (o Metal en macOS) enlazados estaticamente. Recomendado.
All Backends (Dynamic) --all-backends --dynamic Backends como .so/.dll separados. Deteccion en runtime.

Opciones estandar de godot-cpp

Opcion Valores Descripcion
platform linux, windows, macos, ios, android Plataforma objetivo
target editor, template_debug, template_release Tipo de build
arch x86_64, arm64 Arquitectura objetivo

// Aceleracion GPU

Vulkan (Recomendado)

Vulkan es el backend GPU por defecto. Funciona en GPUs AMD, Intel y NVIDIA. Requiere el Vulkan SDK instalado:

# Linux (Fedora)
sudo dnf install vulkan-devel shaderc

# Linux (Ubuntu/Debian)
sudo apt-get install libvulkan-dev glslc

# Windows: Descargar desde https://vulkan.lunarg.com/

El script de build detecta automaticamente si Vulkan esta disponible. Si no lo esta, fallback a CPU.

# Build con Vulkan (default)
./gdextension/scripts/build_llama.sh

# O explicitamente
./gdextension/scripts/build_llama.sh --vulkan

CUDA: El soporte para CUDA con seleccion de arquitectura GPU esta planificado para una version futura. Ver issues del proyecto para el estado.

// Troubleshooting

"cannot find -lstdc++"

El build requiere libstdc++ estatico por defecto. Si no esta disponible, el SConstruct automaticamente usa linkeo dinamico. Para distribucion, considerar:

# Fedora
sudo dnf install libstdc++-static

"llama.cpp not found"

Asegurar que los submodulos estan inicializados:

git submodule update --init --recursive

Errores de CMake durante build de llama.cpp

Los scripts de build usan estos flags para evitar dependencias opcionales:

// Output

Las librerias compiladas se colocan en addons/ohmydialog/gdextension/:

📦 addons/ohmydialog/gdextension/
🪟 Windows
  • ⚙️ libohmydialog.windows.editor.x86_64.dll editor
  • ⚙️ libohmydialog.windows.template_debug.x86_64.dll debug
  • ⚙️ libohmydialog.windows.template_release.x86_64.dll release
🐧 Linux
  • ⚙️ libohmydialog.linux.editor.x86_64.so editor
  • ⚙️ libohmydialog.linux.template_debug.x86_64.so debug
  • ⚙️ libohmydialog.linux.template_release.x86_64.so release
🍎 macOS
  • 📁 libohmydialog.macos.editor.framework/ editor
  • 📁 libohmydialog.macos.template_debug.framework/ debug
  • 📁 libohmydialog.macos.template_release.framework/ release

Solo se generan los binarios de la plataforma y target que compiles. Para un setup completo de desarrollo, compila al menos el target editor de tu plataforma.

Volver a Technical