NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
16.59k stars 13.07k forks source link

pkgsStatic.coreutils: error targetPackages.darwin.LibsystemCross x86_64-apple-darwin #270375

Open avdv opened 7 months ago

avdv commented 7 months ago

Describe the bug

Trying to use the pkgsStatic.coreutils package on x86_64 Darwin fails when using nixos-unstable:

error: don't yet have a `targetPackages.darwin.LibsystemCross for x86_64-apple-darwin`

(it works on aarch64-darwin)

Steps To Reproduce

Steps to reproduce the behavior:

  1. nix-shell --argstr localSystem x86_64-darwin -I nixpkgs=./. --show-trace -p pkgsStatic.coreutils
error:
       … while evaluating the attribute 'buildInputs' of the derivation 'shell'

       at /Users/claudio/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:348:7:

          347|     // (optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          348|       name =
             |       ^
          349|         let

       … while evaluating the attribute 'NIX_CFLAGS_LINK' of the derivation 'coreutils-static-x86_64-apple-darwin-9.3'

       at /Users/claudio/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:348:7:

          347|     // (optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          348|       name =
             |       ^
          349|         let

       … while evaluating call site

       at /Users/claudio/nixpkgs/pkgs/stdenv/adapters.nix:146:11:

          145|       NIX_CFLAGS_LINK = toString (finalAttrs.NIX_CFLAGS_LINK or "")
          146|         + lib.optionalString (stdenv.cc.isGNU or false) " -static-libgcc";
             |           ^
          147|       nativeBuildInputs = (finalAttrs.nativeBuildInputs or [])

       … while calling 'optionalString'

       at /Users/claudio/nixpkgs/lib/strings.nix:257:5:

          256|     # String to return if condition is true
          257|     string: if cond then string else "";
             |     ^
          258|

       … while evaluating the attribute 'cc.isGNU'

       at /Users/claudio/nixpkgs/pkgs/stdenv/generic/default.nix:165:14:

          164|
          165|       inherit cc hasCC;
             |              ^
          166|

       … while evaluating the attribute 'llvmPackages.libcxxClang'

       at /Users/claudio/nixpkgs/pkgs/development/compilers/llvm/16/default.nix:132:5:

          131|
          132|     libcxxClang = wrapCCWith rec {
             |     ^
          133|       cc = tools.clang-unwrapped;

       … while evaluating call site

       at /Users/claudio/nixpkgs/pkgs/development/compilers/llvm/16/default.nix:132:19:

          131|
          132|     libcxxClang = wrapCCWith rec {
             |                   ^
          133|       cc = tools.clang-unwrapped;

       … while calling 'wrapCCWith'

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:17387:5:

        17386|   wrapCCWith =
        17387|     { cc
             |     ^
        17388|     , # This should be the only bintools runtime dep with this sort of logic. The

       … while evaluating call site

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:17406:7:

        17405|     } @ extraArgs:
        17406|       callPackage ../build-support/cc-wrapper (let self = {
             |       ^
        17407|     nativeTools = stdenv.targetPlatform == stdenv.hostPlatform && stdenv.cc.nativeTools or false;

       … while calling 'callPackageWith'

       at /Users/claudio/nixpkgs/lib/customisation.nix:141:35:

          140|   */
          141|   callPackageWith = autoArgs: fn: args:
             |                                   ^
          142|     let

       … while evaluating call site

       at /Users/claudio/nixpkgs/lib/customisation.nix:192:34:

          191|
          192|     in if missingArgs == [] then makeOverridable f allArgs else abort error;
             |                                  ^
          193|

       … while calling anonymous lambda

       at /Users/claudio/nixpkgs/lib/customisation.nix:84:17:

           83|     in
           84|     mirrorArgs (origArgs:
             |                 ^
           85|     let

       … while evaluating call site

       at /Users/claudio/nixpkgs/lib/customisation.nix:86:16:

           85|     let
           86|       result = f origArgs;
             |                ^
           87|

       … while calling anonymous lambda

       at /Users/claudio/nixpkgs/pkgs/build-support/cc-wrapper/default.nix:8:1:

            7|
            8| { name ? ""
             | ^
            9| , lib

       … while evaluating the attribute 'libc'

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:17415:12:

        17414|
        17415|     inherit cc bintools libc libcxx extraPackages nixSupport zlib;
             |            ^
        17416|   } // extraArgs; in self);

       … while evaluating the attribute 'bintools'

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:18669:3:

        18668|   };
        18669|   bintools = wrapBintoolsWith {
             |   ^
        18670|     bintools = bintools-unwrapped;

       … while evaluating call site

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:18669:14:

        18668|   };
        18669|   bintools = wrapBintoolsWith {
             |              ^
        18670|     bintools = bintools-unwrapped;

       … while calling 'wrapBintoolsWith'

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:17423:5:

        17422|   wrapBintoolsWith =
        17423|     { bintools
             |     ^
        17424|     , libc ? if stdenv.targetPlatform != stdenv.hostPlatform then libcCross else stdenv.cc.libc

       … while evaluating call site

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:17427:7:

        17426|     } @ extraArgs:
        17427|       callPackage ../build-support/bintools-wrapper (let self = {
             |       ^
        17428|     nativeTools = stdenv.targetPlatform == stdenv.hostPlatform && stdenv.cc.nativeTools or false;

       … while calling 'callPackageWith'

       at /Users/claudio/nixpkgs/lib/customisation.nix:141:35:

          140|   */
          141|   callPackageWith = autoArgs: fn: args:
             |                                   ^
          142|     let

       … while evaluating call site

       at /Users/claudio/nixpkgs/lib/customisation.nix:192:34:

          191|
          192|     in if missingArgs == [] then makeOverridable f allArgs else abort error;
             |                                  ^
          193|

       … while calling anonymous lambda

       at /Users/claudio/nixpkgs/lib/customisation.nix:84:17:

           83|     in
           84|     mirrorArgs (origArgs:
             |                 ^
           85|     let

       … while evaluating call site

       at /Users/claudio/nixpkgs/lib/customisation.nix:86:16:

           85|     let
           86|       result = f origArgs;
             |                ^
           87|

       … while calling anonymous lambda

       at /Users/claudio/nixpkgs/pkgs/build-support/bintools-wrapper/default.nix:8:1:

            7|
            8| { name ? ""
             | ^
            9| , lib

       … while evaluating the attribute 'libc'

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:17434:12:

        17433|
        17434|     inherit bintools libc;
             |            ^
        17435|     inherit (darwin) postLinkSignHook signingUtils;

       … while evaluating call site

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:21644:69:

        21643|
        21644|   libcCross = assert stdenv.targetPlatform != stdenv.buildPlatform; libcCrossChooser stdenv.targetPlatform.libc;
             |                                                                     ^
        21645|

       … while calling 'libcCrossChooser'

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:21618:22:

        21617|   # We can choose:
        21618|   libcCrossChooser = name:
             |                      ^
        21619|     # libc is hackily often used from the previous stage. This `or`

       … while evaluating the attribute 'darwin.LibsystemCross'

       at /Users/claudio/nixpkgs/pkgs/top-level/all-packages.nix:27768:3:

        27767|   # `.override` clobbered. C.F. `llvmPackages` which does the same.
        27768|   darwin = recurseIntoAttrs (callPackage ./darwin-packages.nix { });
             |   ^
        27769|

       error: don't yet have a `targetPackages.darwin.LibsystemCross for x86_64-apple-darwin`

Expected behavior

We should be able to use pkgsStatic.coreutils on x86_64-darwin.

Additional context

I git bisected the problem to commit 42b5817e6b94974614cc9d0f803c14551274d6c5 which actually introduced support for non-linux host platforms in the first place. This would probably mean that before this change package x and pkgsStatic.x would be exactly the same on Darwin?

We used the pkgsStatic.coreutils package from nixos-22.11 before, but ran into this problem after upgrading to nixos-unstable, see https://github.com/tweag/rules_nixpkgs/issues/424

Notify maintainers

cc @uri-canva

Metadata

Please run nix-shell -p nix-info --run "nix-info -m" and paste the result.

[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"

 - system: `"aarch64-darwin"`
 - host os: `Darwin 21.6.0, macOS 12.7`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.13.3`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixpkgs`

Priorities

Add a :+1: reaction to issues you find important.

uri-canva commented 7 months ago

Yes, correct, before that commit x and pkgsStatic.x would be exactly the same. After that commit it's now attempting to build packages statically. Unfortunately since that combination of packages and stdenv weren't being built before, most of them didn't build. We've got pkgsStatic.nix building, although that was on aarch64. x86_64 doesn't work, the exact reason why is beyond my understanding of how stdenvs are wired together, but https://github.com/NixOS/nixpkgs/issues/180771 has more context, and https://github.com/NixOS/nixpkgs/pull/256590 has a potential fix (it's for cross compilation, but it also changes how things are passed through stdenv, so it affects pkgsStatic which is implemented as cross compilation).

I think it's fine to keep this issue open to track pkgsStatic.coreutils specifically, but do note that in general pkgsStatic / cross compiled packages aren't checked so they break a lot. I suggest setting up your own nix ci to verify whether upstream nixpkgs bumps will break these packages if you care about them so you can open issues immediately after they get broken.

In the meantime can you verify that the PR fixes your issue?

avdv commented 7 months ago

In the meantime can you verify that the PR fixes your issue?

Yes, it fixes the issue at hand and it is building pkgsStatic.coreutils again, but it seems the package is not really static:

$ otool -L /nix/store/fbzhv146kg8b8mp90q8ncrqj7l2fj4wy-coreutils-9.3/bin/coreutils
/nix/store/fbzhv146kg8b8mp90q8ncrqj7l2fj4wy-coreutils-9.3/bin/coreutils:
    /nix/store/7flhczqiibyhadll32xx83awsg1bcmbi-gmp-with-cxx-6.3.0/lib/libgmp.10.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)

Like before, coreutils and pkgsStatic.coreutils seem to be the same:

$ nix-shell --argstr localSystem x86_64-darwin -I nixpkgs=./. --pure -p which pkgsStatic.coreutils --run 'which coreutils'
/nix/store/fbzhv146kg8b8mp90q8ncrqj7l2fj4wy-coreutils-9.3/bin/coreutils
$ nix-shell --argstr localSystem x86_64-darwin -I nixpkgs=./. --pure -p which coreutils --run 'which coreutils'
/nix/store/fbzhv146kg8b8mp90q8ncrqj7l2fj4wy-coreutils-9.3/bin/coreutils