ARG ACCT="C-Worthy"
ARG FROM_TAG="latest"
ARG IMG_HDF5="$ACCT/cstar-hdf5:$FROM_TAG"

# use this for building with nersc's MPICH
ARG IMG_MPI="$ACCT/cstar-mpich-4.2.2:$FROM_TAG"

# use this for building with our openmpi build
# ARG IMG_MPI="$ACCT/cstar-mpi-5.0.7:$FROM_TAG"

ARG SRC_DIR="/install"
ARG INSTALL_BASE_DIR="/opt"

ARG HDF5_INSTALL_DIR="hdf5-1.14.6-install"
ARG HDF5_HOME=$INSTALL_BASE_DIR/$HDF5_INSTALL_DIR

ARG NETCDF_V="4.9.3"
ARG NETCDF_TAR="v$NETCDF_V.tar.gz"
ARG NETCDF_URL="https://github.com/Unidata/netcdf-c/archive/refs/tags/$NETCDF_TAR"

ARG NETCDF_FV="4.6.2"
ARG NETCDF_FORTRAN_TAR="v$NETCDF_FV.tar.gz"
ARG NETCDF_FORTRAN_URL="https://github.com/Unidata/netcdf-fortran/archive/refs/tags/$NETCDF_FORTRAN_TAR"

ARG NETCDF_SRC="$SRC_DIR/netcdf-c-$NETCDF_V"
ARG NETCDF_HOME="$INSTALL_BASE_DIR/netcdf-$NETCDF_V-install"

ARG NETCDF_FORTRAN_SRC="$SRC_DIR/netcdf-fortran-$NETCDF_FV"
ARG NETCDF_FORTRAN_HOME="$INSTALL_BASE_DIR/netcdf-fortran-$NETCDF_FV-install"

ARG NCDF_PROFILE="/etc/profile.d/netcdf.sh"


FROM $IMG_HDF5 as stage_hdf


FROM $IMG_MPI as main

ARG SRC_DIR
ARG NETCDF_URL
ARG NETCDF_TAR
ARG HDF5_HOME
ARG NETCDF_HOME
ARG NETCDF_FORTRAN_HOME
ARG NETCDF_FORTRAN_URL
ARG NETCDF_FORTRAN_TAR
ARG NETCDF_SRC
ARG NETCDF_FORTRAN_SRC
ARG NCDF_PROFILE
ARG INSTALL_BASE_DIR

COPY --from=stage_hdf /etc/profile.d/*.sh /etc/profile.d
COPY --from=stage_hdf $HDF5_HOME $HDF5_HOME


WORKDIR "$SRC_DIR"
RUN . /etc/profile && \
    mkdir -p "$NETCDF_HOME" && \
    wget -q "$NETCDF_URL" && \
    tar xvf "$NETCDF_TAR" && \
    cd "$NETCDF_SRC" && \ 
    ./configure \
    	--prefix=$NETCDF_HOME \
    	CC=mpicc FC=mpifort \
	CFLAGS="-O3 -march=x86-64 -I$HDF5_HOME/include" \
	LDFLAGS="-L$HDF5_HOME/lib" \
	--enable-netcdf-4  \
	--enable-shared  \
    --enable-parallel-tests && \
    make -j $(nproc) && \
    make install && \
    rm -rf "$SRC_DIR"

RUN echo "export NETCDF_HOME=$NETCDF_HOME" >> $NCDF_PROFILE && \
    echo "export NETCDF_FORTRAN_HOME=$NETCDF_FORTRAN_HOME" >> $NCDF_PROFILE && \
    echo 'export PATH=$NETCDF_FORTRAN_HOME/bin:$NETCDF_HOME/bin:$PATH' >> $NCDF_PROFILE && \
    echo 'export LD_LIBRARY_PATH=$NETCDF_FORTRAN_HOME/lib:$NETCDF_HOME/lib:$LD_LIBRARY_PATH' >> $NCDF_PROFILE && \
    echo 'export CPATH=$NETCDF_FORTRAN_HOME/include:$NETCDF_HOME/include:$CPATH' >> $NCDF_PROFILE && \
    echo 'export LIBRARY_PATH=$NETCDF_FORTRAN_HOME/lib:$NETCDF_HOME/lib:$LIBRARY_PATH' >> $NCDF_PROFILE && \
    echo "export NETCDFHOME=$NETCDF_HOME/lib" >> $NCDF_PROFILE

WORKDIR "$SRC_DIR"
RUN . /etc/profile && \
    mkdir -p "$NETCDF_FORTRAN_HOME" && \
    wget -q "$NETCDF_FORTRAN_URL" && \
    tar xvf ./$NETCDF_FORTRAN_TAR && \
    cd "$NETCDF_FORTRAN_SRC" && \
    ./configure \
        --prefix="$NETCDF_FORTRAN_HOME" \
        CC=mpicc FC=mpifort \
        CFLAGS="-O3 -march=x86-64 -I$NETCDF_HOME/include" \
        FFLAGS="-O3 -march=x86-64 -I$NETCDF_HOME/include" \
        LDFLAGS="-L$NETCDF_HOME/lib" \
        --enable-shared && \
        make -j $(nproc) && \
        make install && \
        rm -rf "$SRC_DIR"

WORKDIR "$INSTALL_BASE_DIR"

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

CMD []
ENTRYPOINT ["/entrypoint.sh"]

