The community build infrastructure uses a standalone instance of the Open Build Service to automate the build and release of a variety of RPMs under the auspices of the OpenHPC project. When combined with a matching base OS install, the collection of assembled tools and development packages can be used to deploy HPC Linux clusters.  The public build system is available at:

https://build.openhpc.community

Information on how to enable a package repository hosted from this site is outlined separately in the Downloads area.

Note that OpenHPC’s OBS instance is integrated with the GitHub repository such that commits made on key branches within git will trigger corresponding rebuilds in OBS. OBS also tracks inter-package dependencies such that downstream packages are rebuilt as well.  The configuration of the OpenHPC component packages within OBS is purposefully designed to accommodate the hierarchical nature of the stack, with special treatment applied to packages that have a compiler or MPI toolchain dependency. In particular, the design philosophy is to maintain a single set of inputs that are capable of generating builds for a variety of toolchains.  To help support this effort, many of the OpenHPC .spec files make use of template code to support multiple toolchains and define appropriate package dependencies. An example snippet from the Adios .spec  file outlining this approach is highlighted below. Note that unless specified otherwise, the default toolchain combination for the build is identified as the gnu compiler and openmpi toolchain. However, the .spec file can be used to perform builds for any supported toolchain by overriding the %{compiler_family} and %{mpi_family} macros and the OpenHPC OBS design uses this fact combined with an OBS capability to define package links. The net effect is that a single commit to the git repository will trigger rebuilds in OBS for each supported toolchain combination for a given package, all from a single set of inputs.


# OpenHPC convention: the default assumes the gnu compiler family; however, this can be 
# overridden by specifying the compiler_family variable via rpmbuild or other mechanisms.

%{!?compiler_family: %global compiler_family gnu7}
%{!?mpi_family: %global mpi_family openmpi}

# Compiler dependencies
%if 0%{?ohpc_compiler_dependent} == 1

%if "%{compiler_family}" == "gnu7"
BuildRequires: gnu7-compilers%{PROJ_DELIM} >= 7.1.0
Requires:      gnu7-compilers%{PROJ_DELIM} >= 7.1.0
%endif
%if "%{compiler_family}" == "intel"
BuildRequires: gcc-c++ intel-compilers-devel%{PROJ_DELIM}
Requires:      gcc-c++ intel-compilers-devel%{PROJ_DELIM}
%if 0%{OHPC_BUILD}
BuildRequires: intel_licenses
%endif
%endif

# MPI dependencies
%if 0%{?ohpc_mpi_dependent} == 1
%if "%{mpi_family}" == "impi"
BuildRequires: intel-mpi-devel%{PROJ_DELIM}
Requires:      intel-mpi-devel%{PROJ_DELIM}
%global __requires_exclude ^libmpi\\.so.*$|^libmpifort\\.so.*$|^libmpicxx\\.so.*$
%endif
%if "%{mpi_family}" == "mpich"
BuildRequires: mpich-%{compiler_family}%{PROJ_DELIM}
Requires:      mpich-%{compiler_family}%{PROJ_DELIM}
%endif
%if "%{mpi_family}" == "mvapich2"
BuildRequires: mvapich2-%{compiler_family}%{PROJ_DELIM}
Requires:      mvapich2-%{compiler_family}%{PROJ_DELIM}
%endif
%if "%{mpi_family}" == "openmpi"
BuildRequires: openmpi-%{compiler_family}%{PROJ_DELIM}
Requires:      openmpi-%{compiler_family}%{PROJ_DELIM}
%endif
%endif