lix/src
Matthew Bauer f69820417f Set kern.curproc_arch_affinity=0 to escape Rosetta
By default, once you enter x86_64 Rosetta 2, macOS will try to run
everything in x86_64. So an x86_64 Nix will still try to use x86_64
even when system = aarch64-darwin. To avoid this we can set
kern.curproc_arch_affinity sysctl. With kern.curproc_arch_affinity=0,
we ignore this preference.

This is based on how
https://opensource.apple.com/source/system_cmds/system_cmds-880.40.5/arch.tproj/arch.c.auto.html
works. Completely undocumented, but seems to work!

Note, you can verify this works with this impure Nix expression:

```
  {
    a = derivation {
      name = "a";
      system = "aarch64-darwin";
      builder = "/bin/sh";
      args = [ "-e" (builtins.toFile "builder" ''
        [ "$(/usr/bin/arch)" = arm64 ]
        [ "$(/usr/bin/arch -arch x86_64 /bin/sh -c /usr/bin/arch)" = i386 ]
        [ "$(/usr/bin/arch -arch arm64 /bin/sh -c /usr/bin/arch)" = arm64 ]
        /usr/bin/touch $out
      '') ];
    };

    b = derivation {
      name = "b";
      system = "x86_64-darwin";
      builder = "/bin/sh";
      args = [ "-e" (builtins.toFile "builder" ''
        [ "$(/usr/bin/arch)" = i386 ]
        [ "$(/usr/bin/arch -arch x86_64 /bin/sh -c /usr/bin/arch)" = i386 ]
        [ "$(/usr/bin/arch -arch arm64 /bin/sh -c /usr/bin/arch)" = arm64 ]
        /usr/bin/touch $out
      '') ];
    };
  }
```
2021-01-11 22:40:21 -06:00
..
build-remote Lower verbosity for 'Failed to find a machine' message 2020-12-01 13:43:36 +01:00
cpptoml Revert the enum struct change 2020-06-18 22:11:26 +00:00
libexpr Merge pull request #4435 from DanilaFe/flake-input-types 2021-01-11 11:38:53 +01:00
libfetchers string2Int(): Return std::optional 2021-01-08 12:22:21 +01:00
libmain Support binary unit prefixes in command line arguments 2021-01-08 12:51:19 +01:00
libstore Set kern.curproc_arch_affinity=0 to escape Rosetta 2021-01-11 22:40:21 -06:00
libutil Fix tests 2021-01-08 14:17:06 +01:00
nix Add 'nix store delete' command 2021-01-11 19:46:59 +01:00
nix-build nix-build: Fix #4197 output order regression 2020-11-13 17:49:27 +01:00
nix-channel Remove static variable name clashes 2020-10-06 13:49:20 +02:00
nix-collect-garbage Remove static variable name clashes 2020-10-06 13:49:20 +02:00
nix-copy-closure Remove static variable name clashes 2020-10-06 13:49:20 +02:00
nix-daemon Remove static variable name clashes 2020-10-06 13:49:20 +02:00
nix-env string2Int(): Return std::optional 2021-01-08 12:22:21 +01:00
nix-instantiate Split out local-fs-store.hh 2020-10-09 20:18:08 +00:00
nix-store crypto.cc: API cleanup and add generate() / to_string() methods 2021-01-06 17:04:46 +01:00
resolve-system-dependencies lstat() cleanup 2020-09-23 19:17:28 +02:00