mirror of
https://github.com/NixOS/nix.git
synced 2025-11-16 15:32:43 +01:00
* It is tough to contribute to a project that doesn't use a formatter, * It is extra hard to contribute to a project which has configured the formatter, but ignores it for some files * Code formatting makes it harder to hide obscure / weird bugs by accident or on purpose, Let's rip the bandaid off? Note that PRs currently in flight should be able to be merged relatively easily by applying `clang-format` to their tip prior to merge.
45 lines
856 B
C++
45 lines
856 B
C++
#include "nix/util/types.hh"
|
|
|
|
#include "util-config-private.hh"
|
|
|
|
#if HAVE_LIBCPUID
|
|
# include <libcpuid/libcpuid.h>
|
|
# include <map>
|
|
#endif
|
|
|
|
namespace nix {
|
|
|
|
#if HAVE_LIBCPUID
|
|
|
|
StringSet computeLevels()
|
|
{
|
|
StringSet levels;
|
|
struct cpu_id_t data;
|
|
|
|
const std::map<cpu_feature_level_t, std::string> feature_strings = {
|
|
{FEATURE_LEVEL_X86_64_V1, "x86_64-v1"},
|
|
{FEATURE_LEVEL_X86_64_V2, "x86_64-v2"},
|
|
{FEATURE_LEVEL_X86_64_V3, "x86_64-v3"},
|
|
{FEATURE_LEVEL_X86_64_V4, "x86_64-v4"},
|
|
};
|
|
|
|
if (cpu_identify(NULL, &data) < 0)
|
|
return levels;
|
|
|
|
for (auto & [level, levelString] : feature_strings)
|
|
if (data.feature_level >= level)
|
|
levels.insert(levelString);
|
|
|
|
return levels;
|
|
}
|
|
|
|
#else
|
|
|
|
StringSet computeLevels()
|
|
{
|
|
return StringSet{};
|
|
}
|
|
|
|
#endif // HAVE_LIBCPUID
|
|
|
|
} // namespace nix
|