From 18a21c9738d0c465d58b987c7a39c4db4013212a Mon Sep 17 00:00:00 2001 From: xXJsonDeruloXx Date: Sat, 2 May 2026 12:15:25 -0400 Subject: [PATCH] ci: add Android Bionic release workflow --- .github/workflows/android-bionic.yml | 91 ++++++++++++++++++++++++++++ scripts/build/android.sh | 47 ++++++++++---- 2 files changed, 125 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/android-bionic.yml mode change 100644 => 100755 scripts/build/android.sh diff --git a/.github/workflows/android-bionic.yml b/.github/workflows/android-bionic.yml new file mode 100644 index 00000000..f2bc00f3 --- /dev/null +++ b/.github/workflows/android-bionic.yml @@ -0,0 +1,91 @@ +name: Build Android Bionic layer + +on: + push: + branches: + - "**" + tags: + - "v*" + pull_request: + branches: + - release + workflow_dispatch: + +concurrency: + group: android-bionic-${{ github.ref }} + cancel-in-progress: true + +env: + ANDROID_NDK_VERSION: 27.3.13750724 + ANDROID_PLATFORM: android-28 + +jobs: + build: + name: Build ${{ matrix.abi }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + abi: + - arm64-v8a + - x86_64 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up Android SDK + uses: android-actions/setup-android@v3 + + - name: Install Android build tools + run: | + sudo apt-get update + sudo apt-get install -y cmake ninja-build file + sdkmanager --install "ndk;${ANDROID_NDK_VERSION}" + echo "ANDROID_NDK_ROOT=${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION}" >> "$GITHUB_ENV" + echo "ANDROID_NDK=${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION}" >> "$GITHUB_ENV" + + - name: Build ${{ matrix.abi }} + env: + ANDROID_ABI: ${{ matrix.abi }} + HOST_TAG: linux-x86_64 + run: bash ./scripts/build/android.sh Release + + - name: Inspect ${{ matrix.abi }} artifact + run: | + file "build-android-${{ matrix.abi }}/dist/liblsfg-vk-${{ matrix.abi }}.so" + "${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf" \ + -h -d "build-android-${{ matrix.abi }}/dist/liblsfg-vk-${{ matrix.abi }}.so" + + - name: Upload ${{ matrix.abi }} artifact + uses: actions/upload-artifact@v4 + with: + name: liblsfg-vk-${{ matrix.abi }} + path: build-android-${{ matrix.abi }}/dist/liblsfg-vk-${{ matrix.abi }}.so + if-no-files-found: error + + release: + name: Publish GitHub release + needs: build + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/v') + permissions: + contents: write + + steps: + - name: Download layer artifacts + uses: actions/download-artifact@v4 + with: + path: release-assets + merge-multiple: true + + - name: List release assets + run: ls -lh release-assets/ + + - name: Create GitHub release + uses: softprops/action-gh-release@v2 + with: + files: release-assets/*.so + generate_release_notes: true diff --git a/scripts/build/android.sh b/scripts/build/android.sh old mode 100644 new mode 100755 index d788a4fb..0b536e2c --- a/scripts/build/android.sh +++ b/scripts/build/android.sh @@ -1,24 +1,27 @@ #!/usr/bin/env bash -# Build lsfg-vk for the GameNative Android emulator (Wine-on-Android). +# Build lsfg-vk for GameNative's Android/Bionic Wine-on-Android runtime. # -# Produces: -# build-android/liblsfg-vk.so (aarch64 shared library) -# build-android/VkLayer_LS_frame_generation.json (copied from repo root) +# Produces by default: +# build-android-${ANDROID_ABI}/liblsfg-vk.so +# build-android-${ANDROID_ABI}/dist/liblsfg-vk-${ANDROID_ABI}.so (stripped) +# build-android-${ANDROID_ABI}/dist/VkLayer_LS_frame_generation.json # # Requirements: -# ANDROID_NDK env var pointing at an Android NDK r25+ (we use the CMake toolchain it ships). +# ANDROID_NDK env var pointing at an Android NDK r25+. # # Usage: -# ANDROID_NDK=/path/to/android-ndk-r26d ./scripts/build/android.sh [Release|Debug] +# ANDROID_NDK=/path/to/android-ndk-r27d ./scripts/build/android.sh [Release|Debug] +# ANDROID_ABI=x86_64 ANDROID_NDK=/path/to/android-ndk-r27d ./scripts/build/android.sh set -euo pipefail BUILD_TYPE="${1:-Release}" ABI="${ANDROID_ABI:-arm64-v8a}" API="${ANDROID_PLATFORM:-android-28}" +GENERATOR="${CMAKE_GENERATOR:-Ninja}" if [[ -z "${ANDROID_NDK:-}" ]]; then - echo "error: ANDROID_NDK must be set to your NDK root (e.g. /opt/android-ndk-r26d)" >&2 + echo "error: ANDROID_NDK must be set to your NDK root (e.g. /opt/android-ndk-r27d)" >&2 exit 1 fi @@ -30,24 +33,42 @@ fi SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../.." &>/dev/null && pwd)" -BUILD_DIR="${REPO_ROOT}/build-android" +BUILD_DIR="${BUILD_DIR:-${REPO_ROOT}/build-android-${ABI}}" +DIST_DIR="${DIST_DIR:-${BUILD_DIR}/dist}" -mkdir -p "${BUILD_DIR}" +mkdir -p "${BUILD_DIR}" "${DIST_DIR}" cmake -S "${REPO_ROOT}" -B "${BUILD_DIR}" \ + -G "${GENERATOR}" \ -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN}" \ -DANDROID_ABI="${ABI}" \ -DANDROID_PLATFORM="${API}" \ -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \ - -DLSFGVK_ANDROID_WINE=ON + -DLSFGVK_ANDROID_WINE=ON \ + -DVOLK_STATIC_DEFINES=VK_USE_PLATFORM_ANDROID_KHR \ + -DCMAKE_CXX_FLAGS="-DVK_USE_PLATFORM_ANDROID_KHR" \ + -DCMAKE_C_FLAGS="-DVK_USE_PLATFORM_ANDROID_KHR" cmake --build "${BUILD_DIR}" --parallel +HOST_OS="$(uname -s | tr '[:upper:]' '[:lower:]')" +STRIP_BIN="${ANDROID_NDK}/toolchains/llvm/prebuilt/${HOST_TAG:-${HOST_OS}-x86_64}/bin/llvm-strip" +if [[ -x "${STRIP_BIN}" ]]; then + "${STRIP_BIN}" --strip-unneeded \ + -o "${DIST_DIR}/liblsfg-vk-${ABI}.so" \ + "${BUILD_DIR}/liblsfg-vk.so" +else + echo "warning: llvm-strip not found at ${STRIP_BIN}; copying unstripped library" >&2 + cp "${BUILD_DIR}/liblsfg-vk.so" "${DIST_DIR}/liblsfg-vk-${ABI}.so" +fi + cp "${REPO_ROOT}/VkLayer_LS_frame_generation.json" "${BUILD_DIR}/" +cp "${REPO_ROOT}/VkLayer_LS_frame_generation.json" "${DIST_DIR}/" echo "" echo "Build complete. Artifacts:" -echo " ${BUILD_DIR}/liblsfg-vk.so" -echo " ${BUILD_DIR}/VkLayer_LS_frame_generation.json" +echo " ${DIST_DIR}/liblsfg-vk-${ABI}.so" +echo " ${DIST_DIR}/VkLayer_LS_frame_generation.json" echo "" -echo "Copy both files into GameNative's assets/lsfg-vk/ directory." +echo "For GameNative Android app updates, copy the arm64-v8a shared library to:" +echo " app/src/main/assets/lsfg_vk/android_arm64_v8a/liblsfg-vk-layer.so"