diff --git a/android/build-play-aab.sh b/android/build-play-aab.sh index 93c188112..7b735fddc 100755 --- a/android/build-play-aab.sh +++ b/android/build-play-aab.sh @@ -88,6 +88,9 @@ NDK_DIR="$(ls -d "$ANDROID_HOME/ndk/"*/ 2>/dev/null | sort -V | tail -1)" STRIP="${NDK_DIR}toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-strip" [ -x "$STRIP" ] || { echo "FAIL: llvm-strip not found under $ANDROID_HOME/ndk" >&2; exit 1; } +# Same reason as build-variants.sh: cmake only regenerates this at configure time. +bash "$HERE/stamp-git-version.sh" + echo "==> Staging the legacy core" mkdir -p "$JNI" "$STRIP" --strip-unneeded -o "$JNI/libarmsx3-core.so" "$CORE_SRC" diff --git a/android/build-variants.sh b/android/build-variants.sh index bf4e4c5a6..da3bddc81 100755 --- a/android/build-variants.sh +++ b/android/build-variants.sh @@ -188,6 +188,10 @@ build_variant() { echo "==> $name: $out" } +# Stamp the version before anything builds, or every APK reports whichever commit cmake +# last configured against rather than the one being built. +bash "$ROOT/android/stamp-git-version.sh" + for v in $VARIANTS; do build_variant "$v" done diff --git a/android/stamp-git-version.sh b/android/stamp-git-version.sh new file mode 100755 index 000000000..04dba120c --- /dev/null +++ b/android/stamp-git-version.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# +# Refresh rpcs3/git-version.h from the current HEAD. +# +# cmake generates this header, but only when it CONFIGURES, and build-variants.sh deliberately +# skips reconfiguring an already-correct build dir because re-running cmake regenerates LLVM's +# generated headers and costs a full rebuild. So the version stamp froze at whenever cmake last +# ran, and every build after that reported an old commit. +# +# That is not cosmetic. A tester on 0.9.3 reported a 0.9.1-era commit in their log, which sent +# an investigation looking for a regression in commits their build did not contain. A build that +# misreports itself makes every bug report ambiguous. +# +# Writing the header directly is enough: ninja sees it change and rebuilds only what includes it. +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +OUT="$ROOT/rpcs3/git-version.h" + +cd "$ROOT" +COUNT="$(git rev-list HEAD --count)" +SHA="$(git rev-parse --short=8 HEAD)" +BRANCH="$(git rev-parse --abbrev-ref HEAD)" + +NEW="// This is a generated file. + +#define RPCS3_GIT_VERSION \"${COUNT}-${SHA}\" +#define RPCS3_GIT_BRANCH \"${BRANCH}\" +#define RPCS3_GIT_FULL_BRANCH \"local_build\" + +// If you don't want this file to update/recompile, change to 1. +#define RPCS3_GIT_VERSION_NO_UPDATE 0" + +# Only write when it differs, so an unchanged HEAD does not force a rebuild. +if [ ! -f "$OUT" ] || [ "$(cat "$OUT")" != "$NEW" ]; then + printf '%s' "$NEW" > "$OUT" + echo "==> git-version.h: ${COUNT}-${SHA} (${BRANCH})" +else + echo "==> git-version.h already current: ${COUNT}-${SHA}" +fi