diff --git a/pkgs/tools/system/nvtop/build-nvtop.nix b/pkgs/tools/system/nvtop/build-nvtop.nix index f1f855b25383..953565150765 100644 --- a/pkgs/tools/system/nvtop/build-nvtop.nix +++ b/pkgs/tools/system/nvtop/build-nvtop.nix @@ -1,29 +1,37 @@ -{ lib -, stdenv -, fetchFromGitHub -, cmake -, gtest -, cudatoolkit -, libdrm -, ncurses -, testers -, udev -, addDriverRunpath -, amd ? false -, intel ? false -, msm ? false -, nvidia ? false -, apple ? false -, panfrost ? false -, panthor ? false -, ascend ? false +{ + lib, + stdenv, + fetchFromGitHub, + cmake, + gtest, + cudatoolkit, + libdrm, + ncurses, + testers, + udev, + apple-sdk_12, + addDriverRunpath, + amd ? false, + intel ? false, + msm ? false, + nvidia ? false, + apple ? false, + panfrost ? false, + panthor ? false, + ascend ? false, }: let drm-postFixup = '' patchelf \ --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - --set-rpath "${lib.makeLibraryPath [ libdrm ncurses udev ]}" \ + --set-rpath "${ + lib.makeLibraryPath [ + libdrm + ncurses + udev + ] + }" \ $out/bin/nvtop ''; needDrm = (amd || msm || panfrost || panthor); @@ -51,18 +59,25 @@ stdenv.mkDerivation (finalAttrs: { (cmakeBool "PANTHOR_SUPPORT" panthor) (cmakeBool "ASCEND_SUPPORT" ascend) ]; - nativeBuildInputs = [ cmake gtest ] ++ lib.optional nvidia addDriverRunpath; + nativeBuildInputs = [ + cmake + gtest + ] ++ lib.optional nvidia addDriverRunpath; - buildInputs = [ ncurses udev ] + buildInputs = + [ ncurses ] + ++ lib.optional stdenv.isLinux udev + ++ lib.optional stdenv.isDarwin apple-sdk_12 ++ lib.optional nvidia cudatoolkit - ++ lib.optional needDrm libdrm - ; + ++ lib.optional needDrm libdrm; # this helps cmake to find env.NIX_CFLAGS_COMPILE = lib.optionalString needDrm "-isystem ${lib.getDev libdrm}/include/libdrm"; # ordering of fixups is important - postFixup = (lib.optionalString needDrm drm-postFixup) + (lib.optionalString nvidia "addDriverRunpath $out/bin/nvtop"); + postFixup = + (lib.optionalString needDrm drm-postFixup) + + (lib.optionalString nvidia "addDriverRunpath $out/bin/nvtop"); doCheck = true; @@ -83,8 +98,13 @@ stdenv.mkDerivation (finalAttrs: { homepage = "https://github.com/Syllo/nvtop"; changelog = "https://github.com/Syllo/nvtop/releases/tag/${finalAttrs.version}"; license = licenses.gpl3Only; - platforms = platforms.linux; - maintainers = with maintainers; [ willibutz gbtb anthonyroussel ]; + platforms = lib.optional (!apple) platforms.linux ++ lib.optional apple platforms.darwin; + maintainers = with maintainers; [ + willibutz + gbtb + anthonyroussel + moni + ]; mainProgram = "nvtop"; }; }) diff --git a/pkgs/tools/system/nvtop/default.nix b/pkgs/tools/system/nvtop/default.nix index f6e679b6ffef..7e9653102bef 100644 --- a/pkgs/tools/system/nvtop/default.nix +++ b/pkgs/tools/system/nvtop/default.nix @@ -1,18 +1,36 @@ -{ callPackage }: +{ callPackage, stdenv }: let # this GPU families are supported "by-default" upstream (see https://github.com/Syllo/nvtop/blob/3a69c2d060298cd6f92cb09db944eded98be1c23/CMakeLists.txt#L81) # coincidentally, these families are also easy to build in nixpkgs at the moment - defaultGPUFamilies = [ "amd" "intel" "msm" "nvidia" "panfrost" "panthor" ]; + defaultGPUFamilies = [ + "amd" + "apple" + "intel" + "msm" + "nvidia" + "panfrost" + "panthor" + ]; # these GPU families are partially supported upstream, they are also tricky to build in nixpkgs # volunteers with specific hardware needed to build and test these package variants - additionalGPUFamilies = [ "apple" "ascend" ]; - defaultSupport = builtins.listToAttrs (builtins.map (gpu: { name = gpu; value = true; }) defaultGPUFamilies); + additionalGPUFamilies = [ "ascend" ]; + defaultSupport = builtins.listToAttrs ( + # apple can only build on darwin, and it can't build everything else, and vice versa + builtins.map (gpu: { + name = gpu; + value = + (gpu == "apple" && stdenv.buildPlatform.isDarwin && stdenv.hostPlatform == stdenv.buildPlatform) + || (gpu != "apple" && stdenv.buildPlatform.isLinux); + }) defaultGPUFamilies + ); in { - full = callPackage ./build-nvtop.nix defaultSupport; #this package supports all default GPU families + full = callPackage ./build-nvtop.nix defaultSupport; # this package supports all default GPU families } # additional packages with only one specific GPU family support -// builtins.listToAttrs (builtins.map (gpu: { name = gpu; value = (callPackage ./build-nvtop.nix { "${gpu}" = true; }); }) defaultGPUFamilies) - - - +// builtins.listToAttrs ( + builtins.map (gpu: { + name = gpu; + value = (callPackage ./build-nvtop.nix { "${gpu}" = true; }); + }) defaultGPUFamilies +) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ea4d3d6fd9b1..4f21ca2c8c21 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -10524,7 +10524,7 @@ with pkgs; nvidia-system-monitor-qt = libsForQt5.callPackage ../tools/system/nvidia-system-monitor-qt { }; - nvtopPackages = recurseIntoAttrs (import ../tools/system/nvtop { inherit callPackage; }); + nvtopPackages = recurseIntoAttrs (import ../tools/system/nvtop { inherit callPackage stdenv; }); inherit (callPackages ../development/libraries/ogre { }) ogre_13 ogre_14;