Clause
← Toda la documentación

Traducido del original en inglés · 06042fa · 2026-10-09 · Leer en inglés

Compilar el compilador

Desde la raíz del repositorio:

cmake --preset debug
cmake --build --preset debug

En Windows se usa el preset clang-cl/Ninja Multi-Config desde el shell de desarrollador:

cmake --preset windows
cmake --build --preset windows-debug
cmake --build --preset windows-release

Las pruebas y sus ejecutables auxiliares son opcionales. Para las pruebas hay que configurar explícitamente:

cmake --preset debug -DBUILD_TESTING=ON
cmake --build --preset debug
ctest --preset debug --no-tests=error

En Windows:

cmake --preset windows -DBUILD_TESTING=ON
cmake --build --preset windows-debug
ctest --preset windows-debug --no-tests=error
cmake --build --preset windows-release
ctest --preset windows-release --no-tests=error

Las pruebas tienen dos modos, seleccionados con CLAUSE_TEST_MODE:

ctest --preset debug-fast            # or windows-debug-fast; tests use half the logical CPUs
ctest --preset debug -j 32           # full mode; -j N runs N/2 tests at once
make test                            # fast; make test-full or TEST_MODE=full for full

make-test.bat sigue los mismos ajustes TEST_MODE (por defecto fast) y TEST_JOBS (por defecto todas las CPU lógicas). Cada prueba reserva dos slots de procesador de CTest (PROCESSORS 2), de modo que con N slots se ejecutan como máximo N/2 pruebas a la vez, lo que deja margen para los compiladores y las compilaciones nativas anidadas que lanzan las pruebas. En un anfitrión Windows x64 de 32 hilos, el modo rápido tarda alrededor de un minuto y el modo completo unos 85 segundos con 16 trabajos (729 segundos en serie).

Para un directorio de compilación sin preset, se pasa -DBUILD_TESTING=ON a cmake -S . -B <dir> para las pruebas. CMake guarda este ajuste en caché; hay que pasar -DBUILD_TESTING=OFF al reutilizar ese directorio para compilaciones ordinarias. Los presets normales y los scripts envoltorio lo fijan a OFF.

Los scripts por lotes reflejan los objetivos build, format y clean del Makefile: make-build.bat, make-test.bat, make-format.bat y make-clean.bat. Los scripts de compilación y de pruebas configuran clang-cl con Ninja Multi-Config, como el preset windows; entran por sí mismos en el entorno x64 de Visual Studio cuando el shell no es un shell de desarrollador y añaden %ProgramFiles%\LLVM\bin al PATH cuando falta clang-cl. Un directorio de compilación configurado con otro generador o compilador se reconfigura desde cero; con CLAUSE_TOOLCHAIN=default se conserva la elección propia de CMake (por ejemplo, cl de MSVC en un directorio aparte). Los valores por defecto de compilación son BUILD_DIR=build/debug, BUILD_TYPE=Debug y el paralelismo de la herramienta de compilación nativa (se cambia con JOBS=N); las variables de entorno CMAKE, CTEST, CMAKE_ARGS y CLANG_FORMAT también sustituyen las herramientas u opciones correspondientes. make-test.bat configura con las pruebas activadas, compila todos los objetivos y después ejecuta CTest, igual que make test, propagando los fallos de configuración, compilación o pruebas. Clean elimina los directorios build/ y cmake-build*/ locales del repositorio.

Las comprobaciones de calidad y el formateo se aplican por defecto a los archivos modificados: todo lo que difiere de HEAD en el árbol de trabajo, más los archivos no rastreados.

Las herramientas de calidad residen en el entorno ignorado .venv-quality/, fijado por tools/requirements-quality.txt: python -m venv .venv-quality y después .venv-quality/Scripts/python -m pip install -r tools/requirements-quality.txt (.venv-quality/bin/python fuera de Windows).

clau.bat --help compila primero y después reenvía todos los argumentos al ejecutable de la configuración seleccionada. Los fallos de compilación detienen la ejecución; las rutas de entrada del compilador siguen siendo relativas al directorio de trabajo del llamador, y se conserva su código de salida.

Para desarrollar el runtime sin descargar ni usar el SDK de C++ de LLVM, se configura con cmake --preset windows -DCLAUSE_BUILD_COMPILER=OFF; se aplican los mismos presets de compilación y pruebas. La opción se vuelve a poner a ON cuando el SDK está disponible. También se acepta cl de MSVC en un directorio de compilación aparte; MinGW no está soportado para compilaciones de desarrollo nativas en Windows. x86 o x64 se seleccionan mediante el entorno de desarrollador (o con -A con un generador de Visual Studio), y se usan un SDK de LLVM y un runtime de esa arquitectura.

El CRT por defecto en Windows es /MDd para Debug y /MD para las demás configuraciones, incluida la biblioteca estática del runtime y sus consumidores. Un ajuste explícito de CMAKE_MSVC_RUNTIME_LIBRARY se respeta; debe coincidir con el SDK de LLVM y con todas las bibliotecas C++ enlazadas. Conviene no mezclar artefactos STL/CRT de Debug y Release. Los fuentes del proyecto en Windows y los fixtures de CLI/rutas usan UTF-8.

Todos los objetivos del proyecto usan C++23 y tratan las advertencias del compilador como errores. El ejecutable es build/debug/bin/clau. Los presets de compilación y los scripts envoltorio solicitan compilaciones en paralelo en Windows, Linux y macOS con el número de trabajos por defecto de la herramienta de compilación nativa (jobs: 0 en los presets, --parallel en los scripts). Se fija un límite explícito con cmake --build --preset debug --parallel 8 o con JOBS=8 para los scripts. Para un directorio de compilación sin preset, se usa cmake --build <dir> --parallel. El preset de Windows coloca el ejecutable en build/windows/bin/<Config>/clau.exe y el runtime en build/windows/lib/<Config>/clause_runtime.lib.

Como alternativa, make build compila solo clau y sus dependencias, y make test compila y ejecuta el conjunto completo de pruebas. Para otra configuración:

make test BUILD_DIR=build/release BUILD_TYPE=Release JOBS=4

CMake detecta las instalaciones de Boost y Erlang, incluidas las de Homebrew. Estas opciones, pasadas al configurar, sustituyen los valores por defecto:

OpciónPropósito
-DCLAUSE_BOOST_ROOT=/path/to/boostSelecciona una instalación de Boost o un árbol de fuentes completo
-DCLAUSE_TOML_ROOT=/path/to/tomlplusplus-3.4.0Selecciona la dependencia TOML fijada
-DCLAUSE_OTP_AUDITS=ONActiva las auditorías opcionales en vivo de OTP/referencia; por defecto OFF
-DCLAUSE_ESCRIPT=/path/to/bin/escriptSelecciona OTP 29+ para las auditorías opcionales; las pruebas normales no lo usan
-DCLAUSE_CLANG_EXECUTABLE=C:/path/to/clang.exeSelecciona un ejecutable de Clang instalado en Windows
-DLLVM_DIR=/prefix/lib/cmake/llvmSelecciona un SDK de LLVM 23.1.x existente (las rutas explícitas no válidas fallan)
-DCLAUSE_DOWNLOAD_LLVM=OFFExige un SDK instalado; desactiva las descargas automáticas de LLVM
-DBUILD_TESTING=ONActiva las pruebas, los ejecutables auxiliares y su dependencia de Erlang (por defecto: OFF)
-DCLAUSE_BUILD_COMPILER=OFFCompila solo la biblioteca del runtime
-DCLAUSE_BUILD_RUNTIME=OFFCompila solo el compilador

Con generadores multiconfiguración, se añade --config Debug al compilar y -C Debug al ejecutar las pruebas. Los IDE compatibles con CMake pueden abrir el repositorio con el preset debug, o con el preset windows y una cadena de herramientas de desarrollo de Visual Studio.

Las cabeceras de Boost y toml++ usan includes SYSTEM de CMake, lo que mantiene las advertencias como errores para el código del proyecto. En las compilaciones nativas de macOS, CMake también marca como SYSTEM el directorio de includes enlazado de Homebrew cuando sus cabeceras de Boost corresponden a la instalación seleccionada. Así, flags heredados como CXXFLAGS=-I/opt/homebrew/include no exponen advertencias de Boost, incluso cuando CMake ya tiene ese flag en caché. Para otras instalaciones, conviene no añadir rutas de dependencias mediante flags -I globales (incluido CXXFLAGS): una ruta de include ordinaria puede tener prioridad sobre la ruta de sistema de una dependencia. Si CLion informa de advertencias de Boost como errores, hay que eliminar esos flags globales y borrar el valor en caché, por ejemplo:

cmake -S . -B cmake-build-debug -DCMAKE_CXX_FLAGS:STRING=

Después se recarga CMake en CLion. Para seleccionar instalaciones se usan las opciones de raíz de dependencias anteriores en lugar de añadir flags de include globales.