Skip to content
Snippets Groups Projects
Select Git revision
  • 2d1039210a0ea016d45a348cf1736cdf26596908
  • main default protected
  • archer
  • llvm13
4 results

Dockerfile

Blame
  • Dockerfile 3.77 KiB
    ARG MPI_FLAVOR=mpich
    
    FROM debian:12 AS base
    ARG LLVM_VERSION=14
    
    ENV DEBIAN_FRONTEND=noninteractive
    ENV TZ=Europe/Berlin
    ENV PATH=/opt/must/bin:$PATH
    
    RUN apt-get update && apt-get -y -qq --no-install-recommends install \
        build-essential \
        && rm -rf /var/lib/apt/lists/*
    
    RUN apt-get update \
        && apt-get -y -qq --no-install-recommends install \
        cmake \
        curl \
        binutils-dev \
        make \
        automake \
        autotools-dev \
        autoconf \
        libtool \
        zlib1g \
        zlib1g-dev \
        libatomic1 \
        libfabric-dev \
        libxml2-dev \
        python3 \
        python3-pip \
        python3-venv \
        gfortran \
        gcc \
        g++ \
        git \
        graphviz \
        libgtest-dev \
        clang-${LLVM_VERSION} \
        libomp-${LLVM_VERSION}-dev \
        libclang-${LLVM_VERSION}-dev \
        libclang-rt-${LLVM_VERSION}-dev \
        clang-format-${LLVM_VERSION} \
        clang-tidy-${LLVM_VERSION} \
        llvm-${LLVM_VERSION} \
        lldb-${LLVM_VERSION} \
        ninja-build \
        vim \
        openssh-client \
        gdb \
        wget \
        googletest \
        && apt-get -yq clean \
        && rm --recursive --force /var/lib/apt/lists/*
    
    # Ensure that correct LLVM toolset is used
    RUN ln -s /usr/bin/FileCheck-${LLVM_VERSION} /usr/bin/FileCheck
    RUN ln -s /usr/bin/clang-${LLVM_VERSION} /usr/bin/clang
    RUN ln -s /usr/bin/clang++-${LLVM_VERSION} /usr/bin/clang++
    RUN ln -s /usr/bin/clang-format-${LLVM_VERSION} /usr/bin/clang-format
    
    # Install lit
    ENV VIRTUAL_ENV=/opt/venv
    RUN python3 -m venv $VIRTUAL_ENV
    ENV PATH="$VIRTUAL_ENV/bin:$PATH"
    RUN pip3 install --no-input --no-cache-dir --disable-pip-version-check lit==14.0.0
    ENV CC=clang
    ENV CXX=clang++
    
    # Install recent version of Archer
    WORKDIR /opt/archer/
    RUN wget https://raw.githubusercontent.com/llvm-doe-org/llvm-project/03c9692d745552e7cabb5fe3ae321ff8c865341e/openmp/tools/archer/ompt-tsan.cpp
    COPY ompt-llvm14.patch .
    RUN patch -p1 ompt-tsan.cpp < ompt-llvm14.patch
    RUN clang++ -fPIC -shared ompt-tsan.cpp -o libarcher.so
    ENV OMP_TOOL_LIBRARIES="/opt/archer/libarcher.so"
    ENV TSAN_OPTIONS="ignore_noninstrumented_modules=1"
    
    FROM base AS base-mpich
    RUN apt-get update \
        && apt-get -y -qq --no-install-recommends install \
        mpich \
        libmpich-dev \
        && apt-get -yq clean \
        && rm --recursive --force /var/lib/apt/lists/*
    
    ENV MPICH_CC=clang
    ENV MPICH_CXX=clang++
    
    
    FROM base AS base-openmpi
    RUN apt-get update \
        && apt-get -y -qq --no-install-recommends install \
        openmpi-bin \
        libopenmpi-dev \
        && apt-get -yq clean \
        && rm --recursive --force /var/lib/apt/lists/*
    
    ENV OMPI_CC=clang
    ENV OMPI_CXX=clang++
    
    
    FROM base-${MPI_FLAVOR} AS final
    ARG MUST_VERSION=1.9.2
    
    COPY patches /patches
    
    # Build and install MUST
    RUN mkdir -p /opt/must/
    WORKDIR /build
    RUN wget https://hpc.rwth-aachen.de/must/files/MUST-v${MUST_VERSION}.tar.gz && \
        tar -xf MUST-v${MUST_VERSION}.tar.gz && mkdir -p MUST-v${MUST_VERSION}/build
    
    RUN cd MUST-v${MUST_VERSION} && \
        patch utility/mustrun2.sh < /patches/mustrun-env.patch && \
        patch externals/typeart/scripts/typeart-wrapper.in < /patches/typeart-fpic.patch && \
        patch modules/MpiTypeArt/MpiTypeArt.cpp < /patches/typeart-output.patch && \
        patch -p1 < /patches/relative-paths.patch && \
        cd build && \
        CC=clang CXX=clang++ MPICH_CC=clang MPICH_CXX=clang++ OMPI_CC=clang OMPI_CXX=clang \
          cmake .. -DCMAKE_INSTALL_PREFIX=/opt/must -DUSE_BACKWARD=ON -DENABLE_TESTS=ON -DENABLE_FORTRAN=ON -DLLVM_FILECHECK_PATH=$(which FileCheck) -DCMAKE_BUILD_TYPE=Release && \
        make install -j8 install-prebuilds
    
    # Run checks as non-privileged user (required for OpenMPI)
    RUN useradd -ms /bin/bash user
    RUN chown -R user /build
    USER user
    
    RUN cd MUST-v${MUST_VERSION}/build && \
        OMPI_MCA_rmaps_base_oversubscribe=true \
        make check-minimal -j8
    
    USER root
    RUN rm -r /build
    
    # Run container as non-privileged user
    USER user
    WORKDIR /home/user