blob: 453ee924a2a4c7197e44d3061c6f3165e1ce4f6a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#!/usr/bin/env bash
# bin/build-web — WASM/web build via Emscripten
#
# Produces build-web/index.{html,js,wasm} from src/ + web/shell.html.
# Requires emcc + emar (Emscripten SDK) on PATH.
#
# Usage:
# bin/build-web
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
cd "$PROJECT_DIR"
SRC_DIR="src"
BUILD_DIR="build-web"
RAYLIB_SRC="deps/raylib/src"
RAYLIB_LIB="$BUILD_DIR/libraylib.a"
COMMON_INCS="-I$BUILD_DIR -I$RAYLIB_SRC -I$RAYLIB_SRC/external/glfw/include -Ideps/raygui/src"
DEFINES="-DPLATFORM_WEB -DGRAPHICS_API_OPENGL_ES2"
CFLAGS="-std=c99 -O2 $COMMON_INCS $DEFINES"
mkdir -p "$BUILD_DIR"
# --- Font header (same logic as Makefile) ---
FONT_HEADER="$BUILD_DIR/font_data.h"
FONT_FILE="$(find resources -maxdepth 1 -type f \( -iname '*.otf' -o -iname '*.ttf' \) -print -quit 2>/dev/null || true)"
if [ -n "$FONT_FILE" ] && command -v xxd >/dev/null 2>&1; then
echo " XXD $(basename "$FONT_FILE") -> $FONT_HEADER"
xxd -i "$FONT_FILE" > "$FONT_HEADER.tmp"
VARNAME="$(grep -oP 'unsigned char \K[a-zA-Z0-9_]+' "$FONT_HEADER.tmp" | head -1)"
sed -i "s/${VARNAME}/embedded_font_data/g" "$FONT_HEADER.tmp"
echo '#define FONT_EMBEDDED 1' >> "$FONT_HEADER.tmp"
mv "$FONT_HEADER.tmp" "$FONT_HEADER"
else
echo " INFO No font file or xxd unavailable — using default font"
printf '/* No font embedded */\nstatic unsigned char embedded_font_data[] = {0};\nstatic unsigned int embedded_font_data_len = 0;\n#define FONT_EMBEDDED 0\n' > "$FONT_HEADER"
fi
# --- Build raylib for web ---
RAYLIB_SRCS="$RAYLIB_SRC/rcore.c $RAYLIB_SRC/rshapes.c $RAYLIB_SRC/rtextures.c $RAYLIB_SRC/rtext.c $RAYLIB_SRC/rmodels.c $RAYLIB_SRC/raudio.c"
RAYLIB_OBJS=""
for src in $RAYLIB_SRCS; do
obj="$BUILD_DIR/raylib_$(basename "${src%.c}").o"
echo " CC $src"
emcc $CFLAGS -w -c -o "$obj" "$src"
RAYLIB_OBJS="$RAYLIB_OBJS $obj"
done
echo " AR $RAYLIB_LIB"
emar rcs "$RAYLIB_LIB" $RAYLIB_OBJS
# --- Build application ---
APP_SRCS="$(find "$SRC_DIR" -name '*.c')"
APP_OBJS=""
for src in $APP_SRCS; do
obj="$BUILD_DIR/$(basename "${src%.c}").o"
echo " CC $src"
emcc $CFLAGS -Wall -Wextra -c -o "$obj" "$src"
APP_OBJS="$APP_OBJS $obj"
done
# --- Link ---
SHELL_HTML="web/shell.html"
if [ ! -f "$SHELL_HTML" ]; then
echo "Error: $SHELL_HTML not found" >&2
exit 1
fi
echo " LINK $BUILD_DIR/index.html"
emcc $CFLAGS -o "$BUILD_DIR/index.html" $APP_OBJS "$RAYLIB_LIB" \
-s USE_GLFW=3 \
-s WASM=1 \
-s ASYNCIFY \
-s SHELL_FILE="$PWD/$SHELL_HTML" \
-s EXPORTED_FUNCTIONS='["_main","_load_file_web"]' \
-s EXPORTED_RUNTIME_METHODS='["ccall","cwrap"]' \
--preload-file resources \
"$@"
echo "Build complete: $BUILD_DIR/index.html"
|