Ctrl K
ComunidadGuías…

build.bat

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
@echo off
setlocal enabledelayedexpansion

rem Compiler configuration (default to gcc)
if "%CC%"=="" set CC=gcc

rem Version — try git, then .version file, then "unknown"
set ZEN_VERSION=unknown
for /f "delims=" %%i in ('git describe --tags --always --dirty 2^>nul') do set ZEN_VERSION=%%i
if "!ZEN_VERSION!"=="unknown" (
    if exist .version (
        set /p ZEN_VERSION=<.version
    )
)

rem Compilation flags
if "%C_STD%"=="" set C_STD=gnu23
set CFLAGS=-std=%C_STD% -Wall -Wextra -Wshadow -Wformat=2 -Wmissing-prototypes ^
 -Wstrict-prototypes -Wnull-dereference -Wundef -Wfloat-equal ^
 -Wmissing-field-initializers -Wsign-compare -Wtype-limits -Wuninitialized ^
 -Wdouble-promotion -Wtautological-compare -Wshift-negative-value ^
 -Wdangling-else -Wreturn-local-addr -Wconversion -Wno-sign-conversion -Wno-float-conversion ^
 -Wswitch-default -Wvla -Wimplicit-fallthrough -Wredundant-decls -Wcast-align ^
 -Wpacked -Wdisabled-optimization -Wduplicated-cond -Wlogical-op -Wformat-signedness ^
 -g ^
 -I./src -I./src/ast -I./src/parser -I./src/codegen -I./plugins -I./src/zen ^
 -I./src/utils -I./src/lexer -I./src/analysis -I./src/lsp -I./src/diagnostics
set CFLAGS=%CFLAGS% -DZEN_VERSION=\"%ZEN_VERSION%\" -DZEN_SHARE_DIR=\".\" -DZC_ALLOW_INTERNAL

rem Feature flags
set CFLAGS=%CFLAGS% -DZC_HAS_LSP=1 -DZC_HAS_REPL=1 -DZC_HAS_PLUGINS=1 -DZC_HAS_ZEN=1
set CFLAGS=%CFLAGS% -DZC_HAS_CPP_BACKEND=1 -DZC_HAS_CUDA_BACKEND=1 -DZC_HAS_OBJC_BACKEND=1
set CFLAGS=%CFLAGS% -DZC_HAS_JSON_BACKEND=1 -DZC_HAS_LISP_BACKEND=1 -DZC_HAS_DOT_BACKEND=1
set CFLAGS=%CFLAGS% -DZC_HAS_ASTDUMP_BACKEND=1

if "%ZC_HAS_JIT%"=="" set ZC_HAS_JIT=1
if "%ZC_HAS_JIT%"=="1" (
    set CFLAGS=%CFLAGS% -DZC_HAS_JIT
    set LIBS=-lws2_32 -ltcc
) else (
    set LIBS=-lws2_32
)

if "%NO_PLUGINS%"=="1" (
    set CFLAGS=%CFLAGS% -DZC_NO_PLUGINS
)

rem Source files — read from src-sources.txt (single source of truth)
set SRCS=
for /f "usebackq delims=" %%i in ("src-sources.txt") do (
    if not "%%i"=="" set "SRCS=!SRCS! %%i"
)

rem Build
echo Building Zen C (%ZEN_VERSION%)...
%CC% %CFLAGS% %SRCS% -o zc.exe %LIBS%
if %ERRORLEVEL% NEQ 0 (
    echo Build failed!
    exit /b %ERRORLEVEL%
)

echo Build success! zc.exe created.

rem Build plugins
if "%NO_PLUGINS%"=="1" (
    echo Plugins disabled by NO_PLUGINS flag.
    goto end
)
echo Building plugins...
if not exist plugins mkdir plugins
for %%f in (plugins\*.zc) do (
    echo Compiling native plugin %%f...
    .\zc.exe build %%f -shared -o %%~dpnf.dll
    if errorlevel 1 (
        echo Plugin build failed for %%f
        exit /b 1
    )
)

:end