| # Copyright 2022 The IREE Authors |
| # |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| name: CI |
| |
| # A few notes: |
| # |
| # Variables: |
| # GitHub actions don't have variables or even support normal yaml anchors (they |
| # are specially disabled because...reasons?): |
| # See https://github.com/github-community/community/discussions/4501 |
| # https://github.community/t/support-for-yaml-anchors/16128/92 |
| # https://github.com/actions/runner/issues/1182 |
| # Neither does it have any contexts that are available everywhere. The |
| # top-level `env` field is available in many places, but not all. We already |
| # have a "setup" job that every other job depends on, so we leverage that |
| # for variables that every other job can use, since that *is* available in all |
| # sub-fields of the job. |
| # See https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability |
| # and https://github.com/community/community/discussions/27370 |
| # |
| # Runner label ordering: |
| # - self-hosted always has to be listed first in a runs-on block: |
| # https://docs.github.com/en/actions/hosting-your-own-runners/using-self-hosted-runners-in-a-workflow |
| |
| on: |
| workflow_dispatch: |
| pull_request: |
| push: |
| branches: |
| - main |
| |
| concurrency: |
| # A PR number if a pull request and otherwise the commit hash. This cancels |
| # queued and in-progress runs for the same PR (presubmit) or commit |
| # (postsubmit). The workflow name is prepended to avoid conflicts between |
| # different workflows. |
| group: ${{ github.workflow }}-${{ github.event.number || github.sha }} |
| cancel-in-progress: true |
| |
| # Jobs are organized into groups and topologically sorted by dependencies |
| jobs: |
| setup: |
| uses: ./.github/workflows/setup.yml |
| |
| ############################################################################## |
| # Runtime builds |
| |
| runtime: |
| needs: setup |
| name: "runtime :: ${{ matrix.name }}" |
| if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'runtime') |
| runs-on: ${{ matrix.runs-on }} |
| defaults: |
| run: |
| shell: bash |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - name: ubuntu-24.04 |
| runs-on: ubuntu-24.04 |
| driver-options: -DIREE_HAL_DRIVER_CUDA=ON -DIREE_HAL_DRIVER_HIP=ON -DIREE_HAL_DRIVER_VULKAN=ON |
| - name: ubuntu-24.04-arm |
| runs-on: ubuntu-24.04-arm |
| driver-options: -DIREE_HAL_DRIVER_CUDA=ON -DIREE_HAL_DRIVER_HIP=ON -DIREE_HAL_DRIVER_VULKAN=ON |
| - name: windows-2022 |
| runs-on: windows-2022 |
| driver-options: -DIREE_HAL_DRIVER_CUDA=ON -DIREE_HAL_DRIVER_HIP=ON -DIREE_HAL_DRIVER_VULKAN=ON |
| - name: macos-14 |
| runs-on: macos-14 |
| driver-options: -DIREE_HAL_DRIVER_METAL=ON -DIREE_HAL_DRIVER_VULKAN=OFF |
| env: |
| BUILD_DIR: build-runtime |
| steps: |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 |
| with: |
| python-version: "3.11" |
| |
| - name: (Linux) Install requirements |
| if: contains(matrix.name, 'ubuntu') |
| run: | |
| sudo apt update |
| sudo apt install -y ninja-build |
| echo "CC=clang" >> $GITHUB_ENV |
| echo "CXX=clang++" >> $GITHUB_ENV |
| - name: (Windows) Configure MSVC |
| if: contains(matrix.name, 'windows') |
| uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 |
| - name: (macOS) Install requirements |
| if: contains(matrix.name, 'macos') |
| run: brew install ninja ccache coreutils bash |
| |
| - name: Checkout runtime submodules |
| run: bash ./build_tools/scripts/git/update_runtime_submodules.sh |
| - name: Install Python requirements |
| run: pip install -r ./runtime/bindings/python/iree/runtime/build_requirements.txt |
| - name: ccache |
| uses: hendrikmuhs/ccache-action@63069e3931dedbf3b63792097479563182fe70d1 # v1.2.18 |
| with: |
| key: ${{ github.job }}-${{ matrix.name }} |
| save: ${{ needs.setup.outputs.write-caches == 1 }} |
| - name: CMake - configure |
| run: | |
| cmake \ |
| -G Ninja \ |
| -B ${BUILD_DIR} \ |
| -DCMAKE_BUILD_TYPE=RelWithDebInfo \ |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ |
| -DIREE_BUILD_COMPILER=OFF \ |
| -DIREE_BUILD_PYTHON_BINDINGS=ON \ |
| -DIREE_BUILD_SAMPLES=ON \ |
| -DIREE_ENABLE_LLD=ON \ |
| -DIREE_ENABLE_ASSERTIONS=ON \ |
| ${{matrix.driver-options}} |
| - name: CMake - build |
| run: cmake --build ${BUILD_DIR} -- -k 0 |
| - name: CTest |
| run: bash ./build_tools/cmake/ctest_all.sh "${BUILD_DIR}" |
| |
| runtime_small: |
| needs: setup |
| if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'runtime_small') |
| runs-on: ubuntu-24.04 |
| env: |
| BUILD_DIR: build-runtime |
| CC: clang |
| CXX: clang++ |
| steps: |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| - name: Install requirements |
| run: sudo apt update && sudo apt install -y ninja-build |
| - name: Checkout runtime submodules |
| run: bash ./build_tools/scripts/git/update_runtime_submodules.sh |
| - name: ccache |
| uses: hendrikmuhs/ccache-action@63069e3931dedbf3b63792097479563182fe70d1 # v1.2.18 |
| with: |
| key: ${{ github.job }} |
| save: ${{ needs.setup.outputs.write-caches == 1 }} |
| - name: CMake - configure |
| run: | |
| cmake \ |
| -G Ninja \ |
| -B ${BUILD_DIR} \ |
| -DCMAKE_BUILD_TYPE=MinSizeRel \ |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ |
| -DIREE_BUILD_COMPILER=OFF \ |
| -DIREE_RUNTIME_OPTIMIZATION_PROFILE=size \ |
| -DIREE_ENABLE_LLD=ON |
| - name: CMake - build |
| run: cmake --build ${BUILD_DIR} -- -k 0 |
| - name: CTest |
| run: bash ./build_tools/cmake/ctest_all.sh "${BUILD_DIR}" |
| |
| runtime_tracing: |
| needs: setup |
| name: "runtime_tracing :: ${{ matrix.runs-on }} :: ${{ matrix.provider }}" |
| if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'runtime_tracing') |
| runs-on: ${{ matrix.runs-on }} |
| defaults: |
| run: |
| shell: bash |
| strategy: |
| fail-fast: false |
| matrix: |
| runs-on: [ubuntu-24.04, ubuntu-24.04-arm, windows-2022, macos-14] |
| provider: [tracy, console] |
| env: |
| BUILD_DIR: build-tracing |
| steps: |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| |
| - name: (Linux) Install requirements |
| if: contains(matrix.runs-on, 'ubuntu') |
| run: | |
| sudo apt update |
| sudo apt install -y ninja-build |
| echo "CC=clang" >> $GITHUB_ENV |
| echo "CXX=clang++" >> $GITHUB_ENV |
| - name: (Windows) Configure MSVC |
| if: contains(matrix.runs-on, 'windows') |
| uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 |
| - name: (macOS) Install requirements |
| if: contains(matrix.runs-on, 'macos') |
| run: brew install ninja ccache coreutils bash |
| |
| - name: (Linux/Windows) Set driver options |
| if: contains(matrix.runs-on, 'ubuntu') || contains(matrix.runs-on, 'windows') |
| run: echo IREE_DRIVER_OPTIONS="-DIREE_HAL_DRIVER_CUDA=ON -DIREE_HAL_DRIVER_HIP=ON -DIREE_HAL_DRIVER_VULKAN=ON" >> $GITHUB_ENV |
| - name: (macOS) Set driver options |
| if: contains(matrix.runs-on, 'macos') |
| run: echo IREE_DRIVER_OPTIONS="-DIREE_HAL_DRIVER_METAL=ON -DIREE_HAL_DRIVER_VULKAN=OFF" >> $GITHUB_ENV |
| |
| - name: Checkout runtime submodules |
| run: bash ./build_tools/scripts/git/update_runtime_submodules.sh |
| - name: ccache |
| uses: hendrikmuhs/ccache-action@63069e3931dedbf3b63792097479563182fe70d1 # v1.2.18 |
| with: |
| key: ${{ github.job }}-${{ matrix.runs-on}}-${{ matrix.provider }} |
| save: ${{ needs.setup.outputs.write-caches == 1 }} |
| - name: CMake - configure |
| run: | |
| cmake \ |
| -G Ninja \ |
| -B ${BUILD_DIR} \ |
| -DCMAKE_BUILD_TYPE=RelWithDebInfo \ |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ |
| -DIREE_BUILD_COMPILER=OFF \ |
| -DIREE_ENABLE_LLD=ON \ |
| -DIREE_ENABLE_RUNTIME_TRACING=ON \ |
| -DIREE_TRACING_PROVIDER=${{ matrix.provider }} \ |
| ${IREE_DRIVER_OPTIONS} |
| - name: CMake - build |
| run: cmake --build ${BUILD_DIR} -- -k 0 |
| |
| ############################################################################## |
| # Full project builds |
| |
| linux_x64_bazel: |
| needs: setup |
| if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'linux_x64_bazel') |
| uses: ./.github/workflows/ci_linux_x64_bazel.yml |
| secrets: inherit |
| |
| linux_x64_clang: |
| needs: setup |
| if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'linux_x64_clang') |
| uses: ./.github/workflows/ci_linux_x64_clang.yml |
| secrets: inherit |
| |
| linux_x64_clang_asan: |
| needs: setup |
| if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'linux_x64_clang_asan') |
| uses: ./.github/workflows/ci_linux_x64_clang_asan.yml |
| secrets: inherit |
| |
| windows_x64_msvc: |
| needs: setup |
| if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'windows_x64_msvc') |
| uses: ./.github/workflows/ci_windows_x64_msvc.yml |
| secrets: inherit |
| |
| ############################################################################## |
| |
| # Aggregate job status and alerting on failures. |
| ci_summary: |
| if: always() |
| needs: |
| - setup |
| |
| # Runtime builds. |
| - runtime |
| - runtime_small |
| - runtime_tracing |
| |
| # Full project builds. |
| - linux_x64_bazel |
| - linux_x64_clang |
| - linux_x64_clang_asan |
| - windows_x64_msvc |
| uses: ./.github/workflows/workflow_summary.yml |
| secrets: inherit |
| with: |
| jobs-json: ${{ toJson(needs) }} |