aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/globals.cc
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2023-10-19 16:59:35 +0200
committerRobert Hensing <robert@roberthensing.nl>2023-11-16 18:59:06 +0100
commitaf21431140c30c15077e6d0f32601f0d15a18882 (patch)
tree0ab60486b427c4281e61d7a329dcf5cd28fc402a /src/libstore/globals.cc
parent184a20ec04eb79272999babe5a4105b6755b9b3d (diff)
libstore: Add apple-virt to system features when available
I'm sure that we'll adjust the implementation over time, but this at least discerns between an apple silicon bare metal machine and a tart VM. (cherry picked from commit 9277eb276bf0a942e88fcf499f6a6b9c262be853)
Diffstat (limited to 'src/libstore/globals.cc')
-rw-r--r--src/libstore/globals.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc
index 5a4cb1824..9c25d9868 100644
--- a/src/libstore/globals.cc
+++ b/src/libstore/globals.cc
@@ -24,6 +24,9 @@
#include "config-impl.hh"
+#ifdef __APPLE__
+#include <sys/sysctl.h>
+#endif
namespace nix {
@@ -154,6 +157,29 @@ unsigned int Settings::getDefaultCores()
return concurrency;
}
+#if __APPLE__
+static bool hasVirt() {
+
+ int hasVMM;
+ int hvSupport;
+ size_t size;
+
+ size = sizeof(hasVMM);
+ if (sysctlbyname("kern.hv_vmm_present", &hasVMM, &size, NULL, 0) == 0) {
+ if (hasVMM)
+ return false;
+ }
+
+ // whether the kernel and hardware supports virt
+ size = sizeof(hvSupport);
+ if (sysctlbyname("kern.hv_support", &hvSupport, &size, NULL, 0) == 0) {
+ return hvSupport == 1;
+ } else {
+ return false;
+ }
+}
+#endif
+
StringSet Settings::getDefaultSystemFeatures()
{
/* For backwards compatibility, accept some "features" that are
@@ -170,6 +196,11 @@ StringSet Settings::getDefaultSystemFeatures()
features.insert("kvm");
#endif
+ #if __APPLE__
+ if (hasVirt())
+ features.insert("apple-virt");
+ #endif
+
return features;
}