WIP: add meta to packages and create nix-support/private file for unfree packages
			#20
		
		
	
							
								
								
									
										41
									
								
								pkgs/amd-uprof/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								pkgs/amd-uprof/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
			
		||||
{ stdenv
 | 
			
		||||
, lib
 | 
			
		||||
, curl
 | 
			
		||||
, cacert
 | 
			
		||||
, runCommandLocal
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  version = "5.1.701";
 | 
			
		||||
  tarball = "AMDuProf_Linux_x64_${version}.tar.bz2";
 | 
			
		||||
 | 
			
		||||
  uprofSrc = runCommandLocal tarball {
 | 
			
		||||
    nativeBuildInputs = [ curl ];
 | 
			
		||||
    outputHash = "sha256-j9gxcBcIg6Zhc5FglUXf/VV9bKSo+PAKeootbN7ggYk=";
 | 
			
		||||
    SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt";
 | 
			
		||||
  } ''
 | 
			
		||||
    curl \
 | 
			
		||||
    -o $out \
 | 
			
		||||
    'https://download.amd.com/developer/eula/uprof/uprof-5-1/${tarball}' \
 | 
			
		||||
    -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:139.0) Gecko/20100101 Firefox/139.0' \
 | 
			
		||||
    -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
 | 
			
		||||
    -H 'Accept-Language: en-US,en;q=0.5' \
 | 
			
		||||
    -H 'Accept-Encoding: gzip, deflate, br, zstd' \
 | 
			
		||||
    -H 'Referer: https://www.amd.com/' 2>&1 | tr '\r' '\n'
 | 
			
		||||
  '';
 | 
			
		||||
 | 
			
		||||
in
 | 
			
		||||
  stdenv.mkDerivation {
 | 
			
		||||
    pname = "AMD-uProf";
 | 
			
		||||
    inherit version;
 | 
			
		||||
    src = uprofSrc;
 | 
			
		||||
    dontStrip = true;
 | 
			
		||||
    phases = [ "installPhase" "fixupPhase" ];
 | 
			
		||||
    installPhase = ''
 | 
			
		||||
      set -x
 | 
			
		||||
      mkdir -p $out
 | 
			
		||||
      tar -x -v -C $out --strip-components=1 -f $src
 | 
			
		||||
      rm $out/bin/AMDPowerProfilerDriverSource.tar.gz
 | 
			
		||||
      set +x
 | 
			
		||||
    '';
 | 
			
		||||
  }
 | 
			
		||||
							
								
								
									
										33
									
								
								pkgs/amd-uprof/driver.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								pkgs/amd-uprof/driver.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
			
		||||
{ stdenv
 | 
			
		||||
, lib
 | 
			
		||||
, amd-uprof
 | 
			
		||||
, kernel
 | 
			
		||||
, runCommandLocal
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  version = amd-uprof.version;
 | 
			
		||||
  tarball = amd-uprof.src;
 | 
			
		||||
in stdenv.mkDerivation {
 | 
			
		||||
  pname = "AMDPowerProfilerDriver";
 | 
			
		||||
  inherit version;
 | 
			
		||||
  src = runCommandLocal "AMDPowerProfilerDriverSource.tar.gz" { } ''
 | 
			
		||||
    set -x
 | 
			
		||||
    tar -x -f ${tarball} AMDuProf_Linux_x64_${version}/bin/AMDPowerProfilerDriverSource.tar.gz
 | 
			
		||||
    mv AMDuProf_Linux_x64_${version}/bin/AMDPowerProfilerDriverSource.tar.gz $out
 | 
			
		||||
    set +x
 | 
			
		||||
  '';
 | 
			
		||||
  hardeningDisable = [ "pic" "format" ];
 | 
			
		||||
  nativeBuildInputs = kernel.moduleBuildDependencies;
 | 
			
		||||
  patches = [ ./makefile.patch ];
 | 
			
		||||
  makeFlags = [
 | 
			
		||||
    "KERNEL_VERSION=${kernel.modDirVersion}"
 | 
			
		||||
    "KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
 | 
			
		||||
    "INSTALL_MOD_PATH=$(out)"
 | 
			
		||||
  ];
 | 
			
		||||
  meta = {
 | 
			
		||||
    description = "AMD Power Profiler Driver";
 | 
			
		||||
    homepage = "https://www.amd.com/es/developer/uprof.html";
 | 
			
		||||
    platforms = lib.platforms.linux;
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								pkgs/amd-uprof/makefile.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								pkgs/amd-uprof/makefile.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,66 @@
 | 
			
		||||
--- a/Makefile	2025-06-19 20:36:49.346693267 +0200
 | 
			
		||||
+++ b/Makefile	2025-06-19 20:42:29.778088660 +0200
 | 
			
		||||
@@ -27,7 +27,7 @@ MODULE_VERSION=$(shell cat AMDPowerProfi
 | 
			
		||||
 MODULE_NAME_KO=$(MODULE_NAME).ko
 | 
			
		||||
 
 | 
			
		||||
 # check is module inserted
 | 
			
		||||
-MODPROBE_OUTPUT=$(shell lsmod | grep $(MODULE_NAME))
 | 
			
		||||
+#MODPROBE_OUTPUT=$(shell lsmod | grep $(MODULE_NAME))
 | 
			
		||||
 
 | 
			
		||||
 # check pcore dkms status
 | 
			
		||||
 PCORE_DKMS_STATUS=$(shell dkms status | grep $(MODULE_NAME) | grep $(MODULE_VERSION))
 | 
			
		||||
@@ -50,7 +50,7 @@ endif
 | 
			
		||||
 # “-Wno-missing-attributes” is added for GCC version >= 9.0 and kernel version <= 5.00
 | 
			
		||||
 G_VERSION=9
 | 
			
		||||
 K_VERSION=5
 | 
			
		||||
-KERNEL_MAJOR_VERSION=$(shell uname -r | cut -f1 -d.)
 | 
			
		||||
+KERNEL_MAJOR_VERSION=$(shell echo "$(KERNEL_VERSION)" | cut -f1 -d.)
 | 
			
		||||
 GCCVERSION = $(shell gcc -dumpversion | cut -f1 -d.)
 | 
			
		||||
 ifeq ($(G_VERSION),$(firstword $(sort $(GCCVERSION) $(G_VERSION))))
 | 
			
		||||
 	ifeq ($(K_VERSION),$(lastword $(sort $(KERNEL_MAJOR_VERSION) $(K_VERSION))))
 | 
			
		||||
@@ -66,17 +66,7 @@ ${MODULE_NAME}-objs :=  src/PmcDataBuffe
 | 
			
		||||
 
 | 
			
		||||
 # make
 | 
			
		||||
 all:
 | 
			
		||||
-	@chmod a+x ./AMDPPcert.sh
 | 
			
		||||
-	@./AMDPPcert.sh 0 1; echo $$? > $(PWD)/sign_status;
 | 
			
		||||
-	@SIGSTATUS1=`cat $(PWD)/sign_status | tr -d '\n'`; \
 | 
			
		||||
-                if [ $$SIGSTATUS1 -eq 1 ]; then \
 | 
			
		||||
-			exit 1; \
 | 
			
		||||
-		fi
 | 
			
		||||
-	@make -C /lib/modules/$(KERNEL_VERSION)/build M=$(PWD) $(MAKE_OPTS) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" modules
 | 
			
		||||
-	@SIGSTATUS3=`cat $(PWD)/sign_status | tr -d '\n'`; \
 | 
			
		||||
-                if [ $$SIGSTATUS3 -eq 0 ]; then \
 | 
			
		||||
-			./AMDPPcert.sh 1 $(MODULE_NAME_KO); \
 | 
			
		||||
-		fi
 | 
			
		||||
+	make -C $(KERNEL_DIR) M=$(PWD) $(MAKE_OPTS) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" modules
 | 
			
		||||
 
 | 
			
		||||
 # make clean
 | 
			
		||||
 clean:
 | 
			
		||||
@@ -84,23 +74,9 @@ clean:
 | 
			
		||||
 
 | 
			
		||||
 # make install
 | 
			
		||||
 install:
 | 
			
		||||
-	@mkdir -p /lib/modules/`uname -r`/kernel/drivers/extra
 | 
			
		||||
-	@rm  -f /lib/modules/`uname -r`/kernel/drivers/extra/$(MODULE_NAME_KO)
 | 
			
		||||
-	@cp $(MODULE_NAME_KO) /lib/modules/`uname -r`/kernel/drivers/extra/
 | 
			
		||||
-	@depmod -a
 | 
			
		||||
-	@if [ ! -z "$(MODPROBE_OUTPUT)" ]; then \
 | 
			
		||||
-		echo "Uninstalling AMDPowerProfiler Linux kernel module.";\
 | 
			
		||||
-		rmmod $(MODULE_NAME);\
 | 
			
		||||
-	fi
 | 
			
		||||
-	@modprobe $(MODULE_NAME) 2> $(PWD)/sign_status1; \
 | 
			
		||||
-		cat $(PWD)/sign_status1 | grep "Key was rejected by service"; \
 | 
			
		||||
-		echo $$? > $(PWD)/sign_status; SIGSTATUS1=`cat $(PWD)/sign_status | tr -d '\n'`; \
 | 
			
		||||
-                if [ $$SIGSTATUS1 -eq 0 ]; then \
 | 
			
		||||
-			echo "ERROR: Secure Boot enabled, correct key is not yet enrolled in BIOS key table"; \
 | 
			
		||||
-			exit 1; \
 | 
			
		||||
-		else \
 | 
			
		||||
-			cat $(PWD)/sign_status1; \
 | 
			
		||||
-		fi
 | 
			
		||||
+	mkdir -p $(INSTALL_MOD_PATH)/lib/modules/$(KERNEL_VERSION)/kernel/drivers/extra/
 | 
			
		||||
+	cp -a $(MODULE_NAME_KO) $(INSTALL_MOD_PATH)/lib/modules/$(KERNEL_VERSION)/kernel/drivers/extra/
 | 
			
		||||
+
 | 
			
		||||
 # make dkms
 | 
			
		||||
 dkms:
 | 
			
		||||
 	@chmod a+x ./AMDPPcert.sh
 | 
			
		||||
@ -53,4 +53,15 @@ final: prev:
 | 
			
		||||
  meteocat-exporter = prev.callPackage ./meteocat-exporter/default.nix { };
 | 
			
		||||
  upc-qaire-exporter = prev.callPackage ./upc-qaire-exporter/default.nix { };
 | 
			
		||||
  cudainfo = prev.callPackage ./cudainfo/default.nix { };
 | 
			
		||||
 | 
			
		||||
  amd-uprof = prev.callPackage ./amd-uprof/default.nix { };
 | 
			
		||||
 | 
			
		||||
  # FIXME: Extend this to all linuxPackages variants. Open problem, see:
 | 
			
		||||
  # https://discourse.nixos.org/t/whats-the-right-way-to-make-a-custom-kernel-module-available/4636
 | 
			
		||||
  linuxPackages = prev.linuxPackages.extend (_final: _prev: {
 | 
			
		||||
    amd-uprof-driver = _prev.callPackage ./amd-uprof/driver.nix { };
 | 
			
		||||
  });
 | 
			
		||||
  linuxPackages_latest = prev.linuxPackages_latest.extend(_final: _prev: {
 | 
			
		||||
    amd-uprof-driver = _prev.callPackage ./amd-uprof/driver.nix { };
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user