diff options
Diffstat (limited to 'pkgs/applications/virtualization/qemu/default.nix')
-rw-r--r-- | pkgs/applications/virtualization/qemu/default.nix | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix index a8a18692b9e..5c22b164923 100644 --- a/pkgs/applications/virtualization/qemu/default.nix +++ b/pkgs/applications/virtualization/qemu/default.nix @@ -1,7 +1,7 @@ { lib, stdenv, fetchurl, fetchpatch, python, zlib, pkg-config, glib , perl, pixman, vde2, alsa-lib, texinfo, flex , bison, lzo, snappy, libaio, libtasn1, gnutls, nettle, curl, ninja, meson, sigtool -, makeWrapper, autoPatchelfHook +, makeWrapper, autoPatchelfHook, runtimeShell , attr, libcap, libcap_ng , CoreServices, Cocoa, Hypervisor, rez, setfile , numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl @@ -64,6 +64,7 @@ stdenv.mkDerivation rec { ++ lib.optionals stdenv.isDarwin [ CoreServices Cocoa Hypervisor rez setfile ] ++ lib.optionals seccompSupport [ libseccomp ] ++ lib.optionals numaSupport [ numactl ] + ++ lib.optionals alsaSupport [ alsa-lib ] ++ lib.optionals pulseSupport [ libpulseaudio ] ++ lib.optionals sdlSupport [ SDL2 SDL2_image ] ++ lib.optionals gtkSupport [ gtk3 gettext vte ] @@ -71,7 +72,7 @@ stdenv.mkDerivation rec { ++ lib.optionals smartcardSupport [ libcacard ] ++ lib.optionals spiceSupport [ spice-protocol spice ] ++ lib.optionals usbredirSupport [ usbredir ] - ++ lib.optionals stdenv.isLinux [ alsa-lib libaio libcap_ng libcap attr ] + ++ lib.optionals stdenv.isLinux [ libaio libcap_ng libcap attr ] ++ lib.optionals xenSupport [ xen ] ++ lib.optionals cephSupport [ ceph ] ++ lib.optionals glusterfsSupport [ glusterfs libuuid ] @@ -178,6 +179,9 @@ stdenv.mkDerivation rec { "--enable-guest-agent" "--localstatedir=/var" "--sysconfdir=/etc" + # Always use our Meson, not the bundled version, which doesn't + # have our patches and will be subtly broken because of that. + "--meson=meson" ] ++ lib.optional numaSupport "--enable-numa" ++ lib.optional seccompSupport "--enable-seccomp" ++ lib.optional smartcardSupport "--enable-smartcard" @@ -224,10 +228,12 @@ stdenv.mkDerivation rec { # Add a ‘qemu-kvm’ wrapper for compatibility/convenience. postInstall = '' + install -m755 -D $emitKvmWarningsPath $out/libexec/emit-kvm-warnings if [ -x $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} ]; then makeWrapper $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} \ $out/bin/qemu-kvm \ - --add-flags "\$([ -e /dev/kvm ] && echo -enable-kvm)" + --run $out/libexec/emit-kvm-warnings \ + --add-flags "\$([ -r /dev/kvm -a -w /dev/kvm ] && echo -enable-kvm)" fi ''; @@ -238,6 +244,26 @@ stdenv.mkDerivation rec { # Builds in ~3h with 2 cores, and ~20m with a big-parallel builder. requiredSystemFeatures = [ "big-parallel" ]; + emitKvmWarnings = '' + #!${runtimeShell} + WARNCOL='\033[1;35m' + NEUTRALCOL='\033[0m' + WARNING="''${WARNCOL}warning:''${NEUTRALCOL}" + if [ ! -e /dev/kvm ]; then + echo -e "''${WARNING} KVM is not available - execution will be slow" >&2 + echo "Consider installing KVM for hardware-accelerated execution." >&2 + echo "If KVM is already installed make sure the kernel module is loaded." >&2 + elif [ ! -r /dev/kvm -o ! -w /dev/kvm ]; then + echo -e "''${WARNING} /dev/kvm is not read-/writable - execution will be slow" >&2 + echo "/dev/kvm needs to be read-/writable by the user executing QEMU." >&2 + echo "" >&2 + echo "For hardware-acceleration inside the nix build sandbox /dev/kvm" >&2 + echo "must be world-read-/writable (rw-rw-rw-)." >&2 + fi + ''; + + passAsFile = [ "emitKvmWarnings" ]; + meta = with lib; { homepage = "http://www.qemu.org/"; description = "A generic and open source machine emulator and virtualizer"; |