ARG CUDA_VERSION
ARG ROCKY_VERSION
FROM nvidia/cuda:${CUDA_VERSION}-devel-rockylinux${ROCKY_VERSION}
LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com"

# use CUDA_VERSION to select the image version to use
# see https://hub.docker.com/r/nvidia/cuda/
#
# AV_VERSION=2.2.8.develop
# CUDA_VERSION=11.0
# ROCKY_VERSION=20.04
# docker build \
#    --build-arg CUDA_VERSION=${CUDA_VERSION} \
#    --build-arg ROCKY_VERSION=${ROCKY_VERSION} \
#    --tag alicevision/alicevision-deps:${AV_VERSION}-rocky${ROCKY_VERSION}-cuda${CUDA_TAG} \
#     -f Dockerfile_rocky_deps .

# OS/Version (FILE): cat /etc/issue.net
# Cuda version (ENV): $CUDA_VERSION

RUN dnf install -y 'dnf-command(config-manager)'
RUN dnf config-manager --set-enabled devel
RUN dnf install -y epel-release
RUN dnf install -y gcc-toolset-12-gcc-c++
# RUN dnf remove -y gcc-g++ gcc
RUN update-alternatives --install /usr/bin/gcc gcc /opt/rh/gcc-toolset-12/root/usr/bin/gcc 60
RUN update-alternatives --install /usr/bin/g++ g++ /opt/rh/gcc-toolset-12/root/usr/bin/g++ 60
RUN update-alternatives --install /usr/bin/cpp cpp /opt/rh/gcc-toolset-12/root/usr/bin/cpp 60
RUN dnf install -y ca-certificates wget cmake git unzip pcre2-devel xerces-c-devel
RUN dnf install -y python3.11-devel python3.11-pip python3.11-pybind11-devel bison diffutils which file yasm
RUN dnf install -y gcc-toolset-12-gcc-gfortran libasan libubsan
RUN dnf update -y

# RUN scl enable gcc-toolset-12 bash

# Set it permanently
ENV PATH="/opt/rh/gcc-toolset-12/root/usr/bin:$PATH"
ENV CC="/opt/rh/gcc-toolset-12/root/usr/bin/gcc"
ENV CXX="/opt/rh/gcc-toolset-12/root/usr/bin/g++"
ENV FC="/opt/rh/gcc-toolset-12/root/usr/bin/gfortran"

RUN gcc --version
RUN g++ --version
RUN gfortran --version

RUN python3.11 -m pip install numpy==1.*

ENV AV_DEV=/opt/AliceVision_git \
    AV_BUILD=/tmp/AliceVision_build \
    AV_INSTALL=/opt/AliceVision_install \
    PATH="${PATH}:${AV_BUNDLE}"

COPY dl/vlfeat_K80L3.SIFT.tree ${AV_INSTALL}/share/aliceVision/
RUN echo "export ALICEVISION_VOCTREE=${AV_INSTALL}/share/aliceVision/vlfeat_K80L3.SIFT.tree" >> /etc/profile.d/alicevision.sh

COPY dl/sphereDetection_Mask-RCNN.onnx ${AV_INSTALL}/share/aliceVision/
RUN echo "export ALICEVISION_SPHERE_DETECTION_MODEL=${AV_INSTALL}/share/aliceVision/sphereDetection_Mask-RCNN.onnx" >> /etc/profile.d/alicevision.sh

COPY dl/fcn_resnet50.onnx ${AV_INSTALL}/share/aliceVision/
RUN echo "export ALICEVISION_SEMANTIC_SEGMENTATION_MODEL=${AV_INSTALL}/share/aliceVision/fcn_resnet50.onnx" >> /etc/profile.d/alicevision.sh

COPY dl/ColorChartDetectionModel ${AV_INSTALL}/share/aliceVision/ColorChartDetectionModel
RUN echo "export ALICEVISION_COLORCHARTDETECTION_MODEL_FOLDER=${AV_INSTALL}/share/aliceVision/ColorChartDetectionModel" >> /etc/profile.d/alicevision.sh

COPY docker/check-cpu.sh ${AV_DEV}/docker/check-cpu.sh
RUN export CPU_CORES=`${AV_DEV}/docker/check-cpu.sh` && echo "Build multithreading number of cores: ${CPU_CORES}"

COPY CMakeLists.txt ${AV_DEV}/
COPY src/cmake/Dependencies.cmake ${AV_DEV}/src/cmake/

COPY dl/deps ${AV_BUILD}/external/download/

# Symlink to Python3 executable in case a call to "python" instead of "python3" is ever made
RUN ln -s /usr/bin/python3.11 /usr/bin/python

WORKDIR "${AV_BUILD}"
RUN cmake "${AV_DEV}" \
     -DCMAKE_BUILD_TYPE=Release \
     -DALICEVISION_BUILD_DEPENDENCIES:BOOL=ON \
     -DAV_BUILD_ZLIB:BOOL=ON \
     -DAV_BUILD_ALICEVISION:BOOL=OFF \
     -DAV_BUILD_CCTAG:BOOL=ON \
     -DCMAKE_INSTALL_PREFIX="${AV_INSTALL}"

# Symlink lib64 to lib as qtOIIO expects to find OIIO in lib64
RUN mkdir -p "${AV_INSTALL}/lib" && \
    ln -s lib "${AV_INSTALL}/lib64"

RUN test -e /usr/local/cuda/lib64/libcublas.so || ln -s /usr/lib/x86_64-linux-gnu/libcublas.so /usr/local/cuda/lib64/libcublas.so


# # RUN make -j ${CPU_CORES} cuda
# RUN make -j ${CPU_CORES} boost
# RUN make -j ${CPU_CORES} openexr
# RUN make -j ${CPU_CORES} opencv
# RUN make -j ${CPU_CORES} eigen
# RUN make -j ${CPU_CORES} tbb
# RUN make -j ${CPU_CORES} cctag
# RUN make -j ${CPU_CORES} popsift
# RUN make -j ${CPU_CORES} onnxruntime
# RUN make -j ${CPU_CORES} turbojpeg
# RUN make -j ${CPU_CORES} assimp
# RUN make -j ${CPU_CORES} geogram
# RUN make -j ${CPU_CORES} opengv
# RUN make -j ${CPU_CORES} lapack
# RUN make -j ${CPU_CORES} suitesparse
# RUN make -j ${CPU_CORES} ceres
# RUN make -j ${CPU_CORES} libraw
# RUN make -j ${CPU_CORES} ffmpeg
# RUN make -j ${CPU_CORES} openimageio
# RUN make -j ${CPU_CORES} alembic
# RUN make -j ${CPU_CORES} ffmpeg
# RUN make -j ${CPU_CORES} expat
# RUN make -j ${CPU_CORES} SWIG
# RUN make -j ${CPU_CORES} E57Format


RUN cmake --build . -j ${CPU_CORES} && \
   mv "${AV_INSTALL}/bin" "${AV_INSTALL}/bin-deps" && \
   rm -rf "${AV_BUILD}"
