Unverified Commit 87478fdf authored by Randy Eckenrode's avatar Randy Eckenrode
Browse files

nodejs: use a response file with llvm-ar

nodejs produces a static archive in its `postInstall`. It detects if the
`ar` is GNU ar and uses a response file. Otherwise, it adds the files
individually. This is apparently very slow with `llvm-ar`, which Darwin
now uses by default. Fortunately, `llvm-ar` also supports response
files, so detect whether the `ar` is `llvm-ar` and use a response file.

I tested the build on aarch64-darwin. `postInstall` took less than a
minute to generate a 59 MiB static archive. Comparing to the build on
master, the only difference between the two archives is `llvm-ar` zeroes
out the dates, uids, and gids by default. Compared disassembly of the
archives appeared identical.

This fixes the timeouts on staging-next. #241951

https://hydra.nixos.org/build/227170390
parent 03bf9ffd
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -160,9 +160,14 @@ let
      ${if stdenv.buildPlatform.isGnu then ''
        ar -cqs $libv8/lib/libv8.a @files
      '' else ''
        # llvm-ar supports response files, so take advantage of it if it’s available.
        if [ "$(basename $(readlink -f $(command -v ar)))" = "llvm-ar" ]; then
          ar -cqs $libv8/lib/libv8.a @files
        else
          cat files | while read -r file; do
            ar -cqS $libv8/lib/libv8.a $file
          done
        fi
      ''}
      popd