FROM nvidia/cuda:12.9.1-devel-rockylinux8 LABEL authors="leonarski_f" ARG OPENSSL_VERSION=3.5.4 ARG QT_VERSION=6.9.0 ARG NODE_MAJOR=22 ARG EIGEN_TAG=3.4.0 ARG LIBJPEG_TURBO_VERSION=3.1.2 ARG LIBTIFF_VERSION=v4.7.1 ARG HDF5_TAG="hdf5_1.14.6" # Update base and install common utilities RUN dnf -y update && \ dnf -y install epel-release && \ dnf -y update && \ dnf -y install --enablerepo=devel \ dnf-plugins-core \ epel-release \ git \ git-lfs \ which \ ca-certificates \ wget \ tar \ xz \ make \ cmake \ nasm \ gcc-toolset-13 \ gcc-toolset-13-gcc \ gcc-toolset-13-gcc-c++ \ gcc-toolset-13-gdb \ rpm-build \ rpmdevtools \ numactl-devel \ redhat-rpm-config \ ninja-build \ libxcb-devel \ xcb-util-*-devel \ xcb-util-devel \ libxkbcommon-devel \ libxkbcommon-x11-devel \ wayland-devel \ libX11-devel \ libXext-devel \ libXrender-devel \ libXi-devel \ libXrandr-devel \ libXcursor-devel \ libXfixes-devel \ libXinerama-devel \ mesa-libGL-devel \ mesa-libEGL-devel \ dbus-devel \ zlib-devel \ glib2-devel \ fftw-static \ fftw-devel \ fontconfig-devel \ zlib-static \ java-21-openjdk-headless \ java-21-openjdk-devel \ perl \ perl-IPC-Cmd \ python3 \ python3-pip \ python3-setuptools \ python3-wheel \ twine \ openblas \ openblas-static \ openblas-devel \ libdrm-devel \ libglvnd-core-devel \ libglvnd-devel \ freetype-devel && \ dnf clean all && rm -rf /var/cache/dnf 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 # Expose static OpenSSL to CMake/pkg-config ENV OPENSSL_ROOT_DIR=/opt/openssl-${OPENSSL_VERSION} # Install a recent Node.js (NodeSource). Change NODE_MAJOR if you want another major version. RUN curl -fsSL https://rpm.nodesource.com/setup_${NODE_MAJOR}.x | bash - && \ dnf -y install nodejs && \ dnf clean all && rm -rf /var/cache/dnf && \ node --version && npm --version && (corepack enable || true) RUN git clone --depth 1 --branch ${EIGEN_TAG} https://gitlab.com/libeigen/eigen.git /tmp/eigen && \ cd /tmp/eigen && \ mkdir build && \ cd build && \ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/eigen && \ make install && \ rm -rf /tmp/eigen # Make GCC/G++ 13 the default for builds ENV GCC_TOOLSET_ROOT=/opt/rh/gcc-toolset-13/root ENV PATH=${GCC_TOOLSET_ROOT}/usr/bin:${PATH} ENV CC=${GCC_TOOLSET_ROOT}/usr/bin/gcc ENV CXX=${GCC_TOOLSET_ROOT}/usr/bin/g++ RUN set -eux; \ git clone --depth 1 --branch ${LIBJPEG_TURBO_VERSION} https://github.com/libjpeg-turbo/libjpeg-turbo.git /tmp/libjpeg-turbo-src; \ mkdir /tmp/libjpeg-turbo-src/build; \ cd /tmp/libjpeg-turbo-src/build; \ cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DENABLE_SHARED=FALSE \ -DENABLE_STATIC=TRUE \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DCMAKE_INSTALL_PREFIX=/opt/libjpeg-turbo-${LIBJPEG_TURBO_VERSION}-static ..; \ cmake --build . -j"$(nproc)"; \ cmake --install .; \ rm -rf /tmp/libjpeg-turbo-src RUN set -eux; \ git clone --depth 1 --branch ${LIBTIFF_VERSION} https://gitlab.com/libtiff/libtiff.git /tmp/libtiff-src; \ mkdir /tmp/libtiff-src/build.cm; \ cd /tmp/libtiff-src/build.cm; \ cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -Dtools=OFF \ -Dtests=OFF \ -Ddocs=OFF \ -Dlzma=OFF \ -Djbig=OFF \ -Dwebp=OFF \ -Djpeg=OFF \ -Dold-jpeg=OFF \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DCMAKE_INSTALL_PREFIX=/opt/libtiff-${LIBTIFF_VERSION}-static \ ..; \ cmake --build . -j"$(nproc)"; \ cmake --install .; \ rm -rf /tmp/libtiff-src 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 ENV CMAKE_PREFIX_PATH=/opt/libtiff-${LIBTIFF_VERSION}-static:/opt/libjpeg-turbo-${LIBJPEG_TURBO_VERSION}-static ENV PKG_CONFIG_PATH=/opt/hdf5-${HDF5_TAG}-static/lib/pkgconfig:/opt/libjpeg-turbo-${LIBJPEG_TURBO_TAG}-static/lib/pkgconfig:/opt/libtiff-${LIBTIFF_TAG}-static/lib/pkgconfig:${OPENSSL_ROOT_DIR}/lib/pkgconfig:${OPENSSL_ROOT_DIR}/lib64/pkgconfig ARG QT_PREFIX=/opt/qt-${QT_VERSION}-static RUN set -eux; \ cd /tmp; \ curl -LO https://download.qt.io/official_releases/qt/6.9/${QT_VERSION}/single/qt-everywhere-src-${QT_VERSION}.tar.xz; \ tar -xf qt-everywhere-src-${QT_VERSION}.tar.xz; \ mkdir -p qt-everywhere-src-${QT_VERSION}/build && cd qt-everywhere-src-${QT_VERSION}/build; \ cmake -G Ninja \ -DQT_BUILD_SUBMODULES="qtbase;qtshadertools;qtdeclarative;qtcharts;qt3d" \ -DBUILD_SHARED_LIBS=OFF \ -DQT_BUILD_TESTS=OFF \ -DQT_BUILD_EXAMPLES=OFF \ -DQT_FEATURE_dbus=ON \ -DQT_FEATURE_xcb=ON \ -DQT_FEATURE_xcb_xlib=OFF \ -DQT_FEATURE_xkbcommon_x11=ON \ -DQT_FEATURE_wayland_client=ON \ -DQT_FEATURE_opengl=ON \ -DQT_FEATURE_opengl_desktop=ON \ -DQT_FEATURE_opengl_dynamic=OFF \ -DQT_FEATURE_vulkan=OFF \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=${QT_PREFIX} \ -DCMAKE_C_COMPILER=${CC} \ -DCMAKE_CXX_COMPILER=${CXX} \ -DQT_FEATURE_openssl=ON \ -DQT_FEATURE_openssl_linked=ON \ -DOPENSSL_USE_STATIC_LIBS=TRUE \ ..; \ cmake --build . -j"$(nproc)"; \ cmake --install .; \ cd /; rm -rf /tmp/qt-everywhere-src-${QT_VERSION} /tmp/qt-everywhere-src-${QT_VERSION}.tar.xz ENV CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}:/opt/hdf5-${HDF5_TAG}-static:opt/qt-${QT_VERSION}-static:/opt/eigen # Set workdir for your project WORKDIR /workspace # Default entrypoint prints tool versions and hints. CMD ["/bin/bash", "-l"]