Files
Tahgibu/tools/dev-build.sh
T
2026-10-24 12:01:52 -03:00

46 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# Compilación de DESARROLLO sin CMake: construye la biblioteca y las pruebas
# con gcc directamente. Sirve para verificar el núcleo en máquinas sin CMake.
# La compilación oficial del proyecto es CMake (ver docs/BUILD.md).
# tools/dev-build.sh -> compila y ejecuta todas las pruebas
# SAN=1 tools/dev-build.sh -> con AddressSanitizer + UBSan
# OUT=/ruta tools/dev-build.sh -> carpeta de compilación (por defecto /tmp/tgb-dev)
set -eu
ROOT=$(cd "$(dirname "$0")/.." && pwd)
OUT=${OUT:-/tmp/tgb-dev}
CC=${CC:-gcc}
FLAGS="-std=c11 -g -O1 -Wall -Wextra -Wshadow -Wpedantic -Werror -D_GNU_SOURCE -I$ROOT/include"
[ "${SAN:-0}" = "1" ] && FLAGS="$FLAGS -fsanitize=address,undefined -fno-omit-frame-pointer -fno-sanitize-recover=all"
mkdir -p "$OUT/obj" "$OUT/tests"
echo "== Biblioteca (libtahgibu.a) =="
OBJS=""
for f in $(ls "$ROOT"/src/core/*.c "$ROOT"/src/document/*.c "$ROOT"/src/history/*.c "$ROOT"/src/editor/*.c \
"$ROOT"/src/editor/tools/*.c "$ROOT"/src/animation/*.c "$ROOT"/src/rendering/*.c "$ROOT"/src/io/*.c \
"$ROOT"/src/recovery/*.c "$ROOT"/src/extensions/*.c "$ROOT"/src/platform/linux/*.c 2>/dev/null); do
o="$OUT/obj/$(echo "${f#$ROOT/src/}" | tr '/' '_').o"
$CC $FLAGS -c "$f" -o "$o"
OBJS="$OBJS $o"
done
rm -f "$OUT/libtahgibu.a"; ar rcs "$OUT/libtahgibu.a" $OBJS
echo "== Extensiones de prueba =="
for f in "$ROOT"/tests/plugins/*.c; do
[ -e "$f" ] || continue
n=$(basename "$f" .c)
$CC $FLAGS -fPIC -shared "$f" -o "$OUT/tests/$n.so"
done
echo "== Pruebas =="
FAIL=0
for t in "$ROOT"/tests/test_*.c; do
n=$(basename "$t" .c)
$CC $FLAGS -DTGB_TEST_PLUGIN_DIR="\"$OUT/tests\"" "$t" "$OUT/libtahgibu.a" -o "$OUT/tests/$n" -lz -lm -ldl -lpthread
echo "--- $n"
if ! "$OUT/tests/$n"; then FAIL=1; fi
done
echo "--- ui_smoke (interfaz con raylib FALSO: no prueba raylib real)"
if $CC $FLAGS -I"$ROOT/tools/dev/raylib_stub" -I"$ROOT/src" -I"$ROOT/tests" \
"$ROOT"/tests/ui_smoke/ui_smoke.c "$ROOT"/tests/ui_smoke/mock_raylib.c "$ROOT"/src/ui/*.c \
"$OUT/libtahgibu.a" -o "$OUT/tests/ui_smoke" -lz -lm -ldl -lpthread; then
"$OUT/tests/ui_smoke" || FAIL=1
else FAIL=1; fi
[ $FAIL = 0 ] && echo "TODAS LAS PRUEBAS PASARON" || { echo "HAY PRUEBAS FALLIDAS"; exit 1; }