# Build stage with Spack pre-installed and ready to be used
FROM spack/ubuntu-focal:latest as builder
# FROM ecpe4s/ubuntu18.04-spack-x86_64:0.15.3 as builder

ARG VERSION=develop
ARG PYTHON_VERSION=3.7
ARG COMPILER_SPEC=gcc
ARG CUDA_ARCH=70
ARG CUDA_ARCH_NAME=volta

# What we want to install and how we want to install it
# is specified in a manifest file (spack.yaml)
RUN mkdir /opt/environment \
    &&  (echo "spack:" \
    &&   echo "  specs:" \
    &&   echo "  - cuda" \
    &&   echo "  - nccl cuda_arch=${CUDA_ARCH}" \
    &&   echo "  - papi" \
    &&   echo "  - mpich" \
    &&   echo "  - gotcha" \
    &&   echo "  - dyninst" \
    &&   echo "  - caliper~papi" \
    &&   echo "  - gperftools" \
    &&   echo "  - python@${PYTHON_VERSION}" \
    &&   echo "  - py-scikit-build" \
    &&   echo "  - py-numpy" \
    &&   echo "  - py-cython" \
    &&   echo "  - py-pillow" \
    &&   echo "  - py-ipython" \
    &&   echo "  - py-matplotlib" \
    &&   echo "  - py-mpi4py" \
    &&   echo "  - py-pip" \
    &&   echo "  - timemory@${VERSION}%${COMPILER_SPEC} +caliper+cuda+cupti+dyninst+gotcha+kokkos_tools+kokkos_build_config+mpi+mpip_library+nccl+ompt+ompt_library+papi+python+tools cuda_arch=${CUDA_ARCH_NAME}" \
    &&   echo "  concretizer:" \
    &&   echo "    unify: when_possible" \
    &&   echo "  config:" \
    &&   echo "    install_tree: /opt/software" \
    &&   echo "  view: /opt/view") > /opt/environment/spack.yaml

# Install the software, remove unecessary deps
RUN cd /tmp && \
    apt-get update && \
    apt-get dist-upgrade -y && \
    apt-get install -y wget gpg software-properties-common && \
    wget -O kitware-archive.sh https://apt.kitware.com/kitware-archive.sh && \
    chmod 755 ./kitware-archive.sh && \
    DISTRIB_CODENAME=$(cat /etc/lsb-release | grep DISTRIB_CODENAME | awk -F '=' '{print $NF}') && \
    ./kitware-archive.sh --release ${DISTRIB_CODENAME} && \
    rm -f ./kitware-archive.sh && \
    apt-get update && \
    apt-get install -y cmake build-essential ninja-build && \
    apt-get -y autoclean

# Install the software, remove unecessary deps
RUN cd /opt/environment && \
    wget https://oaciss.uoregon.edu/e4s/e4s.pub && \
    spack gpg trust e4s.pub && \
    spack mirror add E4S https://cache.e4s.io/e4s && \
    rm e4s.pub && \
    spack compiler find && \
    spack external find && \
    spack --env . install --reuse && \
    spack gc -y

# Modifications to the environment that are necessary to run
RUN cd /opt/environment && \
    spack env activate --sh -d . >> /etc/profile.d/z10_spack_environment.sh

# Bare OS image to run the installed executables
FROM spack/ubuntu-focal:latest

COPY --from=builder /opt/environment /opt/environment
COPY --from=builder /opt/software /opt/software
COPY --from=builder /opt/view /opt/view
COPY --from=builder /etc/profile.d/z10_spack_environment.sh /etc/profile.d/z10_spack_environment.sh

RUN echo 'export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][timemory]\[$(tput setaf 2)\] \u\[$(tput sgr0)\]:\w $ \[$(tput sgr0)\]"' >> ~/.bashrc

ENV HOME /root
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US
ENV LC_ALL C
ENV SHELL /bin/bash
ENV BASH_ENV /etc/bash.bashrc
ENV DEBIAN_FRONTEND noninteractive

COPY ./etc/profile.d/*.sh /etc/profile.d/
COPY ./etc/bash.bashrc /etc/
COPY ./etc/compute-dir-size.py /etc/

LABEL "app"="timemory"
LABEL "mpi"="mpich"

USER root
WORKDIR /home
SHELL [ "/bin/bash", "--login", "-c" ]

# ENTRYPOINT [ "/runtime-entrypoint.sh" ]
ENTRYPOINT ["/bin/bash", "--rcfile", "/etc/profile", "-l"]
