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 devenv
0094 
0095 ARG DEV_USER=dev
0096 
0097 RUN if ! id -u "${DEV_USER}" >/dev/null 2>&1; then \
0098       useradd --create-home --user-group --shell /bin/bash "${DEV_USER}"; \
0099     fi
0100 
0101 ENV HOME=/home/${DEV_USER}
0102 
0103 USER ${DEV_USER}
0104 
0105 FROM base AS release
0106 
0107 ARG CMAKE_BUILD_JOBS
0108 
0109 COPY . $SIMPHONY_HOME
0110 
0111 RUN cmake -S $SIMPHONY_HOME -B $SIMPHONY_BUILD -DCMAKE_INSTALL_PREFIX=$SIMPHONY_PREFIX -DCMAKE_BUILD_TYPE=Release \
0112  && cmake --build $SIMPHONY_BUILD --parallel "${CMAKE_BUILD_JOBS:-$(nproc)}" --target install
0113 
0114 
0115 FROM base AS develop
0116 
0117 ARG CMAKE_BUILD_JOBS
0118 
0119 RUN apt update && apt install -y x11-apps mesa-utils vim
0120 
0121 COPY . $SIMPHONY_HOME
0122 
0123 RUN cmake -S $SIMPHONY_HOME -B $SIMPHONY_BUILD -DCMAKE_INSTALL_PREFIX=$SIMPHONY_PREFIX -DCMAKE_BUILD_TYPE=Debug \
0124  && cmake --build $SIMPHONY_BUILD --parallel "${CMAKE_BUILD_JOBS:-$(nproc)}" --target install
0125 
0126 
0127 FROM nvidia/cuda:${CUDA_VERSION}-devel-${OS} AS spack-base
0128 
0129 ARG OPTIX_VERSION
0130 ARG GEANT4_VERSION
0131 ARG SPACK_BUILDCACHE_MIRROR
0132 ARG SPACK_TARGET
0133 ARG SPACK_VERSION=1.1.1
0134 
0135 ENV DEBIAN_FRONTEND=noninteractive
0136 
0137 # Install Spack package manager
0138 RUN apt update \
0139  && apt install -y build-essential ca-certificates coreutils curl gfortran git gpg lsb-release unzip zip python3 \
0140  && apt clean \
0141  && rm -rf /var/lib/apt/lists/*
0142 
0143 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
0144 RUN echo "source /opt/spack/share/spack/setup-env.sh" > /etc/profile.d/z09_source_spack_setup.sh
0145 RUN echo "source /etc/profile.d/z09_source_spack_setup.sh" >> /etc/bash.bashrc
0146 
0147 ENV BASH_ENV=/etc/profile.d/z09_source_spack_setup.sh
0148 ENV SIMPHONY_PREFIX=/opt/simphony
0149 ENV SIMPHONY_HOME=/workspaces/simphony
0150 ENV SIMPHONY_BUILD=/opt/simphony/build
0151 ENV OPTIX_VERSION=${OPTIX_VERSION}
0152 ENV GEANT4_VERSION=${GEANT4_VERSION}
0153 ENV SPACK_BUILDCACHE_MIRROR=${SPACK_BUILDCACHE_MIRROR}
0154 ENV SPACK_TARGET=${SPACK_TARGET}
0155 ENV PATH=/opt/spack/bin:${PATH}
0156 ENV NVIDIA_DRIVER_CAPABILITIES=graphics,compute,utility
0157 
0158 WORKDIR ${SIMPHONY_HOME}
0159 
0160 SHELL ["/bin/bash", "-l", "-c"]
0161 
0162 RUN mkdir -p /root/.spack \
0163  && cat > /root/.spack/packages.yaml <<EOF
0164 packages:
0165   all:
0166     target: [${SPACK_TARGET}]
0167 EOF
0168 
0169 
0170 FROM spack-base AS spack-no-env
0171 
0172 WORKDIR ${SIMPHONY_HOME}
0173 
0174 # Intentionally track the latest Spack repo state in CI to catch packaging regressions.
0175 RUN spack repo update -b develop builtin
0176 RUN spack repo add https://github.com/BNLNPPS/spack-packages
0177 RUN spack mirror add --unsigned simphony-buildcache "${SPACK_BUILDCACHE_MIRROR}"
0178 RUN spack external find --not-buildable --path /usr/local/cuda cuda
0179 # Print out concretized specs
0180 RUN spack spec --fresh -Il simphony ^geant4@${GEANT4_VERSION} ^optix-dev@${OPTIX_VERSION}
0181 # Prefer dependency binaries when they exist, but let PR validation fall back to
0182 # source builds if the mirror lags behind the latest Spack package metadata.
0183 RUN spack install --only=dependencies --fresh --use-buildcache auto simphony ^geant4@${GEANT4_VERSION} ^optix-dev@${OPTIX_VERSION}
0184 RUN spack install --fresh --use-buildcache package:never,dependencies:auto simphony ^geant4@${GEANT4_VERSION} ^optix-dev@${OPTIX_VERSION}
0185 RUN spack clean -a && rm -rf /root/.cache
0186 # Once simphony is installed it can be loaded in the user environment
0187 # $ spack load simphony
0188 # $ spack load --sh simphony >> /etc/profile.d/z10_load_simphony_from_spack.sh
0189 RUN set -euo pipefail \
0190  && spack find --format "{name}{@version} {/hash}" simphony \
0191  && prefix="$(spack location -i simphony)" \
0192  && echo "Installed prefix: $prefix" \
0193  && test -d "$prefix" \
0194  && (test -f "$prefix/.spack/spec.json" || test -f "$prefix/.spack/spec.yaml")
0195 
0196 FROM develop AS default