| # 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 | |
| env: | |
| # This needs to be in env instead of the outputs of setup because it contains | |
| # the run attempt and we want that to be the current attempt, not whatever | |
| # attempt the setup step last ran in. | |
| GCS_URL: https://storage.googleapis.com/iree-github-actions-${{ github.event_name == 'pull_request' && 'presubmit' || 'postsubmit' }}-artifacts/${{ github.run_id }}/${{ github.run_attempt }} | |
| # Jobs are organized into groups and topologically sorted by dependencies | |
| jobs: | |
| setup: | |
| uses: ./.github/workflows/setup.yml | |
| ############################### Configurations ############################### | |
| # Jobs that build IREE in some non-default configuration | |
| ############################################################################## | |
| 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-20.04 | |
| runs-on: ubuntu-20.04 | |
| 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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
| - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.1.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@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 | |
| 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-20.04 | |
| env: | |
| BUILD_DIR: build-runtime | |
| CC: clang | |
| CXX: clang++ | |
| steps: | |
| - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
| - 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@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 | |
| 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.provider }} provider" | |
| if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'runtime_tracing') | |
| runs-on: ubuntu-20.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - provider: tracy | |
| - provider: console | |
| env: | |
| BUILD_DIR: build-tracing | |
| CC: clang | |
| CXX: clang++ | |
| TRACING_PROVIDER: ${{ matrix.provider }} | |
| steps: | |
| - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
| - 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@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14 | |
| with: | |
| key: ${{ github.job }}-${{ 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=${TRACING_PROVIDER} \ | |
| -DIREE_HAL_DRIVER_CUDA=ON \ | |
| -DIREE_HAL_DRIVER_HIP=ON | |
| - name: CMake - build | |
| run: cmake --build ${BUILD_DIR} -- -k 0 | |
| ############################## Crosscompilation ############################## | |
| # Jobs that cross-compile IREE for other platforms | |
| ############################################################################## | |
| # Disabled to reduce self-hosted runners needed. See #17957 | |
| # TODO(#17957): migrate to pkgci | |
| # cross_compile_and_test: | |
| # needs: [setup, build_all] | |
| # if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'cross_compile_and_test') | |
| # runs-on: | |
| # - self-hosted # must come first | |
| # - runner-group=${{ needs.setup.outputs.runner-group }} | |
| # - environment=${{ needs.setup.outputs.runner-env }} | |
| # - cpu | |
| # - os-family=Linux | |
| # strategy: | |
| # matrix: | |
| # target: | |
| # - platform: linux | |
| # arch: riscv_32 | |
| # abi: ilp32d | |
| # docker_image: "gcr.io/iree-oss/riscv@sha256:62e87bad3405d691ddba6f9be0ef44eeb60461a467c8d86f0842c81a1f97da79" | |
| # build_script: "./build_tools/cmake/build_riscv.sh" | |
| # test_script: "./build_tools/cmake/test_riscv.sh" | |
| # - platform: generic | |
| # arch: riscv_32 | |
| # abi: ilp32 | |
| # docker_image: "gcr.io/iree-oss/riscv@sha256:62e87bad3405d691ddba6f9be0ef44eeb60461a467c8d86f0842c81a1f97da79" | |
| # build_script: "./build_tools/cmake/build_riscv.sh" | |
| # test_script: "./tests/riscv32/smoke.sh" | |
| # - platform: emscripten | |
| # arch: wasm32 | |
| # abi: wasm32 | |
| # docker_image: "gcr.io/iree-oss/emscripten@sha256:2dd4c52f1bb499ab365aad0111fe5538b685d88af38636b409b0cf6a576ab214" | |
| # build_script: "./build_tools/cmake/build_runtime_emscripten.sh" | |
| # # No test script | |
| # env: | |
| # PLATFORM: ${{ matrix.target.platform }} | |
| # ARCH: ${{ matrix.target.arch }} | |
| # ABI: ${{ matrix.target.abi }} | |
| # DOCKER_IMAGE: ${{ matrix.target.docker_image }} | |
| # BUILD_SCRIPT: ${{ matrix.target.build_script }} | |
| # TEST_SCRIPT: ${{ matrix.target.test_script }} | |
| # INSTALL_DIR: ${{ needs.build_all.outputs.install-dir }} | |
| # INSTALL_DIR_ARCHIVE: ${{ needs.build_all.outputs.install-dir-archive }} | |
| # INSTALL_DIR_GCS_ARTIFACT: ${{ needs.build_all.outputs.install-dir-gcs-artifact }} | |
| # TARGET_BUILD_DIR: build-${{ matrix.target.platform }}-${{ matrix.target.arch }} | |
| # IREE_WRITE_REMOTE_CCACHE: ${{ needs.setup.outputs.write-caches }} | |
| # steps: | |
| # - name: "Checking out repository" | |
| # uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
| # - name: "Checking out runtime submodules" | |
| # run: ./build_tools/scripts/git/update_runtime_submodules.sh | |
| # - name: "Downloading install dir archive" | |
| # run: gcloud storage cp "${INSTALL_DIR_GCS_ARTIFACT}" "${INSTALL_DIR_ARCHIVE}" | |
| # - name: "Extracting install directory" | |
| # run: tar -xf "${INSTALL_DIR_ARCHIVE}" | |
| # - name: "Build cross-compiling target" | |
| # run: | | |
| # ./build_tools/github_actions/docker_run.sh \ | |
| # --env "IREE_CCACHE_GCP_TOKEN=$(gcloud auth application-default print-access-token)" \ | |
| # --env "IREE_WRITE_REMOTE_CCACHE=${IREE_WRITE_REMOTE_CCACHE}" \ | |
| # --env "CCACHE_NAMESPACE=${DOCKER_IMAGE}" \ | |
| # --env "IREE_TARGET_PLATFORM=${PLATFORM}" \ | |
| # --env "IREE_TARGET_ARCH=${ARCH}" \ | |
| # --env "IREE_TARGET_ABI=${ABI}" \ | |
| # --env "IREE_TARGET_BUILD_DIR=${TARGET_BUILD_DIR}" \ | |
| # --env "IREE_HOST_BIN_DIR=${INSTALL_DIR}/bin" \ | |
| # "${DOCKER_IMAGE}" \ | |
| # "${BUILD_SCRIPT}" | |
| # - name: "Test cross-compiling target" | |
| # if: matrix.target.test_script | |
| # run: | | |
| # ./build_tools/github_actions/docker_run.sh \ | |
| # --env "IREE_TARGET_PLATFORM=${PLATFORM}" \ | |
| # --env "IREE_TARGET_ARCH=${ARCH}" \ | |
| # --env "IREE_TARGET_BUILD_DIR=${TARGET_BUILD_DIR}" \ | |
| # "${DOCKER_IMAGE}" \ | |
| # "${TEST_SCRIPT}" | |
| ############################################################################## | |
| # Depends on all the other jobs to provide a single anchor that indicates the | |
| # final status. Status reporting will become more sophisticated in the future | |
| # and we can hopefully avoid the need to explicitly list every single job... | |
| summary: | |
| # Even if you have an explicit if condition, you still need to override | |
| # GitHub's default behavior of not running if any dependencies failed. | |
| if: always() | |
| runs-on: ubuntu-20.04 | |
| needs: | |
| - setup | |
| # Accelerators | |
| # - test_nvidia_a100 | |
| # Runtime build variants | |
| - runtime | |
| - runtime_small | |
| - runtime_tracing | |
| # Crosscompilation | |
| # - cross_compile_and_test | |
| steps: | |
| - name: "Checking out repository" | |
| uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
| - name: Getting failed jobs | |
| id: failed_jobs | |
| run: | | |
| echo '${{ toJson(needs) }}' | |
| FAILED_JOBS="$(echo '${{ toJson(needs) }}' \ | |
| | jq --raw-output \ | |
| 'map_values(select(.result!="success" and .result!="skipped")) | keys | join(",")' \ | |
| )" | |
| echo "failed-jobs=${FAILED_JOBS}" >> $GITHUB_OUTPUT | |
| if [[ "${FAILED_JOBS}" != "" ]]; then | |
| echo "The following jobs failed: ${FAILED_JOBS}" | |
| exit 1 | |
| fi | |
| - name: Posting to Discord | |
| uses: sarisia/actions-status-discord@ce8cc68e4e626000136b3c702d049a154243e490 # v1.14.7 | |
| if: failure() && github.ref_name == 'main' | |
| with: | |
| webhook: ${{ secrets.DISCORD_WEBHOOK }} | |
| description: "The following jobs failed: ${{ steps.failed_jobs.outputs.failed-jobs }}" | |
| url: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}" |