47b56e7c19
This appears to avoid requiring KVM when it’s not available. This is what I originally though -cpu host did. Unfortunately not much documentation available from the QEMU side on this, but this appears to square with help: $ qemu-system-x86 -cpu help ... x86 host KVM processor with all supported host features x86 max Enables all features supported by the accelerator in the current host ... Whether we actually want to support this not clear, since this only happens when your CPU doesn’t have full KVM support. Some Nix builders are lying about kvm support though. Things aren’t too slow without it though. Fixes https://github.com/NixOS/nixpkgs/issues/85394 Alternative to https://github.com/NixOS/nixpkgs/pull/83920
30 lines
1.2 KiB
Nix
30 lines
1.2 KiB
Nix
# QEMU flags shared between various Nix expressions.
|
|
{ pkgs }:
|
|
|
|
let
|
|
zeroPad = n:
|
|
pkgs.lib.optionalString (n < 16) "0" +
|
|
(if n > 255
|
|
then throw "Can't have more than 255 nets or nodes!"
|
|
else pkgs.lib.toHexString n);
|
|
in
|
|
|
|
rec {
|
|
qemuNicMac = net: machine: "52:54:00:12:${zeroPad net}:${zeroPad machine}";
|
|
|
|
qemuNICFlags = nic: net: machine:
|
|
[ "-device virtio-net-pci,netdev=vlan${toString nic},mac=${qemuNicMac net machine}"
|
|
"-netdev vde,id=vlan${toString nic},sock=$QEMU_VDE_SOCKET_${toString net}"
|
|
];
|
|
|
|
qemuSerialDevice = if pkgs.stdenv.isi686 || pkgs.stdenv.isx86_64 then "ttyS0"
|
|
else if pkgs.stdenv.isAarch32 || pkgs.stdenv.isAarch64 then "ttyAMA0"
|
|
else throw "Unknown QEMU serial device for system '${pkgs.stdenv.hostPlatform.system}'";
|
|
|
|
qemuBinary = qemuPkg: {
|
|
x86_64-linux = "${qemuPkg}/bin/qemu-kvm -cpu max";
|
|
armv7l-linux = "${qemuPkg}/bin/qemu-system-arm -enable-kvm -machine virt -cpu host";
|
|
aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -enable-kvm -machine virt,gic-version=host -cpu host";
|
|
x86_64-darwin = "${qemuPkg}/bin/qemu-kvm -cpu max";
|
|
}.${pkgs.stdenv.hostPlatform.system} or "${qemuPkg}/bin/qemu-kvm";
|
|
}
|