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>
150 lines
4.5 KiB
Docker
150 lines
4.5 KiB
Docker
# Ubuntu 24.04 (Noble) base with CUDA 13 devel toolchain
|
|
FROM nvidia/cuda:13.3.0-devel-ubuntu24.04
|
|
LABEL authors="leonarski_f"
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
ARG OPENSSL_VERSION=3.5.4
|
|
ARG QT_VERSION=6.9.1
|
|
ARG NODE_MAJOR=22
|
|
# HDF5, libtiff, libjpeg-turbo and Eigen are built by the jungfraujoch CMake itself now
|
|
# (FetchContent / ExternalProject), so they are not provided here. nasm is required by the
|
|
# project's libjpeg-turbo ExternalProject for SIMD-accelerated JPEG.
|
|
|
|
# Update base and install toolchain + static-Qt build dependencies
|
|
# (XCB/X11/OpenGL/EGL/DBus/fontconfig/freetype/zlib headers needed to build static Qt).
|
|
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-venv \
|
|
python3-requests \
|
|
python3.12 \
|
|
python3.12-venv \
|
|
perl \
|
|
pkg-config \
|
|
gdb \
|
|
file \
|
|
nasm \
|
|
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 \
|
|
libxcb-glx0-dev \
|
|
libgl1-mesa-dev \
|
|
libglx-dev \
|
|
libegl1-mesa-dev \
|
|
libdbus-1-dev \
|
|
zlib1g-dev \
|
|
libglib2.0-dev \
|
|
libfontconfig1-dev \
|
|
libdrm-dev \
|
|
libglvnd-dev \
|
|
libassimp-dev \
|
|
libfreetype6-dev; \
|
|
apt-get clean; \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Use the default GCC/G++ (gcc-13 on Noble, supported by CUDA 13.3)
|
|
ENV CC=/usr/bin/gcc
|
|
ENV CXX=/usr/bin/g++
|
|
|
|
# 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
|
|
|
|
# Expose static OpenSSL to CMake/pkg-config
|
|
ENV OPENSSL_ROOT_DIR=/opt/openssl-${OPENSSL_VERSION}
|
|
ENV PKG_CONFIG_PATH=${OPENSSL_ROOT_DIR}/lib/pkgconfig:${OPENSSL_ROOT_DIR}/lib64/pkgconfig
|
|
|
|
# Install Node.js (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)
|
|
|
|
# Build and install static Qt with Core, Gui, Widgets, Charts, DBus
|
|
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
|
|
|
|
# Make Qt discoverable by CMake
|
|
ENV CMAKE_PREFIX_PATH=/opt/qt-${QT_VERSION}-static
|
|
|
|
# Set workdir for your project
|
|
WORKDIR /workspace
|
|
|
|
# Default entrypoint: interactive shell
|
|
CMD ["/bin/bash", "-l"]
|