#include "nix/util/types.hh" #include "util-config-private.hh" #if HAVE_LIBCPUID # include # include #endif namespace nix { #if HAVE_LIBCPUID StringSet computeLevels() { StringSet levels; struct cpu_id_t data; const std::map 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 }