# Ubuntu 24.04 (Noble) base with CUDA 13 devel toolchain
FROM nvidia/cuda:13.0.1-devel-ubuntu24.04
LABEL authors="leonarski_f"

ENV DEBIAN_FRONTEND=noninteractive

ARG OPENSSL_VERSION=3.5.4
ARG NODE_MAJOR=22
ARG EIGEN_TAG=3.4.0
ARG HDF5_TAG="hdf5_1.14.6"

# Update base and install toolchain + Qt dependencies
RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
      ca-certificates \
      curl \
      wget \
      git \
      which \
      tar \
      xz-utils \
      build-essential \
      cmake \
      ninja-build \
      python3 \
      python3-requests \
      perl \
      pkg-config \
      gdb \
      file \
      dpkg-dev \
      fakeroot \
      libnuma-dev \
      libxcb1-dev \
      libx11-dev \
      libxext-dev \
      libxrender-dev \
      libxi-dev \
      libxrandr-dev \
      libxcursor-dev \
      libxfixes-dev \
      libxinerama-dev \
      libxkbcommon-dev \
      libxkbcommon-x11-dev \
      libx11-xcb-dev \
      libxcb-shape0-dev \
      libxcb-sync-dev \
      libxcb-xfixes0-dev \
      libxcb-image0-dev \
      libxcb-icccm4-dev \
      libxcb-keysyms1-dev \
      libxcb-render-util0-dev \
      libxcb-util-dev \
      libxcb-randr0-dev \
      libxcb-xkb-dev \
      libxcb-shm0-dev \
      libxcb-cursor0 \
      libxcb-cursor-dev \
      libgl1-mesa-dev \
      libegl1-mesa-dev \
      libdbus-1-dev \
      libtiff-dev \
      libjpeg-turbo8-dev \
      zlib1g-dev \
      libglib2.0-dev \
      libfontconfig1-dev \
      libfftw3-dev \
      qt6-base-dev \
      qt6-charts-dev \
      qt6-tools-dev \
      qt6-3d-dev \
      libeigen3-dev \
      libfreetype6-dev; \
    apt-get clean; \
    rm -rf /var/lib/apt/lists/*

# Build a static OpenSSL
RUN set -eux; \
    cd /tmp; \
    curl -LO https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz; \
    tar -xf openssl-${OPENSSL_VERSION}.tar.gz; \
    cd openssl-${OPENSSL_VERSION}; \
    ./Configure linux-x86_64 no-shared no-module no-tests --prefix=/opt/openssl-${OPENSSL_VERSION} --libdir=lib; \
    make -j"$(nproc)"; \
    make install_sw; \
    cd /; rm -rf /tmp/openssl-${OPENSSL_VERSION} /tmp/openssl-${OPENSSL_VERSION}.tar.gz

# Install Node.js 22 (NodeSource)
RUN set -eux; \
    curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash -; \
    apt-get update; \
    apt-get install -y --no-install-recommends nodejs; \
    apt-get clean; \
    rm -rf /var/lib/apt/lists/*; \
    node --version; npm --version; (corepack enable || true)

RUN set -eux; \
    git clone --depth 1 --branch ${HDF5_TAG} https://github.com/HDFGroup/hdf5 /tmp/hdf5-src; \
    cd /tmp/hdf5-src; \
    mkdir build && cd build; \
    cmake -G Ninja \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
      -DHDF5_BUILD_SHARED_LIBS=OFF \
      -DBUILD_TESTING=OFF \
      -DHDF5_BUILD_TOOLS=OFF \
      -DHDF5_BUILD_EXAMPLES=OFF \
      -DHDF5_ENABLE_SZIP_SUPPORT=OFF \
      -DHDF5_ENABLE_SZIP_ENCODING=OFF \
      -DHDF5_BUILD_CPP_LIB=OFF \
      -DHDF5_ENABLE_Z_LIB_SUPPORT=OFF \
      -DCMAKE_INSTALL_PREFIX=/opt/hdf5-${HDF5_TAG}-static ..; \
    cmake --build . -j"$(nproc)"; \
    cmake --install .; \
    rm -rf /tmp/hdf5-src

# Expose static OpenSSL to CMake/pkg-config
ENV OPENSSL_ROOT_DIR=/opt/openssl-${OPENSSL_VERSION}
ENV CMAKE_PREFIX_PATH=/opt/hdf5-${HDF5_TAG}-static:${OPENSSL_ROOT_DIR}
ENV PKG_CONFIG_PATH=${OPENSSL_ROOT_DIR}/lib/pkgconfig:${OPENSSL_ROOT_DIR}/lib64/pkgconfig:/opt/hdf5-${HDF5_TAG}-static/lib/pkgconfig

# Set workdir for your project
WORKDIR /workspace

# Default entrypoint: interactive shell
CMD ["/bin/bash", "-l"]
