CMake Configuration Options

The following set of options are available to control how FleCSI is built.

  • BUILD_SHARED_LIBS [default: ON]
    Build shared library objects (as opposed to static).

  • CMAKE_BUILD_TYPE [default: Debug]
    Specify the build type (configuration) statically for this build tree. Possible choices are Debug, Release, RelWithDebInfo, and MinSizeRel.

  • CMAKE_INSTALL_PREFIX [default: /usr/local]
    Specify the installation path to use when make install is invoked.

  • CXX_CONFORMANCE_STANDARD [default: c++14]
    Specify to which C++ standard a compiler must conform. This is a developer option used to identify whether or not the selected C++ compiler will be able to compile FleCSI, and which (if any) tests it fails to compile. This information can be shared with vendors to identify features that are required by FleCSI that are not standards-compliant in the vendor’s compiler.

  • ENABLE_BOOST_PREPROCESSOR [default: ON]
    Boost.Preprocessor is a header-only Boost library that provides enhanced pre-processor options and manipulation, which are not supported by the standard C preprocessor. Currently, FleCSI uses the preprocessor to implement type reflection.

  • ENABLE_BOOST_PROGRAM_OPTIONS [default: OFF]
    Boost.Program_options provides support for handling command-line options to a program. When this build option is enabled, CMake will attempt to locate a valid installation of the program options library, and Cinch will enable certain command-line options for unit tests. In particular, if Cinch’s clog extensions are enabled, the –tags command-line option will be available to select output tags.

  • ENABLE_CINCH_DEVELOPMENT [default: OFF]
    If this option is enabled, extra information will be generated to help debug different Cinch behaviors. Currenlty, this only affects the generation of documentation: when enabled, the resulting PDF documentation will be annotated with the original locations of the content. FIXME: We should consider renaming this option

  • ENABLE_CINCH_VERBOSE [default: OFF]
    If this option is enabled, extra information will be output during the CMake configuration and build that may be helpful in debugging Cinch.

  • ENABLE_CLOG [default: OFF]
    Enable Cinch Logging (clog). The Cinch logging interface provides methods for generating and controlling output from a running application.

  • CLOG_COLOR_OUTPUT [default: ON]
    Enable colorization of clog output.

  • CLOG_DEBUG [default: OFF]
    Enable verbose debugging output for clog.

  • CLOG_ENABLE_EXTERNAL [default: OFF]
    The Cinch clog facility is a runtime. As such, some of the features provided by clog require initialization. Because of the C++ mechanism used by clog to implement parts of its interface, it is possible to call the interface from parts of the code that are external, i.e., at file scope. Externally scoped statements are executed before the clog runtime can be initialized, and therefore their output cannot be controlled by the clog tagging feature. This option allows the user to enable this type of output, which can be quite verbose.

  • CLOG_ENABLE_TAGS [default: OFF]
    Enable the tag feature for clog. If enabled, users can selectively control clog output by specifying active tags on the command line:

$ ./executable --tags=tag1,tag2

Invoking the –tags flag with no arguments will list the available tags. This option requries that ENABLE_BOOST_PROGRAM_OPTIONS be ON.

  • CLOG_STRIP_LEVEL [default: 0]
    Strip levels are another mechanism to allow the user to control the amount of output that is generated by clog. In general, the higher the stip level, the fewer the number of clog messages that will be output. There are five strip levels in clog: trace, info, warn, error, and fatal. Output for all of these levels is turned on if the strip level is 0. As the strip level is increased, fewer levels are output, e.g., if the strip level is 3, only error and fatal log messages will be output. Regardless of the strip level, clog messages that are designated *fatal* will generate a runtime error and will invoke std::exit.

  • ENABLE_COLORING [default: OFF]
    This option controls whether or not various library dependencies and code sections are active that are required for graph partitioning (coloring) and distributed-memory parallelism. In general, if you have selected a runtime mode that requires this option, it will automatically be enabled.

  • ENABLE_COLOR_UNIT_TESTS [default: OFF]
    Enable coloraization of unit test output.

  • ENABLE_COVERAGE_BUILD [default: OFF]
    Enable build mode to determine the code coverage of the current set of unit tests. This is useful for continuous integration (CI) test analysis.

  • ENABLE_DEVEL_TARGETS [default: OFF]
    Development targets allow developers to add small programs to the FleCSI source code for testing code while it is being developed. These programs are not intended to be used as unit tests, and may be added or removed as the code evolves.

  • ENABLE_DOCUMENTATION [default: OFF]
    This option controls whether or not the FleCSI user and developer guide documentation is built. If enabled, CMake will generate these guides as PDFs in the doc subdirectory of the build.

  • ENABLE_DOXYGEN [default: OFF]
    If enabled, CMake will verify that a suitable doxygen binary is available on the system, and will add a target for generating Doxygen-style interface documentation from the FleCSI source code. To build the doxygen documentation, users must explicitly invoke:

$ make doxygen
  • ENABLE_DOXYGEN_WARN [default: OFF]
    Normal Doxygen output produces many pages worth of warnings. These are distracting and overly verbose. As such, they are disabled by default. This options allows the user to turn them back on.

  • ENABLE_EXODUS [default: OFF]
    If enabled, CMake will verify that a suitable Exodus library is available on the system, and will enable Exodus functionality in the FleCSI I/O interface.

  • ENABLE_JENKINS_OUTPUT [default: OFF]
    If this options is on, extra meta data will be output during unit test invocation that may be used by the Jenkins CI system.

  • ENABLE_MPI_CXX_BINDINGS [default: OFF]
    This option is a fall-back for codes that actually require the MPI C++ bindings. This interface is deprecated and should only be used if it is impossible to get rid of the dependency.

  • ENABLE_OPENMP [default: OFF]
    Enable OpenMP support. If enabled, the appropriate flags will be passed to the C++ compiler to enable language support for OpenMP pragmas.

  • ENABLE_OPENSSL [default: OFF]
    If enabled, CMake will verify that a suitable OpenSSL library is available on the system, and will enable the FleCSI checksum interface.

  • ENABLE_UNIT_TESTS [default: OFF]
    Enable FleCSI unit tests. If enabled, the unit test suite can be run by invoking:

$ make test
  • FLECSI_COUNTER_TYPE [default: int32_t]
    Specify the C++ type to use for the FleCSI counter interface.

  • FLECSI_DBC_ACTION [default: throw]
    Select the design-by-contract action.

  • FLECSI_DBC_REQUIRE [default: ON]
    Enable DBC pre/post condition assertions.

  • FLECSI_ID_FBITS [default: 4]
    Specify the number of bits to be used to represent id flags. This option affects the number of entities that can be represented on a FleCSI mesh type. The number of bits used to represent entities is 62-FLECSI_ID_PBITS-FLECSI_ID_FBITS. With the current defaults there are 38 bits available to represent entities, i.e., up to 274877906944 entities can be resolved.

  • FLECSI_ID_PBITS [default: 20]
    Specify the number of bits to be used to represent partition ids. This option affects the number of entities that can be represented on a FleCSI mesh type. The number of bits used to represent entities is 62-FLECSI_ID_PBITS-FLECSI_ID_FBITS. With the current defaults there are 38 bits available to represent entities, i.e., up to 274877906944 entities can be resolved.

  • FLECSI_RUNTIME_MODEL [default: mpi]
    Specify the low-level runtime model. Currently, legion and mpi are the only valid options.

  • VERSION_CREATION [default: git describe]
    This options allows the user to either directly specify a version by entering it here, or to let the build system provide a version using git describe.