Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

334 lines
14 KiB
YAML

# Linux variant of the SPIRV CI: builds LLVM/Clang/translator/Comgr in
# one job and runs SPIRV-relevant test suites in parallel test jobs that
# consume a GHA artifact uploaded by the build job.
name: SPIRV Compiler CI - Linux
on:
workflow_call:
jobs:
# =====================================================================
# Build LLVM + Clang + amd-llvm-spirv + device-libs + Comgr.
# Strip binaries and upload the build trees as a single artifact for
# the test jobs to consume.
# =====================================================================
build:
name: Build
runs-on: azure-linux-scale-rocm
timeout-minutes: 120
container:
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:702a5133851e6d1daf1207d2c9fbb01c2667914a5b6dc5a01faeb3ce66ea6421
outputs:
llvm_project_sha: ${{ steps.resolve_llvm_sha.outputs.sha }}
steps:
# ---- Checkout ---------------------------------------------------------
# llvm-project at amd-staging tip provides the host LLVM/Clang/LLD plus
# the amd/ subprojects (device-libs, comgr). The SPIRV translator PR
# head is overlaid in-tree under llvm/projects/.
- name: Checkout llvm-project (amd-staging)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ROCm/llvm-project
ref: amd-staging
path: llvm-project
fetch-depth: 1
persist-credentials: false
# Capture the resolved amd-staging SHA so test jobs can pin to the
# exact commit this build used. Without this, test jobs re-resolve
# `amd-staging` and may land on a newer commit if upstream merged
# mid-run, triggering a cascade rebuild against an older build.ninja.
- name: Resolve llvm-project SHA
id: resolve_llvm_sha
run: |
SHA=$(git -C llvm-project rev-parse HEAD)
echo "sha=$SHA" >> "$GITHUB_OUTPUT"
echo "Pinned llvm-project SHA for test jobs: $SHA"
- name: Checkout SPIRV-LLVM-Translator (PR head)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: llvm-project/llvm/projects/SPIRV-LLVM-Translator
fetch-depth: 1
persist-credentials: false
# ---- Build LLVM + Clang + LLD + in-tree SPIRV translator --------------
- name: Configure LLVM
run: |
cmake -G Ninja -S llvm-project/llvm -B build \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_TARGETS_TO_BUILD="AMDGPU;X86;SPIRV" \
-DLLVM_INCLUDE_TESTS=ON \
-DLLVM_INSTALL_GTEST=ON \
-DLLVM_LIT_ARGS="-sv --no-progress-bar"
- name: Build LLVM + Clang + amd-llvm-spirv + test deps
# *-test-depends pull in all tools needed for lit (FileCheck, not,
# llc, llvm-*, clang, opt, etc.) and stay current with upstream.
run: ninja -C build llvm-test-depends clang-test-depends amd-llvm-spirv
# ---- Build device-libs (standalone, against built LLVM) --------------
- name: Configure device-libs
run: |
cmake -G Ninja -S llvm-project/amd/device-libs -B build-device-libs \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=$PWD/build \
-DLLVM_DIR=$PWD/build/lib/cmake/llvm
- name: Build device-libs
run: ninja -C build-device-libs
# ---- Build Comgr (standalone, against built LLVM + device-libs) ------
- name: Configure Comgr
# LLVM_EXTERNAL_SPIRV_LLVM_TRANSLATOR_SOURCE_DIR points Comgr at
# the in-tree translator headers so COMGR_SPIRV_TRANSLATOR_AVAILABLE
# turns ON (otherwise translator-dependent lit tests are UNSUPPORTED).
run: |
cmake -G Ninja -S llvm-project/amd/comgr -B build-comgr \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="$PWD/build;$PWD/build-device-libs" \
-DLLVM_DIR=$PWD/build/lib/cmake/llvm \
-DLLVM_EXTERNAL_SPIRV_LLVM_TRANSLATOR_SOURCE_DIR=$PWD/llvm-project/llvm/projects/SPIRV-LLVM-Translator \
-DBUILD_TESTING=ON
- name: Build Comgr
run: ninja -C build-comgr amd_comgr
# ---- Strip + upload artifact -----------------------------------------
# Strip binaries to keep the artifact under GHA's 10GB cap and shorten
# upload/download time. Tests don't need debug symbols. `--strip-unneeded`
# preserves dynamic symbols needed at link/load time.
- name: Strip binaries
run: |
find build build-comgr build-device-libs \
-type f \( -executable -o -name '*.so*' -o -name '*.a' \) \
-exec strip --strip-unneeded {} + 2>/dev/null || true
# Tar before upload: actions/upload-artifact@v4 strips +x bits and
# excludes hidden files (loses FetchContent .git dirs).
- name: Tar build trees
run: tar -cf linux-build-tree.tar build build-comgr build-device-libs
- name: Upload build tree artifact
uses: actions/upload-artifact@v4
with:
name: linux-build-tree
path: linux-build-tree.tar
retention-days: 1
compression-level: 6
if-no-files-found: error
# =====================================================================
# Test - SPIRV translator lit (with PR-head vs amd-staging baseline diff)
# =====================================================================
# Non-blocking: upstream Khronos breaks ~1 translator lit test per week
# (spirv-val drift, LLVM IR changes vs DebugInfo tests, DCE). Their fixes
# typically land within a day; our daily upstream-merge cron pulls them
# in. Blocking here would gate unrelated PRs during those windows. The
# baseline run partitions failures into new / fixed / pre-existing so
# AMD-side regressions stay visible.
test_translator_lit:
name: Test SPIRV translator lit
needs: build
runs-on: azure-linux-scale-rocm
timeout-minutes: 30
container:
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:702a5133851e6d1daf1207d2c9fbb01c2667914a5b6dc5a01faeb3ce66ea6421
steps:
- name: Checkout llvm-project (pinned to Build job SHA)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ROCm/llvm-project
ref: ${{ needs.build.outputs.llvm_project_sha }}
path: llvm-project
fetch-depth: 1
persist-credentials: false
- name: Checkout SPIRV-LLVM-Translator (PR head)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: llvm-project/llvm/projects/SPIRV-LLVM-Translator
fetch-depth: 1
persist-credentials: false
- name: Download build tree artifact
uses: actions/download-artifact@v4
with:
name: linux-build-tree
# touch build.ninja so it's newer than CMakeCache.txt — without it
# tar -m's per-file mtimes can trigger a cmake regen + cascade rebuild.
- name: Untar build trees
run: |
tar -xmf linux-build-tree.tar
touch build/build.ninja build-comgr/build.ninja build-device-libs/build.ninja
- name: Test - SPIRV Translator (check-amd-llvm-spirv) [PR head]
id: check_spirv_xlator
continue-on-error: true
run: |
set -o pipefail
ninja -C build check-amd-llvm-spirv 2>&1 | tee build/check-amd-llvm-spirv.log
- name: Capture PR head translator failures
if: always()
run: |
grep -oE '^FAIL: LLVM_SPIRV :: \S+' build/check-amd-llvm-spirv.log \
| sort -u > build/spirv-fails-pr.txt || true
echo "PR head failures:"; cat build/spirv-fails-pr.txt
- name: Switch translator to amd-staging tip for baseline
if: always()
run: |
cd llvm-project/llvm/projects/SPIRV-LLVM-Translator
git fetch --depth=1 origin amd-staging
git checkout FETCH_HEAD
- name: Test - SPIRV Translator [baseline amd-staging]
# Re-run the lit suite with the translator at amd-staging tip so the
# gating step can flag only PR-introduced failures (filtering out
# pre-existing baseline failures). Incremental rebuild — only
# translator objects change.
if: always()
id: check_spirv_baseline
continue-on-error: true
run: |
set -o pipefail
# Re-configure to pick up any CMakeLists / file-list changes in the swap
cmake -G Ninja -S llvm-project/llvm -B build
ninja -C build check-amd-llvm-spirv 2>&1 \
| tee build/check-amd-llvm-spirv-baseline.log
- name: Capture baseline translator failures
# Split from the lit step so a non-zero ninja exit (lit failures +
# set -o pipefail under bash -e) doesn't skip this grep.
if: always()
run: |
grep -oE '^FAIL: LLVM_SPIRV :: \S+' build/check-amd-llvm-spirv-baseline.log \
| sort -u > build/spirv-fails-baseline.txt || true
echo "Baseline failures:"; cat build/spirv-fails-baseline.txt
# Fail the job on real regressions (PR head FAILs that aren't on
# amd-staging baseline). Pre-existing baseline failures don't block.
- name: Gate - new translator lit failures
if: always()
run: |
if [ ! -f build/spirv-fails-pr.txt ] || [ ! -f build/spirv-fails-baseline.txt ]; then
echo "::warning::Could not compute new-failure delta (missing pr.txt or baseline.txt); not gating."
exit 0
fi
new=$(comm -23 build/spirv-fails-pr.txt build/spirv-fails-baseline.txt)
if [ -n "$new" ]; then
count=$(printf '%s\n' "$new" | wc -l)
echo "::error::$count new translator lit failure(s) introduced by this PR:"
printf '%s\n' "$new" | sed 's/^/::error:: /'
exit 1
fi
echo "No new translator lit failures vs amd-staging baseline."
# =====================================================================
# Test - LLVM SPIRV codegen lit suite
# =====================================================================
test_codegen:
name: Test LLVM SPIRV codegen
needs: build
runs-on: azure-linux-scale-rocm
timeout-minutes: 15
container:
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:702a5133851e6d1daf1207d2c9fbb01c2667914a5b6dc5a01faeb3ce66ea6421
steps:
- name: Checkout llvm-project (pinned to Build job SHA)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ROCm/llvm-project
ref: ${{ needs.build.outputs.llvm_project_sha }}
path: llvm-project
fetch-depth: 1
persist-credentials: false
- name: Checkout SPIRV-LLVM-Translator (PR head)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: llvm-project/llvm/projects/SPIRV-LLVM-Translator
fetch-depth: 1
persist-credentials: false
- name: Download build tree artifact
uses: actions/download-artifact@v4
with:
name: linux-build-tree
# touch build.ninja so it's newer than CMakeCache.txt — without it
# tar -m's per-file mtimes can trigger a cmake regen + cascade rebuild.
- name: Untar build trees
run: |
tar -xmf linux-build-tree.tar
touch build/build.ninja build-comgr/build.ninja build-device-libs/build.ninja
- name: Test - LLVM SPIRV backend (check-llvm-codegen-spirv)
run: ninja -C build check-llvm-codegen-spirv
# =====================================================================
# Test - Comgr (lit + gtest + ctest)
# =====================================================================
test_comgr:
name: Test Comgr
needs: build
runs-on: azure-linux-scale-rocm
timeout-minutes: 30
container:
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:702a5133851e6d1daf1207d2c9fbb01c2667914a5b6dc5a01faeb3ce66ea6421
steps:
- name: Checkout llvm-project (pinned to Build job SHA)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ROCm/llvm-project
ref: ${{ needs.build.outputs.llvm_project_sha }}
path: llvm-project
fetch-depth: 1
persist-credentials: false
- name: Checkout SPIRV-LLVM-Translator (PR head)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: llvm-project/llvm/projects/SPIRV-LLVM-Translator
fetch-depth: 1
persist-credentials: false
- name: Download build tree artifact
uses: actions/download-artifact@v4
with:
name: linux-build-tree
# touch build.ninja so it's newer than CMakeCache.txt — without it
# tar -m's per-file mtimes can trigger a cmake regen + cascade rebuild.
- name: Untar build trees
run: |
tar -xmf linux-build-tree.tar
touch build/build.ninja build-comgr/build.ninja build-device-libs/build.ninja
- name: Test - Comgr (check-comgr)
# check-comgr depends on test-lit (runs lit suite) and test-unit
# (runs gtest binaries via its COMMAND block), then runs ctest for
# the legacy C tests. Single target = all three test layers.
id: check_comgr
run: ninja -C build-comgr check-comgr
- name: Show failed Comgr ctest output
# check-comgr invokes ctest without --output-on-failure, so failures
# show "***Failed" with no stderr. Re-run any failed cases verbosely
# and redirect comgr's internal log buffer to stderr so clang errors
# from inside amd_comgr_do_action() surface (otherwise comgr just
# returns AMD_COMGR_STATUS_ERROR with no detail).
if: failure() && steps.check_comgr.conclusion == 'failure'
env:
AMD_COMGR_REDIRECT_LOGS: stderr
run: ctest --test-dir build-comgr --output-on-failure --rerun-failed