8 #include "smith/smith_config.hpp"
11 #include <string_view>
15 #include "axom/config.hpp"
16 #include "axom/core.hpp"
18 #include "camp/config.hpp"
20 #ifdef SMITH_USE_CALIPER
21 #include "caliper/caliper-config.h"
24 #ifdef SMITH_USE_CONDUIT
25 #include "conduit_config.h"
39 #include "RAJA/config.hpp"
42 #ifdef SMITH_USE_UMPIRE
43 #include "umpire/Umpire.hpp"
46 #ifdef SMITH_USE_TRIBOL
47 #include "tribol/config.hpp"
50 #include "smith/smith_config.hpp"
51 #include "smith/infrastructure/git_sha.hpp"
58 [[maybe_unused]] constexpr std::string_view on =
"ON";
59 [[maybe_unused]] constexpr std::string_view off =
"OFF";
61 std::string
about =
"\n";
69 about += std::format(
"Debug Build: {0}\n", on);
71 about += std::format(
"Debug Build: {0}\n", off);
75 about += std::format(
"CUDA: {0}\n", on);
77 about += std::format(
"CUDA: {0}\n", off);
88 std::vector<std::string> disabled_libs;
90 about +=
"Enabled Libraries:\n";
93 about += std::format(
"Axom Version: {0}\n", axom::getVersion());
96 about += std::format(
"Camp Version: {0}\n", CAMP_VERSION);
99 #ifdef SMITH_USE_CALIPER
100 about += std::format(
"Caliper Version: {0}\n", CALIPER_VERSION);
102 disabled_libs.push_back(
"Caliper");
106 #ifdef SMITH_USE_CONDUIT
107 about += std::format(
"Conduit Version: {0}\n", CONDUIT_VERSION);
109 disabled_libs.push_back(
"Conduit");
113 #ifdef SMITH_USE_HDF5
114 unsigned int h5_maj, h5_min, h5_rel;
115 std::string h5_version;
116 if (H5get_libversion(&h5_maj, &h5_min, &h5_rel) < 0) {
117 SLIC_ERROR(
"Failed to retrieve HDF5 version.");
119 h5_version = std::format(
"{0}.{1}.{2}", h5_maj, h5_min, h5_rel);
121 about += std::format(
"HDF5 Version: {0}\n", h5_version);
123 disabled_libs.push_back(
"HDF5");
128 std::string lua_version{LUA_RELEASE};
129 if (axom::utilities::string::startsWith(lua_version,
"Lua ")) {
130 lua_version.erase(0, 4);
132 about += std::format(
"Lua Version: {0}\n", lua_version);
134 disabled_libs.push_back(
"Lua");
138 const char* mfem_version = mfem::GetVersionStr();
139 if (mfem_version ==
nullptr) {
140 SLIC_ERROR(
"Failed to retrieve MFEM version.");
142 const char* mfem_sha = mfem::GetGitStr();
143 if (mfem_sha ==
nullptr) {
144 SLIC_ERROR(
"Failed to retrieve MFEM Git SHA.");
146 std::string mfem_full_version = std::string(mfem_version);
147 if (axom::utilities::string::startsWith(mfem_full_version,
"MFEM ")) {
148 mfem_full_version.erase(0, 5);
150 if (mfem_sha[0] !=
'\0') {
151 mfem_full_version += std::format(
" (Git SHA: {0})", mfem_sha);
153 about += std::format(
"MFEM Version: {0}\n", mfem_full_version);
156 #ifdef SMITH_USE_RAJA
158 std::format(
"RAJA Version: {0}.{1}.{2}\n", RAJA_VERSION_MAJOR, RAJA_VERSION_MINOR, RAJA_VERSION_PATCHLEVEL);
160 disabled_libs.push_back(
"RAJA");
164 #ifdef SMITH_USE_TRIBOL
165 about += std::format(
"Tribol Version: {0}\n", TRIBOL_VERSION_FULL);
167 disabled_libs.push_back(
"Tribol");
171 #ifdef SMITH_USE_UMPIRE
172 about += std::format(
"Umpire Version: {0}.{1}.{2}\n", umpire::get_major_version(), umpire::get_minor_version(),
173 umpire::get_patch_version());
175 disabled_libs.push_back(
"Umpire");
180 about +=
"Disabled Libraries:\n";
181 if (disabled_libs.size() == 0) {
184 for (
auto& lib : disabled_libs) {
192 std::string
gitSHA() {
return SMITH_GIT_SHA; }
197 std::string infoMsg = std::format(
"{:*^80}\n",
"*");
199 infoMsg += std::format(
"{0}: {1}\n",
"Smith Version",
version());
200 infoMsg += std::format(
"{0}: {1}\n",
"Build Type",
buildType());
201 infoMsg += std::format(
"{0}: {1}\n",
"User Name", axom::utilities::getUserName());
202 infoMsg += std::format(
"{0}: {1}\n",
"Host Name", axom::utilities::getHostName());
205 infoMsg += std::format(
"{0}: {1}\n",
"MPI Rank Count", count);
208 infoMsg += std::format(
"{:*^80}\n",
"*");
210 SLIC_INFO_ROOT(infoMsg);
211 smith::logger::flush();
216 std::string
version = std::format(
"v{0}.{1}.{2}", SMITH_VERSION_MAJOR, SMITH_VERSION_MINOR, SMITH_VERSION_PATCH);
218 std::string sha =
gitSHA();
219 if (add_SHA && !sha.empty()) {
226 std::string
compiler() {
return std::format(
"{0} version {1}", SMITH_COMPILER_NAME, SMITH_COMPILER_VERSION); }
241 if (MPI_Comm_size(comm, &num_procs) != MPI_SUCCESS) {
242 SLIC_ERROR(
"Failed to determine number of MPI processes");
245 if (MPI_Comm_rank(comm, &rank) != MPI_SUCCESS) {
246 SLIC_ERROR(
"Failed to determine MPI rank");
248 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 Smith.
std::string buildType()
Returns a string for the current CMake build type (e.g. Debug, Release)
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 Smith.
std::string gitSHA()
Returns a string for the Git SHA when the driver was built.
void printRunInfo()
Outputs basic run information to the screen.