nixpkgs/pkgs/top-level/darwin-packages.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

328 lines
9.7 KiB
Nix
Raw Normal View History

{
lib,
buildPackages,
pkgs,
targetPackages,
generateSplicesForMkScope,
makeScopeWithSplicing',
stdenv,
preLibcCrossHeaders,
config,
}:
let
2020-11-19 08:22:54 +00:00
# Prefix for binaries. Customarily ends with a dash separator.
#
# TODO(@Ericson2314) Make unconditional, or optional but always true by
# default.
targetPrefix = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) (
stdenv.targetPlatform.config + "-"
);
# Bootstrap `fetchurl` needed to build SDK packages without causing an infinite recursion.
fetchurlBoot = import ../build-support/fetchurl/boot.nix {
inherit (stdenv) system;
};
2024-03-27 01:19:39 +00:00
aliases =
self: super:
lib.optionalAttrs config.allowAliases (import ../top-level/darwin-aliases.nix lib self super pkgs);
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 [ ]);
});
mkStub = pkgs.callPackage ../os-specific/darwin/apple-sdk/mk-stub.nix { };
in
makeScopeWithSplicing' {
otherSplices = generateSplicesForMkScope "darwin";
extra = spliced: spliced.apple_sdk.frameworks;
f = lib.extends aliases (
self:
let
inherit (self) mkDerivation callPackage;
# Open source packages that are built from source
apple-source-packages = lib.packagesFromDirectoryRecursive {
callPackage = self.callPackage;
directory = ../os-specific/darwin/apple-source-releases;
};
# Compatibility packages that arent necessary anymore
apple-source-headers = {
libresolvHeaders = lib.getDev self.libresolv;
libutilHeaders = lib.getDev self.libutil;
};
2020-11-19 07:45:11 +00:00
# Must use pkgs.callPackage to avoid infinite recursion.
impure-cmds = pkgs.callPackage ../os-specific/darwin/impure-cmds { };
2020-11-19 08:23:29 +00:00
# macOS 10.12 SDK
apple_sdk_10_12 = pkgs.callPackage ../os-specific/darwin/apple-sdk { };
2020-11-19 08:23:29 +00:00
# macOS 11.0 SDK
apple_sdk_11_0 = pkgs.callPackage ../os-specific/darwin/apple-sdk-11.0 { };
2024-07-11 21:09:04 +00:00
# macOS 12.3 SDK
apple_sdk_12_3 = pkgs.callPackage ../os-specific/darwin/apple-sdk-12.3 { };
2020-11-19 08:23:29 +00:00
# Pick an SDK
apple_sdk =
{
"10.12" = apple_sdk_10_12;
"11.0" = apple_sdk_11_0;
}
.${stdenv.hostPlatform.darwinSdkVersion}
2020-11-19 07:45:11 +00:00
or (throw "Unsupported sdk: ${stdenv.hostPlatform.darwinSdkVersion}");
stubs =
{
2020-11-19 07:45:11 +00:00
inherit
apple_sdk
apple_sdk_10_12
apple_sdk_11_0
2024-07-11 21:09:04 +00:00
apple_sdk_12_3
;
libobjc = self.objc4;
}
// lib.genAttrs [
"CF"
"CarbonHeaders"
"CommonCrypto"
"CoreSymbolication"
"IOKit"
"Libc"
"Libinfo"
"Libm"
"Libnotify"
"Librpcsvc"
"Libsystem"
"LibsystemCross"
2020-11-19 07:45:11 +00:00
"Security"
"architecture"
"configd"
"configdHeaders"
"darwin-stubs"
"dtrace"
"dyld"
"eap8021x"
"hfs"
"hfsHeaders"
"launchd"
"libclosure"
2020-11-19 07:45:11 +00:00
"libdispatch"
"libmalloc"
"libplatform"
"libpthread"
"mDNSResponder"
"objc4"
"ppp"
"xnu"
] (mkStub apple_sdk.version);
in
2020-11-19 07:45:11 +00:00
impure-cmds
// apple-source-packages
// apple-source-headers
// stubs
// {
stdenvNoCF = stdenv.override {
extraBuildInputs = [ ];
};
2020-11-19 07:41:41 +00:00
inherit (self.adv_cmds) ps;
binutils-unwrapped = callPackage ../os-specific/darwin/binutils {
inherit (pkgs) cctools;
inherit (pkgs.llvmPackages) clang-unwrapped llvm llvm-manpages;
};
2023-07-08 09:44:20 +00:00
binutils = pkgs.wrapBintoolsWith {
libc = if stdenv.targetPlatform != stdenv.hostPlatform then pkgs.libcCross else pkgs.stdenv.cc.libc;
bintools = self.binutils-unwrapped;
};
# x86-64 Darwin gnat-bootstrap emits assembly
# with MOVQ as the mnemonic for quadword interunit moves
# such as `movq %rbp, %xmm0`.
# The clang integrated assembler recognises this as valid,
2023-01-18 16:29:22 +00:00
# but unfortunately the cctools.gas GNU assembler does not;
# it instead uses MOVD as the mnemonic.
# The assembly that a GCC build emits is determined at build time
# and cannot be changed afterwards.
#
# To build GNAT on x86-64 Darwin, therefore,
# we need both the clang _and_ the cctools.gas assemblers to be available:
# the former to build at least the stage1 compiler,
# and the latter at least to be detectable
# as the target for the final compiler.
binutilsDualAs-unwrapped = pkgs.buildEnv {
name = "${lib.getName self.binutils-unwrapped}-dualas-${lib.getVersion self.binutils-unwrapped}";
paths = [
self.binutils-unwrapped
(lib.getOutput "gas" pkgs.cctools)
];
};
binutilsDualAs = self.binutils.override {
bintools = self.binutilsDualAs-unwrapped;
};
2018-02-05 16:41:35 +00:00
binutilsNoLibc = pkgs.wrapBintoolsWith {
libc = preLibcCrossHeaders;
bintools = self.binutils-unwrapped;
};
# Removes propagated packages from the stdenv, so those packages can be built without depending upon themselves.
bootstrapStdenv = mkBootstrapStdenv pkgs.stdenv;
libSystem = callPackage ../os-specific/darwin/libSystem { };
# TODO(@connorbaker): See https://github.com/NixOS/nixpkgs/issues/229389.
cf-private = self.apple_sdk.frameworks.CoreFoundation;
2017-05-11 18:37:59 +00:00
DarwinTools = callPackage ../os-specific/darwin/DarwinTools { };
2021-06-07 10:51:17 +00:00
print-reexports = callPackage ../os-specific/darwin/print-reexports { };
rewrite-tbd = callPackage ../os-specific/darwin/rewrite-tbd { };
darwin.stdenv: use CoreFoundation instead of CF This patch switches the CoreFoundation on x86_64-darwin from the open source swift-corelibs-foundation (CF) to the system CoreFoundation. This change was motivated by failures building packages for the current staging-next cycle #263535 due to an apparent incompatibility with the rpath-based approach to choosing CF or CoreFoundation and macOS 14. This error often manifests as a crash with an Illegal Instruction. For example, building aws-sdk-cpp for building Nix will fail this way. https://hydra.nixos.org/build/239459417/nixlog/1 Application Specific Information: CF objects must have a non-zero isa Error Formulating Crash Report: PC register does not match crashing frame (0x0 vs 0x7FF8094DD640) Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 CoreFoundation 0x7ff8094dd640 CF_IS_OBJC.cold.1 + 14 1 CoreFoundation 0x7ff8094501d0 CF_IS_OBJC + 60 2 CoreFoundation 0x7ff8093155e8 CFRelease + 40 3 ??? 0x10c7a2c61 s_aws_secure_transport_ctx_destroy + 65 4 ??? 0x10c87ba32 aws_ref_count_release + 34 5 ??? 0x10c7b7adb aws_tls_connection_options_clean_up + 27 6 ??? 0x10c596db4 Aws::Crt::Io::TlsConnectionOptions::~TlsConnectionOptions() + 20 7 ??? 0x10c2d249c Aws::CleanupCrt() + 92 8 ??? 0x10c2d1ff0 Aws::ShutdownAPI(Aws::SDKOptions const&) + 64 9 ??? 0x102d9bc6f main + 335 10 dyld 0x202f333a6 start + 1942 According to a [post][1] on the Apple developer forums, hardening was added to CoreFoundation, and this particular message occurs when you attempt to release an object it does not recognize as a valid CF object. (Thank you to @lilyinstarlight for finding this post). When I switched aws-sdk-cpp to link against CoreFoundation instead of CF, the error went away. Somehow both libraries were being used. To prevent dependent packages from linking the wrong CoreFoundation, it would need to be added as a propagated build input. Note that there are other issues related to mixing CF and CoreFoundation frameworks. #264503 fixes an issue with abseil-cpp where it propagates CF, causing issues when using a different SDK version. Mixing versions can also cause crashes with Python when a shared object is loaded that is linked to the “wrong” CoreFoundation. `NIX_COREFOUNDATION_RPATH` is supposed to make sure the right CoreFoundation is being used, but it does not appear to be enough on macOS 14 (presumably due to the hardening). While it is possible to propagate CoreFoundation manually, the cleaner solution is to make it the default. CF remains available as `darwin.swift-corelibs-foundation`. [1]: https://developer.apple.com/forums/thread/739355
2023-11-02 00:56:50 +00:00
checkReexportsHook = pkgs.makeSetupHook {
name = "darwin-check-reexports-hook";
propagatedBuildInputs = [ pkgs.darwin.print-reexports ];
} ../os-specific/darwin/print-reexports/setup-hook.sh;
libunwind = callPackage ../os-specific/darwin/libunwind { };
2024-02-28 14:36:13 +00:00
sigtool = callPackage ../os-specific/darwin/sigtool { };
signingUtils = callPackage ../os-specific/darwin/signing-utils { };
postLinkSignHook = callPackage ../os-specific/darwin/signing-utils/post-link-sign-hook.nix { };
autoSignDarwinBinariesHook = pkgs.makeSetupHook {
name = "auto-sign-darwin-binaries-hook";
propagatedBuildInputs = [ self.signingUtils ];
} ../os-specific/darwin/signing-utils/auto-sign-hook.sh;
iosSdkPkgs = callPackage ../os-specific/darwin/xcode/sdk-pkgs.nix {
buildIosSdk = buildPackages.darwin.iosSdkPkgs.sdk;
targetIosSdkPkgs = targetPackages.darwin.iosSdkPkgs;
inherit (pkgs.llvmPackages) clang-unwrapped;
};
lsusb = callPackage ../os-specific/darwin/lsusb { };
openwith = callPackage ../os-specific/darwin/openwith { };
stubs = pkgs.callPackages ../os-specific/darwin/stubs { };
trash = callPackage ../os-specific/darwin/trash { };
inherit (self.file_cmds) xattr;
inherit (pkgs.callPackages ../os-specific/darwin/xcode { })
xcode_8_1
xcode_8_2
2022-07-06 07:12:11 +00:00
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
2022-07-06 07:12:11 +00:00
xcode_11_1
xcode_11_2
xcode_11_3_1
xcode_11_4
xcode_11_5
xcode_11_6
xcode_11_7
xcode_12
2022-07-06 07:12:11 +00:00
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
2022-07-06 07:12:11 +00:00
xcode_13_1
xcode_13_2
xcode_13_3
xcode_13_3_1
xcode_13_4
xcode_13_4_1
xcode_14
2022-07-06 07:12:11 +00:00
xcode_14_1
xcode_15
2024-09-20 09:01:45 +00:00
xcode_15_0_1
xcode_15_1
xcode_15_2
xcode_15_3
xcode_15_4
xcode_16
2024-10-27 15:16:04 +00:00
xcode_16_1
xcode
;
xcodeProjectCheckHook = pkgs.makeSetupHook {
name = "xcode-project-check-hook";
propagatedBuildInputs = [ pkgs.pkgsBuildHost.openssl ];
} ../os-specific/darwin/xcode-project-check-hook/setup-hook.sh;
darwin.stdenv: use CoreFoundation instead of CF This patch switches the CoreFoundation on x86_64-darwin from the open source swift-corelibs-foundation (CF) to the system CoreFoundation. This change was motivated by failures building packages for the current staging-next cycle #263535 due to an apparent incompatibility with the rpath-based approach to choosing CF or CoreFoundation and macOS 14. This error often manifests as a crash with an Illegal Instruction. For example, building aws-sdk-cpp for building Nix will fail this way. https://hydra.nixos.org/build/239459417/nixlog/1 Application Specific Information: CF objects must have a non-zero isa Error Formulating Crash Report: PC register does not match crashing frame (0x0 vs 0x7FF8094DD640) Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 CoreFoundation 0x7ff8094dd640 CF_IS_OBJC.cold.1 + 14 1 CoreFoundation 0x7ff8094501d0 CF_IS_OBJC + 60 2 CoreFoundation 0x7ff8093155e8 CFRelease + 40 3 ??? 0x10c7a2c61 s_aws_secure_transport_ctx_destroy + 65 4 ??? 0x10c87ba32 aws_ref_count_release + 34 5 ??? 0x10c7b7adb aws_tls_connection_options_clean_up + 27 6 ??? 0x10c596db4 Aws::Crt::Io::TlsConnectionOptions::~TlsConnectionOptions() + 20 7 ??? 0x10c2d249c Aws::CleanupCrt() + 92 8 ??? 0x10c2d1ff0 Aws::ShutdownAPI(Aws::SDKOptions const&) + 64 9 ??? 0x102d9bc6f main + 335 10 dyld 0x202f333a6 start + 1942 According to a [post][1] on the Apple developer forums, hardening was added to CoreFoundation, and this particular message occurs when you attempt to release an object it does not recognize as a valid CF object. (Thank you to @lilyinstarlight for finding this post). When I switched aws-sdk-cpp to link against CoreFoundation instead of CF, the error went away. Somehow both libraries were being used. To prevent dependent packages from linking the wrong CoreFoundation, it would need to be added as a propagated build input. Note that there are other issues related to mixing CF and CoreFoundation frameworks. #264503 fixes an issue with abseil-cpp where it propagates CF, causing issues when using a different SDK version. Mixing versions can also cause crashes with Python when a shared object is loaded that is linked to the “wrong” CoreFoundation. `NIX_COREFOUNDATION_RPATH` is supposed to make sure the right CoreFoundation is being used, but it does not appear to be enough on macOS 14 (presumably due to the hardening). While it is possible to propagate CoreFoundation manually, the cleaner solution is to make it the default. CF remains available as `darwin.swift-corelibs-foundation`. [1]: https://developer.apple.com/forums/thread/739355
2023-11-02 00:56:50 +00:00
# Formerly the CF attribute. Use this is you need the open source release.
swift-corelibs-foundation = callPackage ../os-specific/darwin/swift-corelibs/corefoundation.nix { };
# As the name says, this is broken, but I don't want to lose it since it's a direction we want to go in
# libdispatch-broken = callPackage ../os-specific/darwin/swift-corelibs/libdispatch.nix { };
2024-02-28 14:36:13 +00:00
# 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"; } ];
};
}
);
}