From 0dd2112aa6faad8c5fec6c6d7dce767d5aa7a4fe Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Sat, 21 Oct 2023 18:42:57 +0200 Subject: qemu-utils: Rework as an emulatorless qemu build Benefits - Reduce the derivation closure. - This reduces rebuilds and makes derivations that use qemu-utils less susceptible to build errors. - Includes extra qemu tools that weren't included before. - Removes fragile binary copying (old qemu-utils impl). - Can't forget to copy somethat that a binary needs. - Less custom packaging is better. Cost - Adds an 80 second build, but the time is offset by rebuilding its dependents less. - The output of qemu-utils goes from ~7 MB to ~40 MB, but it provides more functionality. --- pkgs/applications/virtualization/qemu/default.nix | 54 ++++++++++++++--------- pkgs/applications/virtualization/qemu/utils.nix | 24 ---------- pkgs/top-level/all-packages.nix | 4 +- 3 files changed, 35 insertions(+), 47 deletions(-) delete mode 100644 pkgs/applications/virtualization/qemu/utils.nix diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix index 58221279e33..3c6b9fdc7c8 100644 --- a/pkgs/applications/virtualization/qemu/default.nix +++ b/pkgs/applications/virtualization/qemu/default.nix @@ -4,38 +4,41 @@ , makeWrapper, removeReferencesTo , attr, libcap, libcap_ng, socat, libslirp , CoreServices, Cocoa, Hypervisor, rez, setfile, vmnet -, guestAgentSupport ? with stdenv.hostPlatform; isLinux || isNetBSD || isOpenBSD || isSunOS || isWindows -, numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl -, seccompSupport ? stdenv.isLinux, libseccomp -, alsaSupport ? lib.hasSuffix "linux" stdenv.hostPlatform.system && !nixosTestRunner -, pulseSupport ? !stdenv.isDarwin && !nixosTestRunner, libpulseaudio -, pipewireSupport ? !stdenv.isDarwin && !nixosTestRunner, pipewire -, sdlSupport ? !stdenv.isDarwin && !nixosTestRunner, SDL2, SDL2_image -, jackSupport ? !stdenv.isDarwin && !nixosTestRunner, libjack2 -, gtkSupport ? !stdenv.isDarwin && !xenSupport && !nixosTestRunner, gtk3, gettext, vte, wrapGAppsHook -, vncSupport ? !nixosTestRunner, libjpeg, libpng -, smartcardSupport ? !nixosTestRunner, libcacard -, spiceSupport ? true && !nixosTestRunner, spice, spice-protocol -, ncursesSupport ? !nixosTestRunner, ncurses +, guestAgentSupport ? (with stdenv.hostPlatform; isLinux || isNetBSD || isOpenBSD || isSunOS || isWindows) && !toolsOnly +, numaSupport ? stdenv.isLinux && !stdenv.isAarch32 && !toolsOnly, numactl +, seccompSupport ? stdenv.isLinux && !toolsOnly, libseccomp +, alsaSupport ? lib.hasSuffix "linux" stdenv.hostPlatform.system && !nixosTestRunner && !toolsOnly +, pulseSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, libpulseaudio +, pipewireSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, pipewire +, sdlSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, SDL2, SDL2_image +, jackSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, libjack2 +, gtkSupport ? !stdenv.isDarwin && !xenSupport && !nixosTestRunner && !toolsOnly, gtk3, gettext, vte, wrapGAppsHook +, vncSupport ? !nixosTestRunner && !toolsOnly, libjpeg, libpng +, smartcardSupport ? !nixosTestRunner && !toolsOnly, libcacard +, spiceSupport ? true && !nixosTestRunner && !toolsOnly, spice, spice-protocol +, ncursesSupport ? !nixosTestRunner && !toolsOnly, ncurses , usbredirSupport ? spiceSupport, usbredir , xenSupport ? false, xen , cephSupport ? false, ceph , glusterfsSupport ? false, glusterfs, libuuid , openGLSupport ? sdlSupport, mesa, libepoxy, libdrm , virglSupport ? openGLSupport, virglrenderer -, libiscsiSupport ? true, libiscsi +, libiscsiSupport ? !toolsOnly, libiscsi , smbdSupport ? false, samba -, tpmSupport ? true +, tpmSupport ? !toolsOnly , uringSupport ? stdenv.isLinux, liburing , canokeySupport ? false, canokey-qemu -, capstoneSupport ? true, capstone +, capstoneSupport ? !toolsOnly, capstone , enableDocs ? true , hostCpuOnly ? false -, hostCpuTargets ? (if hostCpuOnly +, hostCpuTargets ? (if toolsOnly + then [ ] + else if hostCpuOnly then (lib.optional stdenv.isx86_64 "i386-softmmu" ++ ["${stdenv.hostPlatform.qemuArch}-softmmu"]) else null) , nixosTestRunner ? false +, toolsOnly ? false , gitUpdater }: @@ -47,7 +50,8 @@ stdenv.mkDerivation (finalAttrs: { pname = "qemu" + lib.optionalString xenSupport "-xen" + lib.optionalString hostCpuOnly "-host-cpu-only" - + lib.optionalString nixosTestRunner "-for-vm-tests"; + + lib.optionalString nixosTestRunner "-for-vm-tests" + + lib.optionalString toolsOnly "-utils"; version = "8.1.2"; src = fetchurl { @@ -239,13 +243,13 @@ stdenv.mkDerivation (finalAttrs: { ''; # Add a ‘qemu-kvm’ wrapper for compatibility/convenience. - postInstall = '' + postInstall = lib.optionalString (!toolsOnly) '' ln -s $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} $out/bin/qemu-kvm ''; passthru = { qemu-system-i386 = "bin/qemu-system-i386"; - tests = { + tests = lib.optionalAttrs (!toolsOnly) { qemu-tests = finalAttrs.finalPackage.overrideAttrs (_: { doCheck = true; }); }; updateScript = gitUpdater { @@ -261,10 +265,16 @@ stdenv.mkDerivation (finalAttrs: { meta = with lib; { homepage = "http://www.qemu.org/"; - description = "A generic and open source machine emulator and virtualizer"; + description = + if toolsOnly + then "Support tools for qemu, a machine emulator and virtualizer" + else "A generic and open source machine emulator and virtualizer"; license = licenses.gpl2Plus; - mainProgram = "qemu-kvm"; maintainers = with maintainers; [ eelco qyliss ]; platforms = platforms.unix; + } + # toolsOnly: Does not have qemu-kvm and there's no main support tool + // lib.optionalAttrs (!toolsOnly) { + mainProgram = "qemu-kvm"; }; }) diff --git a/pkgs/applications/virtualization/qemu/utils.nix b/pkgs/applications/virtualization/qemu/utils.nix deleted file mode 100644 index c284934b3f1..00000000000 --- a/pkgs/applications/virtualization/qemu/utils.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ stdenv, installShellFiles, qemu_kvm, removeReferencesTo }: - -stdenv.mkDerivation rec { - pname = "qemu-utils"; - inherit (qemu_kvm) version; - - nativeBuildInputs = [ installShellFiles ]; - buildInputs = [ qemu_kvm ]; - disallowedRequisites = [ qemu_kvm ]; - unpackPhase = "true"; - - installPhase = '' - mkdir -p "$out/bin" - cp "${qemu_kvm}/bin/qemu-img" "$out/bin/qemu-img" - cp "${qemu_kvm}/bin/qemu-io" "$out/bin/qemu-io" - cp "${qemu_kvm}/bin/qemu-nbd" "$out/bin/qemu-nbd" - ${removeReferencesTo}/bin/remove-references-to -t ${qemu_kvm} $out/bin/* - - installManPage ${qemu_kvm}/share/man/man1/qemu-img.1.gz - installManPage ${qemu_kvm}/share/man/man8/qemu-nbd.8.gz - ''; - - inherit (qemu_kvm) meta; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 235d9fe41ed..b7dce584a3e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -34933,7 +34933,9 @@ with pkgs; inherit (darwin) sigtool; }; - qemu-utils = callPackage ../applications/virtualization/qemu/utils.nix { }; + qemu-utils = qemu.override { + toolsOnly = true; + }; canokey-qemu = callPackage ../applications/virtualization/qemu/canokey-qemu.nix { }; -- cgit 1.4.1