When linking `libnvvm.so.4` into `librustc_codegen_nvvm.so` shared
library via the `cust_raw` package, we specified the following
parameters in the `build.rs`:
- cargo::rustc-link-search=native=xxx
- cargo::rustc-link-lib=dylib=nvvm
According to the [Cargo documentation](https://doc.rust-lang.org/cargo/reference/build-scripts.html#rustc-link-search),
the path we added to the `rustc-link-search` parameter is not further
populated to the `LD_LIBRARY_PATH` for search by the transitive
dependencies.
> These paths are also added to the dynamic library search path
> environment variable if they are within the OUT_DIR.
The behavior is intended to be limited to the OUT_DIR so the
`libnvvm.so.4`, which lives as a part of the CUDA SDK, is excluded.
Therefore, we must add it to the LD_LIBRARY_PATH manually in our
container build stage.
Added a new workflow, container_images.yml, to automate building and
pushing CI container images to GitHub Container Registry, ensuring
consistent environments for CI runs across Linux distributions.
Added a dedicated CI workflow for Linux to streamline testing across
multiple CUDA and OS configurations. It reuses the images built from
container_images.yml workflow to avoid installing CUDA toolkits every
time to save time.
Key changes:
- Matrix configurations for Ubuntu 22/24, RockyLinux 9 with CUDA 12.8.1
- Dockerfiles updated with required dependencies (clang, CUDA
toolchains, etc.) to support bindgen and build examples.
- Removed redundant CI steps from `rust.yml` now handled in
`ci_linux.yml`
The Docker setup has been refactored to support Ubuntu 20.04, 24.04, and
Rocky Linux 9 with CUDA 11/12. The original Dockerfile (Ubuntu 18.04 +
CUDA 11.4) has been replaced with a matrix of distribution-specific
Dockerfiles. Dependencies like LLVM 7 and Rust are now configured to
work across these environments.