8 #include "serac/serac_config.hpp"
10 #include <string_view>
14 #include "axom/config.hpp"
15 #include "axom/core.hpp"
16 #include "axom/fmt.hpp"
18 #include "camp/config.hpp"
20 #ifdef SERAC_USE_CALIPER
21 #include "caliper/caliper-config.h"
24 #ifdef SERAC_USE_CONDUIT
25 #include "conduit_config.h"
39 #include "RAJA/config.hpp"
42 #ifdef SERAC_USE_UMPIRE
43 #include "umpire/Umpire.hpp"
46 #ifdef SERAC_USE_TRIBOL
47 #include "tribol/config.hpp"
50 #include "serac/serac_config.hpp"
51 #include "serac/infrastructure/git_sha.hpp"
58 using namespace axom::fmt;
59 [[maybe_unused]] constexpr std::string_view on =
"ON";
60 [[maybe_unused]] constexpr std::string_view off =
"OFF";
62 std::string
about =
"\n";
71 about += format(
"Debug Build: {0}\n", on);
73 about += format(
"Debug Build: {0}\n", off);
77 about += format(
"CUDA: {0}\n", on);
79 about += format(
"CUDA: {0}\n", off);
90 std::vector<std::string> disabled_libs;
92 about +=
"Enabled Libraries:\n";
95 about += format(
"Axom Version: {0}\n", axom::getVersion());
98 about += format(
"Camp Version: {0}\n", CAMP_VERSION);
101 #ifdef SERAC_USE_CALIPER
102 about += format(
"Caliper Version: {0}\n", CALIPER_VERSION);
104 disabled_libs.push_back(
"Caliper");
108 #ifdef SERAC_USE_CONDUIT
109 about += format(
"Conduit Version: {0}\n", CONDUIT_VERSION);
111 disabled_libs.push_back(
"Conduit");
115 #ifdef SERAC_USE_HDF5
116 unsigned int h5_maj, h5_min, h5_rel;
117 std::string h5_version;
118 if (H5get_libversion(&h5_maj, &h5_min, &h5_rel) < 0) {
119 SLIC_ERROR(
"Failed to retrieve HDF5 version.");
121 h5_version = format(
"{0}.{1}.{2}", h5_maj, h5_min, h5_rel);
123 about += format(
"HDF5 Version: {0}\n", h5_version);
125 disabled_libs.push_back(
"HDF5");
130 std::string lua_version{LUA_RELEASE};
131 if (axom::utilities::string::startsWith(lua_version,
"Lua ")) {
132 lua_version.erase(0, 4);
134 about += format(
"Lua Version: {0}\n", lua_version);
136 disabled_libs.push_back(
"Lua");
140 const char* mfem_version = mfem::GetVersionStr();
141 if (mfem_version ==
nullptr) {
142 SLIC_ERROR(
"Failed to retrieve MFEM version.");
144 const char* mfem_sha = mfem::GetGitStr();
145 if (mfem_sha ==
nullptr) {
146 SLIC_ERROR(
"Failed to retrieve MFEM Git SHA.");
148 std::string mfem_full_version = std::string(mfem_version);
149 if (axom::utilities::string::startsWith(mfem_full_version,
"MFEM ")) {
150 mfem_full_version.erase(0, 5);
152 if (mfem_sha[0] !=
'\0') {
153 mfem_full_version += format(
" (Git SHA: {0})", mfem_sha);
155 about += format(
"MFEM Version: {0}\n", mfem_full_version);
158 #ifdef SERAC_USE_RAJA
159 about += format(
"RAJA Version: {0}.{1}.{2}\n", RAJA_VERSION_MAJOR, RAJA_VERSION_MINOR, RAJA_VERSION_PATCHLEVEL);
161 disabled_libs.push_back(
"RAJA");
165 #ifdef SERAC_USE_TRIBOL
166 about += format(
"Tribol Version: {0}\n", TRIBOL_VERSION_FULL);
168 disabled_libs.push_back(
"Tribol");
172 #ifdef SERAC_USE_UMPIRE
173 about += format(
"Umpire Version: {0}.{1}.{2}\n", umpire::get_major_version(), umpire::get_minor_version(),
174 umpire::get_patch_version());
176 disabled_libs.push_back(
"Umpire");
181 about +=
"Disabled Libraries:\n";
182 if (disabled_libs.size() == 0) {
185 for (
auto& lib : disabled_libs) {
193 std::string
gitSHA() {
return SERAC_GIT_SHA; }
198 std::string infoMsg = axom::fmt::format(
"\n{:*^80}\n",
"Run Information");
200 infoMsg += axom::fmt::format(
"{0}: {1}\n",
"Version",
version());
201 infoMsg += axom::fmt::format(
"{0}: {1}\n",
"User Name", axom::utilities::getUserName());
202 infoMsg += axom::fmt::format(
"{0}: {1}\n",
"Host Name", axom::utilities::getHostName());
205 infoMsg += axom::fmt::format(
"{0}: {1}\n",
"MPI Rank Count", count);
208 infoMsg += axom::fmt::format(
"{:*^80}\n",
"*");
210 SLIC_INFO_ROOT(infoMsg);
211 serac::logger::flush();
217 axom::fmt::format(
"v{0}.{1}.{2}", SERAC_VERSION_MAJOR, SERAC_VERSION_MINOR, SERAC_VERSION_PATCH);
219 std::string sha =
gitSHA();
220 if (add_SHA && !sha.empty()) {
227 std::string
compiler() {
return axom::fmt::format(
"{0} version {1}", SERAC_COMPILER_NAME, SERAC_COMPILER_VERSION); }
233 if (MPI_Comm_size(comm, &num_procs) != MPI_SUCCESS) {
234 SLIC_ERROR(
"Failed to determine number of MPI processes");
237 if (MPI_Comm_rank(comm, &rank) != MPI_SUCCESS) {
238 SLIC_ERROR(
"Failed to determine MPI rank");
240 return {num_procs, rank};
This file contains the interface used for retrieving information about how the driver is configured.
This file contains the all the necessary functions and macros required for logging as well as a helpe...
Accelerator functionality.
std::string version(bool add_SHA)
Returns a string for the version of Serac.
std::string gitSHA()
Returns a string for the Git SHA when the driver was built.
std::pair< int, int > getMPIInfo(MPI_Comm comm)
Get MPI Info.
std::string compiler()
Returns a string for the current compiler name and version.
std::string about()
Returns a string about the configuration of Serac.
void printRunInfo()
Outputs basic run information to the screen.