Back to home page

EIC code displayed by LXR

 
 

    


Warning, /eic-opticks/Dockerfile is written in an unsupported language. File is not indexed.

0001 # syntax=docker/dockerfile:latest
0002 
0003 ARG OS=ubuntu24.04
0004 ARG CUDA_VERSION=13.0.3
0005 ARG OPTIX_VERSION=9.0.0
0006 ARG GEANT4_VERSION=11.4.2
0007 ARG CMAKE_VERSION=4.2.1
0008 ARG PYTHON_VERSION=3.13
0009 ARG SPACK_BUILDCACHE_MIRROR=oci://ghcr.io/bnlnpps/simphony-spack-buildcache
0010 ARG SPACK_TARGET=x86_64_v2
0011 
0012 FROM nvidia/cuda:${CUDA_VERSION}-devel-${OS} AS base
0013 
0014 ARG OPTIX_VERSION
0015 ARG GEANT4_VERSION
0016 ARG CMAKE_VERSION
0017 ARG PYTHON_VERSION
0018 ARG CMAKE_BUILD_JOBS
0019 
0020 ENV DEBIAN_FRONTEND=noninteractive
0021 
0022 RUN apt update \
0023  && apt install -y g++ gcc gzip tar python3 python-is-python3 python3-pip curl git \
0024  && apt clean \
0025  && rm -rf /var/lib/apt/lists/*
0026 
0027 RUN apt update \
0028  && apt install -y nlohmann-json3-dev \
0029     libglu1-mesa-dev libxmu-dev libglm-dev \
0030     libxkbcommon-dev \
0031     qt6-base-dev libxerces-c-dev libexpat1-dev \
0032  && apt clean \
0033  && rm -rf /var/lib/apt/lists/*
0034 
0035 RUN curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.tar.gz \
0036     | tar -xz --strip-components=1 -C /usr/local
0037 
0038 RUN mkdir -p /opt/clhep/src && curl -sL https://gitlab.cern.ch/CLHEP/CLHEP/-/archive/CLHEP_2_4_7_2/CLHEP-CLHEP_2_4_7_2.tar.gz | tar -xz --strip-components 1 -C /opt/clhep/src \
0039  && cmake -S /opt/clhep/src -B /opt/clhep/build \
0040  && cmake --build /opt/clhep/build --parallel "${CMAKE_BUILD_JOBS:-$(nproc)}" --target install \
0041  && rm -fr /opt/clhep
0042 
0043 RUN mkdir -p /opt/geant4/src && curl -sL https://github.com/Geant4/geant4/archive/refs/tags/v${GEANT4_VERSION}.tar.gz | tar -xz --strip-components 1 -C /opt/geant4/src \
0044  && cmake -S /opt/geant4/src -B /opt/geant4/build -DGEANT4_USE_SYSTEM_CLHEP=ON -DGEANT4_USE_OPENGL_X11=ON -DGEANT4_USE_QT=ON -DGEANT4_USE_QT_QT6=ON -DGEANT4_USE_GDML=ON -DGEANT4_INSTALL_DATA=ON -DGEANT4_BUILD_MULTITHREADED=ON \
0045  && cmake --build /opt/geant4/build --parallel "${CMAKE_BUILD_JOBS:-$(nproc)}" --target install \
0046  && rm -fr /opt/geant4
0047 
0048 RUN mkdir -p /opt/plog/src && curl -sL https://github.com/SergiusTheBest/plog/archive/refs/tags/1.1.11.tar.gz | tar -xz --strip-components 1 -C /opt/plog/src \
0049  && cmake -S /opt/plog/src -B /opt/plog/build \
0050  && cmake --build /opt/plog/build --parallel "${CMAKE_BUILD_JOBS:-$(nproc)}" --target install \
0051  && rm -fr /opt/plog
0052 
0053 RUN mkdir -p /opt/optix && curl -sL https://github.com/NVIDIA/optix-dev/archive/refs/tags/v${OPTIX_VERSION}.tar.gz | tar -xz --strip-components 1 -C /opt/optix
0054 
0055 RUN curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR=/usr/local/bin sh
0056 
0057 ENV UV_PYTHON=${PYTHON_VERSION}
0058 ENV UV_MANAGED_PYTHON=1
0059 
0060 SHELL ["/bin/bash", "-l", "-c"]
0061 
0062 # Set up non-interactive shells by sourcing all of the scripts in /etc/profile.d/
0063 RUN cat <<"EOF" > /etc/bash.nonint
0064 if [ -d /etc/profile.d ]; then
0065   for i in /etc/profile.d/*.sh; do
0066     if [ -r $i ]; then
0067       . $i
0068     fi
0069   done
0070   unset i
0071 fi
0072 EOF
0073 
0074 RUN cat /etc/bash.nonint >> /etc/bash.bashrc
0075 
0076 ENV BASH_ENV=/etc/bash.nonint
0077 ENV SIMPHONY_PREFIX=/opt/simphony
0078 ENV SIMPHONY_HOME=/workspaces/simphony
0079 ENV SIMPHONY_BUILD=/opt/simphony/build
0080 ENV LD_LIBRARY_PATH=${SIMPHONY_PREFIX}/lib:${LD_LIBRARY_PATH}
0081 ENV VIRTUAL_ENV=${SIMPHONY_HOME}/.venv
0082 ENV PATH=${SIMPHONY_PREFIX}/bin:${VIRTUAL_ENV}/bin:${PATH}
0083 ENV NVIDIA_DRIVER_CAPABILITIES=graphics,compute,utility
0084 
0085 WORKDIR $SIMPHONY_HOME
0086 
0087 # Install Python dependencies
0088 COPY pyproject.toml uv.lock $SIMPHONY_HOME/
0089 COPY optiphy $SIMPHONY_HOME/optiphy
0090 RUN uv sync --python "${PYTHON_VERSION}" --managed-python
0091 
0092 
0093 FROM base AS release
0094 
0095 ARG CMAKE_BUILD_JOBS
0096 
0097 COPY . $SIMPHONY_HOME
0098 
0099 RUN cmake -S $SIMPHONY_HOME -B $SIMPHONY_BUILD -DCMAKE_INSTALL_PREFIX=$SIMPHONY_PREFIX -DCMAKE_BUILD_TYPE=Release \
0100  && cmake --build $SIMPHONY_BUILD --parallel "${CMAKE_BUILD_JOBS:-$(nproc)}" --target install
0101 
0102 
0103 FROM base AS develop
0104 
0105 ARG CMAKE_BUILD_JOBS
0106 
0107 RUN apt update && apt install -y x11-apps mesa-utils vim
0108 
0109 COPY . $SIMPHONY_HOME
0110 
0111 RUN cmake -S $SIMPHONY_HOME -B $SIMPHONY_BUILD -DCMAKE_INSTALL_PREFIX=$SIMPHONY_PREFIX -DCMAKE_BUILD_TYPE=Debug \
0112  && cmake --build $SIMPHONY_BUILD --parallel "${CMAKE_BUILD_JOBS:-$(nproc)}" --target install
0113 
0114 
0115 FROM nvidia/cuda:${CUDA_VERSION}-devel-${OS} AS spack-base
0116 
0117 ARG OPTIX_VERSION
0118 ARG GEANT4_VERSION
0119 ARG SPACK_BUILDCACHE_MIRROR
0120 ARG SPACK_TARGET
0121 ARG SPACK_VERSION=1.1.1
0122 
0123 ENV DEBIAN_FRONTEND=noninteractive
0124 
0125 # Install Spack package manager
0126 RUN apt update \
0127  && apt install -y build-essential ca-certificates coreutils curl gfortran git gpg lsb-release unzip zip python3 \
0128  && apt clean \
0129  && rm -rf /var/lib/apt/lists/*
0130 
0131 RUN mkdir -p /opt/spack && curl -fsSL https://github.com/spack/spack/archive/v${SPACK_VERSION}.tar.gz | tar -xz --strip-components 1 -C /opt/spack
0132 RUN echo "source /opt/spack/share/spack/setup-env.sh" > /etc/profile.d/z09_source_spack_setup.sh
0133 RUN echo "source /etc/profile.d/z09_source_spack_setup.sh" >> /etc/bash.bashrc
0134 
0135 ENV BASH_ENV=/etc/profile.d/z09_source_spack_setup.sh
0136 ENV SIMPHONY_PREFIX=/opt/simphony
0137 ENV SIMPHONY_HOME=/workspaces/simphony
0138 ENV SIMPHONY_BUILD=/opt/simphony/build
0139 ENV OPTIX_VERSION=${OPTIX_VERSION}
0140 ENV GEANT4_VERSION=${GEANT4_VERSION}
0141 ENV SPACK_BUILDCACHE_MIRROR=${SPACK_BUILDCACHE_MIRROR}
0142 ENV SPACK_TARGET=${SPACK_TARGET}
0143 ENV PATH=/opt/spack/bin:${PATH}
0144 ENV NVIDIA_DRIVER_CAPABILITIES=graphics,compute,utility
0145 
0146 WORKDIR ${SIMPHONY_HOME}
0147 
0148 SHELL ["/bin/bash", "-l", "-c"]
0149 
0150 RUN mkdir -p /root/.spack \
0151  && cat > /root/.spack/packages.yaml <<EOF
0152 packages:
0153   all:
0154     target: [${SPACK_TARGET}]
0155 EOF
0156 
0157 
0158 FROM spack-base AS spack-no-env
0159 
0160 WORKDIR ${SIMPHONY_HOME}
0161 
0162 # Intentionally track the latest Spack repo state in CI to catch packaging regressions.
0163 RUN spack repo update -b develop builtin
0164 RUN spack repo add https://github.com/BNLNPPS/spack-packages
0165 RUN spack mirror add --unsigned simphony-buildcache "${SPACK_BUILDCACHE_MIRROR}"
0166 RUN spack external find --not-buildable --path /usr/local/cuda cuda
0167 # Print out concretized specs
0168 RUN spack spec --fresh -Il simphony ^geant4@${GEANT4_VERSION} ^optix-dev@${OPTIX_VERSION}
0169 # Prefer dependency binaries when they exist, but let PR validation fall back to
0170 # source builds if the mirror lags behind the latest Spack package metadata.
0171 RUN spack install --only=dependencies --fresh --use-buildcache auto simphony ^geant4@${GEANT4_VERSION} ^optix-dev@${OPTIX_VERSION}
0172 RUN spack install --fresh --use-buildcache package:never,dependencies:auto simphony ^geant4@${GEANT4_VERSION} ^optix-dev@${OPTIX_VERSION}
0173 RUN spack clean -a && rm -rf /root/.cache
0174 # Once simphony is installed it can be loaded in the user environment
0175 # $ spack load simphony
0176 # $ spack load --sh simphony >> /etc/profile.d/z10_load_simphony_from_spack.sh
0177 RUN set -euo pipefail \
0178  && spack find --format "{name}{@version} {/hash}" simphony \
0179  && prefix="$(spack location -i simphony)" \
0180  && echo "Installed prefix: $prefix" \
0181  && test -d "$prefix" \
0182  && (test -f "$prefix/.spack/spec.json" || test -f "$prefix/.spack/spec.yaml")
0183 
0184 FROM develop AS default