Building MACSio

MACSio’s design is described in detail in an accompanying design document.

A key aspect about MACSio’s design relevant to the installation process is that MACSio is composed of a growing list of I/O plugins. Each plugin implements one or more strategies for marshalling MACSio’s data object(s) between primary (volitile) and secondary (non-volitile) storage (e.g. memory and disk). An I/O strategy may involve the use of one or more strategy-specific I/O libraries. Therefore, each plugin often introduces additional, but optional, build dependencies. A given installation of MACSio can include all or just a subset of the available plugins. This is all determined at MACSio build time.

Installing via Spack

The easiest way to build MACSio may be to use spack. In theory, the steps involved are as simple as

% git clone
% . spack/share/spack/
% spack install macsio

Note, however, that these few steps may install a lot of software dependencies, many which you may not ordinarily expect. The operation may take more than an hour to complete and the resulting package installations will be hashed according to Spack’s hashing specifications which may impact any subsequent software development activity you intend to do with the resulting MACSio installation.

Nonetheless, Spack is often the simplest way to install MACSio.

The Spack installation of MACSio attempts to build all of MACSio’s plugins.

Installing Manually

MACSio’s only required dependency is json_cwx. MPI is not even a required dependency. However, building without MPI will in all likelihood result in a MACSio installation that isn’t very useful in assessing I/O performance at scale. Building without MPI, however, is useful in debugging basic functionality of an installation.

MACSio has several optional dependencies, each one associated with a given plugin. For example, the Exodus plugin requires the Exodus and netCDF libraries which may, in turn, require the HDF5 library. The Silo plugin requires the Silo library and, optionally, the HDF5 library.

For dependencies associated with each plugin, see the CMakeLists.txt file in the plugin directory for telltail notes about plugin dependencies.

Once json-cwx and any optional dependencies have been successfully installed, CMake is used to build MACSio and any of the desired plugins (builds with silo by default)

% mkdir build
% cd build
% cmake -DCMAKE_INSTALL_PREFIX=[desired-install-location] \
      -DWITH_JSON-CWX_PREFIX=[path to json-cwx] \
      -DWITH_SILO_PREFIX=[path to silo] ..
% make
% make install
NOTE: Some options for the cmake line:
  • Build docs: -DBUILD_DOCS=ON

  • Build HDF5 Plugin: -DENABLE_HDF5_PLUGIN=ON -DWITH_HDF5_PREFIX=[path to hdf5]

  • Build TyphonIO Plugin: -DENABLE_TYPHONIO_PLUGIN=ON -DWITH_TYPHONIO_PREFIX=[path to typhonio]


  • Build Exodus Plugin: -DENABLE_EXODUS_PLUGIN=ON -DWITH_EXODUS_PREFIX=[path to exodus]

Although MACSio is C Language, at a minimum it must be linked using a C++ linker due to its use of non-constant expressions in static initializers to affect the static plugin behavior. However, its conceivable that some C++’isms have crept into the code causing warnings or outright errors with some C compilers. If you encounter such a situation, please file an issue for it so we are aware of the issue and can fix it.

Note that the list of available plugins is determined by which plugins are compiled and linked with MACSio’s main. So, plugins are determined at link-time, not run-time.