name: android-armv8-gpu
on:
  push:
    branches: [master]
    paths:
    - '.github/workflows/android-armv8-gpu.yml'
    - 'CMakeLists.txt'
    - 'cmake/**'
    - 'src/*'
    - 'src/layer/*'
    - 'src/layer/arm/**'
    - 'src/layer/vulkan/**'
  pull_request:
    branches: [master]
    paths:
    - '.github/workflows/android-armv8-gpu.yml'
    - 'CMakeLists.txt'
    - 'cmake/**'
    - 'src/*'
    - 'src/layer/*'
    - 'src/layer/arm/**'
    - 'src/layer/vulkan/**'
concurrency:
  group: android-armv8-gpu-${{ github.ref }}
  cancel-in-progress: true
permissions:
  contents: read

jobs:
  android-aarch64-gpu:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: true
    - name: build
      run: |
        mkdir build && cd build
        cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON ..
        cmake --build . -j $(nproc)
    - name: build-shared
      run: |
        mkdir build-shared && cd build-shared
        cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON ..
        cmake --build . -j $(nproc)
    - name: build-termux
      run: |
        mkdir build-termux && cd build-termux
        cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON -DNCNN_PLATFORM_API=OFF ..
        cmake --build . -j $(nproc)
    - name: build-android-29
      run: |
        mkdir build-android-29 && cd build-android-29
        cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-29 -DNCNN_VULKAN=ON ..
        cmake --build . -j $(nproc)
    - name: build-android-29-shared
      run: |
        mkdir build-android-29-shared && cd build-android-29-shared
        cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-29 -DNCNN_VULKAN=ON -DNCNN_SHARED_LIB=ON ..
        cmake --build . -j $(nproc)

  android-aarch64-gpu-ndk-r16b:
    runs-on: ubuntu-20.04
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: true
    - name: ndk-r16b
      run: |
        wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip -O $GITHUB_WORKSPACE/android-ndk-r16b-linux-x86_64.zip
        cd $GITHUB_WORKSPACE && unzip -q android-ndk-r16b-linux-x86_64.zip
    - name: configure
      run: mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/android-ndk-r16b/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON ..
    - name: build
      run: cmake --build build -j $(nproc)