124 lines
4.3 KiB
Nix
124 lines
4.3 KiB
Nix
let
|
||
sdkVersions = builtins.fromJSON (builtins.readFile ./metadata/versions.json);
|
||
in
|
||
|
||
{
|
||
lib,
|
||
stdenv,
|
||
stdenvNoCC,
|
||
substitute,
|
||
|
||
# Specifies the major version used for the SDK. Uses `hostPlatform.darwinSdkVersion` by default.
|
||
darwinSdkMajorVersion ? (
|
||
if lib.versionOlder stdenv.hostPlatform.darwinSdkVersion "11" then
|
||
lib.versions.majorMinor stdenv.hostPlatform.darwinSdkVersion
|
||
else
|
||
lib.versions.major stdenv.hostPlatform.darwinSdkVersion
|
||
),
|
||
# Enabling bootstrap disables propagation. Defaults to `false` (meaning to propagate certain packages and `xcrun`)
|
||
# except in stage0 of the Darwin stdenv bootstrap.
|
||
enableBootstrap ? stdenv.name == "bootstrap-stage0-stdenv-darwin",
|
||
|
||
# Required by various phases
|
||
callPackage,
|
||
jq,
|
||
}:
|
||
|
||
let
|
||
sdkInfo =
|
||
sdkVersions.${darwinSdkMajorVersion}
|
||
or (lib.throw "Unsupported SDK major version: ${darwinSdkMajorVersion}");
|
||
sdkVersion = sdkInfo.version;
|
||
|
||
fetchSDK = callPackage ./common/fetch-sdk.nix { };
|
||
|
||
phases = lib.composeManyExtensions (
|
||
[
|
||
(callPackage ./common/add-core-symbolication.nix { })
|
||
(callPackage ./common/derivation-options.nix { })
|
||
(callPackage ./common/passthru-private-frameworks.nix { inherit sdkVersion; })
|
||
(callPackage ./common/passthru-source-release-files.nix { inherit sdkVersion; })
|
||
(callPackage ./common/remove-disallowed-packages.nix { })
|
||
]
|
||
# Only process stubs and convert them to tbd-v4 if jq is available. This can be made unconditional once
|
||
# the bootstrap tools have jq and libtapi.
|
||
++ lib.optional (jq != null) (callPackage ./common/process-stubs.nix { })
|
||
# Avoid infinite recursions by not propagating certain packages, so they can themselves build with the SDK.
|
||
++ lib.optionals (!enableBootstrap) [
|
||
(callPackage ./common/propagate-inputs.nix { })
|
||
(callPackage ./common/propagate-xcrun.nix { })
|
||
]
|
||
# Older SDKs do not include the libraries re-exported from umbrella frameworks in the umbrellas’ stubs, which causes
|
||
# link failures for those libraries unless their paths have been rewritten to point to the store.
|
||
++ lib.optionals (lib.versionOlder sdkVersion "11.0") [
|
||
(callPackage ./common/rewrite-sdk-paths.nix { inherit sdkVersion; })
|
||
]
|
||
# This has to happen last.
|
||
++ [
|
||
(callPackage ./common/run-build-phase-hooks.nix { })
|
||
]
|
||
);
|
||
in
|
||
stdenvNoCC.mkDerivation (
|
||
lib.extends phases (finalAttrs: {
|
||
pname = "apple-sdk";
|
||
inherit (sdkInfo) version;
|
||
|
||
src = fetchSDK sdkInfo;
|
||
|
||
dontConfigure = true;
|
||
|
||
strictDeps = true;
|
||
|
||
setupHooks = [
|
||
# `role.bash` is copied from `../build-support/setup-hooks/role.bash` due to the requirements not to reference
|
||
# paths outside the package when it is in `by-name`. It needs to be kept in sync, but it fortunately does not
|
||
# change often. Once `build-support` is available as a package (or some other mechanism), it should be changed
|
||
# to whatever that replacement is.
|
||
./setup-hooks/role.bash
|
||
(substitute {
|
||
src = ./setup-hooks/sdk-hook.sh;
|
||
substitutions = [
|
||
"--subst-var-by"
|
||
"sdkVersion"
|
||
(lib.escapeShellArgs (lib.splitVersion sdkVersion))
|
||
];
|
||
})
|
||
];
|
||
|
||
installPhase =
|
||
let
|
||
sdkName = "MacOSX${lib.versions.majorMinor sdkVersion}.sdk";
|
||
sdkMajor = lib.versions.major sdkVersion;
|
||
in
|
||
''
|
||
runHook preInstall
|
||
|
||
mkdir -p "$sdkpath"
|
||
|
||
cp -rd . "$sdkpath/${sdkName}"
|
||
${lib.optionalString (lib.versionAtLeast finalAttrs.version "11.0") ''
|
||
ln -s "${sdkName}" "$sdkpath/MacOSX${sdkMajor}.sdk"
|
||
''}
|
||
ln -s "${sdkName}" "$sdkpath/MacOSX.sdk"
|
||
|
||
runHook postInstall
|
||
'';
|
||
|
||
passthru = {
|
||
sdkroot = finalAttrs.finalPackage + "/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk";
|
||
};
|
||
|
||
__structuredAttrs = true;
|
||
|
||
meta = {
|
||
description = "Frameworks and libraries required for building packages on Darwin";
|
||
homepage = "https://developer.apple.com";
|
||
maintainers = lib.teams.darwin.members;
|
||
platforms = lib.platforms.darwin;
|
||
badPlatforms =
|
||
lib.optionals (lib.versionAtLeast sdkVersion "10.15") [ lib.systems.inspect.patterns.is32bit ]
|
||
++ lib.optionals (lib.versionOlder sdkVersion "11.0") [ lib.systems.inspect.patterns.isAarch ];
|
||
};
|
||
})
|
||
)
|