initial version

This commit is contained in:
Robin Appelman 2023-01-21 23:55:54 +01:00
commit 4cb018c16d
7 changed files with 184 additions and 0 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/result
/.direnv

23
extract-object-list.diff Normal file
View file

@ -0,0 +1,23 @@
diff --git a/patch-fbc.sh b/patch.sh
index 03bd467..2e78af9 100644
--- a/patch.sh
+++ b/patch.sh
@@ -406,12 +406,9 @@ list_supported_versions () {
get_supported_versions
}
-case "${opmode}" in
- patch) patch ;;
- patchrollback) rollback ;;
- patchhelp) print_usage ; exit 2 ;;
- patchcheckversion) query_version_support ;;
- patchlistversions) list_supported_versions ;;
- *) echo "Incorrect combination of flags. Use option -h to get help."
- exit 2 ;;
-esac
+for i in "${!object_list[@]}"
+do
+ echo "$i"
+ echo "${object_list[$i]}"
+done |
+jq -n -R 'reduce inputs as $i ({}; . + { ($i): (input|(tonumber? // .)) })'

23
extract-patch-list.diff Normal file
View file

@ -0,0 +1,23 @@
diff --git a/patch-fbc.sh b/patch.sh
index 03bd467..a7f52a1 100644
--- a/patch.sh
+++ b/patch.sh
@@ -406,12 +406,9 @@ list_supported_versions () {
get_supported_versions
}
-case "${opmode}" in
- patch) patch ;;
- patchrollback) rollback ;;
- patchhelp) print_usage ; exit 2 ;;
- patchcheckversion) query_version_support ;;
- patchlistversions) list_supported_versions ;;
- *) echo "Incorrect combination of flags. Use option -h to get help."
- exit 2 ;;
-esac
+for i in "${!patch_list[@]}"
+do
+ echo "$i"
+ echo "${patch_list[$i]}"
+done |
+jq -n -R 'reduce inputs as $i ({}; . + { ($i): (input|(tonumber? // .)) })'

47
extract.nix Normal file
View file

@ -0,0 +1,47 @@
{
stdenv,
lib,
jq,
fetchFromGitHub,
patch,
}:
rev: sha256: stdenv.mkDerivation rec {
pname = "nvidia-patch";
version = rev;
src = fetchFromGitHub {
inherit rev sha256;
owner = "keylase";
repo = pname;
};
nativeBuildInputs = [
jq
patch
];
dontConfigure = true;
buildPhase = ''
cp ${src}/patch.sh patch.sh
patch -p1 < ${./extract-patch-list.diff}
bash patch.sh > patch-list.json
cp ${src}/patch.sh patch.sh
patch -p1 < ${./extract-object-list.diff}
bash patch.sh > object-list.json
cp ${src}/patch-fbc.sh patch.sh
patch -p1 < ${./extract-patch-list.diff}
bash patch.sh > fbc-patch-list.json
cp ${src}/patch-fbc.sh patch.sh
patch -p1 < ${./extract-object-list.diff}
bash patch.sh > fbc-object-list.json
'';
installPhase = ''
mkdir -p $out
cp *.json $out
'';
}

42
flake.lock generated Normal file
View file

@ -0,0 +1,42 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1672580127,
"narHash": "sha256-3lW3xZslREhJogoOkjeZtlBtvFMyxHku7I/9IVehhT8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0874168639713f547c05947c76124f78441ea46c",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "release-22.05",
"type": "indirect"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"utils": "utils"
}
},
"utils": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

46
flake.nix Normal file
View file

@ -0,0 +1,46 @@
{
inputs = {
utils.url = "github:numtide/flake-utils";
nixpkgs.url = "nixpkgs/release-22.05";
};
outputs = {
self,
nixpkgs,
utils,
}:
utils.lib.eachDefaultSystem (system: let
pkgs = (import nixpkgs) {
inherit system;
};
rev = "0fa9170";
hash = "sha256-+BkDUfVqqYMAG62OarNPJiNfghvHpOhhMlS5H+SV1dQ=";
in rec {
# `nix develop`
devShell = pkgs.mkShell {
nativeBuildInputs = with pkgs; [jq patch];
};
extract = pkgs.callPackage ./extract.nix {};
createPatch = prefix: driverPackage: rev: hash: driverPackage.overrideAttrs ({
version,
preFixup ? "",
...
}: let
inherit (nixpkgs.lib) importJSON traceVal;
jsons = extract rev hash;
patchList = importJSON "${jsons}/${prefix}patch-list.json";
objectList = importJSON "${jsons}/${prefix}object-list.json";
object = (traceVal objectList.${version});
patch = (traceVal patchList.${version});
in {
preFixup =
preFixup
+ ''
sed -i '${patch}' $out/lib/${object}.${version}
'';
});
patchNvenc = createPatch "";
patchFbc = createPatch "fbc-";
});
}