#!/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; }