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>
This commit is contained in:
+7
-4
@@ -7,9 +7,11 @@ To deploy Jungfraujoch, one needs to follow four steps:
|
||||
3. Install Jungfraujoch writer
|
||||
4. Install Python OpenAPI client
|
||||
|
||||
Installation procedure depend a lot on the operating system. For RedHat Enterprise Linux 8, Rocky 8, or compatible
|
||||
installation can be done with prebuilt RPMs and is relatively straightforward. For other systems one needs to build
|
||||
software from source. Both ways will be presented.
|
||||
Installation procedure depend a lot on the operating system. For RedHat Enterprise Linux 8/9, Rocky 8/9,
|
||||
Ubuntu 22.04/24.04 or compatible, installation can be done with prebuilt packages from the
|
||||
[package repositories](REPOSITORIES.md) and is relatively straightforward. For other systems one needs
|
||||
to build software from source. Both ways will be presented. What each released package contains, and
|
||||
what it needs on the machine, is described in [Release contents](RELEASE_CONTENTS.md).
|
||||
|
||||
|
||||
## Install main Jungfraujoch code and frontend web interface
|
||||
@@ -88,7 +90,8 @@ $ dmesg |grep jfjoch
|
||||
```
|
||||
|
||||
If things work, it is recommended to install the driver with DKMS, so it is rebuilt for kernel updates.
|
||||
On RHEL 8 you can install prebuilt RPM provided in the Gitlab package registry. On other systems follow procedure in
|
||||
On RHEL 8 you can install the prebuilt `jfjoch-driver-dkms` package from the
|
||||
[Gitea package registry](REPOSITORIES.md). On other systems follow procedure in
|
||||
[PCIe driver](FPGA_PCIE_DRIVER.md).
|
||||
|
||||
NOTE: Driver installation procedure on non-RHEL 8 systems is not well understood/optimized at the moment.
|
||||
|
||||
+3
-1
@@ -2,7 +2,9 @@
|
||||
|
||||
## PSI detectors
|
||||
Jungfraujoch supports PSI JUNGFRAU and PSI EIGER detectors. Jungfruajoch controls the detector via statically compiled `slsDetectorPackage` into its source code.
|
||||
It is important that detector firmware has to match `slsDetectorPackage` version used in Jungfraujoch (8.0.2 at the moment).
|
||||
It is important that detector firmware has to match `slsDetectorPackage` version used in Jungfraujoch.
|
||||
The default is 8.0.2; 9.2.0 is built with the `SLS9=ON` CMake option and published in the `slsdet9`
|
||||
[package repositories](REPOSITORIES.md).
|
||||
See [PSI Detector group website](https://www.psi.ch/en/lxn/software-releases) for details.
|
||||
|
||||
# DECTRIS detectors
|
||||
|
||||
+6
-5
@@ -23,8 +23,8 @@ are necessary. It is designed for detector directly connected to the Jungfraujoc
|
||||
See [network documentation](FPGA_NETWORK.md) for details of network.
|
||||
|
||||
## Building firmware
|
||||
Xilinx Vivado version has to precisely match version described in [the system requirements](../README.md.
|
||||
only when `vivado` and `vitis_hls` are detected in the path.
|
||||
The firmware build targets are generated by CMake only when `vivado` and `vitis_hls` are detected in
|
||||
the path, and the Vivado version has to match the one below precisely.
|
||||
|
||||
### Xilinx Vivado
|
||||
The following procedures require having AMD (Xilinx) Vivado and Vitis HLS toolsets version **2022.2** installed on the machine.
|
||||
@@ -69,9 +69,10 @@ $ make pcie_100g
|
||||
make: *** No rule to make target 'pcie_100g'. Stop.
|
||||
```
|
||||
|
||||
### Gitlab CI
|
||||
If Gitlab CI is properly set-up, firmware will be automatically built for every commit that starts with FPGA.
|
||||
Built firmware should be downloaded as MCS files.
|
||||
### Firmware releases
|
||||
The firmware is stable and is carried from version to version: the MCS files attached to a release
|
||||
are normally the ones from the release before it (see [Release contents](RELEASE_CONTENTS.md)). When
|
||||
it does need to change, it is rebuilt with the targets above on a machine with Vivado.
|
||||
|
||||
### Frame generator
|
||||
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
# 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](DEPLOYMENT.md); for the package-repository URLs see
|
||||
[Linux package repositories](REPOSITORIES.md).
|
||||
|
||||
## Artefacts
|
||||
|
||||
| Artefact | Distributed via | Contains |
|
||||
| --- | --- | --- |
|
||||
| `.rpm` / `.deb` packages | [package repositories](REPOSITORIES.md) | 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](SOFTWARE_INTEGRATION.md) |
|
||||
| `jfjoch-client` | [PyPI](https://pypi.org/project/jfjoch-client/) and the Gitea PyPI index | Generated Python OpenAPI client |
|
||||
| Documentation | [Read the Docs](https://jungfraujoch.readthedocs.io) 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](FPGA.md)) 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](JFJOCH_VIEWER.md#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](THIRD_PARTY_NOTICES.md).
|
||||
+24
-18
@@ -2,30 +2,37 @@
|
||||
For convenience, we are providing package repositories. With versions including and excluding CUDA linking.
|
||||
We recommend to install Jungfraujoch viewer from `nocuda` repository and remaining packages from `cuda12`/`cuda13` repository.
|
||||
|
||||
The repository name encodes two choices: the [slsDetectorPackage](DETECTORS.md) version the packages
|
||||
were built against (`slsdet8` = 8.0.2, `slsdet9` = 9.2.0 — it must match the detector firmware) and
|
||||
whether CUDA is linked in. What ends up inside each package, and what it needs on the target
|
||||
machine, is described in [Release contents](RELEASE_CONTENTS.md).
|
||||
|
||||
## RHEL based systems
|
||||
|
||||
For RHEL systems we provide the following repositories:
|
||||
|
||||
| RHEL version | CUDA | Repository file |
|
||||
|--------------|------|-------------------------------------------------------------------------|
|
||||
| 8.x | 12.x | https://gitea.psi.ch/api/packages/mx/rpm/centos/el8/slsdet8-cuda12.repo |
|
||||
| 8.x | - | https://gitea.psi.ch/api/packages/mx/rpm/centos/el8/slsdet8-nocuda.repo |
|
||||
| 9.x | 13.x | https://gitea.psi.ch/api/packages/mx/rpm/centos/el8/slsdet9-cuda13.repo |
|
||||
| 9.x | - | https://gitea.psi.ch/api/packages/mx/rpm/centos/el8/slsdet9-nocuda.repo |
|
||||
| RHEL version | slsDetectorPackage | CUDA | Repository file |
|
||||
|--------------|--------------------|------|------------------------------------------------------------------------|
|
||||
| 8.x | 8.0.2 | 12.x | https://gitea.psi.ch/api/packages/mx/rpm/centos/el8/slsdet8-cuda12.repo |
|
||||
| 8.x | 9.2.0 | 12.x | https://gitea.psi.ch/api/packages/mx/rpm/centos/el8/slsdet9-cuda12.repo |
|
||||
| 8.x | 8.0.2 | - | https://gitea.psi.ch/api/packages/mx/rpm/centos/el8/slsdet8-nocuda.repo |
|
||||
| 9.x | 8.0.2 | 13.x | https://gitea.psi.ch/api/packages/mx/rpm/centos/el9/slsdet8-cuda13.repo |
|
||||
| 9.x | 9.2.0 | 13.x | https://gitea.psi.ch/api/packages/mx/rpm/centos/el9/slsdet9-cuda13.repo |
|
||||
| 9.x | 8.0.2 | - | https://gitea.psi.ch/api/packages/mx/rpm/centos/el9/slsdet8-nocuda.repo |
|
||||
|
||||
To install the repository, run:
|
||||
|
||||
```bash
|
||||
dnf config-manager --add-repo https://gitea.psi.ch/api/packages/mx/rpm/centos/el8/slsdet8-cuda12.repo
|
||||
```
|
||||
Currently signing of RPMs is not supported, so the repository file needs to be manually modified to set `gpgcheck=0`
|
||||
or installation must run with `--nogpgcheck`.
|
||||
RPMs are signed by the Gitea package registry as they are uploaded. If your system cannot verify the
|
||||
signature, set `gpgcheck=0` in the repository file or install with `--nogpgcheck`.
|
||||
|
||||
We provide the following packages in the repository:
|
||||
* jfjoch
|
||||
* jfjoch-driver
|
||||
* jfjoch-writer
|
||||
* jfjoch-viewer
|
||||
* jfjoch — broker, web frontend, FPGA and detector command-line tools
|
||||
* jfjoch-driver-dkms — PCIe kernel-module source, built by DKMS
|
||||
* jfjoch-writer — HDF5 writer service
|
||||
* jfjoch-viewer — desktop viewer, the offline analysis tools and the XDS plugin
|
||||
|
||||
## Ubuntu based systems
|
||||
|
||||
@@ -37,11 +44,10 @@ sudo apt update
|
||||
```
|
||||
|
||||
`$distribution` uses Ubuntu names `jammy` (22.04) and `noble` (24.04). `$component` can be set to `cuda13` and `nocuda`.
|
||||
Only slsDetectorPackage 8.0.2 is built for Ubuntu.
|
||||
|
||||
We provide the following packages in the repository:
|
||||
* jfjoch-jfjoch
|
||||
* jfjoch-driver
|
||||
* jfjoch-writer
|
||||
* jfjoch-viewer
|
||||
The same four packages as above are provided: `jfjoch`, `jfjoch-driver-dkms`, `jfjoch-writer` and
|
||||
`jfjoch-viewer`. Up to 1.0.0-rc.160 the first of them was misnamed `jfjoch-jfjoch`; the current
|
||||
package replaces it, so `apt upgrade` handles the rename.
|
||||
|
||||
Ubuntu packages are currently only going through a very limited testing.
|
||||
Ubuntu packages are currently only going through a very limited testing.
|
||||
|
||||
+5
-4
@@ -7,12 +7,13 @@ On experimental basis we also build repositories for Ubuntu 22.04 and 24.04.
|
||||
Running Jungfraujoch on Red Hat Enterprise Linux 7 is currently not tested and not recommended,
|
||||
but likely possible with providing some packages from external repositories.
|
||||
|
||||
The desktop viewer `jfjoch_viewer` (only) can additionally be built on **Windows 11** with Visual
|
||||
Studio 2026 (MSVC), CUDA 13.3 and Qt 6.11 — see
|
||||
[jfjoch_viewer ▸ Building from source on Windows](JFJOCH_VIEWER.md#building-from-source-on-windows).
|
||||
The desktop viewer `jfjoch_viewer` (only) additionally runs on **Windows 11**, where it is shipped as
|
||||
a pre-built installer; it can also be built from source with Visual Studio 2026 (MSVC), CUDA 13.3 and
|
||||
Qt 6.11 — see [jfjoch_viewer ▸ Building from source on Windows](JFJOCH_VIEWER.md#building-from-source-on-windows).
|
||||
The Windows installer bundles the Qt runtime, and on the CUDA build the CUDA runtime (cuFFT) as
|
||||
well, so end users need neither Qt nor a CUDA toolkit installed — only an NVIDIA GPU driver for the
|
||||
GPU path. The rest of Jungfraujoch is Linux-only.
|
||||
GPU path. The rest of Jungfraujoch is Linux-only. See [Release contents](RELEASE_CONTENTS.md) for the
|
||||
CPU baseline and CUDA requirements of each released package.
|
||||
|
||||
|
||||
## Software dependencies
|
||||
|
||||
@@ -23,6 +23,7 @@ Jungfraujoch is distributed under the GPLv3 license.
|
||||
SOFTWARE
|
||||
VERSIONING
|
||||
DEPLOYMENT
|
||||
RELEASE_CONTENTS
|
||||
REPOSITORIES
|
||||
NAMING
|
||||
CHANGELOG
|
||||
|
||||
Reference in New Issue
Block a user