Files
Jungfraujoch/docker/rocky8/Dockerfile
T
leonarski_fandClaude Opus 4.8 8cd46751f9 docker: drop fftw too -- the project builds FFTW itself
FFTW is fetched and built by the jungfraujoch CMake (single-precision, from the
release tarball), so the system fftw packages (fftw-static/fftw-devel on Rocky,
libfftw3-dev on Ubuntu) were unused. Remove them from all four images.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 15:32:05 +02:00

137 lines
4.2 KiB
Docker

FROM nvidia/cuda:12.9.1-devel-rockylinux8
LABEL authors="leonarski_f"
ARG OPENSSL_VERSION=3.5.4
ARG QT_VERSION=6.9.1
ARG NODE_MAJOR=22
# HDF5, libtiff, libjpeg-turbo and Eigen are now built by the jungfraujoch CMake itself
# (FetchContent / ExternalProject), so they are no longer pre-built here.
# 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 \
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 \
zlib-static \
glib2-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 \
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)
# 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++
ENV PKG_CONFIG_PATH=${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_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=/opt/qt-${QT_VERSION}-static
# Set workdir for your project
WORKDIR /workspace
# Default entrypoint prints tool versions and hints.
CMD ["/bin/bash", "-l"]