diff options
Diffstat (limited to 'nixpkgs/pkgs/top-level/darwin-packages.nix')
-rw-r--r-- | nixpkgs/pkgs/top-level/darwin-packages.nix | 155 |
1 files changed, 126 insertions, 29 deletions
diff --git a/nixpkgs/pkgs/top-level/darwin-packages.nix b/nixpkgs/pkgs/top-level/darwin-packages.nix index 3ece95c58451..a7f29d672611 100644 --- a/nixpkgs/pkgs/top-level/darwin-packages.nix +++ b/nixpkgs/pkgs/top-level/darwin-packages.nix @@ -1,29 +1,84 @@ -{ buildPackages, pkgs, targetPackages -, darwin, stdenv, callPackage, callPackages, newScope +{ lib +, buildPackages, pkgs, targetPackages +, pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget, pkgsHostHost, pkgsTargetTarget +, stdenv, splicePackages, newScope +, preLibcCrossHeaders }: let - apple-source-releases = callPackage ../os-specific/darwin/apple-source-releases { }; + otherSplices = { + selfBuildBuild = pkgsBuildBuild.darwin; + selfBuildHost = pkgsBuildHost.darwin; + selfBuildTarget = pkgsBuildTarget.darwin; + selfHostHost = pkgsHostHost.darwin; + selfTargetTarget = pkgsTargetTarget.darwin or {}; # might be missing + }; - impure-cmds = callPackage ../os-specific/darwin/impure-cmds { }; + # 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 + "-"); in -(impure-cmds // apple-source-releases // { +lib.makeScopeWithSplicing splicePackages newScope otherSplices (_: {}) (spliced: spliced.apple_sdk.frameworks) (self: let + inherit (self) mkDerivation callPackage; - callPackage = newScope (darwin.apple_sdk.frameworks // darwin); + # Must use pkgs.callPackage to avoid infinite recursion. - stdenvNoCF = stdenv.override { - extraBuildInputs = []; + # Open source packages that are built from source + appleSourcePackages = pkgs.callPackage ../os-specific/darwin/apple-source-releases { } self; + + impure-cmds = pkgs.callPackage ../os-specific/darwin/impure-cmds { }; + + # macOS 10.12 SDK + apple_sdk_10_12 = pkgs.callPackage ../os-specific/darwin/apple-sdk { + inherit (buildPackages.darwin) print-reexports; + inherit (self) darwin-stubs; + }; + + # macOS 11.0 SDK + apple_sdk_11_0 = pkgs.callPackage ../os-specific/darwin/apple-sdk-11.0 { }; + + # Pick an SDK + apple_sdk = if stdenv.hostPlatform.isAarch64 then apple_sdk_11_0 else apple_sdk_10_12; + + # Pick the source of libraries: either Apple's open source releases, or the + # SDK. + useAppleSDKLibs = stdenv.hostPlatform.isAarch64; + + selectAttrs = attrs: names: + lib.listToAttrs (lib.concatMap (n: if attrs ? "${n}" then [(lib.nameValuePair n attrs."${n}")] else []) names); + + chooseLibs = ( + # There are differences in which libraries are exported. Avoid evaluation + # errors when a package is not provided. + selectAttrs ( + if useAppleSDKLibs + then apple_sdk + else appleSourcePackages + ) ["Libsystem" "LibsystemCross" "libcharset" "libunwind" "objc4" "configd" "IOKit"] + ) // { + inherit ( + if useAppleSDKLibs + then apple_sdk.frameworks + else appleSourcePackages + ) Security; }; +in + +impure-cmds // appleSourcePackages // chooseLibs // { - apple_sdk = callPackage ../os-specific/darwin/apple-sdk { - inherit (darwin) darwin-stubs print-reexports; + inherit apple_sdk; + + stdenvNoCF = stdenv.override { + extraBuildInputs = []; }; binutils-unwrapped = callPackage ../os-specific/darwin/binutils { - inherit (darwin) cctools; inherit (pkgs) binutils-unwrapped; - inherit (pkgs.llvmPackages_7) llvm clang-unwrapped; + inherit (pkgs.llvmPackages) llvm clang-unwrapped; }; binutils = pkgs.wrapBintoolsWith { @@ -31,52 +86,77 @@ in if stdenv.targetPlatform != stdenv.hostPlatform then pkgs.libcCross else pkgs.stdenv.cc.libc; - bintools = darwin.binutils-unwrapped; + bintools = self.binutils-unwrapped; + }; + + binutilsNoLibc = pkgs.wrapBintoolsWith { + libc = preLibcCrossHeaders; + bintools = self.binutils-unwrapped; }; cctools = callPackage ../os-specific/darwin/cctools/port.nix { - inherit (darwin) libobjc maloader libtapi; stdenv = if stdenv.isDarwin then stdenv else pkgs.libcxxStdenv; - libcxxabi = pkgs.libcxxabi; }; # TODO: remove alias. - cf-private = darwin.apple_sdk.frameworks.CoreFoundation; + cf-private = self.apple_sdk.frameworks.CoreFoundation; DarwinTools = callPackage ../os-specific/darwin/DarwinTools { }; darwin-stubs = callPackage ../os-specific/darwin/darwin-stubs { }; - print-reexports = callPackage ../os-specific/darwin/apple-sdk/print-reexports { }; + print-reexports = callPackage ../os-specific/darwin/print-reexports { }; + + rewrite-tbd = callPackage ../os-specific/darwin/rewrite-tbd { }; + + checkReexportsHook = pkgs.makeSetupHook { + deps = [ pkgs.darwin.print-reexports ]; + } ../os-specific/darwin/print-reexports/setup-hook.sh; + + sigtool = callPackage ../os-specific/darwin/sigtool { }; + + postLinkSignHook = pkgs.writeTextFile { + name = "post-link-sign-hook"; + executable = true; + + text = '' + CODESIGN_ALLOCATE=${targetPrefix}codesign_allocate \ + ${self.sigtool}/bin/codesign -f -s - "$linkerOutput" + ''; + }; + + signingUtils = callPackage ../os-specific/darwin/signing-utils { }; + + autoSignDarwinBinariesHook = pkgs.makeSetupHook { + deps = [ self.signingUtils ]; + } ../os-specific/darwin/signing-utils/auto-sign-hook.sh; maloader = callPackage ../os-specific/darwin/maloader { - inherit (darwin) opencflite; }; insert_dylib = callPackage ../os-specific/darwin/insert_dylib { }; - iosSdkPkgs = darwin.callPackage ../os-specific/darwin/xcode/sdk-pkgs.nix { + iosSdkPkgs = callPackage ../os-specific/darwin/xcode/sdk-pkgs.nix { buildIosSdk = buildPackages.darwin.iosSdkPkgs.sdk; targetIosSdkPkgs = targetPackages.darwin.iosSdkPkgs; - xcode = darwin.xcode; inherit (pkgs.llvmPackages) clang-unwrapped; }; iproute2mac = callPackage ../os-specific/darwin/iproute2mac { }; - libobjc = apple-source-releases.objc4; + libobjc = self.objc4; lsusb = callPackage ../os-specific/darwin/lsusb { }; opencflite = callPackage ../os-specific/darwin/opencflite { }; - stubs = callPackages ../os-specific/darwin/stubs { }; + stubs = pkgs.callPackages ../os-specific/darwin/stubs { }; - trash = darwin.callPackage ../os-specific/darwin/trash { }; + trash = callPackage ../os-specific/darwin/trash { }; usr-include = callPackage ../os-specific/darwin/usr-include { }; - inherit (callPackages ../os-specific/darwin/xcode { }) + inherit (pkgs.callPackages ../os-specific/darwin/xcode { }) xcode_8_1 xcode_8_2 xcode_9_1 xcode_9_2 xcode_9_4 xcode_9_4_1 xcode_10_2 xcode_10_2_1 xcode_10_3 @@ -85,10 +165,29 @@ in CoreSymbolication = callPackage ../os-specific/darwin/CoreSymbolication { }; - CF = callPackage ../os-specific/darwin/swift-corelibs/corefoundation.nix { inherit (darwin) objc4 ICU; }; + # TODO: make swift-corefoundation build with apple_sdk_11_0.Libsystem + CF = if useAppleSDKLibs + then + # This attribute (CF) is included in extraBuildInputs in the stdenv. This + # is typically the open source project. When a project refers to + # "CoreFoundation" it has an extra setup hook to force impure system + # CoreFoundation into the link step. + # + # In this branch, we only have a single "CoreFoundation" to choose from. + # To be compatible with the existing convention, we define + # CoreFoundation with the setup hook, and CF as the same package but + # with the setup hook removed. + # + # This may seem unimportant, but without it packages (e.g., bacula) will + # fail with linker errors referring ___CFConstantStringClassReference. + # It's not clear to me why some packages need this extra setup. + lib.overrideDerivation apple_sdk.frameworks.CoreFoundation (drv: { + setupHook = null; + }) + else 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 { inherit (darwin) apple_sdk_sierra xnu; }; + # libdispatch-broken = callPackage ../os-specific/darwin/swift-corelibs/libdispatch.nix { }; darling = callPackage ../os-specific/darwin/darling/default.nix { }; @@ -96,8 +195,6 @@ in ios-deploy = callPackage ../os-specific/darwin/ios-deploy {}; - discrete-scroll = callPackage ../os-specific/darwin/discrete-scroll { - inherit (darwin.apple_sdk.frameworks) Cocoa; - }; + discrete-scroll = callPackage ../os-specific/darwin/discrete-scroll { }; }) |