summaryrefslogtreecommitdiffstats
path: root/pkgs/top-level/darwin-packages.nix
blob: 6d6a5988c224fc2bb86181cc9e6f5d751918d366 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
let
  autoCalledPackages = import ./by-name-overlay.nix ../os-specific/darwin/by-name;
in

{
  lib,
  buildEnv,
  cctools,
  generateSplicesForMkScope,
  libc,
  llvmPackages,
  makeScopeWithSplicing',
  pkgs,
  preLibcHeaders,
  stdenv,
  targetPackages,
  wrapBintoolsWith,
  config,
}:

let
  aliases =
    final: prev:
    lib.optionalAttrs config.allowAliases (import ../top-level/darwin-aliases.nix lib final prev pkgs);

  autoCalledPackagesWithAliases = lib.composeManyExtensions [
    autoCalledPackages
    aliases
  ];

  mkBootstrapStdenv =
    stdenv:
    stdenv.override (old: {
      extraBuildInputs = map (
        pkg:
        if lib.isDerivation pkg && lib.getName pkg == "apple-sdk" then
          pkg.override { enableBootstrap = true; }
        else
          pkg
      ) (old.extraBuildInputs or [ ]);
    });
in

makeScopeWithSplicing' {
  otherSplices = generateSplicesForMkScope "darwin";
  extra = self: {
    inherit (llvmPackages) clang-unwrapped;

    # This is an internal helper for building source-release packages.
    # It’s not intended for use outside of the Darwin package set.
    mkAppleDerivation = self.callPackage ../os-specific/darwin/mk-apple-derivation { };
  };
  f = lib.extends autoCalledPackagesWithAliases (
    self:
    lib.recurseIntoAttrs {
      inherit (self.adv_cmds) ps;

      # Removes propagated packages from the stdenv, so those packages can be built without depending upon themselves.
      bootstrapStdenv = mkBootstrapStdenv stdenv;

      # Note: Not in `package.nix` because it messes up the overrides.
      binutils = wrapBintoolsWith {
        libc = targetPackages.libc or libc;
        bintools = self.binutils-unwrapped;
      };

      binutilsNoLibc = wrapBintoolsWith {
        libc = targetPackages.preLibcHeaders or preLibcHeaders;
        bintools = self.binutils-unwrapped;
      };

      sourceRelease = self.callPackage ../os-specific/darwin/sourceRelease { };

      inherit (self.file_cmds) xattr;

      # Note: Not in `packages.nix` because it’s a package set not a derivation.
      inherit (self.callPackage ../os-specific/darwin/xcode { })
        xcode_8_1
        xcode_8_2
        xcode_9_1
        xcode_9_2
        xcode_9_3
        xcode_9_4
        xcode_9_4_1
        xcode_10_1
        xcode_10_2
        xcode_10_2_1
        xcode_10_3
        xcode_11
        xcode_11_1
        xcode_11_2
        xcode_11_3_1
        xcode_11_4
        xcode_11_5
        xcode_11_6
        xcode_11_7
        xcode_12
        xcode_12_0_1
        xcode_12_1
        xcode_12_2
        xcode_12_3
        xcode_12_4
        xcode_12_5
        xcode_12_5_1
        xcode_13
        xcode_13_1
        xcode_13_2
        xcode_13_3
        xcode_13_3_1
        xcode_13_4
        xcode_13_4_1
        xcode_14
        xcode_14_1
        xcode_15
        xcode_15_0_1
        xcode_15_1
        xcode_15_2
        xcode_15_3
        xcode_15_4
        xcode_16
        xcode_16_1
        xcode_16_2
        xcode_16_3
        xcode_16_4
        xcode_26
        xcode_26_Apple_silicon
        xcode_26_0_1
        xcode_26_0_1_Apple_silicon
        xcode_26_1
        xcode_26_1_Apple_silicon
        xcode_26_1_1
        xcode_26_1_1_Apple_silicon
        xcode_26_2
        xcode_26_2_Apple_silicon
        xcode_26_3
        xcode_26_3_Apple_silicon
        xcode_26_4
        xcode_26_4_Apple_silicon
        xcode_26_4_1
        xcode_26_4_1_Apple_silicon
        xcode_26_5
        xcode_26_5_Apple_silicon
        xcode_26_6
        xcode_26_6_Apple_silicon
        xcode
        requireXcode
        ;

      # Note: Not in `package.nix` because it references files outside of the package.
      # See doc/packages/darwin-builder.section.md
      linux-builder = lib.makeOverridable (
        { modules }:
        let
          toGuest = builtins.replaceStrings [ "darwin" ] [ "linux" ];

          nixos = import ../../nixos {
            configuration = {
              imports = [
                ../../nixos/modules/profiles/nix-builder-vm.nix
              ]
              ++ modules;

              # If you need to override this, consider starting with the right Nixpkgs
              # in the first place, ie change `pkgs` in `pkgs.darwin.linux-builder`.
              # or if you're creating new wiring that's not `pkgs`-centric, perhaps use the
              # macos-builder profile directly.
              virtualisation.host = { inherit pkgs; };

              nixpkgs.hostPlatform = lib.mkDefault (toGuest stdenv.hostPlatform.system);
            };

            system = null;
          };

        in
        nixos.config.system.build.macos-builder-installer
      ) { modules = [ ]; };

      linux-builder-x86_64 = self.linux-builder.override {
        modules = [ { nixpkgs.hostPlatform = "x86_64-linux"; } ];
      };

      # Like `linux-builder`, but runs the guest on Apple's Virtualization.framework
      # via `vzvm`, translating x86_64-linux builds with Rosetta instead of emulating
      # them. See doc/packages/darwin-builder.section.md
      linux-builder-vz = lib.makeOverridable (
        { modules }:
        let
          nixos = import ../../nixos {
            configuration = {
              imports = [
                ../../nixos/modules/profiles/nix-builder-vz-vm.nix
              ]
              ++ modules;

              virtualisation.host = { inherit pkgs; };

              # aarch64-darwin is the only supported host, so the guest is fixed too.
              nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
            };

            system = null;
          };
        in
        nixos.config.system.build.macos-builder-installer
      ) { modules = [ ]; };
    }
  );
}