## SIONlib: Scalable I/O library for parallel access to task-local files

### Installing SIONlib

In the package root directory, run "./configure [options]".
The following options are available:

`--prefix=DIR`
  Specify full pathname of the directory, where the toolset package should be installed. Default: ./install/

On systems where multiple MPI libraries and compilers might be available, it might be necessary to specify which of the MPI libraries or compilers to use. In this case, configure will tell you which versions it found and how to specify the desired choice: configure currently can only do this on Linux systems.

configure creates a "build configuration" for each unique platform and stores it in a subdirectory "build-###" where ### describes the attributes needed (e.g., operating system, MPI version, compiler) to define the platform. See the output of "configure" for the name of your build configuration.

If your system (IBM Blue Gene, Cray XT, etc.) is used through extra compilation front-end nodes and building executables is done by cross-compilation, you need to build and install a cross-instrumentation version of the toolset. Normally configure should recognize this automatically.

Next, change your current working directory to the build configuration subdirectory

        % cd build-###

As all of the following text is referring to files and commands executed inside the build configuration subdirectory. Modify Makefile Definition File (Makefile.defs) if necessary.

        % make

Builds all of the tools and libraries. Make sure to have Qt's qmake on your PATH (or configured an absolute path using "--with-qmake=") if building the graphical user interface was enabled during configuration.

        % make text

performs serial and parallel test of SIONlib. Please run in in an environment where mopiexec can run immediately. The command can be changed in the Makefile Definition File.

        % make install

Installs tools, libraries, include files, documentation and examples in $(PREFIX). The installation of sionlib builds a number of libraries. There is installed a script called sionconfig which output for each combination of option correct option for compiling (--cflags) or linking (--libs):

    usage: sionconfig
         (--com|--ser|--omp|--mpi|--ompi|--gen)
         (--cflags|--libs|--path)
         [--32|--64]
         [--be] [--fe] [--mic]
         [--c|--f77|--f90|--cxx]
         [-V|--version|-h]
        [-gcc]

Example:

      LDFLAGS += `../../bin/sionconfig --libs --mpi -be`
      CFLAGS += `../../bin/sionconfig --cflags --mpi -be`

### Debugging SIONlib I/O

if SIONlib is compiled with `-DSION_DEBUG` the library supports debugging of SIONlib related I/O events. There are four environment variables steering SIONlib debugging:

`SION_DEBUG=file`
  enables debugging, debug messages will be written to file. `stdout` or `stderr` ae also possible.
`SION_DEBUG_MASK=mask`
  sets binary mask for selecting debug messages. The mask works bitwise, following debugging messages levels could be selected, by adding level to mask:
  1
    sion user function entries and exits
  2
    sion internal function entries and exits
  8
    high frequently called sion user function entries and exits
    (sion_feof, sion_ensure_free_space, ...)
  16
    high frequently called sion user function entries and exits (internal steps)
  32
    high frequently called sion internal function (internal steps)
  128
    timings (top level)
  256
    timings (low level)
  512
    Scalasca elg-lib
  1024
    Compression gz-lib
  2048
    higher frequently called sion internal function (internal steps)
`SION_DEBUG_RANK1=rank`
  selects first rank of parallel program for printing debug messages. Rank number will be appended to filename specified in SION_DEBUG.
`SION_DEBUG_RANK2=rank`
  selects second rank of parallel program for printing debug messages. Rank number will be appended to filename specified in SION_DEBUG.

### Error messages of SIONlib

There are different level of error message levels (SION_ERROR_RETURN, SION_ERROR_WARN, SION_ERROR_ABORT, SION_ERROR_UNKNOWN). Depending on the level a warning message will be printed, the corresponding call will be returned with 0 or negative return code, or the program will be aborted. To limit the messages to one rank of a parallel program following environment variable could be set:

`SION_ERROR_MSG_RANK=rank`
  selects one rank of parallel program for printing warning/error messages.