Skip to content

Enable rocm and vulkan build in CI workflow for PJRT plugin #32196

Enable rocm and vulkan build in CI workflow for PJRT plugin

Enable rocm and vulkan build in CI workflow for PJRT plugin #32196

Workflow file for this run

# 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 }}"