diff --git a/cmake/CodegenTargets.cmake b/cmake/CodegenTargets.cmake index 9aa47b4..1c12faa 100644 --- a/cmake/CodegenTargets.cmake +++ b/cmake/CodegenTargets.cmake @@ -1,7 +1,11 @@ add_custom_target(generate-skate3 - COMMAND $ codegen - ${SKATE3_CODEGEN_ARGS} - "${CMAKE_CURRENT_BINARY_DIR}/manifests/skate3.toml" + # The rexglue codegen tool writes its output and THEN crashes during + # static teardown (SIOF / heap-corruption at exit - the cvar registry and + # friends are freed out of order). The output is complete and valid, so + # wrap the invocation to verify the written files instead of the exit + # code: a genuine failure (e.g. unresolved calls without the Title Update + # package) produces no output and is still caught. + COMMAND bash -c "$ codegen ${SKATE3_CODEGEN_ARGS} \"${CMAKE_CURRENT_BINARY_DIR}/manifests/skate3.toml\"; rc=\$?; [ -f \"${CMAKE_CURRENT_SOURCE_DIR}/generated/sources.cmake\" ] || exit \$rc; exit 0" COMMAND "${CMAKE_COMMAND}" "-DSKATE3_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/ApplySkate3CodegenPatches.cmake" @@ -11,9 +15,7 @@ add_custom_target(generate-skate3 ) add_custom_target(generate-eawebkit - COMMAND $ codegen - ${SKATE3_CODEGEN_ARGS} - "${CMAKE_CURRENT_BINARY_DIR}/manifests/eawebkit.toml" + COMMAND bash -c "$ codegen ${SKATE3_CODEGEN_ARGS} \"${CMAKE_CURRENT_BINARY_DIR}/manifests/eawebkit.toml\"; rc=\$?; [ -f \"${CMAKE_CURRENT_SOURCE_DIR}/generated/eawebkit/sources.cmake\" ] || exit \$rc; exit 0" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" COMMENT "Generating recompiled code for EAWebkit.xex" VERBATIM diff --git a/tools/release/release.sh b/tools/release/release.sh index 0b71f29..6742506 100755 --- a/tools/release/release.sh +++ b/tools/release/release.sh @@ -19,6 +19,10 @@ # --game-root DIR extracted game dump (default: $REPO/game) # --tu FILE optional Title Update STFS package for codegen # --os linux|windows|macos override platform (default: host OS) +# --cmake-args "..." extra flags appended to every cmake configure +# call (e.g. -DCMAKE_C_COMPILER=clang-22 +# -DCMAKE_CXX_COMPILER=clang++-22 +# -DCMAKE_LINKER=ld.lld on distros without clang-20) # --upload publish the zip to a Forgejo Release # # Env for --upload: @@ -36,6 +40,7 @@ TAG="" GAME_ROOT="${SKATE3_GAME_DATA_ROOT:-$REPO/game}" TU="${SKATE3_TITLE_UPDATE_PACKAGE:-}" OS_ARG="" +CMAKE_ARGS="" while [ $# -gt 0 ]; do case "$1" in @@ -43,9 +48,10 @@ while [ $# -gt 0 ]; do --game-root) GAME_ROOT="$2"; shift 2;; --tu) TU="$2"; shift 2;; --os) OS_ARG="$2"; shift 2;; + --cmake-args) CMAKE_ARGS="$2"; shift 2;; --upload) UPLOAD=1; shift;; -h|--help) - sed -n '2,30p' "$0"; exit 0;; + sed -n '2,32p' "$0"; exit 0;; *) echo "unknown argument: $1"; exit 2;; esac done @@ -79,12 +85,12 @@ if [ -n "$TU" ]; then fi echo "==> Release $TAG ($EXT) preset=$PRESET game=$GAME_ROOT" -echo "==> Configure" -cmake --preset "$PRESET" -DSKATE3_GAME_DATA_ROOT="$GAME_ROOT" $TU_ARGS +echo "==> Configure (extra args: ${CMAKE_ARGS:-none})" +cmake --preset "$PRESET" -DSKATE3_GAME_DATA_ROOT="$GAME_ROOT" $TU_ARGS $CMAKE_ARGS echo "==> Generate recompiled code" cmake --build --preset "$PRESET" --target generate-all --parallel echo "==> Reconfigure (generated sources)" -cmake --preset "$PRESET" -DSKATE3_GAME_DATA_ROOT="$GAME_ROOT" $TU_ARGS +cmake --preset "$PRESET" -DSKATE3_GAME_DATA_ROOT="$GAME_ROOT" $TU_ARGS $CMAKE_ARGS echo "==> Build" cmake --build --preset "$PRESET" --parallel @@ -93,7 +99,13 @@ OUT="out/build/$PRESET" STAGE="$NAME" rm -rf "$STAGE"; mkdir -p "$STAGE" cp "$OUT/$BIN" "$STAGE/" -cp "$OUT/$LIB" "$STAGE/" 2>/dev/null || true +# The rexglue runtime lib carries a config suffix (librexruntimerd.so for +# relwithdebinfo, librexruntime.so for release); the binary links whichever +# was built, so ship it under its real name. +RUNTIME="$(ls "$OUT"/librexruntime*.so "$OUT"/librexruntime*.dll "$OUT"/librexruntime*.dylib 2>/dev/null | head -1 || true)" +if [ -n "$RUNTIME" ]; then + cp "$RUNTIME" "$STAGE/" +fi cp "$OUT/ghost_relay" "$STAGE/" 2>/dev/null || true cp "$OUT/ghost_relay.exe" "$STAGE/" 2>/dev/null || true # Title-update patches staged next to the binary when the build used the TU