nvidia_x11.mkDriver: use finalAttrs
This allows correct usage of overrideAttrs and also ensures overrides are properly propagated to the packages in passthru. Signed-off-by: Paul Meyer <katexochen0@gmail.com>
This commit is contained in:
parent
8d6ded0aab
commit
2e36163f1c
@ -6,9 +6,9 @@
|
|||||||
sha256_aarch64 ? null,
|
sha256_aarch64 ? null,
|
||||||
openSha256 ? null,
|
openSha256 ? null,
|
||||||
settingsSha256 ? null,
|
settingsSha256 ? null,
|
||||||
settingsVersion ? version,
|
settingsVersion ? null,
|
||||||
persistencedSha256 ? null,
|
persistencedSha256 ? null,
|
||||||
persistencedVersion ? version,
|
persistencedVersion ? null,
|
||||||
fabricmanagerSha256 ? null,
|
fabricmanagerSha256 ? null,
|
||||||
fabricmanagerVersion ? version,
|
fabricmanagerVersion ? version,
|
||||||
useGLVND ? true,
|
useGLVND ? true,
|
||||||
@ -140,199 +140,201 @@ let
|
|||||||
|
|
||||||
[1]: https://www.nvidia.com/content/DriverDownloads/licence.php?lang=us
|
[1]: https://www.nvidia.com/content/DriverDownloads/licence.php?lang=us
|
||||||
'';
|
'';
|
||||||
|
|
||||||
self = stdenv.mkDerivation {
|
|
||||||
name = "nvidia-${if useFabricmanager then "dc" else "x11"}-${version}${nameSuffix}";
|
|
||||||
|
|
||||||
builder = ./builder.sh;
|
|
||||||
|
|
||||||
src =
|
|
||||||
if !acceptLicense && (openSha256 == null) then
|
|
||||||
throwLicense
|
|
||||||
else if stdenv.hostPlatform.system == "x86_64-linux" then
|
|
||||||
fetchurl {
|
|
||||||
urls =
|
|
||||||
if args ? url then
|
|
||||||
[ args.url ]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
"https://us.download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}${pkgSuffix}.run"
|
|
||||||
"https://download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}${pkgSuffix}.run"
|
|
||||||
];
|
|
||||||
sha256 = sha256_64bit;
|
|
||||||
}
|
|
||||||
else if stdenv.hostPlatform.system == "i686-linux" then
|
|
||||||
fetchurl {
|
|
||||||
urls =
|
|
||||||
if args ? url then
|
|
||||||
[ args.url ]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
"https://us.download.nvidia.com/XFree86/Linux-x86/${version}/NVIDIA-Linux-x86-${version}${pkgSuffix}.run"
|
|
||||||
"https://download.nvidia.com/XFree86/Linux-x86/${version}/NVIDIA-Linux-x86-${version}${pkgSuffix}.run"
|
|
||||||
];
|
|
||||||
sha256 = sha256_32bit;
|
|
||||||
}
|
|
||||||
else if stdenv.hostPlatform.system == "aarch64-linux" && sha256_aarch64 != null then
|
|
||||||
fetchurl {
|
|
||||||
urls =
|
|
||||||
if args ? url then
|
|
||||||
[ args.url ]
|
|
||||||
else
|
|
||||||
[
|
|
||||||
"https://us.download.nvidia.com/XFree86/aarch64/${version}/NVIDIA-Linux-aarch64-${version}${pkgSuffix}.run"
|
|
||||||
"https://download.nvidia.com/XFree86/Linux-aarch64/${version}/NVIDIA-Linux-aarch64-${version}${pkgSuffix}.run"
|
|
||||||
];
|
|
||||||
sha256 = sha256_aarch64;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw "nvidia-x11 does not support platform ${stdenv.hostPlatform.system}";
|
|
||||||
|
|
||||||
patches = if libsOnly then null else patches;
|
|
||||||
inherit prePatch postPatch patchFlags;
|
|
||||||
inherit preInstall postInstall;
|
|
||||||
inherit version useGLVND useProfiles;
|
|
||||||
inherit (stdenv.hostPlatform) system;
|
|
||||||
inherit i686bundled;
|
|
||||||
|
|
||||||
outputs =
|
|
||||||
[ "out" ]
|
|
||||||
++ lib.optional i686bundled "lib32"
|
|
||||||
++ lib.optional (!libsOnly) "bin"
|
|
||||||
++ lib.optional (!libsOnly && firmware) "firmware";
|
|
||||||
outputDev = if libsOnly then null else "bin";
|
|
||||||
|
|
||||||
kernel = if libsOnly then null else kernel.dev;
|
|
||||||
kernelVersion = if libsOnly then null else kernel.modDirVersion;
|
|
||||||
|
|
||||||
makeFlags = lib.optionals (!libsOnly) (
|
|
||||||
kernelModuleMakeFlags
|
|
||||||
++ [
|
|
||||||
"IGNORE_PREEMPT_RT_PRESENCE=1"
|
|
||||||
"NV_BUILD_SUPPORTS_HMM=1"
|
|
||||||
"SYSSRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source"
|
|
||||||
"SYSOUT=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
hardeningDisable = [
|
|
||||||
"pic"
|
|
||||||
"format"
|
|
||||||
];
|
|
||||||
|
|
||||||
dontStrip = true;
|
|
||||||
dontPatchELF = true;
|
|
||||||
|
|
||||||
libPath = libPathFor pkgs;
|
|
||||||
libPath32 = lib.optionalString i686bundled (libPathFor pkgsi686Linux);
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
perl
|
|
||||||
nukeReferences
|
|
||||||
which
|
|
||||||
libarchive
|
|
||||||
jq
|
|
||||||
] ++ lib.optionals (!libsOnly) kernel.moduleBuildDependencies;
|
|
||||||
|
|
||||||
disallowedReferences = lib.optionals (!libsOnly) [ kernel.dev ];
|
|
||||||
|
|
||||||
passthru =
|
|
||||||
let
|
|
||||||
fetchFromGithubOrNvidia =
|
|
||||||
{
|
|
||||||
owner,
|
|
||||||
repo,
|
|
||||||
rev,
|
|
||||||
...
|
|
||||||
}@args:
|
|
||||||
let
|
|
||||||
args' = builtins.removeAttrs args [
|
|
||||||
"owner"
|
|
||||||
"repo"
|
|
||||||
"rev"
|
|
||||||
];
|
|
||||||
baseUrl = "https://github.com/${owner}/${repo}";
|
|
||||||
in
|
|
||||||
fetchzip (
|
|
||||||
args'
|
|
||||||
// {
|
|
||||||
urls = [
|
|
||||||
"${baseUrl}/archive/${rev}.tar.gz"
|
|
||||||
"https://download.nvidia.com/XFree86/${repo}/${repo}-${rev}.tar.bz2"
|
|
||||||
];
|
|
||||||
# github and nvidia use different compression algorithms,
|
|
||||||
# use an invalid file extension to force detection.
|
|
||||||
extension = "tar.??";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
in
|
|
||||||
{
|
|
||||||
open = lib.mapNullable (
|
|
||||||
hash:
|
|
||||||
callPackage ./open.nix {
|
|
||||||
inherit hash;
|
|
||||||
nvidia_x11 = self;
|
|
||||||
patches =
|
|
||||||
(builtins.map (rewritePatch {
|
|
||||||
from = "kernel";
|
|
||||||
to = "kernel-open";
|
|
||||||
}) patches)
|
|
||||||
++ patchesOpen;
|
|
||||||
broken = brokenOpen;
|
|
||||||
}
|
|
||||||
) openSha256;
|
|
||||||
settings =
|
|
||||||
if useSettings then
|
|
||||||
(if settings32Bit then pkgsi686Linux.callPackage else callPackage)
|
|
||||||
(import ./settings.nix self settingsSha256)
|
|
||||||
{
|
|
||||||
withGtk2 = preferGtk2;
|
|
||||||
withGtk3 = !preferGtk2;
|
|
||||||
fetchFromGitHub = fetchFromGithubOrNvidia;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ };
|
|
||||||
persistenced =
|
|
||||||
if usePersistenced then
|
|
||||||
lib.mapNullable (
|
|
||||||
hash:
|
|
||||||
callPackage (import ./persistenced.nix self hash) {
|
|
||||||
fetchFromGitHub = fetchFromGithubOrNvidia;
|
|
||||||
}
|
|
||||||
) persistencedSha256
|
|
||||||
else
|
|
||||||
{ };
|
|
||||||
fabricmanager =
|
|
||||||
if useFabricmanager then
|
|
||||||
lib.mapNullable (hash: callPackage (import ./fabricmanager.nix self hash) { }) fabricmanagerSha256
|
|
||||||
else
|
|
||||||
{ };
|
|
||||||
inherit persistencedVersion settingsVersion;
|
|
||||||
compressFirmware = false;
|
|
||||||
ibtSupport = ibtSupport || (lib.versionAtLeast version "530");
|
|
||||||
}
|
|
||||||
// lib.optionalAttrs (!i686bundled) {
|
|
||||||
inherit lib32;
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
homepage = "https://www.nvidia.com/object/unix.html";
|
|
||||||
description = "${
|
|
||||||
if useFabricmanager then "Data Center" else "X.org"
|
|
||||||
} driver and kernel module for NVIDIA cards";
|
|
||||||
license = licenses.unfreeRedistributable;
|
|
||||||
platforms =
|
|
||||||
[ "x86_64-linux" ]
|
|
||||||
++ lib.optionals (sha256_32bit != null) [ "i686-linux" ]
|
|
||||||
++ lib.optionals (sha256_aarch64 != null) [ "aarch64-linux" ];
|
|
||||||
maintainers = with maintainers; [
|
|
||||||
kiskae
|
|
||||||
edwtjo
|
|
||||||
];
|
|
||||||
priority = 4; # resolves collision with xorg-server's "lib/xorg/modules/extensions/libglx.so"
|
|
||||||
inherit broken;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
in
|
in
|
||||||
self
|
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
name = "nvidia-${if useFabricmanager then "dc" else "x11"}-${version}${nameSuffix}";
|
||||||
|
|
||||||
|
builder = ./builder.sh;
|
||||||
|
|
||||||
|
src =
|
||||||
|
if !acceptLicense && (openSha256 == null) then
|
||||||
|
throwLicense
|
||||||
|
else if stdenv.hostPlatform.system == "x86_64-linux" then
|
||||||
|
fetchurl {
|
||||||
|
urls =
|
||||||
|
if args ? url then
|
||||||
|
[ args.url ]
|
||||||
|
else
|
||||||
|
[
|
||||||
|
"https://us.download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}${pkgSuffix}.run"
|
||||||
|
"https://download.nvidia.com/XFree86/Linux-x86_64/${version}/NVIDIA-Linux-x86_64-${version}${pkgSuffix}.run"
|
||||||
|
];
|
||||||
|
sha256 = sha256_64bit;
|
||||||
|
}
|
||||||
|
else if stdenv.hostPlatform.system == "i686-linux" then
|
||||||
|
fetchurl {
|
||||||
|
urls =
|
||||||
|
if args ? url then
|
||||||
|
[ args.url ]
|
||||||
|
else
|
||||||
|
[
|
||||||
|
"https://us.download.nvidia.com/XFree86/Linux-x86/${version}/NVIDIA-Linux-x86-${version}${pkgSuffix}.run"
|
||||||
|
"https://download.nvidia.com/XFree86/Linux-x86/${version}/NVIDIA-Linux-x86-${version}${pkgSuffix}.run"
|
||||||
|
];
|
||||||
|
sha256 = sha256_32bit;
|
||||||
|
}
|
||||||
|
else if stdenv.hostPlatform.system == "aarch64-linux" && sha256_aarch64 != null then
|
||||||
|
fetchurl {
|
||||||
|
urls =
|
||||||
|
if args ? url then
|
||||||
|
[ args.url ]
|
||||||
|
else
|
||||||
|
[
|
||||||
|
"https://us.download.nvidia.com/XFree86/aarch64/${version}/NVIDIA-Linux-aarch64-${version}${pkgSuffix}.run"
|
||||||
|
"https://download.nvidia.com/XFree86/Linux-aarch64/${version}/NVIDIA-Linux-aarch64-${version}${pkgSuffix}.run"
|
||||||
|
];
|
||||||
|
sha256 = sha256_aarch64;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw "nvidia-x11 does not support platform ${stdenv.hostPlatform.system}";
|
||||||
|
|
||||||
|
patches = if libsOnly then null else patches;
|
||||||
|
inherit prePatch postPatch patchFlags;
|
||||||
|
inherit preInstall postInstall;
|
||||||
|
inherit version useGLVND useProfiles;
|
||||||
|
inherit (stdenv.hostPlatform) system;
|
||||||
|
inherit i686bundled;
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
[ "out" ]
|
||||||
|
++ lib.optional i686bundled "lib32"
|
||||||
|
++ lib.optional (!libsOnly) "bin"
|
||||||
|
++ lib.optional (!libsOnly && firmware) "firmware";
|
||||||
|
outputDev = if libsOnly then null else "bin";
|
||||||
|
|
||||||
|
kernel = if libsOnly then null else kernel.dev;
|
||||||
|
kernelVersion = if libsOnly then null else kernel.modDirVersion;
|
||||||
|
|
||||||
|
makeFlags = lib.optionals (!libsOnly) (
|
||||||
|
kernelModuleMakeFlags
|
||||||
|
++ [
|
||||||
|
"IGNORE_PREEMPT_RT_PRESENCE=1"
|
||||||
|
"NV_BUILD_SUPPORTS_HMM=1"
|
||||||
|
"SYSSRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source"
|
||||||
|
"SYSOUT=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
hardeningDisable = [
|
||||||
|
"pic"
|
||||||
|
"format"
|
||||||
|
];
|
||||||
|
|
||||||
|
dontStrip = true;
|
||||||
|
dontPatchELF = true;
|
||||||
|
|
||||||
|
libPath = libPathFor pkgs;
|
||||||
|
libPath32 = lib.optionalString i686bundled (libPathFor pkgsi686Linux);
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
perl
|
||||||
|
nukeReferences
|
||||||
|
which
|
||||||
|
libarchive
|
||||||
|
jq
|
||||||
|
] ++ lib.optionals (!libsOnly) kernel.moduleBuildDependencies;
|
||||||
|
|
||||||
|
disallowedReferences = lib.optionals (!libsOnly) [ kernel.dev ];
|
||||||
|
|
||||||
|
passthru =
|
||||||
|
let
|
||||||
|
fetchFromGithubOrNvidia =
|
||||||
|
{
|
||||||
|
owner,
|
||||||
|
repo,
|
||||||
|
rev,
|
||||||
|
...
|
||||||
|
}@args:
|
||||||
|
let
|
||||||
|
args' = builtins.removeAttrs args [
|
||||||
|
"owner"
|
||||||
|
"repo"
|
||||||
|
"rev"
|
||||||
|
];
|
||||||
|
baseUrl = "https://github.com/${owner}/${repo}";
|
||||||
|
in
|
||||||
|
fetchzip (
|
||||||
|
args'
|
||||||
|
// {
|
||||||
|
urls = [
|
||||||
|
"${baseUrl}/archive/${rev}.tar.gz"
|
||||||
|
"https://download.nvidia.com/XFree86/${repo}/${repo}-${rev}.tar.bz2"
|
||||||
|
];
|
||||||
|
# github and nvidia use different compression algorithms,
|
||||||
|
# use an invalid file extension to force detection.
|
||||||
|
extension = "tar.??";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
open = lib.mapNullable (
|
||||||
|
hash:
|
||||||
|
callPackage ./open.nix {
|
||||||
|
inherit hash;
|
||||||
|
nvidia_x11 = finalAttrs.finalPackage;
|
||||||
|
patches =
|
||||||
|
(builtins.map (rewritePatch {
|
||||||
|
from = "kernel";
|
||||||
|
to = "kernel-open";
|
||||||
|
}) patches)
|
||||||
|
++ patchesOpen;
|
||||||
|
broken = brokenOpen;
|
||||||
|
}
|
||||||
|
) openSha256;
|
||||||
|
settings =
|
||||||
|
if useSettings then
|
||||||
|
(if settings32Bit then pkgsi686Linux.callPackage else callPackage)
|
||||||
|
(import ./settings.nix finalAttrs.finalPackage settingsSha256)
|
||||||
|
{
|
||||||
|
withGtk2 = preferGtk2;
|
||||||
|
withGtk3 = !preferGtk2;
|
||||||
|
fetchFromGitHub = fetchFromGithubOrNvidia;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ };
|
||||||
|
persistenced =
|
||||||
|
if usePersistenced then
|
||||||
|
lib.mapNullable (
|
||||||
|
hash:
|
||||||
|
callPackage (import ./persistenced.nix finalAttrs.finalPackage hash) {
|
||||||
|
fetchFromGitHub = fetchFromGithubOrNvidia;
|
||||||
|
}
|
||||||
|
) persistencedSha256
|
||||||
|
else
|
||||||
|
{ };
|
||||||
|
fabricmanager =
|
||||||
|
if useFabricmanager then
|
||||||
|
lib.mapNullable (
|
||||||
|
hash: callPackage (import ./fabricmanager.nix finalAttrs.finalPackage hash) { }
|
||||||
|
) fabricmanagerSha256
|
||||||
|
else
|
||||||
|
{ };
|
||||||
|
settingsVersion = if settingsVersion != null then settingsVersion else finalAttrs.version;
|
||||||
|
persistencedVersion =
|
||||||
|
if persistencedVersion != null then persistencedVersion else finalAttrs.version;
|
||||||
|
compressFirmware = false;
|
||||||
|
ibtSupport = ibtSupport || (lib.versionAtLeast version "530");
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (!i686bundled) {
|
||||||
|
inherit lib32;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://www.nvidia.com/object/unix.html";
|
||||||
|
description = "${
|
||||||
|
if useFabricmanager then "Data Center" else "X.org"
|
||||||
|
} driver and kernel module for NVIDIA cards";
|
||||||
|
license = licenses.unfreeRedistributable;
|
||||||
|
platforms =
|
||||||
|
[ "x86_64-linux" ]
|
||||||
|
++ lib.optionals (sha256_32bit != null) [ "i686-linux" ]
|
||||||
|
++ lib.optionals (sha256_aarch64 != null) [ "aarch64-linux" ];
|
||||||
|
maintainers = with maintainers; [
|
||||||
|
kiskae
|
||||||
|
edwtjo
|
||||||
|
];
|
||||||
|
priority = 4; # resolves collision with xorg-server's "lib/xorg/modules/extensions/libglx.so"
|
||||||
|
inherit broken;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user