build steps
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build the Web (WASM) target.
|
||||
# Requires Emscripten 3.1+ and Ninja on PATH.
|
||||
# Run from the repo root.
|
||||
set -euo pipefail
|
||||
|
||||
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$REPO_ROOT"
|
||||
|
||||
if [ ! -f "thirdparty/leanclr/CMakeLists.txt" ]; then
|
||||
git submodule update --init --recursive
|
||||
fi
|
||||
|
||||
# Re-apply the LeanCLR NotImplemented patch if needed.
|
||||
if grep -q "LEANCLR_FATAL_ON_RAISE_NOT_IMPLEMENTED_ERROR 1" \
|
||||
thirdparty/leanclr/src/runtime/build_config.h 2>/dev/null; then
|
||||
echo "[build-web] Re-applying leanclr NotImplemented patch..."
|
||||
sed -i 's/LEANCLR_FATAL_ON_RAISE_NOT_IMPLEMENTED_ERROR 1/LEANCLR_FATAL_ON_RAISE_NOT_IMPLEMENTED_ERROR 0/' \
|
||||
thirdparty/leanclr/src/runtime/build_config.h
|
||||
fi
|
||||
|
||||
# Find the Emscripten toolchain. Override via $EMSDK_TOOLCHAIN if your install
|
||||
# is in a non-default location.
|
||||
if [ -z "${EMSDK_TOOLCHAIN:-}" ]; then
|
||||
if command -v emcc >/dev/null 2>&1; then
|
||||
# `which emcc` may resolve to either <emsdk>/upstream/emscripten/emcc
|
||||
# (POSIX) or <emsdk>/upstream/bin/emcc.bat (Windows launcher). Walk up
|
||||
# until we find a directory that contains cmake/Modules/Platform/.
|
||||
EMCC_PATH="$(command -v emcc)"
|
||||
d="$(dirname "$EMCC_PATH")"
|
||||
for _ in 1 2 3 4 5 6 7 8; do
|
||||
candidate="$d/cmake/Modules/Platform/Emscripten.cmake"
|
||||
if [ -f "$candidate" ]; then
|
||||
EMSDK_TOOLCHAIN="$candidate"
|
||||
break
|
||||
fi
|
||||
d="$(dirname "$d")"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
if [ -z "${EMSDK_TOOLCHAIN:-}" ] || [ ! -f "$EMSDK_TOOLCHAIN" ]; then
|
||||
echo "[build-web] Emscripten toolchain not found. Set EMSDK_TOOLCHAIN to the" >&2
|
||||
echo "[build-web] full path of Emscripten.cmake, e.g.:" >&2
|
||||
echo "[build-web] <emsdk>/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "[build-web] Using toolchain: $EMSDK_TOOLCHAIN"
|
||||
|
||||
# Configure (first pass — fetches godot-cpp). Single-threaded is forced by
|
||||
# the CMakeLists's own if(EMSCRIPTEN) block (GODOTCPP_THREADS=OFF, -O1).
|
||||
cmake -S . -B build-web -G Ninja \
|
||||
-DCMAKE_TOOLCHAIN_FILE="$EMSDK_TOOLCHAIN" \
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
|
||||
# Generate bindings (uses the same extension_api.json path, just inside build-web/).
|
||||
python3 tools/binding_generator/generate_bindings.py \
|
||||
--api build-web/_deps/godot-cpp-src/gdextension/extension_api.json
|
||||
|
||||
# Re-configure so the generated cpp is part of the target, then build.
|
||||
cmake -S . -B build-web -G Ninja \
|
||||
-DCMAKE_TOOLCHAIN_FILE="$EMSDK_TOOLCHAIN" \
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build-web --target leanclr_godot
|
||||
|
||||
# Managed C# (same output dir as the desktop build).
|
||||
dotnet msbuild managed/GodotSharpCompat/GodotSharpCompat.csproj -p:Configuration=Debug
|
||||
dotnet msbuild project/Game.csproj -p:Configuration=Debug
|
||||
|
||||
echo "[build-web] Done. Output:"
|
||||
echo "[build-web] project/bin/Release/libleanclr_godot.wasm"
|
||||
echo "[build-web] Export the project for Web in the Godot editor to run."
|
||||
Reference in New Issue
Block a user