Introducing reproducable builds with guix
This MR introduces building ogs as a GNU Guix package.
Guix is a Linux-only package manager with a strong focus on reproducibility. It is claimed that specific builds (guix uses a defined state (via git commit hashes) for a build) can be reproduced bit-by-bit even on different systems (haven't checked yet if that's the case for the ogs package). Other interesting features of guix:
- Easily tune the build (
-march
-flags) for specific architectures. Testedcore2
vsznver3
(envinf3): around 15 % improvement inSteadyStateDiffusion_square_1x1_Neumann_1e6
. - Portable MPI builds.
- Builds can be easily packaged as portable binaries or Singularity or Docker container. I have e.g. tested an ogs petsc build packaged as a singularity container running a parallel simulation on UFZs Eve.
- Cross-compile to other architecture.
- For the moment builds are limited to SteadyStateDiffusion process for faster feedback during the development of these features.
- ogs package definition is here: https://gitlab.opengeosys.org/ogs/inf/guix-ogs/-/blob/master/ogs/packages/ogs.scm#L27-74
- Guix state is pinned here: https://gitlab.opengeosys.org/ogs/ogs/-/blob/55d4e5685fb69c9ae1e9e3fe2f424dd434aeecb6/scripts/guix/channels.scm
- New ci job
build guix
, manual or master-only. Will run on either envinf3 or ubuntu1 where guix is installed. - CMake variable
BUILD_GUIX
is set on guix builds. - The guix build process is completely offline. As we have lots third-party dependencies I have created a helper repo which collects all the dependencies (which are not available as a guix package) referenced as git submodules. This helper repo is added as a submodule in ogs (and only used for the purpose of building the guix package). Guix does a recursive clone of ogs and therefore the rest of the build can happen offline.
Future steps:
- Get the ogs guix package into the official guix repo
- Test redistributable builds on different (HPC) platforms
-
Feature description was added to the changelog -
Tests covering your feature were added? [ ] Any new feature or behavior change was documented?
Edited by Lars Bilke