Introducción al sistema de compilación

SCons

Godot utiliza SCons para compilar. Nos encanta, no lo cambiaremos por ningún otro. Ni siquiera estamos seguros de que otros sistemas de compilación puedan manejar la construcción de Godot. Constantemente recibimos solicitudes para cambiar el sistema de compilación a CMake o Visual Studio, pero esto no va a suceder. Hay muchas razones por las cuales hemos elegido SCons sobre otras alternativas, por ejemplo:

  • Godot se puede compilar para una docena de plataformas diferentes: todas las plataformas de PC, todas las plataformas móviles, muchas consolas y WebAssembly.

  • Los desarrolladores a menudo necesitan compilar para varias de las plataformas al mismo tiempo, o incluso para diferentes objetivos de la misma plataforma. No pueden permitirse reconfigurar y reconstruir el proyecto cada vez. SCons puede hacer esto sin problemas, sin romper las compilaciones.

  • SCons nunca romperá una compilación sin importar cuántos cambios, configuraciones, adiciones o eliminaciones haya. Tienes más probabilidades de ser alcanzado por un rayo que de necesitar limpiar y reconstruir en SCons.

  • El proceso de construcción de Godot no es sencillo. Se generan varios archivos a partir de código (vinculadores), otros se analizan (sombras), y otros necesitan ofrecer personalización (complementos). Esto requiere lógica compleja que es más fácil de escribir en un lenguaje de programación real (como Python) en lugar de usar un lenguaje basado principalmente en macros destinado únicamente a la construcción.

  • El proceso de construcción de Godot hace un uso intensivo de herramientas de compilación cruzada. Cada plataforma tiene un proceso de detección específico, y todos estos deben ser tratados como casos específicos con código especial escrito para cada uno.

Entonces, por favor, trata de mantener una mente abierta y familiarizarte al menos un poco con ello si tienes la intención de compilar Godot por ti mismo.

Organización

Por favor, consulta la documentación para Compilando para Android, Compilando para IOS, Compilando para macOS, Compilando para la Plataforma Universal de Windows (Universal Windows Platform, UWP), Compilando para la Web, Compilando para Windows y Compilando para X11 (Linux, *BSD).

Ten en cuenta que para Windows/Visual Studio, debes usar el "x86_x64 Cross Tools Command Prompt for VS 2017" o similar, dependiendo de tu instalación, en lugar del símbolo del sistema estándar de Windows para ingresar los comandos a continuación.

Seleccion de plataforma

El sistema de compilación de Godot comenzará detectando las plataformas para las que se puede compilar. Si no se detecta una plataforma, simplemente no aparecerá en la lista de plataformas disponibles. Los requisitos de compilación para cada plataforma se describen en el resto de esta sección del tutorial.

SCons se invoca simplemente llamando a scons. Si no se especifica una plataforma, SCons detectará automáticamente la plataforma de destino basándose en la plataforma del host. Luego, comenzará a compilar para la plataforma de destino de inmediato.

Para listar las plataformas de destino disponibles, utiliza el comando "scons platform=list":

scons platform=list
scons: Reading SConscript files ...
The following platforms are available:

    android
    javascript
    server
    windows
    x11

Please run SCons again and select a valid platform: platform=<string>

Para compilar para una plataforma específica (por ejemplo, x11), ejecuta el comando con el argumento platform= (o p= para hacerlo más corto):

scons platform=x11

This will start the build process, which will take a while. By default, Godot's SCons setup is configured to use all CPU threads but one (to keep the system responsive during compilation). If you want to adjust how many CPU threads SCons will use, use the -j <threads> parameter to specify how many threads will be used for the build.

Example for using 4 threads:

scons platform=x11 -j 4

Binario resultante

Los archivos binarios resultantes se ubicarán en el subdirectorio bin/, generalmente con esta convención de nombres:

godot.<platform>.[opt].[tools/debug].<architecture>[extension]

Para el intento anterior de compilación, el resultado se verá así:

ls bin
bin/godot.x11.tools.64

Esto significa que el binario es para X11, no está optimizado, incluye herramientas (todo el editor) compiladas y está destinado a 64 bits.

Un binario de Windows con la misma configuración se verá así:

C:\godot> dir bin/
godot.windows.tools.64.exe

Copia ese binario a la ubicación que desees, ya que contiene el administrador de proyectos, el editor y todos los medios para ejecutar el juego. Sin embargo, le falta los datos para exportarlo a las diferentes plataformas. Para eso, se necesitan las plantillas de exportación (que se pueden descargar desde godotengine.org, o puedes compilarlas tú mismo).

Además de eso, hay algunas opciones estándar que se pueden configurar en todos los objetivos de compilación, las cuales se explicarán a continuación.

Herramientas

Las herramientas están habilitadas de forma predeterminada en todos los objetivos de PC (Linux, Windows, macOS) y deshabilitadas para todo lo demás. Desactivar las herramientas produce un binario que puede ejecutar proyectos, pero que no incluye el editor ni el administrador de proyectos.

scons platform=<platform> tools=yes/no

Objetivo

El objetivo controla las banderas de optimización y depuración. Cada modo significa lo siguiente:

  • debug: Compila con símbolos de depuración en C++, verifica en tiempo de ejecución (realiza comprobaciones y reporta errores) y aplica poca o ninguna optimización.

  • release_debug: Compila sin símbolos de depuración en C++ ni optimización, pero mantiene las verificaciones en tiempo de ejecución (realiza comprobaciones y reporta errores). Las versiones oficiales del editor utilizan esta configuración.

  • release: Compila sin símbolos, con optimización y con pocas o ninguna verificación en tiempo de ejecución. Este objetivo no puede usarse junto con tools=yes, ya que el editor requiere cierta funcionalidad de depuración y comprobaciones en tiempo de ejecución para ejecutarse.

scons platform=<platform> target=debug/release_debug/release

Esta bandera agrega el sufijo .debug (para el modo de depuración) o .tools (para el modo de depuración con herramientas habilitadas). Cuando la optimización está habilitada (modo release), agrega el sufijo .opt.

Bits

"Bits" está destinado a controlar la versión de CPU o sistema operativo para la que están destinados los binarios. Está enfocado principalmente en plataformas de escritorio y se ignora en otros lugares.

  • 32: Compilar binarios para plataformas de 32 bits.

  • 64: Compilar binarios para plataformas de 64 bits.

  • default: Compilar para la arquitectura que coincide con la plataforma del host.

scons platform=<platform> bits=default/32/64

Esta bandera agrega sufijos .32 o .64 a los binarios resultantes cuando es relevante. Si se utiliza bits=default, el sufijo coincidirá con la arquitectura detectada.

Módulos personalizados

Es posible compilar módulos que se encuentren fuera del árbol de directorios de Godot, junto con los módulos integrados.

Se puede pasar una opción de compilación llamada custom_modules en la línea de comandos antes de compilar. Esta opción representa una lista separada por comas de rutas de directorio que contienen una colección de módulos C++ independientes que pueden considerarse como paquetes de C++, al igual que el directorio incorporado modules/.

Por ejemplo, es posible proporcionar rutas de directorio tanto relativas, absolutas como del directorio del usuario que contienen dichos módulos:

scons custom_modules="../modules,/abs/path/to/modules,~/src/godot_modules"

Nota

Si hay algún módulo personalizado con el mismo nombre de directorio que un módulo integrado, el motor solo compilará el personalizado. Esta lógica se puede usar para anular las implementaciones de módulos integrados.

Limpiando archivos generados

A veces, es posible que encuentres un error debido a que los archivos generados están presentes. Puedes eliminarlos usando scons --clean <opciones>, donde <opciones> es la lista de opciones de compilación que utilizaste previamente para compilar Godot.

Como alternativa, puedes usar git clean -fixd, lo cual limpiará los artefactos de compilación para todas las plataformas y configuraciones. Ten cuidado, ya que esto eliminará todos los archivos no rastreados e ignorados en el repositorio. ¡No ejecutes este comando si tienes trabajo sin confirmar!

Otras opciones de compilación

Hay varias otras opciones de compilación que puedes usar para configurar la forma en que se debe compilar Godot (compilador, opciones de depuración, etc.), así como las funciones para incluir o deshabilitar.

Verifica la salida de scons --help para obtener detalles sobre cada opción para la versión que deseas compilar.

Sobreescribendo las opciones de configuración

Usando un archivo

El archivo predeterminado custom.py se puede crear en la raíz del código fuente de Godot Engine para inicializar cualquier opción de compilación de SCons que se pase a través de la línea de comandos:

# custom.py

optimize = "size"
module_mono_enabled = "yes"
use_llvm = "yes"
extra_suffix = "game_title"

También puedes deshabilitar algunos de los módulos integrados antes de compilar, lo que ahorrará tiempo en el proceso de construcción del motor. Consulta la página Optimizando una compilación para reducir el tamaño para obtener más detalles al respecto.

Ver también

Puedes utilizar el generador en línea de opciones de compilación de Godot en Godot build options generator para generar un archivo custom.py que contenga las opciones de SCons. Luego, puedes guardar este archivo y colocarlo en la raíz del directorio de código fuente de Godot.

Otro archivo personalizado se puede especificar explícitamente con la opción de línea de comandos profile, lo que permite anular la configuración de compilación predeterminada:

scons profile=path/to/custom.py

Nota

Las opciones de compilación establecidas desde el archivo pueden ser anuladas por las opciones de la línea de comandos.

También es posible anular las opciones condicionalmente:

# custom.py

import version

# Override options specific for Godot 3.x and 4.x versions.
if version.major == 3:
    pass
elif version.major == 4:
    pass

Usando las SCONSFLAGS

SCONSFLAGS es una variable de entorno que se utiliza en SCons para establecer opciones automáticamente sin tener que proporcionarlas a través de la línea de comandos.

For instance, you may want to force a number of CPU threads with the aforementioned -j option for all future builds:

export SCONSFLAGS="-j4"

Plantillas de exportación

Las plantillas de exportación oficiales se descargan desde el sitio de Godot Engine: godotengine.org. Sin embargo, es posible que desees compilarlas tú mismo (en caso de que desees versiones más nuevas, estés utilizando módulos personalizados o simplemente no confíes en tu propia sombra).

Si descargas el paquete oficial de plantillas de exportación y lo descomprimes, notarás que la mayoría de los archivos son binarios o paquetes optimizados para cada plataforma:

android_debug.apk
android_release.apk
webassembly_debug.zip
webassembly_release.zip
linux_server_32
linux_server_64
linux_x11_32_debug
linux_x11_32_release
linux_x11_64_debug
linux_x11_64_release
osx.zip
version.txt
windows_32_debug.exe
windows_32_release.exe
windows_64_debug.exe
windows_64_release.exe

Para crear esas plantillas por ti mismo, sigue las instrucciones detalladas para cada plataforma en esta misma sección del tutorial. Cada plataforma explica cómo crear su propia plantilla.

El archivo version.txt debe contener el identificador de versión correspondiente a Godot. Este archivo se utiliza para instalar las plantillas de exportación en un directorio específico de la versión para evitar conflictos. Por ejemplo, si estás creando plantillas de exportación para Godot 3.1.1, el archivo version.txt debe contener 3.1.1.stable en la primera línea (y nada más). Este identificador de versión se basa en las líneas major, minor, patch (si está presente) y status del archivo version.py en el repositorio Git de Godot.

Si estás desarrollando para múltiples plataformas, macOS es definitivamente la plataforma de host más conveniente para la compilación cruzada, ya que puedes compilar para casi todos los objetivos (excepto UWP). Linux y Windows ocupan el segundo lugar, pero Linux tiene la ventaja de ser la plataforma más fácil para configurar esto.