Files
Jungfraujoch/docs/RELEASE_CONTENTS.md
T
leonarski_fandClaude Opus 5 46930142dd docs: write down what a release ships
Nothing said what is in a release or what it needs of the machine it lands on: that the
Linux binaries are built -march=x86-64-v3 and the Windows ones /arch:AVX, so each has a
CPU floor; that the portable .tgz is built on RHEL 8 for its glibc; that the Windows
installer is MSVC (Visual Studio 2026), CUDA 13.3, Qt 6.11 and carries the Qt runtime;
and above all what the CUDA variants need. Only cuFFT is linked dynamically, and it has
no link-time dependency on the driver library, so a CUDA build starts on a machine with
no NVIDIA GPU at all and falls back to the CPU path - as long as cuFFT can be loaded,
which the .tgz and the installer arrange by shipping it and the distribution packages
arrange through the distribution's own CUDA packages. Collected into a new page rather
than scattered over the install instructions.

The repository page had the RHEL 9 rows pointing at el8 paths under the wrong slsdet
number, no rows at all for the two slsdet9 repositories the pipeline uploads, a driver
package named jfjoch-driver where it is jfjoch-driver-dkms, and a note that RPMs are
unsigned from before the pipeline started uploading them with sign=true.

The FPGA page had a paragraph that stopped mid-sentence, in the middle of a link, and a
section describing a firmware build triggered by commit message. The firmware is stable
and carried from version to version now.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 20:53:19 +02:00

7.1 KiB

Release contents

This page describes what a Jungfraujoch release ships and what each artefact needs on the target machine — which CPU instruction set the binaries were compiled for, which CUDA toolkit they were built against, and which runtime libraries are bundled rather than expected from the host.

The artefacts in the table below are built and published by the continuous-integration pipeline (.gitea/workflows/build_and_test.yml) when a tag is pushed. For how to install and configure the result see Deployment; for the package-repository URLs see Linux package repositories.

Artefacts

Artefact Distributed via Contains
.rpm / .deb packages package repositories The full server stack: jfjoch (broker, frontend, FPGA and detector tools), jfjoch-writer, jfjoch-viewer (incl. the XDS plugin), jfjoch-driver-dkms
jfjoch_viewer-<version>-linux-cuda<major>.tgz, ...-linux-cpu.tgz Gitea release page Portable Linux viewer package: jfjoch_viewer, rugnux, jfjoch_extract_hkl, jfjoch_recompress and the license notices
jfjoch-viewer-<version>-win64-cuda<major>.exe, ...-win64-cpu.exe Gitea release page Windows installer with the same four programs, plus the Qt runtime
jfjoch-writer .rpm / .deb Gitea release page The writer alone, for a file-writing machine without the rest of the stack
libjfjoch_xds_plugin.so.<version> Gitea release page XDS HDF5 read plugin (built on RHEL 8); see Integration with MX software
jfjoch-client PyPI and the Gitea PyPI index Generated Python OpenAPI client
Documentation Read the Docs and the gitea-pages branch This documentation set

The FPGA firmware (.mcs) images are attached to the release as well. The firmware is stable and is carried from version to version, and is rebuilt with Vivado (see FPGA smartNIC) when it needs to change — so a card keeps its image across a software upgrade unless the release notes say otherwise.

CPU instruction set

The architecture flags live in the CI configuration rather than in CMakeLists.txt, so a site building from source picks its own (x86-64-v4 on an AVX-512 cluster, -march=native, or the plain baseline the compiler defaults to). The released binaries are compiled to a fixed floor:

Release Flags Minimum CPU
Linux (all packages, and the portable .tgz) -march=x86-64-v3 -flto=auto AVX2 + FMA + BMI2 — Intel Haswell (2013) / AMD Zen (2017) and newer
Windows installer /arch:AVX AVX — Intel Sandy Bridge (2011) / AMD Bulldozer and newer

The Windows floor is lower because MSVC has no spelling for the x86-64-v2 level; /arch:AVX is the nearest one and implies SSE4.1/4.2, which is what actually matters — without it Eigen has no vectorised round and falls back to a libm call per element. Link-time optimisation is applied on Linux only.

A binary will fault with an illegal instruction on a CPU below its floor. If you must run on older hardware, build from source without the flags.

Operating-system floor

The .rpm / .deb packages are built per distribution (RHEL/Rocky 8 and 9, Ubuntu 22.04 and 24.04) and are tied to it. The portable viewer .tgz is built on RHEL 8, the oldest supported distribution, so its glibc floor is low enough to run on any newer Linux — that is what it is for, and why it replaces the per-distro packaging of the viewer on the release page. The Windows installer is built and verified on Windows 11.

CUDA and non-CUDA builds

Every binary artefact is released in two variants, cuda<major> and cpu. The CUDA variant adds the GPU fast-feedback indexer (ffbidx), the GPU FFT indexer and GPU image processing; the CPU-only variant runs the same pipeline on the CPU with the FFTW indexer, at much lower throughput.

The CUDA toolkit used is the one on the corresponding build machine: CUDA 12 for the RHEL 8 packages, CUDA 13 for RHEL 9, Ubuntu and Windows. The major version is part of the artefact and repository name, so a download is self-identifying. Building from source needs CUDA 12.8 or newer.

A CUDA build does not require a CUDA machine. Of the CUDA components only cuFFT is linked dynamically — the CUDA runtime and the fast-feedback indexer are linked statically — and cuFFT itself has no link-time dependency on the NVIDIA driver library. Jungfraujoch asks how many CUDA devices are present at start-up and treats "none" (including "no driver installed") as zero GPUs, falling back to the CPU path. So a CUDA build starts and runs correctly on a machine with no NVIDIA GPU at all, provided the cuFFT runtime can be loaded:

  • Portable .tgz and Windows installer — cuFFT is part of the distribution, shipped next to the executable (on Linux found through an $ORIGIN rpath). Nothing else is needed: no CUDA toolkit, and on a GPU machine only the NVIDIA driver.
  • .rpm / .deb — cuFFT comes from the distribution's own CUDA packages, so that one dependency is managed centrally with the rest of CUDA. Install the cuFFT package alongside, or use the nocuda repositories on a machine where CUDA is not wanted.

The cuFFT runtime is large (the Windows DLL is ~256 MB), so the CUDA artefacts are correspondingly bigger than the CPU ones — the other reason for shipping both.

On a machine with an NVIDIA GPU, take the CUDA variant: only that one uses the GPU.

Windows installer

The Windows artefact covers jfjoch_viewer and the portable analysis CLIs only; the rest of Jungfraujoch (broker, receiver, FPGA host, detector control) is Linux-only.

The toolchain bounds of the released installer are:

  • Visual Studio 2026 with the C++ (MSVC) toolset. MSVC is not optional — CUDA on Windows builds through it — and it is what the release is compiled with.
  • CUDA Toolkit 13.3 for the cuda13 variant.
  • Qt 6.11 for MSVC (msvc2022_64), including Qt Charts.
  • Ninja as the generator; zlib and Eigen 3.4 supplied from a build prefix.

The installer is generated with NSIS and bundles the Qt runtime (via windeployqt) and, on the CUDA variant, the cuFFT DLL — so the end user installs neither Qt nor a CUDA toolkit. The two variants share an install directory and Start Menu group and replace each other (CUDA is a strict superset); they are told apart by the installer filename and the Add/Remove Programs entry:

Build Installer file Add/Remove Programs
CUDA (default) jfjoch-viewer-<version>-win64-cuda<major>.exe Jungfraujoch (CUDA)
CPU-only jfjoch-viewer-<version>-win64-cpu.exe Jungfraujoch (CPU)

To build the viewer yourself on Windows, see jfjoch_viewer ▸ Building from source on Windows.

Licenses

Every package variant carries the project license, the third-party manifest and the verbatim license texts of the bundled dependencies under share/doc/jfjoch. See Third-party software notices.