Compare commits

...

18 Commits

Author SHA1 Message Date
6cd2ad4f9e Run CI on tags
Some checks failed
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 9m8s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 10m2s
Build Packages / GPU test (push) Successful in 5s
Build Packages / Build documentation (push) Successful in 50s
Build Packages / build:rpm (rocky8) (push) Successful in 9m52s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 10m5s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 10m30s
Build Packages / build:rpm (rocky9) (push) Successful in 10m56s
Build Packages / Unit tests (push) Successful in 1h9m27s
Build Packages / Generate python client (push) Failing after 20s
2025-09-18 18:39:41 +02:00
e046384d78 tag
Some checks failed
Build Packages / Generate python client (push) Successful in 49s
Build Packages / GPU test (push) Successful in 7s
Build Packages / Build documentation (push) Successful in 1m32s
Build Packages / build:rpm (rocky8_sls9) (push) Has been cancelled
Build Packages / build:rpm (rocky8) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2204) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2404) (push) Has been cancelled
Build Packages / Unit tests (push) Has been cancelled
Build Packages / build:rpm (rocky8_nocuda) (push) Has been cancelled
Build Packages / build:rpm (rocky9) (push) Has been cancelled
2025-09-18 18:34:07 +02:00
030412f244 Test tagging
Some checks failed
Build Packages / build:rpm (rocky8_sls9) (push) Failing after 4s
Build Packages / GPU test (push) Successful in 5s
Build Packages / Generate python client (push) Successful in 1m3s
Build Packages / Build documentation (push) Successful in 1m46s
Build Packages / build:rpm (ubuntu2404) (push) Has been cancelled
Build Packages / build:rpm (rocky9) (push) Has been cancelled
Build Packages / build:rpm (rocky8) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2204) (push) Has been cancelled
Build Packages / Unit tests (push) Has been cancelled
Build Packages / build:rpm (rocky8_nocuda) (push) Has been cancelled
2025-09-18 18:29:48 +02:00
8589092216 Docker updates (rocky8: build OpenSSL from source + include more python tools for documentation; all: build and install EIGEN)
Some checks failed
Build Packages / GPU test (push) Successful in 3m14s
Build Packages / Generate python client (push) Successful in 4m22s
Build Packages / Build documentation (push) Successful in 4m54s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 12m54s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 13m21s
Build Packages / build:rpm (rocky9) (push) Successful in 14m49s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 10m24s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 10m28s
Build Packages / build:rpm (rocky8) (push) Successful in 10m38s
Build Packages / Unit tests (push) Has been cancelled
2025-09-18 16:42:13 +02:00
799e5c55ff CI: Fixes
Some checks failed
Build Packages / GPU test (push) Successful in 3m16s
Build Packages / Build documentation (push) Successful in 4m39s
Build Packages / Generate python client (push) Successful in 3m34s
Build Packages / build:rpm (rocky8_nocuda) (push) Failing after 8m15s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 14m18s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 16m3s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 16m35s
Build Packages / build:rpm (rocky8) (push) Successful in 16m44s
Build Packages / build:rpm (rocky9) (push) Successful in 11m22s
Build Packages / Unit tests (push) Successful in 1h2m47s
2025-09-17 21:22:42 +02:00
1831e65c6c CI: Fixes
Some checks failed
Build Packages / Build documentation (push) Failing after 3m14s
Build Packages / GPU test (push) Successful in 3m14s
Build Packages / Unit tests (push) Has been cancelled
Build Packages / build:rpm (rocky8_nocuda) (push) Has been cancelled
Build Packages / build:rpm (rocky8_sls9) (push) Has been cancelled
Build Packages / build:rpm (rocky9) (push) Has been cancelled
Build Packages / build:rpm (rocky8) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2404) (push) Has been cancelled
Build Packages / build:rpm (ubuntu2204) (push) Has been cancelled
Build Packages / Generate python client (push) Has been cancelled
2025-09-17 21:21:30 +02:00
d7c8336958 Add documentation + noCUDA + python client; remove artifact upload 2025-09-17 21:18:24 +02:00
1d4df8d2ec Update CI and docker
Some checks failed
Build Packages / GPU test (push) Successful in 3m13s
Build Packages / build:rpm (rocky8_sls9) (push) Failing after 14m59s
Build Packages / build:rpm (rocky8) (push) Failing after 16m37s
Build Packages / build:rpm (rocky9) (push) Failing after 17m17s
Build Packages / Unit tests (push) Successful in 1h1m42s
Build Packages / build:rpm (ubuntu2404) (push) Failing after 12m58s
Build Packages / build:rpm (ubuntu2204) (push) Failing after 13m28s
2025-09-17 09:56:32 +02:00
048416898e Fixes (WIP... very much in progress)
Some checks failed
Build Packages / build:rpm (ubuntu2204) (push) Failing after 16m25s
Build Packages / build:rpm (rocky8_sls9) (push) Failing after 16m36s
Build Packages / build:rpm (rocky9) (push) Failing after 17m25s
Build Packages / build:rpm (ubuntu2404) (push) Failing after 17m56s
Build Packages / build:rpm (rocky8) (push) Failing after 19m9s
Build Packages / Unit tests (push) Failing after 1h3m26s
2025-09-16 21:18:52 +02:00
d79e4969ac CI: Try upload-artifact@v3
Some checks failed
Build Packages / build:rpm (ubuntu2404) (push) Failing after 16m37s
Build Packages / build:rpm (ubuntu2204) (push) Failing after 17m13s
Build Packages / build:rpm (rocky9) (push) Failing after 17m29s
Build Packages / build:rpm (rocky8) (push) Failing after 17m58s
Build Packages / build:rpm (rocky8_sls9) (push) Failing after 18m5s
Build Packages / Unit tests (push) Has been skipped
2025-09-16 20:58:13 +02:00
5244e8066a CI: Fix to copying package files
Some checks failed
Build Packages / build:rpm (rocky8_sls9) (push) Failing after 13m58s
Build Packages / build:rpm (rocky8) (push) Failing after 15m30s
Build Packages / build:rpm (ubuntu2404) (push) Failing after 15m50s
Build Packages / build:rpm (ubuntu2204) (push) Failing after 16m9s
Build Packages / build:rpm (rocky9) (push) Failing after 16m43s
Build Packages / Unit tests (push) Has been skipped
2025-09-16 20:39:10 +02:00
1d859a0923 Docker: Update Dockerfile's
Some checks failed
Build Packages / build:rpm (rocky8_sls9) (push) Failing after 14m33s
Build Packages / build:rpm (ubuntu2404) (push) Failing after 15m48s
Build Packages / build:rpm (ubuntu2204) (push) Failing after 16m20s
Build Packages / build:rpm (rocky8) (push) Failing after 16m29s
Build Packages / build:rpm (rocky9) (push) Failing after 17m17s
Build Packages / Unit tests (push) Has been skipped
2025-09-16 20:23:14 +02:00
331948b95a CMake: Build both .deb and .rpm packages (depending on host OS) 2025-09-16 20:21:47 +02:00
7db0e0dc9e Gitea: Update pipeline 2025-09-16 20:21:09 +02:00
e9b7417a21 Gitea: Update pipeline
Some checks failed
Build Packages / build:rpm (rocky8_sls9) (push) Failing after 13m27s
Build Packages / build:rpm (ubuntu2404) (push) Failing after 14m53s
Build Packages / build:rpm (rocky8) (push) Failing after 16m14s
Build Packages / build:rpm (ubuntu2204) (push) Failing after 14m56s
Build Packages / build:rpm (rocky9) (push) Failing after 15m44s
Build Packages / Unit tests (push) Has been skipped
2025-09-16 20:06:08 +02:00
f1eba28dc1 Gitea: Add RPM C/I
Some checks failed
Build RPMs / build:rocky8:rpm (push) Failing after 17m44s
Build RPMs / build:rocky9:rpm (push) Failing after 20m3s
2025-09-16 19:24:05 +02:00
839b1c755d Dockerfile: WIP 2025-09-16 19:24:05 +02:00
07b032719d Dockerfile: WIP 2025-09-16 19:24:05 +02:00
6 changed files with 722 additions and 34 deletions

View File

@@ -0,0 +1,112 @@
name: Build Packages
on:
push:
branches:
- '**'
tags:
- '**'
pull_request:
workflow_dispatch:
jobs:
build-rpm:
name: build:rpm (${{ matrix.distro }})
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- runner: jfjoch_rocky8
distro: rocky8
cmake_flags: -DJFJOCH_INSTALL_DRIVER_SOURCE=ON -DJFJOCH_VIEWER_BUILD=ON
- runner: jfjoch_rocky8
distro: rocky8_sls9
cmake_flags: -DJFJOCH_INSTALL_DRIVER_SOURCE=OFF -DJFJOCH_VIEWER_BUILD=OFF -DSLS9=ON
- runner: jfjoch_rocky9
distro: rocky9
cmake_flags: -DJFJOCH_INSTALL_DRIVER_SOURCE=ON -DJFJOCH_VIEWER_BUILD=ON
- runner: jfjoch_ubuntu2204
distro: ubuntu2204
cmake_flags: -DJFJOCH_INSTALL_DRIVER_SOURCE=ON -DJFJOCH_VIEWER_BUILD=ON
- runner: jfjoch_ubuntu2404
distro: ubuntu2404
cmake_flags: -DJFJOCH_INSTALL_DRIVER_SOURCE=ON -DJFJOCH_VIEWER_BUILD=ON
- runner: jfjoch_rocky8
distro: rocky8_nocuda
cmake_flags: -DJFJOCH_INSTALL_DRIVER_SOURCE=OFF -DJFJOCH_VIEWER_BUILD=OFF -DJFJOCH_USE_CUDA=OFF
steps:
- uses: actions/checkout@v4
- name: Build packages
shell: bash
run: |
mkdir -p build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ${{ matrix.cmake_flags }} ..
ninja frontend
ninja -j16 package
shopt -s nullglob
files=( *.rpm *.deb )
if (( ${#files[@]} )); then
mv "${files[@]}" ..
else
echo "No packages found to move"
fi
python-client:
name: Generate python client
runs-on: jfjoch_rocky8
steps:
- uses: actions/checkout@v4
- name: Build python client
shell: bash
run: bash gen_python_client.sh
documentation:
name: Build documentation
runs-on: jfjoch_rocky8
steps:
- uses: actions/checkout@v4
- name: Build documentation
shell: bash
run: bash make_doc.sh
- name: Tag-only step
if: github.ref_type == 'tag'
shell: bash
run: echo "This runs only when the workflow is triggered by a tag"
gpu-test:
name: GPU test
runs-on: jfjoch_rocky8
container:
image: gitea.psi.ch/leonarski_f/jfjoch_rocky8:2509
options: --gpus all
steps:
- name: List GPUs
shell: bash
run: nvidia-smi
unit-tests:
name: Unit tests
runs-on: jfjoch_rocky8
container:
image: gitea.psi.ch/leonarski_f/jfjoch_rocky8:2509
options: --gpus all
timeout-minutes: 90
env:
CTEST_OUTPUT_ON_FAILURE: '1'
steps:
- uses: actions/checkout@v4
- name: Build tests
shell: bash
run: |
mkdir -p build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja -j48 jfjoch_test jfjoch_hdf5_test
- name: Run unit tests
shell: bash
run: |
cd build/tests
./jfjoch_test
- name: Run hdf5 test
shell: bash
run: |
cd build/tools
./jfjoch_hdf5_test ../../tests/test_data/compression_benchmark.h5

View File

@@ -198,48 +198,99 @@ IF (NOT JFJOCH_WRITER_ONLY)
ENDIF()
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
SET(CMAKE_INSTALL_PREFIX /opt/jfjoch CACHE PATH "Default directory" FORCE)
SET(CMAKE_INSTALL_PREFIX /opt/jfjoch CACHE PATH "Default directory" FORCE)
ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
# Set Package Name
# Initialize CPACK_COMPONENTS_ALL with common components
SET(CPACK_COMPONENTS_ALL jfjoch writer)
IF (SLS9)
SET(CPACK_PACKAGE_NAME "jfjoch-slsdet9")
ELSE()
SET(CPACK_PACKAGE_NAME "jfjoch")
ENDIF()
SET(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/src /usr/share /usr/share/dbus-1 /usr/share/dbus-1/services)
set(CPACK_COMPONENTS_ALL jfjoch writer)
if (SLS9)
set(CPACK_PACKAGE_NAME "jfjoch-slsdet9")
else()
set(CPACK_PACKAGE_NAME "jfjoch")
endif()
IF (JFJOCH_INSTALL_DRIVER_SOURCE)
LIST(APPEND CPACK_COMPONENTS_ALL driver-dkms)
SET(CPACK_RPM_DRIVER-DKMS_PACKAGE_REQUIRES "dkms, gcc, bash, sed")
SET(CPACK_RPM_DRIVER-DKMS_PACKAGE_ARCHITECTURE "noarch")
SET(CPACK_RPM_DRIVER-DKMS_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/postinstall.sh)
SET(CPACK_RPM_DRIVER-DKMS_PRE_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/preuninstall.sh)
ELSE()
SET(CPACK_COMPONENTS_ALL jfjoch writer)
ENDIF()
# Add optional components
if (JFJOCH_INSTALL_DRIVER_SOURCE)
list(APPEND CPACK_COMPONENTS_ALL driver-dkms)
else()
set(CPACK_COMPONENTS_ALL jfjoch writer)
endif()
IF (JFJOCH_VIEWER_BUILD)
LIST(APPEND CPACK_COMPONENTS_ALL viewer)
ENDIF()
if (JFJOCH_VIEWER_BUILD)
list(APPEND CPACK_COMPONENTS_ALL viewer)
endif()
SET(CPACK_GENERATOR RPM)
SET(CPACK_RPM_COMPONENT_INSTALL ON)
SET(CPACK_RPM_MAIN_COMPONENT jfjoch)
SET(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
SET(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
SET(CPACK_RPM_PACKAGE_VERSION ${JFJOCH_VERSION})
SET(CPACK_RPM_PACKAGE_RELEASE 1)
SET(CPACK_RPM_PACKAGE_SUMMARY "Jungfraujoch data acquisition system")
SET(CPACK_RPM_PACKAGE_DESCRIPTION "Jungfraujoch")
# Common metadata
set(CPACK_PACKAGE_CONTACT "Filip Leonarski <filip.leonarski@psi.ch>")
set(CPACK_PACKAGE_VENDOR "Paul Scherrer Institut")
set(CPACK_PACKAGE_VERSION ${JFJOCH_VERSION})
SET(CPACK_PACKAGE_CONTACT "Filip Leonarski <filip.leonarski@psi.ch>")
# Set The Vendor Name
SET(CPACK_PACKAGE_VENDOR "Paul Scherrer Institut")
# OS-aware packaging: DEB on Debian/Ubuntu, RPM on RHEL/Rocky
if (EXISTS "/etc/debian_version")
set(CPACK_PACKAGE_LICENSE "GPL-3.0-only")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
# Debian/Ubuntu: .deb with components
set(CPACK_GENERATOR "DEB")
set(CPACK_DEB_COMPONENT_INSTALL ON)
set(CPACK_DEBIAN_MAIN_COMPONENT jfjoch)
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
# Enable automatic shlib dependency discovery
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
# Optional DEB metadata (tune as needed)
set(CPACK_DEBIAN_PACKAGE_SECTION "science")
# set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://example.org/jfjoch")
# DKMS component (maps from RPM settings)
if (JFJOCH_INSTALL_DRIVER_SOURCE)
# Dependencies and arch for the DKMS component
# Note: component name "driver-dkms" maps to variable suffix "DRIVER_DKMS"
set(CPACK_DEBIAN_DRIVER_DKMS_PACKAGE_DEPENDS "dkms, gcc, bash, sed")
set(CPACK_DEBIAN_DRIVER_DKMS_PACKAGE_ARCHITECTURE "all")
# Provide Debian control scripts (postinst/prerm).
# We rename existing scripts to Debian control names at configure time.
set(_dkms_ctrl_dir "${CMAKE_CURRENT_BINARY_DIR}/cpack-debian-driver-dkms")
file(MAKE_DIRECTORY "${_dkms_ctrl_dir}")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/postinstall.sh
${_dkms_ctrl_dir}/postinst COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/preuninstall.sh
${_dkms_ctrl_dir}/prerm COPYONLY)
set(CPACK_DEBIAN_DRIVER_DKMS_PACKAGE_CONTROL_EXTRA
"${_dkms_ctrl_dir}/postinst;${_dkms_ctrl_dir}/prerm")
endif()
elseif (EXISTS "/etc/redhat-release")
# RHEL/Rocky: .rpm with components (original behavior)
set(CPACK_GENERATOR "RPM")
set(CPACK_RPM_COMPONENT_INSTALL ON)
set(CPACK_RPM_MAIN_COMPONENT jfjoch)
set(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
set(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
set(CPACK_RPM_PACKAGE_VERSION ${JFJOCH_VERSION})
set(CPACK_RPM_PACKAGE_RELEASE 1)
set(CPACK_RPM_PACKAGE_SUMMARY "Jungfraujoch data acquisition system")
set(CPACK_RPM_PACKAGE_DESCRIPTION "Jungfraujoch")
set(CPACK_RPM_PACKAGE_LICENSE "GPLv3")
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
/usr/src /usr/share /usr/share/dbus-1 /usr/share/dbus-1/services)
# DKMS component scripts and requirements for RPM
if (JFJOCH_INSTALL_DRIVER_SOURCE)
set(CPACK_RPM_DRIVER-DKMS_PACKAGE_REQUIRES "dkms, gcc, bash, sed")
set(CPACK_RPM_DRIVER-DKMS_PACKAGE_ARCHITECTURE "noarch")
set(CPACK_RPM_DRIVER-DKMS_POST_INSTALL_SCRIPT_FILE
${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/postinstall.sh)
set(CPACK_RPM_DRIVER-DKMS_PRE_UNINSTALL_SCRIPT_FILE
${CMAKE_CURRENT_SOURCE_DIR}/fpga/pcie_driver/preuninstall.sh)
endif()
else()
# Fallback if OS is unknown
set(CPACK_GENERATOR "TGZ")
endif()
# Set The License Information
SET(CPACK_RPM_PACKAGE_LICENSE "GPLv3")
INCLUDE(CPack)

128
docker/rocky8/Dockerfile Normal file
View File

@@ -0,0 +1,128 @@
FROM nvidia/cuda:12.9.1-devel-rockylinux8
LABEL authors="leonarski_f"
ARG OPENSSL_VERSION=3.3.2
ARG QT_VERSION=6.9.0
ARG NODE_MAJOR=22
ARG EIGEN_TAG=3.4.0
# Update base and install common utilities
RUN dnf -y update && \
dnf -y install --enablerepo=devel \
dnf-plugins-core \
epel-release \
git \
which \
ca-certificates \
wget \
tar \
xz \
make \
cmake \
gcc-toolset-13 \
gcc-toolset-13-gcc \
gcc-toolset-13-gcc-c++ \
gcc-toolset-13-gdb \
rpm-build \
rpmdevtools \
numactl-devel \
openssl-devel \
redhat-rpm-config \
ninja-build \
libxcb-devel \
xcb-util-wm-devel \
xcb-util-image-devel \
xcb-util-keysyms-devel \
xcb-util-renderutil-devel \
libxkbcommon-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 \
fontconfig-devel \
zlib-static \
java-21-openjdk-headless \
java-21-openjdk-devel \
perl \
perl-IPC-Cmd \
python3 \
python3-pip \
python3-setuptools \
python3-wheel \
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}
ENV PKG_CONFIG_PATH=${OPENSSL_ROOT_DIR}/lib/pkgconfig:${OPENSSL_ROOT_DIR}/lib64/pkgconfig:${PKG_CONFIG_PATH}
# 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++
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" \
-DBUILD_SHARED_LIBS=OFF \
-DQT_BUILD_TESTS=OFF \
-DQT_BUILD_EXAMPLES=OFF \
-DQT_FEATURE_dbus=ON \
-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:/opt/eigen
# Set workdir for your project
WORKDIR /workspace
# Default entrypoint prints tool versions and hints.
CMD ["/bin/bash", "-l"]

128
docker/rocky9/Dockerfile Normal file
View File

@@ -0,0 +1,128 @@
FROM nvidia/cuda:13.0.1-devel-rockylinux9
LABEL authors="leonarski_f"
ARG OPENSSL_VERSION=3.3.2
ARG QT_VERSION=6.9.0
ARG NODE_MAJOR=22
ARG EIGEN_TAG=3.4.0
# Update base, enable CRB (RHEL/Rocky 9), and install toolchain + Qt deps
RUN dnf -y update && \
dnf -y install \
'dnf-command(config-manager)' && \
dnf config-manager --set-enabled crb && \
dnf -y install --enablerepo=devel \
dnf-plugins-core \
epel-release \
git \
which \
ca-certificates \
wget \
tar \
xz \
make \
cmake \
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 \
python3 \
perl \
pkgconf-pkg-config \
libxcb-devel \
xcb-util-wm-devel \
xcb-util-image-devel \
xcb-util-keysyms-devel \
xcb-util-renderutil-devel \
libxkbcommon-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 \
zlib-static \
fontconfig-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}
ENV PKG_CONFIG_PATH=${OPENSSL_ROOT_DIR}/lib/pkgconfig:${OPENSSL_ROOT_DIR}/lib64/pkgconfig:${PKG_CONFIG_PATH}
# 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)
# Header-only Eigen (clone a specific tag)
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++
# Build and install static Qt 6.9 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" \
-DBUILD_SHARED_LIBS=OFF \
-DQT_BUILD_TESTS=OFF \
-DQT_BUILD_EXAMPLES=OFF \
-DQT_FEATURE_dbus=ON \
-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 and Eigen discoverable by CMake
ENV CMAKE_PREFIX_PATH=/opt/qt-${QT_VERSION}-static:/opt/eigen
# Set workdir for your project
WORKDIR /workspace
# Default entrypoint: interactive shell
CMD ["/bin/bash", "-l"]

View File

@@ -0,0 +1,136 @@
# Ubuntu 22.04 (Jammy) base with CUDA 13 devel toolchain
FROM nvidia/cuda:13.0.1-devel-ubuntu22.04
LABEL authors="leonarski_f"
ENV DEBIAN_FRONTEND=noninteractive
ARG OPENSSL_VERSION=3.3.2
ARG QT_VERSION=6.9.0
ARG NODE_MAJOR=22
ARG EIGEN_TAG=3.4.0
# Update base and install toolchain + Qt dependencies
# Notes:
# - GCC/G++ 13 are installed from jammy-backports
# - XCB/X11/OpenGL/EGL/DBus/fontconfig/freetype/zlib headers installed for building static Qt
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
wget \
git \
tar \
xz-utils \
build-essential \
cmake \
ninja-build \
python3 \
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 \
libx11-xcb-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 \
libgl1-mesa-dev \
libegl1-mesa-dev \
libdbus-1-dev \
zlib1g-dev \
libglib2.0-dev \
libfontconfig1-dev \
libfreetype6-dev; \
apt-get -y install gcc-12 g++-12; \
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
# 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:${PKG_CONFIG_PATH}
# Install a recent 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)
# Header-only Eigen (specific tag)
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
# Use GCC/G++ 12 for builds
ENV CC=/usr/bin/gcc-12
ENV CXX=/usr/bin/g++-12
ENV PATH=/usr/bin:${PATH}
# Build and install static Qt 6.9 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" \
-DBUILD_SHARED_LIBS=OFF \
-DQT_BUILD_TESTS=OFF \
-DQT_BUILD_EXAMPLES=OFF \
-DQT_FEATURE_dbus=ON \
-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 and Eigen discoverable by CMake
ENV CMAKE_PREFIX_PATH=/opt/qt-${QT_VERSION}-static:/opt/eigen
# Set workdir for your project
WORKDIR /workspace
# Default entrypoint: interactive shell
CMD ["/bin/bash", "-l"]

View File

@@ -0,0 +1,133 @@
# 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.3.2
ARG QT_VERSION=6.9.0
ARG NODE_MAJOR=22
ARG EIGEN_TAG=3.4.0
# 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 \
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 \
libx11-xcb-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 \
libgl1-mesa-dev \
libegl1-mesa-dev \
libdbus-1-dev \
zlib1g-dev \
libglib2.0-dev \
libfontconfig1-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
# 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:${PKG_CONFIG_PATH}
# 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)
# Header-only Eigen (specific tag)
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
# Use GCC/G++ 13 for builds (default on Ubuntu 24.04)
ENV CC=/usr/bin/gcc
ENV CXX=/usr/bin/g++
RUN gcc --version && g++ --version
# Build and install static Qt 6.9 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" \
-DBUILD_SHARED_LIBS=OFF \
-DQT_BUILD_TESTS=OFF \
-DQT_BUILD_EXAMPLES=OFF \
-DQT_FEATURE_dbus=ON \
-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 and Eigen discoverable by CMake
ENV CMAKE_PREFIX_PATH=/opt/qt-${QT_VERSION}-static:/opt/eigen
# Set workdir for your project
WORKDIR /workspace
# Default entrypoint: interactive shell
CMD ["/bin/bash", "-l"]