Scientific Core Library Stack 2026

SCLS packages a coherent stack of scientific libraries — BLAS/LAPACK, MPI, sparse solvers, PETSc, HDF5, and their dependencies — as RPMs for Enterprise Linux, as DEBs for Ubuntu 24.04 LTS, and as source-built installs for macOS and other Unix systems. After enabling a public binary repository, one package-manager command installs a complete, mutually compatible flavor.

Public Linux binary flavors install under /opt/scls/<flavor>, so several stacks can coexist on the same host without interfering with the operating system. Source-built site flavors may choose their own prefix, and the macOS flavor installs directly under /opt/scls.

Send comments, questions, or suggestions to Christian Messe: [javascript protected email]

Purpose

SCLS exists for the practical problem of getting scientific libraries to build, install, and work together on real machines. It targets environments where the system packages are too old, incomplete, inconsistent across dependencies, or simply unavailable for the platform in front of you.

SCLS is intended for scientists, research software engineers, and HPC maintainers who need PETSc, HDF5, NetCDF, OpenMPI, sparse solvers, and math libraries to agree on compilers, ABI, MPI, BLAS/LAPACK, rpaths, and install layout.

The stack covers the core numerical infrastructure used by downstream scientific software: BLAS/LAPACK, MPI-enabled math libraries, sparse solvers, graph partitioners, I/O libraries, and the dependencies needed to make them coexist. SCLS is not three separate build systems: RPM packages, DEB packages, and direct Unix installs are generated from the same package recipes and flavor definitions, which keeps Linux and macOS behavior aligned.

SCLS ships as OS-level packages where possible rather than as Docker images or Spack environments. Docker is a good fit when an application brings its entire runtime with it, but containers add isolation that scientific and HPC workloads usually do not want — they complicate MPI launches and move responsibility for the stack from the OS package manager to a runtime. Spack excels when every user wants their own bespoke concretization of a large software graph, but it optimizes for combinatorial flexibility rather than a stable, shared stack. RPMs and DEBs map cleanly onto existing sysadmin workflows, give normal install/uninstall semantics, and let multiple users and projects share a single managed binary installation in a predictable prefix.

On macOS, SCLS does not piggyback on Homebrew for similar reasons. Homebrew installs everything into a single shared prefix (/usr/local on Intel Macs, /opt/homebrew on Apple Silicon) where user-level tools and scientific libraries share the same namespace, making version pinning and controlled scientific stacks awkward. Keeping the macOS stack in the SCLS-owned /opt/scls prefix gives it the same isolation and activation model as the Linux binaries, so downstream code, activation, and environment variables behave consistently across platforms.

The intended result is not maximum configurability. It is a coherent, reproducible stack that downstream codes can link against without constant manual repair.

Design Philosophy

SCLS is deliberately opinionated. It is a curated build and packaging system, not a general-purpose meta-build framework. It makes a small number of project-wide choices so the resulting libraries share the same compiler assumptions, math backend, integer model, MPI implementation, and installation layout:

The stack also deliberately leaves some things out:

This bias toward curation is intentional. If a project needs many custom feature toggles for a single package, SCLS is probably the wrong tool. If it needs PETSc, HDF5, OpenBLAS, NetCDF, MUMPS, and related libraries to build and coexist predictably, SCLS is built for that job.

Flavors

A flavor is the unit of consistency in SCLS. It defines the target platform, compiler family, optimization flags, math backend, MPI choice, integer model, and install prefix for the entire stack. Public Linux binary flavors install into distinct /opt/scls/<flavor> prefixes; source-built flavors declare their own prefix.

The public binary repositories currently target Enterprise Linux 9 and 10, Amazon Linux 2023, and Ubuntu 24.04 LTS. The same repository can also build local RPMs on other RHEL-family systems, local DEBs on Debian-family systems, or direct Unix installs on macOS and non-RPM/non-DEB Unix systems.

Additional source-build flavors include lbl for a site-specific LBL prefix, intel for Intel compiler builds, gcc-mkl-cuda for CUDA-enabled experiments, and macos. See the flavors/ directory for the complete set.

CUDA binaries are not distributed, because a CUDA-linked stack would tie users to a specific driver and toolkit version. Users who need GPU acceleration can use the gcc-mkl-cuda source-build flavor and link against a locally installed CUDA toolkit.

On macOS the stack uses OpenBLAS rather than Apple's Accelerate framework. The macos flavor builds its own GCC for Fortran support (SCLS ships a GCC build script for exactly this purpose), and pairing GCC-built Fortran with Accelerate is fragile — Accelerate is tuned for Apple's Clang toolchain and its ABI story is awkward from the GCC side. OpenBLAS is well-understood with GCC, keeps the math behavior identical to the Linux binary flavors, and is tuned for compute throughput rather than the performance/power tradeoffs that shape Accelerate.

The Unix build script also provides GPL-3 build tools and selected LGPL-3 arbitrary-precision dependencies that are left out of the public Linux binary flavors. See the second package table below.

Installation on Enterprise Linux 9 / 10 and Amazon Linux 2023

First, install the release package for your distribution (choose one):

Enterprise Linux 9:

sudo dnf install https://belfem.lbl.gov/scls/el9/x86_64/Packages/scls-release-2026-1.el9.noarch.rpm

Enterprise Linux 10:

sudo dnf install https://belfem.lbl.gov/scls/el10/x86_64/Packages/scls-release-2026-1.el10.noarch.rpm

Amazon Linux 2023:

sudo dnf install https://belfem.lbl.gov/scls/amzn2023/x86_64/Packages/scls-release-2026-1.amzn2023.noarch.rpm

Then install a flavor:

sudo dnf install scls-<flavor>

RPM builds also provide an optional examples meta-package. Install scls-<flavor>-examples if you want the upstream PETSc, SLEPc, and SUNDIALS example sources on disk.

After installation, activate the environment:

source /opt/scls/<flavor>/share/scls/activate

This adds the stack's bin/ directory to PATH, exposes package metadata through PKG_CONFIG_PATH and CMAKE_PREFIX_PATH, and sets SCLS / SCLS_FLAVOR. Runtime library lookup is handled by rpaths, not by modifying LD_LIBRARY_PATH. Run scls help once the environment is active for the list of runtime subcommands (scls flavor, scls list, scls info <package>, scls env, scls prefix, scls license, scls deactivate).

Installation on Ubuntu 24.04 LTS

Ubuntu 24.04 LTS (Noble Numbat) is the supported Debian-family target. Unlike dnf, apt does not install packages directly from a URL, so the keyring + repository-configuration package is fetched first and then installed from the local file:

wget https://belfem.lbl.gov/scls/ubuntu/pool/main/s/scls-archive-keyring/scls-archive-keyring_2026-1_all.deb
sudo apt install ./scls-archive-keyring_2026-1_all.deb

This drops the SCLS public key under /etc/apt/keyrings/scls-archive-keyring.gpg and a deb822-format scls.sources file under /etc/apt/sources.list.d/. Then refresh apt and install a flavor:

sudo apt update
sudo apt install scls-<flavor>

DEB builds produce per-package example subpackages when recipes define them, such as scls-<flavor>-petsc-examples; unlike the RPM path, there is not currently an all-examples meta-package.

After installation, activate the environment the same way as on Enterprise Linux:

source /opt/scls/<flavor>/share/scls/activate

The runtime scls command, the per-flavor prefix layout, and the activation script are identical between the RPM and DEB binary distributions.

Building from Source and Local Packages

On platforms outside the public Enterprise Linux and Ubuntu repositories, clone the repository and use the ./scls wrapper. The wrapper selects RPM mode on supported RHEL-family hosts, including Amazon Linux 2023, DEB mode on Debian-family systems, and direct Unix install mode elsewhere.

On Debian-family systems outside the public Ubuntu 24.04 repository, ./scls can still build local .deb packages. On macOS and non-RPM/non-DEB Unix systems, the same recipes are installed directly into the selected SCLS prefix through the Unix builder.

macOS support is currently beta, developed and tested on Intel Macs; Apple Silicon is planned but unverified. The flavor assumes you are comfortable with a Unix toolchain — installing Xcode Command Line Tools, understanding how linker and sysroot settings work, and knowing what to do when a build log points at an SDK or path issue. The macos flavor also builds its own GCC for Fortran support, which adds time to the first build. If the built-in GCC bootstrap (Apple Clang building GCC 15) fails, Homebrew's prebuilt GCC is supported as a fallback. See the macOS build guide for prerequisites, the step-by-step flow, and the two Homebrew fallback routes.

Quick start:

  1. Clone the repository:
    git clone https://github.com/cmesse/scls.git
    cd scls
  2. Create flavor.conf for your platform. Linux default / local package build:
    echo "flavor: gcc" > flavor.conf
    macOS:
    echo "flavor: macos" > flavor.conf
  3. Build and install the full flavor in dependency order:
    ./scls build all
    For a granular or resumable flow, build and install the next package:
    ./scls build next
    ./scls install next
    Or build a specific package:
    ./scls build petsc
    ./scls install petsc
  4. Activate the environment. Linux / local package flavors:
    source /opt/scls/<flavor>/share/scls/activate
    macOS:
    source /opt/scls/share/scls/activate
    Use <prefix>/share/scls/activate for any source-built flavor with a custom prefix.

The build wrapper itself supports ./scls build all, ./scls build, ./scls install, ./scls spec (RPM mode), ./scls list, ./scls order, and ./scls check-updates. Run ./scls with no arguments to see the usage summary.

Using the Stack

Once the environment is active, the stack is visible to ordinary build tools. A minimal PETSc example:

source /opt/scls/gcc/share/scls/activate
mpicc myapp.c -o myapp $(pkg-config --cflags --libs petsc)
mpirun -n 4 ./myapp

CMake projects can use the activated prefix directly:

cmake -S . -B build -DCMAKE_PREFIX_PATH="$SCLS"
cmake --build build

The activation script sets PATH, PKG_CONFIG_PATH, and CMAKE_PREFIX_PATH, and exports SCLS and SCLS_FLAVOR plus PETSC_DIR, SLEPC_DIR, and MPI_HOME when those packages are installed. For PETSc, PETSC_DIR points at the installed SCLS prefix and PETSC_ARCH is intentionally empty because SCLS installs PETSc as a prefix-installed library, not as an in-place PETSc source tree. pkg-config, CMake's find_package, and package-specific configuration scripts therefore work without further setup.

LD_LIBRARY_PATH is deliberately not modified. Every shared library in the stack is built with an rpath into its install prefix, so binaries find their dependencies at runtime without the activation script having to poison the loader search path of every child process. The activation script does, however, clean any stale SCLS entries left behind by a previously-activated flavor — switching stacks is a clean re-activation rather than an accumulating stack of path entries.

Git Repository

To build your own flavor, contribute recipes, or file issues:

https://github.com/cmesse/scls

Packages

The table below lists packages that ship in the distributed binary flavors. Their licenses are permissive, weak-copyleft, or otherwise accepted under the SCLS binary-distribution policy. GPL-3 linkable libraries are excluded from the public binary flavors.

Name Version Description gcc mkl debug License
armadillo 15.2.7 Fast C++ matrix library with syntax similar to MATLAB and Octave Apache-2.0
arpack-ng 3.9.1 Fortran 77 subroutines designed to solve large scale eigenvalue problems. BSD
blaspp 2025.05.28 C++ API for the Basic Linear Algebra Subprograms (BLAS) BSD-3-Clause
blaze 3.8.2 A high-performance C++ math library for dense and sparse arithmetic BSD
butterflypack 4.1.0 Rapid solving of large-scale dense linear systems using butterfly compression BSD-3-Clause
cmake 4.3.3 Cross-platform make system BSD-3-Clause
environment 2026 SCLS environment setup, activation scripts, and configuration BSD-3-Clause
exodus 2025.10.14 EXODUS - Advanced finite element data file format BSD-3-Clause
gklib 0.0.1 A library of various helper routines and frameworks used by KarypisLab software Apache-2.0
googletest 1.17.0 GoogleTest - Google Testing and Mocking Framework BSD-3-Clause
gperftools 2.18.1 Very fast malloc and performance analysis tools BSD
hdf5 1.14.6 A general purpose library and file format for storing scientific data BSD
hwloc 2.13.0 Portable Hardware Locality BSD
lapack 3.12.1 LAPACK - Linear Algebra PACKage - - BSD-3-Clause
lapackpp 2025.05.28 C++ API for the Linear Algebra Package (LAPACK) BSD-3-Clause
libevent 2.1.12 Abstract asynchronous event notification library BSD and ISC
libunwind 1.8.3 Portable C library for determining call-chains from a program's execution MIT
metis 5.2.1 Serial Graph Partitioning and Fill-reducing Matrix Ordering Apache-2.0
mumps 5.9.0 A MUltifrontal Massively Parallel sparse direct Solver CeCILL-C
netcdf 4.10.0 Libraries for the Unidata network Common Data Form NetCDF
nlopt 2.11.0 Nonlinear optimization library MIT
openblas 0.3.33 An optimized BLAS library based on GotoBLAS2 - - BSD-3-Clause
openmpi 5.0.10 A powerful implementation of MPI/SHMEM BSD
parmetis 4.0.3 Parallel Graph Partitioning and Fill-reducing Matrix Ordering Apache-2.0
petsc 3.25.2 Portable Extensible Toolkit for Scientific Computation BSD-2-Clause
pmix 5.0.10 An extended/exascale implementation of the PMIx Standard BSD
scalapack 2.2.3 A subset of LAPACK routines redesigned for heterogeneous computing BSD
scotch 7.0.11 Graph, mesh and hypergraph partitioning library CeCILL-C
slate 2025.05.28 Software for Linear Algebra Targeting Exascale BSD-3-Clause
slepc 3.25.1 Scalable Library for Eigenvalue Problem Computations BSD-2-Clause
strumpack 8.0.0 STRUctured Matrix PACKage - sparse and dense rank-structured linear solvers BSD-3-Clause
sundials 7.7.0 Nonlinear and Differential/Algebraic Equation Solvers BSD-3-Clause
superlu 7.0.1 Subroutines to directly solve sparse linear systems BSD-3-Clause
superlu_dist 9.2.1 Distributed memory sparse direct solver BSD-3-Clause
testsweeper 2025.05.28 C++ testing framework for parameter sweeps BSD-3-Clause
ucx 1.20.1 Unified Communication X - high-performance communication framework BSD
vtk 9.6.2 A high-level 3D visualization library BSD-3-Clause
zfp 1.0.1 Library for compressed numerical arrays with high throughput R/W random access BSD-3-Clause

Source-Only Packages (GPL-3 / LGPL-3)

The packages below carry GPL-3 or LGPL-3-family licenses and are therefore not included in the public Linux binary flavors. They are targeted primarily at source builds, especially macos, where Xcode and the Command Line Tools do not ship the GNU build-tool chain (autoconf, automake, libtool, m4, bison, texinfo) or the multiprecision dependencies the scientific stack needs. SCLS also ships a recipe for GCC itself, so the macos flavor can produce its own Fortran-capable toolchain from source. Some dependencies, such as GMP, MPFR, and MPC for GCC, may be consumed as GCC extra sources rather than shipped as public Linux binary packages.

Name Version Description License
autoconf 2.73 A GNU tool for automatically configuring source code GPL-3.0+
automake 1.18.1 A GNU tool for automatically creating Makefiles GPL-3.0+
bison 3.8.2 A GNU general-purpose parser generator GPL-3.0+
gcc 16.1.0 The GNU Compiler Collection GPL-3.0+
gmp 6.3.0 GNU arbitrary precision library LGPL-3.0+ / GPL-2.0+
libtool 2.5.4 The GNU Portable Library Tool GPL-3.0+
m4 1.4.21 GNU M4 macro processor GPL-3.0+
make 4.4.1 A GNU tool which simplifies the build process for users GPL-3.0+
mpfr 4.2.2 C library for multiple-precision floating-point computations LGPL-3.0+
sed 4.10 A GNU stream text editor GPL-3.0-or-later
texinfo 7.3 Tools needed to create Texinfo format documentation files GPL-3.0+

License

SCLS itself is licensed under the Lawrence Berkeley National Laboratory BSD variant (BSD-3-Clause-LBNL). Individual packages retain their own licenses as shown in the table above.

This software is provided "AS IS" without warranty of any kind.