GDExtension Build Guide
Guia completa para compilar la GDExtension de OhMyDialogSystem con integracion de llama.cpp.
// Prerequisitos
Todas las Plataformas
- Python 3.10+ con pip
- SCons 4.x+:
pip install scons - CMake 3.20+
- Ninja (recomendado para builds mas rapidos)
- Git (para submodulos)
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
- Visual Studio 2022 con workload de C++, o
- MinGW-w64 (GCC 12+)
- CMake (desde cmake.org o Visual Studio)
- Vulkan SDK (para aceleracion GPU): vulkan.lunarg.com
macOS
- Xcode Command Line Tools:
xcode-select --install - CMake:
brew install cmake ninja
// Flujo de Compilacion
- ▶ build_llama.sh (CMake)
- ▶ SCons + llama.py (GDExtension)
- ▶ SCons + llama.py
- ▶ 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:
-DLLAMA_CURL=OFF- Desactiva descarga de modelos (no necesario)-DLLAMA_BUILD_TOOLS=OFF- Salta herramientas CLI (no necesario)
// Output
Las librerias compiladas se colocan en
addons/ohmydialog/gdextension/:
- ⚙️ libohmydialog.windows.editor.x86_64.dll editor
- ⚙️ libohmydialog.windows.template_debug.x86_64.dll debug
- ⚙️ libohmydialog.windows.template_release.x86_64.dll release
- ⚙️ libohmydialog.linux.editor.x86_64.so editor
- ⚙️ libohmydialog.linux.template_debug.x86_64.so debug
- ⚙️ libohmydialog.linux.template_release.x86_64.so release
- 📁 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.