Skip to content

Linux Android ARM64 (Ubuntu 20.04, Python 3.11) #294

Linux Android ARM64 (Ubuntu 20.04, Python 3.11)

Linux Android ARM64 (Ubuntu 20.04, Python 3.11) #294

name: Linux Android ARM64 (Ubuntu 20.04, Python 3.11)
on:
schedule:
# run daily at 00:00
- cron: '0 0 * * *'
workflow_dispatch:
# pull_request:
# paths-ignore:
# - '**/docs/**'
# - 'docs/**'
# - '**/**.md'
# - '**.md'
# - '**/layer_tests_summary/**'
# - '**/conformance/**'
# push:
# paths-ignore:
# - '**/docs/**'
# - 'docs/**'
# - '**/**.md'
# - '**.md'
# - '**/layer_tests_summary/**'
# - '**/conformance/**'
# branches:
# - master
concurrency:
group: ${{ github.head_ref || github.run_id }}-linux-android-arm64
cancel-in-progress: true
jobs:
Build:
# TODO: remove. Temporary measure to prevent the workflow from scheduling on forks.
if: ${{ github.repository_owner == 'openvinotoolkit' }}
defaults:
run:
shell: bash
runs-on: ubuntu-20.04-8-cores
env:
CMAKE_BUILD_TYPE: 'Release'
CMAKE_GENERATOR: 'Ninja'
CMAKE_CXX_COMPILER_LAUNCHER: ccache
CMAKE_C_COMPILER_LAUNCHER: ccache
BUILD_TYPE: Debug
OPENVINO_REPO: ${{ github.workspace }}/openvino
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
BUILD_DIR: ${{ github.workspace }}/build
INSTALL_DIR: ${{ github.workspace }}/install
OV_TEMP: ${{ github.workspace }}/openvino_temp
ANDROID_TOOLS: ${{ github.workspace }}/android_tools
ANDROID_NDK_HOME: ${{ github.workspace }}/android_tools/ndk-bundle
ANDROID_SDK_VERSION: 29
ANDROID_ABI_CONFIG: arm64-v8a
steps:
- name: Clone OpenVINO
uses: actions/checkout@v4
with:
path: 'openvino'
submodules: 'recursive'
- name: Clone VCPKG
uses: actions/checkout@v4
with:
repository: 'microsoft/vcpkg'
path: 'vcpkg'
fetch-depth: '0'
submodules: 'recursive'
- name: Setup Python 3.11
uses: actions/setup-python@v4
with:
python-version: '3.11'
#
# Dependencies
#
- name: Install dependencies
run: |
# generic dependencies
sudo -E apt update
sudo -E apt --assume-yes install ccache scons default-jdk python3-pip ninja-build build-essential
wget https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-linux.zip
unzip ninja-linux.zip
sudo cp -v ninja /usr/local/bin/
ln -s /usr/local/bin/ninja /usr/local/bin/ninja-build
# vcpkg's tool dependencies
sudo -E apt --assume-yes install curl zip unzip tar
# vcpkg 'python3' port dependencies
sudo -E apt --assume-yes install autoconf libtool autoconf-archive
# vcpkg tree of dependencies require extra packages
sudo -E apt --assume-yes install pkg-config linux-libc-dev
# Install Android SDK, NDK and Tools
sudo apt -y --no-install-recommends install unzip
wget https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip
unzip commandlinetools-linux-7583922_latest.zip
echo "yes" | ./cmdline-tools/bin/sdkmanager --sdk_root=${{ env.ANDROID_TOOLS }} --install "ndk-bundle" "platform-tools" "platforms;android-${{ env.ANDROID_SDK_VERSION }}"
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
max-size: "2000M"
# Should save cache only if run in the master branch of the base repo
# github.ref_name is 'ref/PR_#' in case of the PR, and 'branch_name' when executed on push
save: ${{ github.ref_name == 'master' && 'true' || 'false' }}
verbose: 2
key: ${{ github.job }}-linux-android-arm64
restore-keys: |
${{ github.job }}-linux-android-arm64
#
# Build
#
- name: Build vcpkg
run: |
${{ env.VCPKG_ROOT }}/bootstrap-vcpkg.sh --disableMetrics
# patch vcpkg default (community) toolchain to build only Release configuration
echo "set(VCPKG_BUILD_TYPE release)" >> ${{ env.VCPKG_ROOT }}/triplets/community/arm64-android.cmake
- name: Get number of CPU cores
uses: SimenB/github-actions-cpu-cores@v2
id: cpu-cores
- name: CMake configure
run: |
cmake \
-G Ninja \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
-DVCPKG_TARGET_TRIPLET=arm64-android \
-DVCPKG_HOST_TRIPLET=x64-linux-release \
-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${{ env.ANDROID_NDK_HOME }}/build/cmake/android.toolchain.cmake \
-DCMAKE_COMPILE_WARNING_AS_ERROR=ON \
-DANDROID_ABI=${{ env.ANDROID_ABI_CONFIG }} \
-DANDROID_PLATFORM=${{ env.ANDROID_SDK_VERSION }} \
-DENABLE_PYTHON=OFF \
-DENABLE_SYSTEM_OPENCL=ON \
-DENABLE_SYSTEM_PROTOBUF=ON \
-DENABLE_SYSTEM_PUGIXML=ON \
-DENABLE_SYSTEM_SNAPPY=ON \
-DENABLE_SYSTEM_TBB=ON \
-DENABLE_SYSTEM_FLATBUFFERS=ON \
-DENABLE_INTEL_GPU=ON \
-DENABLE_TESTS=ON \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-S ${{ env.OPENVINO_REPO }} \
-B ${{ env.BUILD_DIR }}
- name: Clean ccache stats
run: ccache --zero-stats --show-config
- name: Build Android ARM64
run: cmake --build ${{ env.BUILD_DIR }} --parallel ${{ steps.cpu-cores.outputs.count }} --config ${{ env.BUILD_TYPE }}
- name: Show ccache stats
run: ccache --show-stats
- name: List binary files
run: ls -alR ${{ env.OPENVINO_REPO }}/bin/