Add Emscripten debug build targets with DWARF and source maps, closes #238
Adds MCRF_WASM_DEBUG CMake option that enables -g4, -gsource-map, and --emit-symbol-map for WASM builds. New Makefile targets: wasm-debug, playground-debug, serve-wasm-debug, serve-playground-debug. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
a4e0b97ecb
commit
5ce5b5779a
3 changed files with 64 additions and 2 deletions
|
|
@ -311,6 +311,8 @@ make serve # Serve at http://localhost:8080
|
|||
|--------|------------------|---------|
|
||||
| `make wasm` | `build-emscripten/` | Full game with all scripts/assets |
|
||||
| `make playground` | `build-playground/` | Minimal REPL build for interactive testing |
|
||||
| `make wasm-debug` | `build-wasm-debug/` | Debug build with DWARF symbols and source maps |
|
||||
| `make playground-debug` | `build-playground-debug/` | Debug playground with DWARF and source maps |
|
||||
|
||||
### Rendering Backend Selection
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ option(MCRF_SANITIZE_ADDRESS "Build with AddressSanitizer" OFF)
|
|||
option(MCRF_SANITIZE_UNDEFINED "Build with UBSan" OFF)
|
||||
option(MCRF_SANITIZE_THREAD "Build with ThreadSanitizer" OFF)
|
||||
option(MCRF_DEBUG_PYTHON "Link against debug CPython from __lib_debug/" OFF)
|
||||
option(MCRF_WASM_DEBUG "Build WASM with DWARF debug info and source maps" OFF)
|
||||
|
||||
# Validate mutually exclusive sanitizers
|
||||
if(MCRF_SANITIZE_ADDRESS AND MCRF_SANITIZE_THREAD)
|
||||
|
|
@ -398,6 +399,17 @@ if(EMSCRIPTEN)
|
|||
message(STATUS "Emscripten SDL2 options enabled: -sUSE_SDL=2 -sUSE_SDL_MIXER=2 -sFULL_ES2=1 -sUSE_FREETYPE=1")
|
||||
endif()
|
||||
|
||||
# WASM debug builds: DWARF symbols, source maps, symbol map for stack traces
|
||||
if(MCRF_WASM_DEBUG)
|
||||
list(APPEND EMSCRIPTEN_LINK_OPTIONS
|
||||
-g4
|
||||
-gsource-map
|
||||
--emit-symbol-map
|
||||
)
|
||||
target_compile_options(mcrogueface PRIVATE -g4)
|
||||
message(STATUS "Emscripten debug enabled: DWARF (-g4), source maps, symbol map")
|
||||
endif()
|
||||
|
||||
target_link_options(mcrogueface PRIVATE ${EMSCRIPTEN_LINK_OPTIONS})
|
||||
|
||||
# Output as HTML to use the shell file
|
||||
|
|
|
|||
52
Makefile
52
Makefile
|
|
@ -27,7 +27,7 @@
|
|||
# Tags HEAD with current version, builds all packages, bumps to NEXT_VERSION
|
||||
|
||||
.PHONY: all linux windows windows-debug clean clean-windows clean-dist run
|
||||
.PHONY: wasm wasm-game playground serve serve-game serve-playground clean-wasm
|
||||
.PHONY: wasm wasm-game wasm-debug playground playground-debug serve serve-game serve-playground clean-wasm
|
||||
.PHONY: package-windows-light package-windows-full package-linux-light package-linux-full package-all
|
||||
.PHONY: version-bump
|
||||
.PHONY: debug debug-test asan asan-test valgrind-test massif-test analyze clean-debug
|
||||
|
|
@ -273,7 +273,55 @@ serve-demo:
|
|||
|
||||
clean-wasm:
|
||||
@echo "Cleaning Emscripten builds..."
|
||||
@rm -rf build-emscripten build-playground build-wasm-game build-wasm-demo
|
||||
@rm -rf build-emscripten build-playground build-wasm-game build-wasm-demo build-wasm-debug build-playground-debug
|
||||
|
||||
wasm-debug:
|
||||
@if ! command -v emcmake >/dev/null 2>&1; then \
|
||||
echo "Error: emcmake not found. Run 'source ~/emsdk/emsdk_env.sh' first."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@if [ ! -f build-wasm-debug/Makefile ]; then \
|
||||
echo "Configuring WebAssembly debug build (DWARF + source maps)..."; \
|
||||
mkdir -p build-wasm-debug; \
|
||||
cd build-wasm-debug && emcmake cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
-DMCRF_SDL2=ON \
|
||||
-DMCRF_WASM_DEBUG=ON; \
|
||||
fi
|
||||
@echo "Building McRogueFace for WebAssembly (debug)..."
|
||||
@emmake make -C build-wasm-debug -j$(JOBS)
|
||||
@echo "Debug WASM build complete! Files in build-wasm-debug/"
|
||||
@echo "Debug artifacts: .wasm.map (source map), .symbols (symbol map)"
|
||||
@echo "Run 'make serve-wasm-debug' to test locally"
|
||||
|
||||
serve-wasm-debug:
|
||||
@echo "Serving debug WASM build at http://localhost:8080"
|
||||
@echo "Press Ctrl+C to stop"
|
||||
@cd build-wasm-debug && python3 -m http.server 8080
|
||||
|
||||
playground-debug:
|
||||
@if ! command -v emcmake >/dev/null 2>&1; then \
|
||||
echo "Error: emcmake not found. Run 'source ~/emsdk/emsdk_env.sh' first."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@if [ ! -f build-playground-debug/Makefile ]; then \
|
||||
echo "Configuring Playground debug build (DWARF + source maps)..."; \
|
||||
mkdir -p build-playground-debug; \
|
||||
cd build-playground-debug && emcmake cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
-DMCRF_SDL2=ON \
|
||||
-DMCRF_PLAYGROUND=ON \
|
||||
-DMCRF_WASM_DEBUG=ON; \
|
||||
fi
|
||||
@echo "Building McRogueFace Playground for WebAssembly (debug)..."
|
||||
@emmake make -C build-playground-debug -j$(JOBS)
|
||||
@echo "Playground debug build complete! Files in build-playground-debug/"
|
||||
@echo "Run 'make serve-playground-debug' to test locally"
|
||||
|
||||
serve-playground-debug:
|
||||
@echo "Serving debug Playground build at http://localhost:8080"
|
||||
@echo "Press Ctrl+C to stop"
|
||||
@cd build-playground-debug && python3 -m http.server 8080
|
||||
|
||||
# Current version extracted from source
|
||||
CURRENT_VERSION := $(shell grep 'MCRFPY_VERSION' src/McRogueFaceVersion.h | sed 's/.*"\(.*\)"/\1/')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue