Skip to content

Commit

Permalink
libstore: Add apple-virt to system features when available
Browse files Browse the repository at this point in the history
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 9277eb2)
  • Loading branch information
roberth committed Nov 16, 2023
1 parent 184a20e commit af21431
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
31 changes: 31 additions & 0 deletions src/libstore/globals.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@

#include "config-impl.hh"

#ifdef __APPLE__
#include <sys/sysctl.h>
#endif

namespace nix {

Expand Down Expand Up @@ -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
Expand All @@ -170,6 +196,11 @@ StringSet Settings::getDefaultSystemFeatures()
features.insert("kvm");
#endif

#if __APPLE__
if (hasVirt())
features.insert("apple-virt");
#endif

return features;
}

Expand Down
1 change: 1 addition & 0 deletions src/libstore/globals.hh
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,7 @@ public:
`kvm` feature.
This setting by default includes `kvm` if `/dev/kvm` is accessible,
`apple-virt` if hardware virtualization is available on macOS,
and the pseudo-features `nixos-test`, `benchmark` and `big-parallel`
that are used in Nixpkgs to route builds to specific machines.
)", {}, false};
Expand Down

0 comments on commit af21431

Please sign in to comment.