Files
TheRock/rocm-systems/emulation/mirage/tests/corpus/Dockerfile
T
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

96 lines
4.8 KiB
Docker

# Dockerfile — ROCm dev image + the IREE test tools the rocjitsu-corpus needs.
#
# The corpus regression (scripts/run_gfx1250_regression.sh) drives two IREE
# tools over its packaged gfx1250 VMFBs:
#
# * iree-check-module (e2e VMFB checks)
# * iree-e2e-matmul-test (matmul VMFB pairs)
#
# Neither ships in the IREE pip wheels (iree-base-runtime only provides
# iree-run-module / iree-benchmark-module / ...): they are *test* tools produced
# only by an IREE source build with -DIREE_BUILD_TESTS=ON. This image builds
# them from source against the HIP HAL driver and stages them onto the standard
# ROCm dev image so mirage can run the corpus inside a container that already
# has everything it needs.
#
# The compiler is intentionally NOT built (-DIREE_BUILD_COMPILER=OFF): the
# corpus runs *prebuilt* VMFBs, so we only need the runtime + the two test
# tools. That keeps the build to the IREE runtime (no LLVM) and the image small.
#
# Build (from this directory):
# docker build -t mirage/iree-corpus:gfx1250 \
# --build-arg IREE_REF=v3.7.0 -f Dockerfile .
# or, via mirage's CMake:
# cmake -S . -B build -DMIRAGE_RUN_CORPUS=ON -DMIRAGE_CORPUS_BUILD_IMAGE=ON
# cmake --build build --target corpus_image
ARG BASE_IMAGE=docker.io/rocm/dev-ubuntu-24.04:7.1.1-complete
FROM ${BASE_IMAGE} AS build
# IREE source ref to build the tools from. Pin a release tag for reproducible
# images; override with --build-arg IREE_REF=<tag|branch|sha>. A recent runtime
# maximises the chance of loading the (new, gfx1250) corpus VMFBs. The packaged
# corpus VMFBs require HAL module version 7, which first shipped during the
# 3.12.0 cycle (the v3.11.0 release only provides version 6).
ARG IREE_REF=iree-3.12.0rc20260604
ARG IREE_REPO=https://github.com/iree-org/iree.git
# Build prerequisites. The ROCm "-complete" base already provides HIP and a
# clang/lld toolchain under /opt/rocm; we add the generic CMake/Ninja/Python
# build deps. Pin nothing here beyond what apt resolves for the base release.
RUN apt-get update && apt-get install -y --no-install-recommends \
git cmake ninja-build build-essential \
python3 python3-pip python3-venv ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# Fetch IREE at the requested ref. The compiler is NOT built (below), so the
# giant llvm-project submodule is skipped — only the runtime submodules (incl.
# the HIP build deps) are initialised. Everything is shallow.
RUN git clone --depth 1 --branch "${IREE_REF}" "${IREE_REPO}" /opt/iree-src \
&& git -C /opt/iree-src config submodule.third_party/llvm-project.update none \
&& git -C /opt/iree-src submodule update --init --depth 1 --recommend-shallow --jobs "$(nproc)"
# Configure a runtime-only build with the HIP HAL driver and the test tools.
# IREE's HIP driver dlopen()s libamdhip64.so at run time, so the tools follow
# the host ROCm install mounted into the container at run time. Only the HIP +
# local HAL drivers are enabled (Vulkan/etc. are off) to keep the build deps to
# what the ROCm base already provides.
RUN cmake -G Ninja -S /opt/iree-src -B /opt/iree-build \
-DCMAKE_BUILD_TYPE=Release \
-DIREE_BUILD_COMPILER=OFF \
-DIREE_BUILD_TESTS=ON \
-DIREE_BUILD_SAMPLES=OFF \
-DIREE_BUILD_PYTHON_BINDINGS=OFF \
-DIREE_HAL_DRIVER_DEFAULTS=OFF \
-DIREE_HAL_DRIVER_LOCAL_SYNC=ON \
-DIREE_HAL_DRIVER_LOCAL_TASK=ON \
-DIREE_HAL_DRIVER_HIP=ON
# Build just the two tools the corpus invokes (and their deps).
RUN cmake --build /opt/iree-build --target iree-check-module iree-e2e-matmul-test
# ---- final image ------------------------------------------------------------
# Stage the two tools onto a fresh copy of the base image so the result is the
# ROCm dev environment + the IREE test tools, without the multi-GB build tree.
FROM ${BASE_IMAGE} AS runtime
# The tool locations within the build tree are stable across IREE versions, but
# copy by search to be resilient to layout changes.
COPY --from=build /opt/iree-build /opt/iree-build
RUN set -eux; \
install -d /usr/local/bin; \
for tool in iree-check-module iree-e2e-matmul-test; do \
src="$(find /opt/iree-build -type f -name "$tool" -perm -u+x | head -n1)"; \
test -n "$src" || { echo "error: $tool not found in build tree" >&2; exit 1; }; \
install -m 0755 "$src" "/usr/local/bin/$tool"; \
done; \
rm -rf /opt/iree-build
# Smoke check that the tools are runnable (prints help, exits 0).
RUN iree-check-module --help >/dev/null 2>&1 || true; \
iree-e2e-matmul-test --help >/dev/null 2>&1 || true
LABEL org.opencontainers.image.title="mirage IREE corpus runner" \
org.opencontainers.image.description="ROCm dev image + IREE iree-check-module / iree-e2e-matmul-test for the rocjitsu-corpus gfx1250 regression" \
org.opencontainers.image.base.name="docker.io/rocm/dev-ubuntu-24.04:7.1.1-complete"