Files
TheRock/dockerfiles/build_manylinux_x86_64.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

146 lines
5.8 KiB
Docker

# This dockerfile builds automatically upon push to the main branch. It can be built
# interactively for testing via:
# docker buildx build --file dockerfiles/build_manylinux_x86_64.Dockerfile dockerfiles/
# This will print a SHA image id, which you can run with (or equiv):
# sudo docker run --rm -it --entrypoint /bin/bash <<IMAGE>>
#
# To build and push to a test branch, create a pull request on a branch named:
# stage/docker/*
# We build our portable linux releases on the manylinux (RHEL-based)
# images, with custom additional packages installed. We switch to
# new upstream versions as needed.
FROM quay.io/pypa/manylinux_2_28_x86_64@sha256:d632b5e68ab39e59e128dcf0e59e438b26f122d7f2d45f3eea69ffd2877ab017
######## Python and CMake setup #######
# These images come with multiple python versions. We pin one for
# default use.
# Prepend therock-tools to PATH
ENV PATH="/usr/local/therock-tools/bin:/opt/python/cp312-cp312/bin:${PATH}"
######## Pip Packages ########
RUN pip install --upgrade pip setuptools==69.1.1 wheel==0.46.2 && \
pip install CppHeaderParser==2.7.4 meson==1.7.0 tomli==2.2.1 PyYAML==6.0.2
######## CCache ########
WORKDIR /install-ccache
COPY install_ccache.sh ./
RUN ./install_ccache.sh "4.11.2" && rm -rf /install-ccache
######## SCCache ########
WORKDIR /install-sccache
COPY install_sccache.sh ./
RUN ./install_sccache.sh "0.14.0" && rm -rf /install-sccache
######## CMake ########
WORKDIR /install-cmake
ENV CMAKE_VERSION="3.27.9"
COPY install_cmake.sh ./
RUN ./install_cmake.sh "${CMAKE_VERSION}" && rm -rf /install-cmake
######## Ninja ########
WORKDIR /install-ninja
ENV NINJA_VERSION="1.12.1"
COPY install_ninja.sh ./
RUN ./install_ninja.sh "${NINJA_VERSION}" && rm -rf /install-ninja
######## AWS CLI ######
WORKDIR /install-awscli
COPY install_awscli.sh ./
RUN ./install_awscli.sh && rm -rf /install-awscli
######## Installing Google test #######
WORKDIR /install-googletest
ENV GOOGLE_TEST_VERSION="1.16.0"
COPY install_googletest.sh ./
RUN ./install_googletest.sh "${GOOGLE_TEST_VERSION}" && rm -rf /install-googletest
######## Rust (rustup) ########
ENV RUSTUP_HOME="/usr/local/rustup"
ENV CARGO_HOME="/usr/local/cargo"
WORKDIR /install-rust
ENV RUST_VERSION="1.95.0"
COPY install_rust.sh ./
RUN ./install_rust.sh "${RUST_VERSION}" && rm -rf /install-rust
######## Yum Packages #######
# We are pinning to gcc-toolset-12 until it is safe to upgrade. The latest
# manylinux containers use gcc-toolset-14 or later, which is not yet compatible
# with the LLVM that ROCm builds. This can be upgraded when clang-21 is used.
#
# We allow development tools in this list but not development packages (so that
# things can't acceidentally build with system dependencies).
#
# Development tool dependencies:
# texinfo, flag: rocprofiler-systems
RUN yum install -y epel-release && \
yum remove -y gcc-toolset* && \
yum install -y \
gcc-toolset-13-binutils \
gcc-toolset-13-gcc \
gcc-toolset-13-gcc-c++ \
gcc-toolset-13-gcc-gfortran \
gcc-toolset-13-libatomic-devel \
gcc-toolset-13-libstdc++-devel \
vim-common \
git-lfs \
&& yum install -y \
texinfo \
flex \
&& yum clean all && \
rm -rf /var/cache/yum
######## DVC via pip ######
# dvc's rpm package includes .so dependencies built against glib 2.29
# settling for pip install for now, but it installs modules not needed for dvc pull
# more dvc features may be used in upcoming sequenced builds
# Pin aiobotocore explicitly so rebuilds resolve a deterministic botocore
# window. Without this, dvc's loose `aiobotocore` bound lets future pip
# resolutions drift botocore out of the boto3 pin in requirements.txt.
#
# Note: aiobotocore==3.4.0 requires botocore>=1.42.79,<1.42.85; keep the
# boto3 pin in requirements.txt aligned with that window.
RUN pip install 'dvc[s3]==3.67.1' 'aiobotocore==3.4.0' && \
which dvc && dvc --version || true
######## Enable GCC Toolset and verify ########
# This is a subset of what is typically sourced in the gcc-toolset enable
# script.
# The base manylinux container has references to its gcc-toolset in its PATHs,
# clean up LIBRARY_PATH and LD_LIBRARY_PATH since we yum remove that version.
# -- Predefine variables to avoid Dockerfile linting warnings --
# Docker requires environment variables to be defined before reuse.
ENV LIBRARY_PATH=""
ENV LD_LIBRARY_PATH=""
ENV DEVTOOLSET_ROOTPATH="/opt/rh/gcc-toolset-13/root"
ENV PATH="/opt/rh/gcc-toolset-13/root/usr/bin:${PATH}"
ENV LIBRARY_PATH="/opt/rh/gcc-toolset-13/root/usr/lib64:/opt/rh/gcc-toolset-13/root/usr/lib:${LIBRARY_PATH}"
ENV LD_LIBRARY_PATH="/opt/rh/gcc-toolset-13/root/usr/lib64:/opt/rh/gcc-toolset-13/root/usr/lib:${LD_LIBRARY_PATH}"
######## Enable GCC Toolset and verify ########
RUN which gcc && gcc --version && \
which g++ && g++ --version && \
which clang++ || true
######## PatchELF ########
# Note: requires newer gcc toolset so after gcc activation
WORKDIR /install-patchelf
ENV PATCHELF_GIT_REF="d0f70eea5397606c486857e0a105e53ec123904a"
COPY install_patchelf.sh ./
RUN ./install_patchelf.sh "${PATCHELF_GIT_REF}" && rm -rf /install-patchelf
######## Shared Python Interpreters ########
# Build Python with --enable-shared for embedding (e.g., rocgdb).
# The manylinux /opt/python builds are statically linked and can't be embedded.
WORKDIR /install-shared-pythons
COPY install_shared_pythons.sh ./
RUN ./install_shared_pythons.sh /tmp/python-build && rm -rf /install-shared-pythons /tmp/python-build
######## GIT CONFIGURATION ########
# Git started enforcing strict user checking, which thwarts version
# configuration scripts in a docker image where the tree was checked
# out by the host and mapped in. Disable the check.
# See: https://github.com/openxla/iree/issues/12046
# We use the wildcard option to disable the checks. This was added
# in git 2.35.3
RUN git config --global --add safe.directory '*'