diff options
author | Linus Heckemann <git@sphalerite.org> | 2024-05-08 15:17:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-08 15:17:45 +0200 |
commit | a10842c7f0343bad733d039c72cf15a6ca0d1eb4 (patch) | |
tree | 047be3e42d725cdb39c933c441237017f630341f /pkgs/build-support | |
parent | 9a604d82fbc5d8a85a830efc28564cf397a297ab (diff) | |
parent | b6ef9ffdfd54e91cce180c306852489f5ebc3098 (diff) |
Merge pull request #302300 from Ma27/kernel-zstd
linux kernel: prefer zstd where possible
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/kernel/compress-firmware-xz.nix | 29 | ||||
-rw-r--r-- | pkgs/build-support/kernel/compress-firmware.nix | 43 | ||||
-rw-r--r-- | pkgs/build-support/kernel/modules-closure.sh | 2 | ||||
-rw-r--r-- | pkgs/build-support/vm/default.nix | 9 |
4 files changed, 53 insertions, 30 deletions
diff --git a/pkgs/build-support/kernel/compress-firmware-xz.nix b/pkgs/build-support/kernel/compress-firmware-xz.nix deleted file mode 100644 index cb9ce7a713389..0000000000000 --- a/pkgs/build-support/kernel/compress-firmware-xz.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ runCommand, lib }: - -firmware: - -let - args = { - allowedRequisites = []; - } // lib.optionalAttrs (firmware ? meta) { inherit (firmware) meta; }; -in - -runCommand "${firmware.name}-xz" args '' - mkdir -p $out/lib - (cd ${firmware} && find lib/firmware -type d -print0) | - (cd $out && xargs -0 mkdir -v --) - (cd ${firmware} && find lib/firmware -type f -print0) | - (cd $out && xargs -0rtP "$NIX_BUILD_CORES" -n1 \ - sh -c 'xz -9c -T1 -C crc32 --lzma2=dict=2MiB "${firmware}/$1" > "$1.xz"' --) - (cd ${firmware} && find lib/firmware -type l) | while read link; do - target="$(readlink "${firmware}/$link")" - if [ -f "${firmware}/$link" ]; then - ln -vs -- "''${target/^${firmware}/$out}.xz" "$out/$link.xz" - else - ln -vs -- "''${target/^${firmware}/$out}" "$out/$link" - fi - done - - echo "Checking for broken symlinks:" - find -L $out -type l -print -execdir false -- '{}' '+' -'' diff --git a/pkgs/build-support/kernel/compress-firmware.nix b/pkgs/build-support/kernel/compress-firmware.nix new file mode 100644 index 0000000000000..0949036d5127f --- /dev/null +++ b/pkgs/build-support/kernel/compress-firmware.nix @@ -0,0 +1,43 @@ +{ runCommand, lib, type ? "zstd", zstd }: + +firmware: + +let + compressor = { + xz = { + ext = "xz"; + nativeBuildInputs = [ ]; + cmd = file: target: ''xz -9c -T1 -C crc32 --lzma2=dict=2MiB "${file}" > "${target}"''; + }; + zstd = { + ext = "zst"; + nativeBuildInputs = [ zstd ]; + cmd = file: target: ''zstd -T1 -19 --long --check -f "${file}" -o "${target}"''; + }; + }.${type} or (throw "Unsupported compressor type for firmware."); + + args = { + allowedRequisites = []; + inherit (compressor) nativeBuildInputs; + } // lib.optionalAttrs (firmware ? meta) { inherit (firmware) meta; }; +in + +runCommand "${firmware.name}-${type}" args '' + mkdir -p $out/lib + (cd ${firmware} && find lib/firmware -type d -print0) | + (cd $out && xargs -0 mkdir -v --) + (cd ${firmware} && find lib/firmware -type f -print0) | + (cd $out && xargs -0rtP "$NIX_BUILD_CORES" -n1 \ + sh -c '${compressor.cmd "${firmware}/$1" "$1.${compressor.ext}"}' --) + (cd ${firmware} && find lib/firmware -type l) | while read link; do + target="$(readlink "${firmware}/$link")" + if [ -f "${firmware}/$link" ]; then + ln -vs -- "''${target/^${firmware}/$out}.${compressor.ext}" "$out/$link.${compressor.ext}" + else + ln -vs -- "''${target/^${firmware}/$out}" "$out/$link" + fi + done + + echo "Checking for broken symlinks:" + find -L $out -type l -print -execdir false -- '{}' '+' +'' diff --git a/pkgs/build-support/kernel/modules-closure.sh b/pkgs/build-support/kernel/modules-closure.sh index 5f61bac751af2..06eb5b0d0de12 100644 --- a/pkgs/build-support/kernel/modules-closure.sh +++ b/pkgs/build-support/kernel/modules-closure.sh @@ -80,7 +80,7 @@ for module in $(< ~-/closure); do # of its output. modinfo -b $kernel --set-version "$version" -F firmware $module | grep -v '^name:' | while read -r i; do echo "firmware for $module: $i" - for name in "$i" "$i.xz" ""; do + for name in "$i" "$i.xz" "$i.zst" ""; do [ -z "$name" ] && echo "WARNING: missing firmware $i for module $module" if cp -v --parents --no-preserve=mode lib/firmware/$name "$out" 2>/dev/null; then break diff --git a/pkgs/build-support/vm/default.nix b/pkgs/build-support/vm/default.nix index 56375851783fb..871f81bb5d69f 100644 --- a/pkgs/build-support/vm/default.nix +++ b/pkgs/build-support/vm/default.nix @@ -40,10 +40,14 @@ rec { ${pkgs.stdenv.cc.libc}/lib/libc.so.* \ ${pkgs.stdenv.cc.libc}/lib/libm.so.* \ ${pkgs.stdenv.cc.libc}/lib/libresolv.so.* \ + ${pkgs.stdenv.cc.libc}/lib/libpthread.so.* \ + ${pkgs.zstd.out}/lib/libzstd.so.* \ + ${pkgs.xz.out}/lib/liblzma.so.* \ $out/lib # Copy BusyBox. cp -pd ${pkgs.busybox}/bin/* $out/bin + cp -pd ${pkgs.kmod}/bin/* $out/bin # Run patchelf to make the programs refer to the copied libraries. for i in $out/bin/* $out/lib/*; do if ! test -L $i; then nuke-refs $i; fi; done @@ -54,6 +58,11 @@ rec { patchelf --set-interpreter $out/lib/ld-*.so.? --set-rpath $out/lib $i || true fi done + + find $out/lib -type f \! -name 'ld*.so.?' | while read i; do + echo "patching $i..." + patchelf --set-rpath $out/lib $i + done ''; # */ |