Skip to content

linux-gnu: CI image for x86_64_v3 and aarch64 built from a Spack environment - #92

Draft
haampie-bot wants to merge 20 commits into
spack:mainfrom
haampie-llms:linux-gnu-image
Draft

haampie-bot wants to merge 20 commits into
spack:mainfrom
haampie-llms:linux-gnu-image

Conversation

@haampie-bot

@haampie-bot haampie-bot commented Nov 13, 2026 •

Copy link
Copy Markdown

Draft. Follow-up to #91: build the x86_64_v3 / aarch64 CI image from a Spack environment on AlmaLinux 8 (glibc 2.28), pushed with spack buildcache push --base-image. Contains gcc@14, llvm@23 and the tools CI needs (python with optimized clingo, boto3, awscli, git, ...). The workflow tests it by concretizing and building part of the developer-tools stacks and concretizing the ml-linux stacks.

Pins point at forks until these are merged:

Replaces the centos7 / ubi8 stage1+stage2 Makefile flow with a single
environment using spec groups (system gcc -> gcc@14 -> tools), built natively
on x86_64 and aarch64 GitHub runners, cached in an OCI build cache and turned
into an image with `spack buildcache push --base-image --tag`.
The conditional requirement (target=aarch64 when target=aarch64:) was not
enforced on the arm runner, which concretized to neoverse_n2; with gcc 8.5 that
also broke py-awscrt (-march with +sve, but no arm_sve.h before GCC 10).
Also drop the broken `spack load --only` smoke test; test-ci.sh covers it.
Build-only dependencies are not installed when everything comes from the
cache (and autopush already pushed them when they were built).
The ml-linux stacks require %c,cxx=llvm for py-jaxlib and py-tensorflow.
llvm writes --gcc-install-dir of the compiler that built it into clang.cfg,
and the image has no system gcc, so llvm is built with the Spack-built
gcc@14 in a group that needs the tools group.

test-ci.sh checks that clang++ compiles and runs C++ with that toolchain and
concretizes the ml-linux stacks.
…c fixes

- spack/spack-packages#7671: clang.cfg rpaths gcc@14's runtime libraries,
  so test-ci.sh no longer passes -rpath and checks RUNPATH instead (for
  g++ via gcc's specs file, for clang++ via clang++.cfg).
- spack/spack-packages#7672: no copy of the build's bin in libexec/llvm.
- +link_llvm_dylib: tools link libLLVM.so and libclang-cpp.so instead of
  each statically linking LLVM; llvm was a 3.4 GB compressed layer.
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.

1 participant