diff --git a/.github/workflows/linux_arm64.yml b/.github/workflows/linux_arm64.yml new file mode 100644 index 00000000000..a8b918505c9 --- /dev/null +++ b/.github/workflows/linux_arm64.yml @@ -0,0 +1,212 @@ +name: Linux 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-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 + NUM_PROC: 2 + BUILD_TYPE: Release + OPENVINO_REPO: ${{ github.workspace }}/openvino + BUILD_DIR: ${{ github.workspace }}/build + INSTALL_DIR: ${{ github.workspace }}/install + DATA_PATH: ${{ github.workspace }}/testdata + MODELS_PATH: ${{ github.workspace }}/testdata + OV_TEMP: ${{ github.workspace }}/openvino_temp + steps: + - name: Clone OpenVINO + uses: actions/checkout@v3 + with: + path: 'openvino' + + - name: Init submodules for non Conan dependencies + run: | + pushd ${{ env.OPENVINO_REPO }} + git submodule update --init -- ${{ env.OPENVINO_REPO }}/src/plugins + git submodule update --init -- ${{ env.OPENVINO_REPO }}/thirdparty/gtest + git submodule update --init -- ${{ env.OPENVINO_REPO }}/thirdparty/open_model_zoo + popd + + - name: Create Directories + run: | + mkdir -p ${{ env.BUILD_DIR }} + mkdir -p ${{ env.INSTALL_DIR }} + + - name: Setup Python 3.11 + uses: actions/setup-python@v4 + with: + python-version: '3.11' + + # + # Dependencies + # + + - name: Install build dependencies + run: | + sudo -E apt update + # install dependencies needed to build CPU plugin for ARM + sudo -E apt --assume-yes install scons gcc-10-aarch64-linux-gnu g++-10-aarch64-linux-gnu + # generic dependencies + sudo -E apt --assume-yes install cmake ccache ninja-build unzip fdupes + + - name: Install python dependencies + run: | + python3 -m pip install --upgrade pip + python3 -m pip install -r ${{ env.OPENVINO_REPO }}/src/bindings/python/requirements.txt + python3 -m pip install -r ${{ env.OPENVINO_REPO }}/src/bindings/python/wheel/requirements-dev.txt + python3 -m pip install -r ${{ env.OPENVINO_REPO }}/src/bindings/python/src/compatibility/openvino/requirements-dev.txt + + - name: Install arm64 libraries + run: | + echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal main restricted > arm64-sources.list + echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal-updates main restricted >> arm64-sources.list + echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal universe >> arm64-sources.list + echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal-updates universe >> arm64-sources.list + echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal multiverse >> arm64-sources.list + echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal-updates multiverse >> arm64-sources.list + echo deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse >> arm64-sources.list + echo deb [arch=amd64] http://security.ubuntu.com/ubuntu/ focal-security main restricted >> arm64-sources.list + echo deb [arch=amd64] http://security.ubuntu.com/ubuntu/ focal-security universe >> arm64-sources.list + echo deb [arch=amd64] http://security.ubuntu.com/ubuntu/ focal-security multiverse >> arm64-sources.list + echo deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal main >> arm64-sources.list + echo deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal universe >> arm64-sources.list + echo deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-updates main >> arm64-sources.list + echo deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-security main >> arm64-sources.list + sudo mv arm64-sources.list /etc/apt/sources.list.d/ + sudo -E dpkg --add-architecture arm64 + sudo -E apt-get update -o Dir::Etc::sourcelist=/etc/apt/sources.list.d/arm64-sources.list + sudo -E apt-get install -y --no-install-recommends libpython3-dev:arm64 + + - 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-arm64 + restore-keys: | + ${{ github.job }}-linux-arm64 + + - name: Get tools versions + run: | + ninja --version + ccache --version + python3 --version + cmake --version + + - name: Install conan and dependencies + run: | + python3 -m pip install conan + # install build profile compilers + sudo -E apt --assume-yes install gcc g++ + # generate build profile + conan profile detect + # generate host profile for linux_arm64 + echo "include(default)" > ${{ env.BUILD_DIR }}/linux_arm64 + echo "[buildenv]" >> ${{ env.BUILD_DIR }}/linux_arm64 + echo "CC=aarch64-linux-gnu-gcc-10" >> ${{ env.BUILD_DIR }}/linux_arm64 + echo "CXX=aarch64-linux-gnu-g++-10" >> ${{ env.BUILD_DIR }}/linux_arm64 + # install OpenVINO dependencies + conan install ${{ env.OPENVINO_REPO }}/conanfile.txt \ + -pr:h ${{ env.BUILD_DIR }}/linux_arm64 \ + -s:h arch=armv8 \ + -of ${{ env.BUILD_DIR }}/dependencies \ + -b missing + + # + # Build + # + + - name: Get number of CPU cores + uses: SimenB/github-actions-cpu-cores@v1 + id: cpu-cores + + - name: CMake configure + run: | + source ${{ env.BUILD_DIR }}/dependencies/conanbuild.sh + # TODO: return tests building once GPU plugin migrates to Plugin API 2.0 + cmake \ + -G Ninja \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF \ + -DENABLE_CPPLINT=ON \ + -DENABLE_INTEL_GPU=ON \ + -DENABLE_PYTHON=ON \ + -DENABLE_WHEEL=ON \ + -DPYBIND11_PYTHONLIBS_OVERWRITE=OFF \ + -DPYTHON_MODULE_EXTENSION=$(aarch64-linux-gnu-python3-config --extension-suffix) \ + -DPYTHON_LIBRARY=/usr/lib/aarch64-linux-gnu/libc-2.31.so \ + -DPYTHON_INCLUDE_DIR=$(python3 -c "import sysconfig; print(sysconfig.get_path('include'))") \ + -DENABLE_DATA=OFF \ + -DENABLE_SYSTEM_TBB=ON \ + -DENABLE_SYSTEM_PROTOBUF=ON \ + -DENABLE_SYSTEM_SNAPPY=ON \ + -DENABLE_SYSTEM_PUGIXML=ON \ + -DCMAKE_TOOLCHAIN_FILE=${{ env.BUILD_DIR }}/dependencies/conan_toolchain.cmake \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DARM_COMPUTE_SCONS_JOBS=${{ env.NUM_PROC }} \ + -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} \ + -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DENABLE_PYTHON_PACKAGING=ON \ + -S ${{ env.OPENVINO_REPO }} \ + -B ${{ env.BUILD_DIR }} + source ${{ env.BUILD_DIR }}/dependencies/deactivate_conanbuild.sh + + - name: Clean ccache stats + run: ccache --zero-stats --show-config + + - name: Build OpenVINO Runtime + 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: Install OpenVINO Runtime + run: cmake --build ${{ env.BUILD_DIR }} --parallel ${{ steps.cpu-cores.outputs.count }} --config ${{ env.BUILD_TYPE }} --target install + + - name: Build OpenVINO C++ samples + run: | + source ${{ env.BUILD_DIR }}/dependencies/conanbuild.sh + ${{ env.INSTALL_DIR }}/samples/cpp/build_samples.sh + source ${{ env.BUILD_DIR }}/dependencies/deactivate_conanbuild.sh + env: + CMAKE_TOOLCHAIN_FILE: ${{ env.BUILD_DIR }}/dependencies/conan_toolchain.cmake