From 9ee4876f0e0c7ba153ccaf69b42310ee8c25dca0 Mon Sep 17 00:00:00 2001 From: Albert Safin Date: Fri, 26 Apr 2024 18:47:53 +0000 Subject: [PATCH 1/4] libsafec: init at 3.3.0 --- pkgs/by-name/li/libsafec/package.nix | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 pkgs/by-name/li/libsafec/package.nix diff --git a/pkgs/by-name/li/libsafec/package.nix b/pkgs/by-name/li/libsafec/package.nix new file mode 100644 index 00000000000000..7d65d84f695ef6 --- /dev/null +++ b/pkgs/by-name/li/libsafec/package.nix @@ -0,0 +1,46 @@ +{ + stdenv, + lib, + fetchFromGitHub, + fetchpatch, + autoreconfHook, + perl, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "safeclib"; + version = "3.3.0"; + + src = fetchFromGitHub { + owner = "rurban"; + repo = "safeclib"; + rev = "refs/tags/v${finalAttrs.version}"; + hash = "sha256-vwMyxGgJvvv2Nlo14HKZtq8YnmAVqAHDvBL6CUmbaYQ="; + }; + + patches = [ + # Fix linking error. + # Upstreamed in v3.4.0, but intel-opeapi-vtune wants libsafec-3.3.so.3. + (fetchpatch { + name = "0001-add-pic_flag-to-RETPOLINE-cflags-and-ldflags.patch"; + url = "https://github.com/rurban/safeclib/commit/23ae79fe84a3fa5d995b8c6b9be70587e37a6cd8.patch"; + hash = "sha256-iv9OZJT9WILug1vVmUgIh8RxGAx8accwR1R0LOxYqYQ="; + }) + ]; + + nativeBuildInputs = [ autoreconfHook ]; + + buildInputs = [ perl ]; + + env = { + CFLAGS = "-Wno-error=dangling-pointer"; + }; + + meta = { + description = "Libc extension with all C11 Annex K functions"; + homepage = "https://github.com/rurban/safeclib"; + license = lib.licenses.mit; + maintainers = [ lib.maintainers.xzfc ]; + platforms = lib.platforms.all; + }; +}) From e85bff2164b9e9058dff94c11cd93b73d3efb43b Mon Sep 17 00:00:00 2001 From: Albert Safin Date: Fri, 26 Apr 2024 20:03:57 +0000 Subject: [PATCH 2/4] intel-oneapi-vtune: init at 2025.0.1 --- .../by-name/in/intel-oneapi-vtune/package.nix | 142 ++++++++++++++++++ pkgs/by-name/in/intel-oneapi-vtune/update.sh | 42 ++++++ 2 files changed, 184 insertions(+) create mode 100644 pkgs/by-name/in/intel-oneapi-vtune/package.nix create mode 100755 pkgs/by-name/in/intel-oneapi-vtune/update.sh diff --git a/pkgs/by-name/in/intel-oneapi-vtune/package.nix b/pkgs/by-name/in/intel-oneapi-vtune/package.nix new file mode 100644 index 00000000000000..2de5be57e8446c --- /dev/null +++ b/pkgs/by-name/in/intel-oneapi-vtune/package.nix @@ -0,0 +1,142 @@ +{ + alsa-lib, + atk, + autoPatchelfHook, + cairo, + cups, + dbus, + elfutils, + expat, + fetchurl, + file-rename, + glib, + gtk3, + kmod, + lib, + libdrm, + libndctl, + libsafec, + libxcrypt-legacy, + libxkbcommon, + mesa, + ncurses5, + nspr, + nss, + opencl-clang, + p7zip, + pango, + stdenv, + systemd, + wrapGAppsHook3, + xorg, +}: + +stdenv.mkDerivation ( + finalAttrs: + let + versionMajorMinor = lib.versions.majorMinor finalAttrs.version; + in + { + pname = "intel-oneapi-vtune"; + version = "2025.0.1"; + + src = fetchurl { + url = "https://installer.repos.intel.com/oneapi/vtune/lin/intel.oneapi.lin.vtune,v=2025.0.1%2B14/cupPayload.cup"; + sha256 = "1pzh0kx7wxwr48rbv7wfkpkixqxsaass3xkpwhvvkdm09v5fhm7h"; + }; + + nativeBuildInputs = [ + autoPatchelfHook + file-rename + p7zip + wrapGAppsHook3 + ]; + + buildInputs = [ + alsa-lib + atk + cairo + cups + dbus + elfutils + expat + glib + gtk3 + kmod + libdrm + libndctl + libsafec + libxcrypt-legacy + libxkbcommon + mesa + ncurses5 + nspr + nss + opencl-clang + pango + stdenv.cc.cc.lib + xorg.libX11 + xorg.libXcomposite + xorg.libXdamage + xorg.libXext + xorg.libXfixes + xorg.libXrandr + xorg.libxcb + ]; + + unpackPhase = '' + runHook preUnpack + + 7za x $src _installdir/vtune/${versionMajorMinor} + + # Fix percent-encoded filenames, e.g. "libstdc%2B%2B.so.6" -> "libstdc++.so.6" + find -depth -name '*%*' -execdir rename 's/%2B/+/g; s/%5B/[/g; s/%5D/]/g' {} \; + + runHook postUnpack + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/opt/intel/oneapi + mv _installdir/vtune $out/opt/intel/oneapi + ln -s $out/opt/intel/oneapi/vtune/{${versionMajorMinor},latest} + + mkdir -p $out/bin + for bin in vtune vtune-backend vtune-gui; do + ln -s $out/opt/intel/oneapi/vtune/${versionMajorMinor}/bin64/$bin $out/bin/ + done + + mkdir -p $out/share/applications + cp $out/opt/intel/oneapi/vtune/${versionMajorMinor}/bin64/vtune-gui.desktop $out/share/applications/ + sed -i $out/share/applications/vtune-gui.desktop -e " + s|^Exec=.*|Exec=vtune-gui|g; + s|^Icon=./|Icon=$out/opt/intel/oneapi/vtune/${versionMajorMinor}/bin64/|g; + " + + runHook postInstall + ''; + + autoPatchelfIgnoreMissingDeps = [ + "libffi.so.6" # Used in vendored python + "libgdbm.so.4" # Used in vendored python + "libgdbm_compat.so.4" # Used in vendored python + "libsycl.so.8" # Used in bin64/self_check_apps/matrix.dpcpp/matrix.dpcpp + ]; + + runtimeDependencies = [ + systemd # for zygote (vtune-gui) + ]; + + passthru.updateScript = ./update.sh; + + meta = { + changelog = "https://www.intel.com/content/www/us/en/developer/articles/release-notes/vtune-profiler-release-notes.html"; + description = "Performance analysis tool for x86-based machines"; + homepage = "https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html"; + license = lib.licenses.unfree; + maintainers = [ lib.maintainers.xzfc ]; + platforms = [ "x86_64-linux" ]; + }; + } +) diff --git a/pkgs/by-name/in/intel-oneapi-vtune/update.sh b/pkgs/by-name/in/intel-oneapi-vtune/update.sh new file mode 100755 index 00000000000000..5536c846f8e844 --- /dev/null +++ b/pkgs/by-name/in/intel-oneapi-vtune/update.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl jq common-updater-scripts + +set -e + +# Check on https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler-download.html +DOWNLOAD_ID=bef05a56-52f3-40ad-a91a-040a98316680 + +INSTALLER_URL=$( + curl --silent "https://www.intel.com/libs/apps/intel/idz/productsinfo?downloadId=$DOWNLOAD_ID" | + jq -r ' + .downloads.downloads.productVersionsBuilds[0].files[] + | select (.operatingSystem == "Linux" and .fileType == "Custom Package") + .url + ' | + uniq +) +echo "INSTALLER_URL=$INSTALLER_URL" +[ "$INSTALLER_URL" ] || exit 1 + +{ + read -r CUP_URL + read -r VERSION +} < <( + curl --silent "$INSTALLER_URL" | + sed '0,/^__CONTENT__$/d' | + tar -zx -O --wildcards './packages/intel.oneapi.lin.vtune,v=*/manifest.json' | + jq -r ' + [(.payloads[] | select (.fileName == "cupPayload.cup") | .url), + (.version | split("+")[0]) + ][] + ' +) +echo "CUP_URL=$CUP_URL" +echo "VERSION=$VERSION" +[ "$CUP_URL" ] || exit 1 +[ "$VERSION" ] || exit 1 + +CUP_HASH=$(nix-prefetch-url "$CUP_URL") +echo "CUP_HASH=$CUP_HASH" + +update-source-version intel-oneapi-vtune "$VERSION" "$CUP_HASH" "$CUP_URL" From 26dc08626bcef7802e58d4e1d50b99ab71f1a60d Mon Sep 17 00:00:00 2001 From: Albert Safin Date: Fri, 26 Apr 2024 20:05:57 +0000 Subject: [PATCH 3/4] intel-vtune-sepdk: init --- .../linux/intel-vtune-sepdk/default.nix | 106 ++++++++++++++++++ pkgs/top-level/linux-kernels.nix | 2 + 2 files changed, 108 insertions(+) create mode 100644 pkgs/os-specific/linux/intel-vtune-sepdk/default.nix diff --git a/pkgs/os-specific/linux/intel-vtune-sepdk/default.nix b/pkgs/os-specific/linux/intel-vtune-sepdk/default.nix new file mode 100644 index 00000000000000..bd69321476c538 --- /dev/null +++ b/pkgs/os-specific/linux/intel-vtune-sepdk/default.nix @@ -0,0 +1,106 @@ +{ + bash, + coreutils, + gnugrep, + gnused, + intel-oneapi-vtune, + kernel, + kmod, + lib, + makeWrapper, + p7zip, + procps, + python3, + shadow, + stdenv, + which, +}: + +let + binPath = lib.makeBinPath [ + bash + coreutils + gnugrep + gnused + kmod + procps + python3 + shadow + which + ]; + libexecDir = "\${out}/libexec/intel-vtune-sepdk"; + modDestDir = "$out/lib/modules/${kernel.modDirVersion}/kernel/drivers/platform/x86"; + versionMajorMinor = lib.versions.majorMinor intel-oneapi-vtune.version; +in +stdenv.mkDerivation { + pname = "intel-vtune-sepdk"; + version = "${intel-oneapi-vtune.version}-${kernel.version}"; + + inherit (intel-oneapi-vtune) src; + + hardeningDisable = [ "pic" ]; + + nativeBuildInputs = [ + makeWrapper + p7zip + ] ++ kernel.moduleBuildDependencies; + + makeFlags = [ + "KERNEL_SRC_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + "KERNEL_VERSION=${kernel.modDirVersion}" # Output of `uname -r` + "MACH=x86_64" # Output of `uname -m` + "SMP=1" + "VERBOSE=1" + "INSTALL=${libexecDir}" + ]; + + unpackPhase = '' + runHook preUnpack + 7za x $src _installdir/vtune/${versionMajorMinor}/sepdk + cd _installdir/vtune/${versionMajorMinor}/sepdk/src + runHook postUnpack + ''; + + prePatch = '' + # Allow using --load-in-tree-driver option + substituteInPlace insmod-sep pax/insmod-pax socperf/src/insmod-socperf \ + --replace-fail IS_INTREE_DRIVER_OS=0 IS_INTREE_DRIVER_OS=1 + ''; + + preBuild = '' + makeFlags="$makeFlags KBUILD_EXTRA_SYMBOLS=$PWD/socperf/src/Module.symvers" + ''; + + preInstall = "mkdir -p ${libexecDir}"; + + postInstall = '' + # Install wrappers to bin + for i in insmod-sep pax/insmod-pax socperf/src/insmod-socperf \ + rmmod-sep pax/rmmod-pax socperf/src/rmmod-socperf; do + sed -i ' + s/^PATH=/# &/; + # Do not check for su to make it usable with clean PATH (e.g. as systemd service) + s/\(\bCOMMANDS_TO_CHECK="[^"]*\)''${SU}\([^"]*"\)/\1\2/; + ' ${libexecDir}/$i + makeWrapper ${libexecDir}/$i $out/bin/''${i##*/} --prefix PATH : "${binPath}" + done + + # Install kernel modules + mkdir -p ${modDestDir}/{socperf,sepdk/sep,sepdk/pax} + ln -s ${libexecDir}/sep5-*.ko ${modDestDir}/sepdk/sep/sep5.ko + ln -s ${libexecDir}/pax/pax-*.ko ${modDestDir}/sepdk/pax/pax.ko + ln -s ${libexecDir}/socperf/src/socperf3-*.ko ${modDestDir}/socperf/socperf3.ko + ''; + + meta = { + description = "Kernel module for Intel VTune Profiler"; + homepage = "https://www.intel.com/content/www/us/en/docs/vtune-profiler/user-guide/2024-0/sep-driver.html"; + license = [ + lib.licenses.bsd3 + lib.licenses.gpl2Only + lib.licenses.unfree + ]; + maintainers = [ lib.maintainers.xzfc ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index 3cabaec2c7b14f..9b07bbcd7189bc 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -392,6 +392,8 @@ in { intel-speed-select = if lib.versionAtLeast kernel.version "5.3" then callPackage ../os-specific/linux/intel-speed-select { } else null; + intel-vtune-sepdk = callPackage ../os-specific/linux/intel-vtune-sepdk { }; + ipu6-drivers = callPackage ../os-specific/linux/ipu6-drivers {}; ivsc-driver = callPackage ../os-specific/linux/ivsc-driver {}; From 4a32ac7311f23d4a17f6f294d19e1df5afc4f90d Mon Sep 17 00:00:00 2001 From: Albert Safin Date: Fri, 26 Apr 2024 20:07:19 +0000 Subject: [PATCH 4/4] nixos/vtune: init module --- .../manual/release-notes/rl-2505.section.md | 2 + nixos/modules/module-list.nix | 1 + nixos/modules/programs/vtune.nix | 74 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 nixos/modules/programs/vtune.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 2367ba3ba7d7ec..eb0224fa18c195 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -313,6 +313,7 @@ ./programs/vim.nix ./programs/virt-manager.nix ./programs/wavemon.nix + ./programs/vtune.nix ./programs/wayland/cardboard.nix ./programs/wayland/hyprlock.nix ./programs/wayland/hyprland.nix diff --git a/nixos/modules/programs/vtune.nix b/nixos/modules/programs/vtune.nix new file mode 100644 index 00000000000000..9ace5cbc338fbc --- /dev/null +++ b/nixos/modules/programs/vtune.nix @@ -0,0 +1,74 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + inherit (lib) + mkEnableOption + mkIf + mkMerge + mkOption + mkPackageOption + types + ; + + cfg = config.programs.vtune; +in +{ + options.programs.vtune = { + enable = mkEnableOption "VTune Profiler"; + + package = mkPackageOption pkgs "intel-oneapi-vtune" { + nullable = true; + extraDescription = '' + Set to `null` to install only the kernel module. + ''; + }; + + modulePackage = mkOption { + type = types.nullOr types.package; + default = config.boot.kernelPackages.intel-vtune-sepdk.override { + intel-oneapi-vtune = config.programs.package or pkgs.intel-oneapi-vtune; + }; + defaultText = '' + config.boot.kernelPackages.intel-vtune-sepdk.override { + intel-oneapi-vtune = config.programs.vtune.package or pkgs.intel-oneapi-vtune; + } + ''; + example = "config.boot.kernelPackages.intel-vtune-sepdk"; + description = '' + The package to use for the VTune Profiler kernel module. + Set to `null` to disable the kernel module. + An user should be in the `vtune` group to use the module. + ''; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf (cfg.package != null) { environment.systemPackages = [ cfg.package ]; }) + + (mkIf (cfg.modulePackage != null) { + boot.extraModulePackages = [ cfg.modulePackage ]; + + environment.systemPackages = [ cfg.modulePackage ]; + + users.groups.vtune = { }; + + systemd.services.vtune-sep5 = { + description = "Load VTune SEP5 driver"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${cfg.modulePackage}/bin/insmod-sep --load-in-tree-driver"; + ExecStop = "${cfg.modulePackage}/bin/rmmod-sep"; + RemainAfterExit = true; + }; + }; + }) + ]); + + meta.maintainers = [ lib.maintainers.xzfc ]; +}