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