Add Android 16KB page size support for ONNX Runtime Extensions #15
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Android 16KB Page Size Verification | |
| on: | |
| pull_request: | |
| paths: | |
| - 'CMakeLists.txt' | |
| - 'cmake/**' | |
| - 'java/**' | |
| - 'tools/build.py' | |
| - '.github/workflows/android-16kb-check.yml' | |
| jobs: | |
| verify-android-16kb-alignment: | |
| name: Build & Verify 16KB Page Alignment (arm64-v8a) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.10' | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Setup Android NDK | |
| uses: nttld/setup-ndk@v1 | |
| id: setup-ndk | |
| with: | |
| ndk-version: r25c | |
| add-to-path: false | |
| - name: Set up Android SDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Build Android arm64-v8a with 16KB support | |
| env: | |
| ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} | |
| run: | | |
| set -e | |
| # Use the project's build script | |
| python tools/build.py \ | |
| --android \ | |
| --android_abi=arm64-v8a \ | |
| --android_api=27 \ | |
| --android_home=$ANDROID_HOME \ | |
| --android_ndk_path=$ANDROID_NDK_HOME \ | |
| --config=Release \ | |
| --update \ | |
| --parallel \ | |
| --build | |
| - name: Verify 16KB page alignment | |
| env: | |
| ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} | |
| run: | | |
| set -e | |
| echo "=== Verifying 16KB page size alignment ===" | |
| # Find android built libraries | |
| LIBS=$(find build/Android/Release/lib -name "libortextensions.so" -o -name "libonnxruntime_extensions4j_jni.so") | |
| if [ -z "$LIBS" ]; then | |
| echo "ERROR: Android built libraries not found" | |
| find build/Android -name "*.so" -type f || true | |
| exit 1 | |
| fi | |
| # Use llvm-readelf from NDK | |
| READELF="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-readelf" | |
| if [ ! -f "$READELF" ]; then | |
| echo "ERROR: llvm-readelf not found at $READELF" | |
| exit 1 | |
| fi | |
| echo "Found libraries:" | |
| echo "$LIBS" | |
| echo "" | |
| FAILED=0 | |
| for LIB in $LIBS; do | |
| echo "Checking: $(basename $LIB)" | |
| echo "Full path: $LIB" | |
| # Display LOAD segments | |
| $READELF -l "$LIB" | grep -A 1 "LOAD" || true | |
| # Check for 16KB alignment (0x4000) | |
| if $READELF -l "$LIB" | grep -q "0x4000"; then | |
| echo "PASS: Found 16KB alignment (0x4000) in $(basename $LIB)" | |
| else | |
| echo "FAIL: Did not find 16KB alignment (0x4000) in $(basename $LIB)" | |
| echo "Full segment details:" | |
| $READELF -l "$LIB" | |
| FAILED=1 | |
| fi | |
| echo "---" | |
| done | |
| if [ $FAILED -ne 0 ]; then | |
| echo "" | |
| echo "ERROR: One or more libraries do not have 16KB page alignment" | |
| exit 1 | |
| fi | |
| echo "" | |
| echo "SUCCESS: All libraries have correct 16KB page alignment" | |
| - name: Upload build artifacts | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-arm64-libraries | |
| path: build/Android/**/lib/*.so | |
| retention-days: 7 |