Skip to content

Focus CI on the latest ROCm and amdclang - #254

Merged
derobins merged 1 commit into
developfrom
derobins/better_ci_matrix
Oct 18, 2026
Merged

derobins merged 1 commit into
developfrom
derobins/better_ci_matrix

Conversation

@derobins

Copy link
Copy Markdown
Collaborator

hipObject will be built with the latest ROCm's amdclang in rocm-systems and TheRock, so CI now builds with that unless a job exists to try something else. Every CI build uses ROCm 10.1.0, apart from the hardware tests, whose guests run ROCm 10.0, and the nightly packages.

The Build workflow's jobs are listed one by one rather than made by crossing axes. All of them use HIPOBJ_WERROR:

  • Core jobs, amdclang on Ubuntu 26.04: RelWithDebInfo; Debug with HIPOBJ_USE_SANITIZERS; RelWithDebInfo with HIPOBJ_USE_THREAD_SANITIZER, as TheRock's TSan builds are; and Debug with code coverage.
  • Smoke tests with amdclang: a static Release build (TheRock builds only shared libraries, and Release is its default), both NIC backends off, C++23, and C++26.
  • Upstream Clang 21, and GCC 15 with and without HIPOBJ_USE_SANITIZERS, for the problems amdclang misses.
  • Ubuntu 24.04's GCC 13 and Clang 18, with its CMake 3.28.

Other workflows:

  • The nightly builds its packages with each ROCm version's amdclang.
  • clang-tidy, IWYU, and the MinIO integration check use the Ubuntu 26.04 and ROCm 10.1.0 image. clang-tidy stays at LLVM 23, the newest release on apt.llvm.org, since ROCm 10.1's LLVM 24 only has snapshots there.
  • IWYU, the MinIO integration check, the hardware tests, and ci/ernic/run-local.sh build with amdclang. run-local.sh sets the compiler on the cmake command line, so a build directory left from an earlier run with GCC is reconfigured.

IWYU parses with the clang it was built with (Clang 19 on Ubuntu 26.04), which rejects flags newer than itself, such as amdclang's -fno-strict-bool. HIPOBJIWYU.cmake now reads that clang's version, and a Clang build with HIPOBJ_USE_IWYU uses only the flags both compilers have, hardening flags included. Builds without HIPOBJ_USE_IWYU are unchanged. iwyu-wrapper.sh passes a lone --version straight to IWYU, without recording it as a run.

applyVendorQpAttrs()'s attr parameter is [[maybe_unused]], since nothing uses it when HIPOBJ_BNXT and HIPOBJ_IONIC are both off, which made HIPOBJ_WERROR fail the build.

AGENTS.md, docs/building.rst, and CHANGELOG.md describe the new CI coverage, the nightly's compiler, and what HIPOBJ_USE_IWYU leaves out.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The compiler and image migrations, packaging changes, and IWYU flag adjustments need target-environment validation and final human review.

No open issues 🎉

What changed in this PR

Aligns hipObject CI with the amdclang-based builds planned for rocm-systems and TheRock.

Changes:

  • Replaces the build matrix with explicit core and compatibility jobs, primarily using ROCm 10.1.0.
  • Moves additional workflows and local hardware builds to amdclang.
  • Adapts IWYU compiler flags, fixes backend-disabled warning handling, and updates documentation.
File Description
src/​rdma/​transport.cpp Marks the conditionally unused parameter.
docs/​building.rst Documents IWYU restrictions and nightly compilers.
cmake/​HIPOBJIWYU.cmake Detects IWYU’s Clang version.
cmake/​HIPOBJCompilerOptions.cmake Limits IWYU builds to compatible flags.
ci/​iwyu/​iwyu-wrapper.sh Forwards version queries without logging.
ci/​ernic/​run-local.sh Explicitly selects amdclang during configuration.
CHANGELOG.md Records nightly and IWYU changes.
AGENTS.md Updates CI and tooling guidance.
.github/​workflows/​hipobject-nightly.yml Selects each ROCm version’s amdclang.
.github/​workflows/​hipobject-minio-integration-check.yml Updates the image and selects amdclang.
.github/​workflows/​hipobject-iwyu.yml Updates the image and selects amdclang.
.github/​workflows/​hipobject-hardware-test-two-vm-protocol.yml Selects amdclang for protocol builds.
.github/​workflows/​hipobject-hardware-test-two-vm-gpu-direct.yml Selects amdclang for two-VM GPU builds.
.github/​workflows/​hipobject-hardware-test-s3-backend.yml Selects amdclang for S3 backend builds.
.github/​workflows/​hipobject-hardware-test-minio-bridge.yml Selects amdclang for bridge builds.
.github/​workflows/​hipobject-hardware-test-gpu-direct.yml Selects amdclang for GPU-direct builds.
.github/​workflows/​hipobject-clang-tidy.yml Updates the image while retaining LLVM 23 tooling.
.github/​workflows/​hipobject-build.yml Defines explicit compiler and configuration coverage.

Review effort: Balanced

hipObject will be built with the latest ROCm's amdclang in rocm-systems
and TheRock, so CI now builds with that unless a job exists to try
something else. Every CI build uses ROCm 10.1.0, apart from the
hardware tests, whose guests run ROCm 10.0, and the nightly packages.

The Build workflow's jobs are listed one by one rather than made by
crossing axes. All of them use HIPOBJ_WERROR:

- Core jobs, amdclang on Ubuntu 26.04: RelWithDebInfo; Debug with
  HIPOBJ_USE_SANITIZERS; RelWithDebInfo with
  HIPOBJ_USE_THREAD_SANITIZER, as TheRock's TSan builds are; and Debug
  with code coverage.
- Smoke tests with amdclang: a static Release build (TheRock builds only
  shared libraries, and Release is its default), both NIC backends off,
  C++23, and C++26.
- Upstream Clang 21, and GCC 15 with and without HIPOBJ_USE_SANITIZERS,
  for the problems amdclang misses.
- Ubuntu 24.04's GCC 13 and Clang 18, with its CMake 3.28.

Other workflows:

- The nightly builds its packages with each ROCm version's amdclang.
- clang-tidy, IWYU, and the MinIO integration check use the Ubuntu 26.04
  and ROCm 10.1.0 image. clang-tidy stays at LLVM 23, the newest release
  on apt.llvm.org, since ROCm 10.1's LLVM 24 only has snapshots there.
- IWYU, the MinIO integration check, the hardware tests, and
  ci/ernic/run-local.sh build with amdclang. run-local.sh sets the
  compiler on the cmake command line, so a build directory left from an
  earlier run with GCC is reconfigured.

IWYU parses with the clang it was built with (Clang 19 on Ubuntu 26.04),
which rejects flags newer than itself, such as amdclang's
-fno-strict-bool. HIPOBJIWYU.cmake now reads that clang's version, and a
Clang build with HIPOBJ_USE_IWYU uses only the flags both compilers
have, hardening flags included. Builds without HIPOBJ_USE_IWYU are
unchanged. iwyu-wrapper.sh passes a lone --version straight to IWYU,
without recording it as a run.

applyVendorQpAttrs()'s attr parameter is [[maybe_unused]], since nothing
uses it when HIPOBJ_BNXT and HIPOBJ_IONIC are both off, which made
HIPOBJ_WERROR fail the build.

AGENTS.md, docs/building.rst, and CHANGELOG.md describe the new CI
coverage, the nightly's compiler, and what HIPOBJ_USE_IWYU leaves out.

Co-authored-by: Claude <noreply@anthropic.com>
@derobins
derobins force-pushed the derobins/better_ci_matrix branch from 281cfbb to a3576f6 Compare October 17, 2026 23:56
@github-actions

Copy link
Copy Markdown
Contributor
Security scan found no critical or high findings on lines changed by this pull request

View the security scan run for complete reports.

“New” means the finding is located in a changed file on an added or modified line; it is not a base-versus-head findings delta.

@derobins
derobins merged commit c0d0774 into develop Oct 18, 2026
50 checks passed
@derobins
derobins deleted the derobins/better_ci_matrix branch October 18, 2026 00:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants