darwin.apple_sdk_11_0: convert frameworks and libs to stubs

This commit is contained in:
Randy Eckenrode
2024-10-10 16:22:59 -04:00
parent 17aeace4d9
commit fcd9dc8ac6
13 changed files with 295 additions and 869 deletions
@@ -1,268 +0,0 @@
{ lib, stdenvNoCC, buildPackages, fetchurl, xar, cpio, pkgs, python3, pbzx, MacOSX-SDK }:
# TODO: reorganize to make this just frameworks, and move libs to default.nix
let
stdenv = stdenvNoCC;
standardFrameworkPath = name: private:
"/System/Library/${lib.optionalString private "Private"}Frameworks/${name}.framework";
mkDepsRewrites = deps:
let
mergeRewrites = x: y: {
prefix = lib.mergeAttrs (x.prefix or {}) (y.prefix or {});
const = lib.mergeAttrs (x.const or {}) (y.const or {});
};
rewriteArgs = { prefix ? {}, const ? {} }: lib.concatLists (
(lib.mapAttrsToList (from: to: [ "-p" "${from}:${to}" ]) prefix) ++
(lib.mapAttrsToList (from: to: [ "-c" "${from}:${to}" ]) const)
);
rewrites = depList: lib.fold mergeRewrites {}
(map (dep: dep.tbdRewrites)
(lib.filter (dep: dep ? tbdRewrites) depList));
in
lib.escapeShellArgs (rewriteArgs (rewrites (builtins.attrValues deps)));
mkFramework = { name, deps, private ? false }:
let self = stdenv.mkDerivation {
pname = "apple-${lib.optionalString private "private-"}framework-${name}";
version = MacOSX-SDK.version;
dontUnpack = true;
# because we copy files from the system
preferLocalBuild = true;
disallowedRequisites = [ MacOSX-SDK ];
nativeBuildInputs = [ buildPackages.darwin.rewrite-tbd ];
installPhase = ''
mkdir -p $out/Library/Frameworks
cp -r ${MacOSX-SDK}${standardFrameworkPath name private} $out/Library/Frameworks
if [[ -d ${MacOSX-SDK}/usr/lib/swift/${name}.swiftmodule ]]; then
mkdir -p $out/lib/swift
cp -r -t $out/lib/swift \
${MacOSX-SDK}/usr/lib/swift/${name}.swiftmodule \
${MacOSX-SDK}/usr/lib/swift/libswift${name}.tbd
fi
# Fix and check tbd re-export references
chmod u+w -R $out
find $out -name '*.tbd' -type f | while read tbd; do
echo "Fixing re-exports in $tbd"
rewrite-tbd \
-p ${standardFrameworkPath name private}/:$out/Library/Frameworks/${name}.framework/ \
-p /usr/lib/swift/:$out/lib/swift/ \
${mkDepsRewrites deps} \
-r ${builtins.storeDir} \
"$tbd"
done
'';
propagatedBuildInputs = builtins.attrValues deps;
passthru = {
tbdRewrites = {
prefix."${standardFrameworkPath name private}/" = "${self}/Library/Frameworks/${name}.framework/";
};
};
meta = with lib; {
description = "Apple SDK framework ${name}";
maintainers = with maintainers; [ copumpkin ];
platforms = platforms.darwin;
};
};
in self;
framework = name: deps: mkFramework { inherit name deps; private = false; };
privateFramework = name: deps: mkFramework { inherit name deps; private = true; };
in rec {
libs = {
xpc = stdenv.mkDerivation {
name = "apple-lib-xpc";
dontUnpack = true;
installPhase = ''
mkdir -p $out/include
pushd $out/include >/dev/null
cp -r "${MacOSX-SDK}/usr/include/xpc" $out/include/xpc
cp "${MacOSX-SDK}/usr/include/launch.h" $out/include/launch.h
popd >/dev/null
'';
};
Xplugin = stdenv.mkDerivation {
name = "apple-lib-Xplugin";
dontUnpack = true;
propagatedBuildInputs = with frameworks; [
OpenGL ApplicationServices Carbon IOKit CoreGraphics CoreServices CoreText
];
installPhase = ''
mkdir -p $out/include $out/lib
ln -s "${MacOSX-SDK}/include/Xplugin.h" $out/include/Xplugin.h
cp ${MacOSX-SDK}/usr/lib/libXplugin.1.tbd $out/lib
ln -s libXplugin.1.tbd $out/lib/libXplugin.tbd
'';
};
utmp = stdenv.mkDerivation {
name = "apple-lib-utmp";
dontUnpack = true;
installPhase = ''
mkdir -p $out/include
pushd $out/include >/dev/null
ln -s "${MacOSX-SDK}/include/utmp.h"
ln -s "${MacOSX-SDK}/include/utmpx.h"
popd >/dev/null
'';
};
sandbox = stdenv.mkDerivation {
name = "apple-lib-sandbox";
dontUnpack = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/include $out/lib
ln -s "${MacOSX-SDK}/usr/include/sandbox.h" $out/include/sandbox.h
cp "${MacOSX-SDK}/usr/lib/libsandbox.1.tbd" $out/lib
ln -s libsandbox.1.tbd $out/lib/libsandbox.tbd
'';
};
libDER = stdenv.mkDerivation {
name = "apple-lib-libDER";
dontUnpack = true;
installPhase = ''
mkdir -p $out/include
cp -r ${MacOSX-SDK}/usr/include/libDER $out/include
'';
};
simd = stdenv.mkDerivation {
name = "apple-lib-simd";
dontUnpack = true;
installPhase = ''
mkdir -p $out/include
cp -r ${MacOSX-SDK}/usr/include/simd $out/include
'';
};
};
frameworks = let
# Dependency map created by gen-frameworks.py.
generatedDeps = import ./frameworks.nix {
inherit frameworks libs;
};
# Additional dependencies that are not picked up by gen-frameworks.py.
# Some of these are simply private frameworks the generator does not see.
extraDeps = with libs; with frameworks; let
inherit (pkgs.darwin.apple_sdk_11_0) libnetwork;
libobjc = pkgs.darwin.apple_sdk_11_0.objc4;
in {
# Below this comment are entries migrated from before the generator was
# added. If, for a given framework, you are able to reverify the extra
# deps are really necessary on top of the generator deps, move it above
# this comment (and maybe document your findings).
AVFoundation = { inherit ApplicationServices AVFCapture AVFCore; };
Accelerate = { inherit CoreWLAN IOBluetooth; };
AddressBook = { inherit AddressBookCore ContactsPersistence libobjc; };
AppKit = { inherit AudioToolbox AudioUnit UIFoundation; };
AudioToolbox = { inherit AudioToolboxCore; };
AudioUnit = { inherit Carbon CoreAudio; };
Carbon = { inherit IOKit QuartzCore libobjc; };
CoreAudio = { inherit IOKit; };
CoreFoundation = { inherit libobjc; };
CoreGraphics = { inherit SystemConfiguration; };
CoreMIDIServer = { inherit CoreMIDI; };
CoreMedia = { inherit ApplicationServices AudioToolbox AudioUnit; };
CoreServices = { inherit CoreAudio NetFS ServiceManagement; };
CoreWLAN = { inherit SecurityFoundation; };
DiscRecording = { inherit IOKit libobjc; };
Foundation = { inherit SystemConfiguration libobjc; };
GameKit = { inherit GameCenterFoundation GameCenterUI GameCenterUICore ReplayKit; };
ICADevices = { inherit Carbon libobjc; };
IOBluetooth = { inherit CoreBluetooth; };
JavaScriptCore = { inherit libobjc; };
Kernel = { inherit IOKit; };
LinkPresentation = { inherit URLFormatting; };
MediaToolbox = { inherit AudioUnit; };
MetricKit = { inherit SignpostMetrics; };
Network = { inherit libnetwork; };
PCSC = { inherit CoreData; };
PassKit = { inherit PassKitCore; };
QTKit = { inherit CoreMedia CoreMediaIO MediaToolbox VideoToolbox; };
Quartz = { inherit QTKit; };
QuartzCore = { inherit ApplicationServices CoreImage CoreVideo Metal OpenCL libobjc; };
Security = { inherit IOKit libDER; };
TWAIN = { inherit Carbon; };
VideoDecodeAcceleration = { inherit CoreVideo; };
WebKit = { inherit ApplicationServices Carbon libobjc; };
};
# Overrides for framework derivations.
overrides = super: {
CoreFoundation = lib.overrideDerivation super.CoreFoundation (drv: {
setupHook = ./cf-setup-hook.sh;
});
# This framework doesn't exist in newer SDKs (somewhere around 10.13), but
# there are references to it in nixpkgs.
QuickTime = throw "QuickTime framework not available";
# Seems to be appropriate given https://developer.apple.com/forums/thread/666686
JavaVM = super.JavaNativeFoundation;
CoreVideo = lib.overrideDerivation super.CoreVideo (drv: {
installPhase = drv.installPhase + ''
# When used as a module, complains about a missing import for
# Darwin.C.stdint. Apparently fixed in later SDKs.
sed -e "/CFBase.h/ i #include <stdint.h>" \
-i $out/Library/Frameworks/CoreVideo.framework/Headers/CVBase.h
'';
});
System = lib.overrideDerivation super.System (drv: {
installPhase = drv.installPhase + ''
# Contrarily to the other frameworks, System framework's TBD file
# is a symlink pointing to ${MacOSX-SDK}/usr/lib/libSystem.B.tbd.
# This produces an error when installing the framework as:
# 1. The original file is not copied into the output directory
# 2. Even if it was copied, the relative path wouldn't match
# Thus, it is easier to replace the file than to fix the symlink.
cp --remove-destination ${MacOSX-SDK}/usr/lib/libSystem.B.tbd \
$out/Library/Frameworks/System.framework/Versions/B/System.tbd
'';
});
};
# Merge extraDeps into generatedDeps.
deps = generatedDeps // (
lib.mapAttrs
(name: deps: generatedDeps.${name} // deps)
extraDeps
);
# Create derivations, and add private frameworks.
bareFrameworks = (lib.mapAttrs framework deps) // (
lib.mapAttrs privateFramework (import ./private-frameworks.nix {
inherit frameworks;
libobjc = pkgs.darwin.apple_sdk_11_0.objc4;
})
);
in
# Apply derivation overrides.
bareFrameworks // overrides bareFrameworks;
}
@@ -1,6 +0,0 @@
forceLinkCoreFoundationFramework() {
NIX_CFLAGS_COMPILE="-F@out@/Library/Frameworks${NIX_CFLAGS_COMPILE:+ }${NIX_CFLAGS_COMPILE-}"
NIX_LDFLAGS+=" @out@/Library/Frameworks/CoreFoundation.framework/CoreFoundation.tbd"
}
preConfigureHooks+=(forceLinkCoreFoundationFramework)
+290 -147
View File
@@ -1,160 +1,303 @@
{ stdenvNoCC, fetchurl, newScope, lib, pkgs
, stdenv, overrideCC
, xar, cpio, python3, pbzx }:
# Compatibility stubs for packages that used the old SDK frameworks.
# TODO(@reckenrode) Make these stubs warn after framework usage has been cleaned up in nixpkgs.
{
lib,
callPackage,
newScope,
overrideSDK,
pkgs,
stdenv,
stdenvNoCC,
}:
let
mkSusDerivation = args: stdenvNoCC.mkDerivation (args // {
dontBuild = true;
darwinDontCodeSign = true;
mkStub = callPackage ../apple-sdk/mk-stub.nix { } "11.0";
nativeBuildInputs = [ cpio pbzx ];
stdenvs =
{
stdenv = overrideSDK stdenv "11.0";
}
// builtins.listToAttrs (
map
(v: {
name = "llvmPackages_${v}";
value = pkgs."llvmPackages_${v}" // {
stdenv = overrideSDK pkgs."llvmPackages_${v}".stdenv "11.0";
};
})
[
"12"
"13"
"14"
"15"
"16"
]
);
in
stdenvs
// lib.genAttrs [
"CLTools_Executables"
"IOKit"
"Libsystem"
"LibsystemCross"
"MacOSX-SDK"
"configd"
"darwin-stubs"
"libcharset"
"libcompression"
"libnetwork"
"libpm"
"libunwind"
"objc4"
"sdkRoot"
] mkStub
// {
frameworks = lib.genAttrs [
"AGL"
"AVFCapture"
"AVFCore"
"AVFoundation"
"AVKit"
"Accelerate"
"Accessibility"
"Accounts"
"AdServices"
"AdSupport"
"AddressBook"
"AddressBookCore"
"AppKit"
"AppTrackingTransparency"
"Apple80211"
"AppleScriptKit"
"AppleScriptObjC"
"ApplicationServices"
"AudioToolbox"
"AudioToolboxCore"
"AudioUnit"
"AudioVideoBridging"
"AuthenticationServices"
"AutomaticAssessmentConfiguration"
"Automator"
"BackgroundTasks"
"BusinessChat"
"CFNetwork"
"CalendarStore"
"CallKit"
"Carbon"
"ClassKit"
"CloudKit"
"Cocoa"
"Collaboration"
"ColorSync"
"Combine"
"Contacts"
"ContactsPersistence"
"ContactsUI"
"CoreAudio"
"CoreAudioKit"
"CoreAudioTypes"
"CoreBluetooth"
"CoreData"
"CoreDisplay"
"CoreFoundation"
"CoreGraphics"
"CoreHaptics"
"CoreImage"
"CoreLocation"
"CoreMIDI"
"CoreMIDIServer"
"CoreML"
"CoreMedia"
"CoreMediaIO"
"CoreMotion"
"CoreServices"
"CoreSpotlight"
"CoreSymbolication"
"CoreTelephony"
"CoreText"
"CoreVideo"
"CoreWLAN"
"CryptoKit"
"CryptoTokenKit"
"DVDPlayback"
"DebugSymbols"
"DeveloperToolsSupport"
"DeviceCheck"
"DirectoryService"
"DiscRecording"
"DiscRecordingUI"
"DiskArbitration"
"DisplayServices"
"DriverKit"
"EventKit"
"ExceptionHandling"
"ExecutionPolicy"
"ExternalAccessory"
"FWAUserLib"
"FileProvider"
"FileProviderUI"
"FinderSync"
"ForceFeedback"
"Foundation"
"GLKit"
"GLUT"
"GSS"
"GameCenterFoundation"
"GameCenterUI"
"GameCenterUICore"
"GameController"
"GameKit"
"GameplayKit"
"HIDDriverKit"
"Hypervisor"
"ICADevices"
"IMServicePlugIn"
"IOBluetooth"
"IOBluetoothUI"
"IOKit"
"IOSurface"
"IOUSBHost"
"IdentityLookup"
"ImageCaptureCore"
"ImageIO"
"InputMethodKit"
"InstallerPlugins"
"InstantMessage"
"Intents"
"JavaNativeFoundation"
"JavaRuntimeSupport"
"JavaScriptCore"
"JavaVM"
"Kerberos"
"Kernel"
"KernelManagement"
"LDAP"
"LatentSemanticMapping"
"LinkPresentation"
"LocalAuthentication"
"MLCompute"
"MapKit"
"MediaAccessibility"
"MediaLibrary"
"MediaPlayer"
"MediaRemote"
"MediaToolbox"
"Message"
"Metal"
"MetalKit"
"MetalPerformanceShaders"
"MetalPerformanceShadersGraph"
"MetricKit"
"ModelIO"
"MultipeerConnectivity"
"MultitouchSupport"
"NaturalLanguage"
"NearbyInteraction"
"NetFS"
"Network"
"NetworkExtension"
"NetworkingDriverKit"
"NotificationCenter"
"OSAKit"
"OSLog"
"OpenAL"
"OpenCL"
"OpenDirectory"
"OpenGL"
"PCIDriverKit"
"PCSC"
"PDFKit"
"ParavirtualizedGraphics"
"PassKit"
"PassKitCore"
"PencilKit"
"Photos"
"PhotosUI"
"PreferencePanes"
"PushKit"
"Python"
"QTKit"
"Quartz"
"QuartzCore"
"QuickLook"
"QuickLookThumbnailing"
"QuickTime"
"RealityKit"
"ReplayKit"
"Ruby"
"SafariServices"
"SceneKit"
"ScreenSaver"
"ScreenTime"
"ScriptingBridge"
"Security"
"SecurityFoundation"
"SecurityInterface"
"SensorKit"
"ServiceManagement"
"SignpostMetrics"
"SkyLight"
"Social"
"SoundAnalysis"
"Speech"
"SpriteKit"
"StoreKit"
"SwiftUI"
"SyncServices"
"System"
"SystemConfiguration"
"SystemExtensions"
"TWAIN"
"Tcl"
"Tk"
"UIFoundation"
"URLFormatting"
"USBDriverKit"
"UniformTypeIdentifiers"
"UserNotifications"
"UserNotificationsUI"
"VideoDecodeAcceleration"
"VideoSubscriberAccount"
"VideoToolbox"
"Virtualization"
"Vision"
"WebKit"
"WidgetKit"
"iTunesLibrary"
"vmnet"
] mkStub;
outputs = [ "out" ];
libs = lib.genAttrs [
"Xplugin"
"utmp"
"libDER"
"xpc"
"sandbox"
"simd"
] mkStub;
unpackPhase = ''
pbzx $src | cpio -idm
'';
passthru = {
inherit (args) version;
};
});
MacOSX-SDK = mkSusDerivation {
pname = "MacOSX-SDK";
version = "11.0.0";
# https://swscan.apple.com/content/catalogs/others/index-11-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog
src = fetchurl {
url = "http://swcdn.apple.com/content/downloads/46/21/001-89745-A_56FM390IW5/v1um2qppgfdnam2e9cdqcqu2r6k8aa3lis/CLTools_macOSNMOS_SDK.pkg";
sha256 = "0n425smj4q1vxbza8fzwnk323fyzbbq866q32w288c44hl5yhwsf";
};
installPhase = ''
mv Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk $out
'';
};
CLTools_Executables = mkSusDerivation {
pname = "CLTools_Executables";
version = "11.0.0";
# https://swscan.apple.com/content/catalogs/others/index-11-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog
src = fetchurl {
url = "http://swcdn.apple.com/content/downloads/46/21/001-89745-A_56FM390IW5/v1um2qppgfdnam2e9cdqcqu2r6k8aa3lis/CLTools_Executables.pkg";
sha256 = "0nvb1qx7l81l2wcl8wvgbpsg5rcn51ylhivqmlfr2hrrv3zrrpl0";
};
installPhase = ''
mv Library/Developer/CommandLineTools $out
'';
};
mkCc = cc:
if lib.versionAtLeast stdenv.hostPlatform.darwinSdkVersion "11" then cc
else
cc.override {
bintools = stdenv.cc.bintools.override { libc = packages.Libsystem; };
libc = packages.Libsystem;
};
mkStdenv = stdenv:
if lib.versionAtLeast stdenv.hostPlatform.darwinSdkVersion "11" then stdenv
else
let
darwinMinVersion = "10.12";
darwinSdkVersion = "11.0";
in
(overrideCC stdenv (mkCc stdenv.cc)).override {
extraBuildInputs = [ pkgs.darwin.apple_sdk_11_0.frameworks.CoreFoundation ];
buildPlatform = stdenv.buildPlatform // { inherit darwinMinVersion darwinSdkVersion; };
hostPlatform = stdenv.hostPlatform // { inherit darwinMinVersion darwinSdkVersion; };
targetPlatform = stdenv.targetPlatform // { inherit darwinMinVersion darwinSdkVersion; };
};
stdenvs = {
stdenv = mkStdenv stdenv;
} // builtins.listToAttrs (map
(v: {
name = "llvmPackages_${v}";
value = pkgs."llvmPackages_${v}" // {
stdenv = mkStdenv pkgs."llvmPackages_${v}".stdenv;
clang = mkCc pkgs."llvmPackages_${v}".clang;
};
})
[ "12" "13" "14" "15" "16" ]
callPackage = newScope (
lib.optionalAttrs stdenv.isDarwin stdenvs // { inherit (pkgs.darwin.apple_sdk_11_0) rustPlatform; }
);
callPackage = newScope (packages // pkgs.darwin // { inherit MacOSX-SDK; });
packages = stdenvs // {
inherit (callPackage ./apple_sdk.nix { }) frameworks libs;
# TODO: this is nice to be private. is it worth the callPackage above?
# Probably, I don't think that callPackage costs much at all.
inherit MacOSX-SDK CLTools_Executables;
Libsystem = callPackage ./libSystem.nix { };
LibsystemCross = pkgs.darwin.Libsystem;
libcharset = callPackage ./libcharset.nix { };
libcompression = callPackage ./libcompression.nix { };
libunwind = callPackage ./libunwind.nix { };
libnetwork = callPackage ./libnetwork.nix { };
libpm = callPackage ./libpm.nix { };
# Avoid introducing a new objc4 if stdenv already has one, to prevent
# conflicting LLVM modules.
objc4 = stdenv.objc4 or (callPackage ./libobjc.nix { });
sdkRoot = pkgs.callPackage ../apple-sdk/sdkRoot.nix { sdkVersion = "11.0"; };
# questionable aliases
configd = pkgs.darwin.apple_sdk.frameworks.SystemConfiguration;
inherit (pkgs.darwin.apple_sdk.frameworks) IOKit;
xcodebuild = pkgs.xcbuild.override {
inherit (pkgs.darwin.apple_sdk_11_0) stdenv;
inherit (pkgs.darwin.apple_sdk_11_0.frameworks) CoreServices CoreGraphics ImageIO;
};
rustPlatform = pkgs.makeRustPlatform {
rustPlatform =
pkgs.makeRustPlatform {
inherit (pkgs.darwin.apple_sdk_11_0) stdenv;
inherit (pkgs) rustc cargo;
} // {
inherit (pkgs.callPackage ../../../build-support/rust/hooks {
inherit (pkgs.darwin.apple_sdk_11_0) stdenv;
inherit (pkgs) cargo rustc;
clang = mkCc pkgs.clang;
}) bindgenHook;
}
// {
inherit
(pkgs.callPackage ../../../build-support/rust/hooks {
inherit (pkgs.darwin.apple_sdk_11_0) stdenv;
inherit (pkgs) cargo rustc;
})
bindgenHook
;
};
callPackage = newScope (lib.optionalAttrs stdenv.hostPlatform.isDarwin (stdenvs // rec {
inherit (pkgs.darwin.apple_sdk_11_0) xcodebuild rustPlatform;
darwin = pkgs.darwin.overrideScope (_: prev: {
inherit (prev.darwin.apple_sdk_11_0)
IOKit
Libsystem
LibsystemCross
Security
configd
libcharset
libunwind
objc4
;
apple_sdk = prev.darwin.apple_sdk_11_0;
CF = prev.darwin.apple_sdk_11_0.CoreFoundation;
});
xcbuild = xcodebuild;
}));
stdenv = overrideSDK stdenv "11.0";
darwin-stubs = stdenvNoCC.mkDerivation {
pname = "darwin-stubs";
inherit (MacOSX-SDK) version;
xcodebuild = pkgs.xcodebuild;
buildCommand = ''
mkdir -p "$out"
ln -s ${MacOSX-SDK}/System "$out/System"
ln -s ${MacOSX-SDK}/usr "$out/usr"
'';
};
};
in packages
version = "11.0";
}
@@ -1,196 +0,0 @@
# This file is generated by gen-frameworks.nix.
# Do not edit, put overrides in apple_sdk.nix instead.
{ libs, frameworks }: with libs; with frameworks;
{
AGL = { inherit Carbon OpenGL; };
AVFoundation = { inherit AudioToolbox CoreAudio CoreAudioTypes CoreFoundation CoreGraphics CoreImage CoreMIDI CoreMedia CoreVideo Foundation IOKit ImageIO MediaToolbox Metal QuartzCore UniformTypeIdentifiers simd; };
AVKit = { inherit AVFoundation AppKit Cocoa Foundation; };
Accelerate = { inherit CoreFoundation CoreGraphics CoreVideo Foundation IOKit Metal; };
Accessibility = { inherit CoreGraphics Foundation; };
Accounts = { inherit Foundation; };
AdServices = { inherit Foundation; };
AdSupport = { inherit Foundation; };
AddressBook = { inherit Carbon Cocoa CoreFoundation Foundation; };
AppKit = { inherit ApplicationServices CloudKit CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation IOKit Metal OpenGL QuartzCore; };
AppTrackingTransparency = { inherit Foundation; };
AppleScriptKit = {};
AppleScriptObjC = { inherit Foundation; };
ApplicationServices = { inherit ColorSync CoreFoundation CoreGraphics CoreServices CoreText ImageIO; };
AudioToolbox = { inherit Carbon CoreAudio CoreAudioTypes CoreFoundation CoreMIDI Foundation; };
AudioUnit = { inherit AudioToolbox; };
AudioVideoBridging = { inherit Foundation IOKit; };
AuthenticationServices = { inherit AppKit Foundation; };
AutomaticAssessmentConfiguration = { inherit Foundation; };
Automator = { inherit AppKit Cocoa Foundation OSAKit; };
BackgroundTasks = { inherit Foundation; };
BusinessChat = { inherit Cocoa Foundation; };
CFNetwork = { inherit CoreFoundation; };
CalendarStore = {};
CallKit = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
Carbon = { inherit ApplicationServices CoreServices Foundation Security; };
ClassKit = { inherit CoreGraphics Foundation; };
CloudKit = { inherit CoreFoundation CoreGraphics CoreLocation Foundation IOKit; };
Cocoa = { inherit AppKit CoreData Foundation; };
Collaboration = { inherit AppKit CoreServices Foundation; };
ColorSync = { inherit CoreFoundation; };
Combine = {};
Contacts = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
ContactsUI = { inherit AppKit; };
CoreAudio = { inherit CoreAudioTypes CoreFoundation; };
CoreAudioKit = { inherit AppKit AudioUnit Cocoa Foundation; };
CoreAudioTypes = { inherit CoreFoundation; };
CoreBluetooth = { inherit Foundation; };
CoreData = { inherit CloudKit Combine CoreFoundation CoreGraphics CoreLocation Foundation IOKit; };
CoreDisplay = {};
CoreFoundation = {};
CoreGraphics = { inherit CoreFoundation IOKit; };
CoreHaptics = { inherit Foundation; };
CoreImage = { inherit ApplicationServices CoreFoundation CoreGraphics CoreVideo Foundation IOKit IOSurface ImageIO Metal OpenGL; };
CoreLocation = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
CoreMIDI = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
CoreMIDIServer = {};
CoreML = { inherit CoreFoundation CoreGraphics CoreVideo Foundation IOKit ImageIO Metal; };
CoreMedia = { inherit CoreAudio CoreAudioTypes CoreFoundation CoreGraphics CoreVideo Foundation IOKit Metal; };
CoreMediaIO = { inherit CoreFoundation CoreMedia; };
CoreMotion = { inherit Foundation; };
CoreServices = { inherit CFNetwork CoreFoundation DiskArbitration Security; };
CoreSpotlight = { inherit Foundation UniformTypeIdentifiers; };
CoreTelephony = {};
CoreText = { inherit CoreFoundation CoreGraphics; };
CoreVideo = { inherit ApplicationServices CoreFoundation CoreGraphics IOSurface Metal OpenGL; };
CoreWLAN = { inherit Foundation IOKit; };
CryptoKit = { inherit CoreFoundation CoreGraphics Foundation IOKit LocalAuthentication Security; };
CryptoTokenKit = { inherit CoreFoundation CoreGraphics Foundation IOKit Security; };
DVDPlayback = { inherit ApplicationServices CoreFoundation Security; };
DeveloperToolsSupport = { inherit Foundation; };
DeviceCheck = { inherit Foundation; };
DirectoryService = { inherit CoreFoundation; };
DiscRecording = { inherit CoreServices Foundation; };
DiscRecordingUI = { inherit Carbon Cocoa DiscRecording; };
DiskArbitration = { inherit CoreFoundation IOKit; };
DriverKit = {};
EventKit = { inherit CoreGraphics CoreLocation Foundation; };
ExceptionHandling = { inherit Foundation; };
ExecutionPolicy = { inherit Foundation; };
ExternalAccessory = { inherit Foundation; };
FWAUserLib = { inherit IOKit; };
FileProvider = { inherit CoreGraphics Foundation; };
FileProviderUI = { inherit AppKit FileProvider Foundation; };
FinderSync = { inherit AppKit Foundation; };
ForceFeedback = { inherit CoreFoundation IOKit; };
Foundation = { inherit ApplicationServices Combine CoreFoundation CoreGraphics CoreServices IOKit Security; };
GLKit = { inherit AppKit CloudKit CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation IOKit Metal ModelIO OpenGL QuartzCore simd; };
GLUT = { inherit OpenGL; };
GSS = { inherit CoreFoundation; };
GameController = { inherit AppKit Foundation IOKit; };
GameKit = { inherit AppKit Cocoa Contacts CoreGraphics Foundation GameController GameplayKit Metal MetalKit ModelIO SceneKit SpriteKit simd; };
GameplayKit = { inherit AppKit CloudKit CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation GLKit IOKit Metal ModelIO QuartzCore SceneKit SpriteKit simd; };
HIDDriverKit = { inherit IOKit USBDriverKit; };
Hypervisor = {};
ICADevices = { inherit CoreFoundation CoreGraphics CoreServices IOBluetooth; };
IMServicePlugIn = { inherit Foundation; };
IOBluetooth = { inherit CoreAudio CoreFoundation CoreServices Foundation IOKit; };
IOBluetoothUI = { inherit Cocoa IOBluetooth; };
IOKit = { inherit CoreFoundation; };
IOSurface = { inherit CoreFoundation Foundation IOKit; };
IOUSBHost = { inherit Foundation IOKit; };
IdentityLookup = { inherit Foundation; };
ImageCaptureCore = { inherit Cocoa CoreGraphics Foundation; };
ImageIO = { inherit CoreFoundation CoreGraphics; };
InputMethodKit = { inherit Carbon Cocoa Foundation; };
InstallerPlugins = {};
InstantMessage = {};
Intents = { inherit CoreFoundation CoreGraphics CoreLocation Foundation IOKit; };
JavaNativeFoundation = { inherit Foundation; };
JavaRuntimeSupport = { inherit ApplicationServices Cocoa Foundation QuartzCore; };
JavaScriptCore = { inherit CoreFoundation CoreGraphics Foundation; };
Kerberos = {};
Kernel = {};
KernelManagement = { inherit Foundation; };
LDAP = {};
LatentSemanticMapping = { inherit Carbon CoreFoundation; };
LinkPresentation = { inherit AppKit Foundation; };
LocalAuthentication = { inherit Foundation; };
MLCompute = { inherit CoreFoundation CoreGraphics Foundation IOKit Metal; };
MapKit = { inherit AppKit CloudKit CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation IOKit Metal QuartzCore; };
MediaAccessibility = { inherit CoreFoundation CoreGraphics CoreText QuartzCore; };
MediaLibrary = { inherit Foundation; };
MediaPlayer = { inherit AVFoundation CoreGraphics Foundation; };
MediaToolbox = { inherit AudioToolbox CoreFoundation CoreMedia; };
Message = {};
Metal = { inherit CoreFoundation CoreGraphics Foundation IOKit IOSurface; };
MetalKit = { inherit AppKit CloudKit CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation IOKit Metal ModelIO QuartzCore simd; };
MetalPerformanceShaders = { inherit CoreGraphics Foundation Metal simd; };
MetalPerformanceShadersGraph = { inherit Foundation MetalPerformanceShaders; };
MetricKit = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
ModelIO = { inherit CoreFoundation CoreGraphics Foundation IOKit simd; };
MultipeerConnectivity = { inherit Cocoa Foundation; };
NaturalLanguage = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
NearbyInteraction = { inherit CoreFoundation CoreGraphics Foundation IOKit simd; };
NetFS = { inherit CoreFoundation; };
Network = { inherit CoreFoundation Foundation Security; };
NetworkExtension = { inherit Foundation Network Security; };
NetworkingDriverKit = {};
NotificationCenter = { inherit AppKit Foundation; };
OSAKit = { inherit Carbon Cocoa; };
OSLog = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
OpenAL = {};
OpenCL = { inherit OpenGL; };
OpenDirectory = { inherit CoreFoundation Foundation; };
OpenGL = {};
PCIDriverKit = { inherit IOKit; };
PCSC = {};
PDFKit = { inherit AppKit Cocoa; };
ParavirtualizedGraphics = { inherit AppKit CoreVideo Foundation IOSurface Metal; };
PassKit = { inherit AppKit Contacts CoreGraphics Foundation; };
PencilKit = { inherit AppKit CloudKit Cocoa CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation IOKit Metal QuartzCore; };
Photos = { inherit AVFoundation CoreAudio CoreFoundation CoreGraphics CoreImage CoreLocation CoreMIDI CoreMedia Foundation IOKit ImageIO Metal QuartzCore UniformTypeIdentifiers simd; };
PhotosUI = { inherit AppKit Foundation MapKit Photos; };
PreferencePanes = { inherit Cocoa; };
PushKit = { inherit Foundation; };
Python = { inherit Carbon; };
QTKit = {};
Quartz = { inherit AppKit ApplicationServices Cocoa Foundation ImageCaptureCore OpenGL PDFKit QuartzCore QuickLook; };
QuartzCore = { inherit CoreFoundation CoreGraphics CoreImage CoreVideo Foundation IOKit Metal OpenGL; };
QuickLook = { inherit ApplicationServices CoreFoundation; };
QuickLookThumbnailing = { inherit CoreGraphics Foundation UniformTypeIdentifiers; };
RealityKit = { inherit AVFoundation AppKit AudioToolbox CloudKit Combine CoreAudio CoreData CoreFoundation CoreGraphics CoreImage CoreLocation CoreMIDI CoreText Foundation IOKit Metal MultipeerConnectivity QuartzCore simd; };
ReplayKit = { inherit AVFoundation AppKit Foundation; };
Ruby = {};
SafariServices = { inherit AppKit CloudKit CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation IOKit Metal QuartzCore; };
SceneKit = { inherit AppKit CloudKit CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation GLKit IOKit Metal ModelIO QuartzCore simd; };
ScreenSaver = { inherit AppKit Foundation; };
ScreenTime = { inherit AppKit Foundation; };
ScriptingBridge = { inherit ApplicationServices CoreServices Foundation; };
Security = { inherit CoreFoundation; };
SecurityFoundation = { inherit Foundation Security; };
SecurityInterface = { inherit AppKit Cocoa Security SecurityFoundation; };
SensorKit = { inherit CoreFoundation CoreLocation Foundation; };
ServiceManagement = { inherit CoreFoundation Security; };
Social = { inherit AppKit Foundation; };
SoundAnalysis = { inherit AVFoundation CoreML CoreMedia Foundation; };
Speech = { inherit AVFoundation CoreAudio CoreFoundation CoreGraphics CoreImage CoreMIDI CoreMedia Foundation IOKit Metal QuartzCore UniformTypeIdentifiers simd; };
SpriteKit = { inherit AppKit CloudKit Cocoa CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation GLKit IOKit Metal ModelIO QuartzCore simd; };
StoreKit = { inherit AppKit CoreGraphics Foundation; };
SwiftUI = { inherit AppKit CloudKit Combine CoreData CoreFoundation CoreGraphics CoreImage CoreLocation DeveloperToolsSupport Foundation IOKit Metal QuartzCore UniformTypeIdentifiers; };
SyncServices = {};
System = {};
SystemConfiguration = { inherit CoreFoundation Security; };
SystemExtensions = { inherit Foundation; };
TWAIN = {};
Tcl = {};
Tk = {};
USBDriverKit = { inherit IOKit; };
UniformTypeIdentifiers = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
UserNotifications = { inherit Foundation; };
UserNotificationsUI = { inherit AppKit; };
VideoDecodeAcceleration = {};
VideoSubscriberAccount = { inherit Foundation; };
VideoToolbox = { inherit CoreFoundation CoreGraphics CoreMedia CoreVideo; };
Virtualization = { inherit CoreFoundation CoreGraphics Foundation IOKit; };
Vision = { inherit CoreAudio CoreFoundation CoreGraphics CoreML CoreMedia CoreVideo Foundation IOKit ImageIO Metal simd; };
WebKit = { inherit AppKit CloudKit CoreData CoreFoundation CoreGraphics CoreImage CoreLocation Foundation IOKit JavaScriptCore Metal OpenGL QuartzCore; };
WidgetKit = { inherit Combine CoreFoundation CoreGraphics CoreVideo Foundation IOKit Intents Metal SwiftUI; };
iTunesLibrary = { inherit Foundation; };
vmnet = {};
}
@@ -1,88 +0,0 @@
{ stdenvNoCC, buildPackages, MacOSX-SDK }:
stdenvNoCC.mkDerivation {
pname = "libSystem";
version = MacOSX-SDK.version;
dontBuild = true;
dontUnpack = true;
nativeBuildInputs = [ buildPackages.darwin.rewrite-tbd ];
includeDirs = [
"CommonCrypto" "_types" "architecture" "arpa" "atm" "bank" "bsd" "bsm"
"corecrypto" "corpses" "default_pager" "device" "dispatch" "hfs" "i386"
"iokit" "kern" "libkern" "mach" "mach-o" "mach_debug" "machine" "malloc"
"miscfs" "net" "netinet" "netinet6" "netkey" "nfs" "os" "osfmk" "pexpert"
"platform" "protocols" "pthread" "rpc" "rpcsvc" "secure" "security"
"servers" "sys" "uuid" "vfs" "voucher" "xlocale"
] ++ [
"arm" "xpc" "arm64"
];
csu = [
"bundle1.o" "crt0.o" "crt1.10.5.o" "crt1.10.6.o" "crt1.o" "dylib1.10.5.o"
"dylib1.o" "gcrt1.o" "lazydylib1.o"
];
installPhase = ''
mkdir -p $out/{include,lib/swift}
for dir in $includeDirs; do
from=${MacOSX-SDK}/usr/include/$dir
if [ -e "$from" ]; then
cp -dr $from $out/include
else
echo "Header directory '$from' doesn't exist: skipping"
fi
done
cp -d \
${MacOSX-SDK}/usr/include/*.h \
${MacOSX-SDK}/usr/include/*.modulemap \
${MacOSX-SDK}/usr/include/*.apinotes \
$out/include
rm $out/include/tk*.h $out/include/tcl*.h
cp -dr \
${MacOSX-SDK}/usr/lib/libSystem.* \
${MacOSX-SDK}/usr/lib/system \
$out/lib
# Extra libraries
for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.1 resolv; do
cp -d \
${MacOSX-SDK}/usr/lib/lib$name.tbd \
${MacOSX-SDK}/usr/lib/lib$name.*.tbd \
$out/lib
done
for name in os Dispatch; do
cp -dr \
${MacOSX-SDK}/usr/lib/swift/$name.swiftmodule \
${MacOSX-SDK}/usr/lib/swift/libswift$name.tbd \
$out/lib/swift
done
for f in $csu; do
from=${MacOSX-SDK}/usr/lib/$f
if [ -e "$from" ]; then
cp -d $from $out/lib
else
echo "Csu file '$from' doesn't exist: skipping"
fi
done
chmod u+w -R $out/lib
find $out -name '*.tbd' -type f | while read tbd; do
rewrite-tbd \
-c /usr/lib/libsystem.dylib:$out/lib/libsystem.dylib \
-p /usr/lib/system/:$out/lib/system/ \
-p /usr/lib/swift/:$out/lib/swift/ \
-r ${builtins.storeDir} \
"$tbd"
done
'';
}
@@ -1,16 +0,0 @@
{ stdenvNoCC, buildPackages, MacOSX-SDK }:
stdenvNoCC.mkDerivation {
pname = "libcharset";
version = MacOSX-SDK.version;
dontUnpack = true;
dontBuild = true;
nativeBuildInputs = [ buildPackages.darwin.checkReexportsHook ];
installPhase = ''
mkdir -p $out/{include,lib}
cp ${MacOSX-SDK}/usr/lib/libcharset* $out/lib
'';
}
@@ -1,20 +0,0 @@
{ stdenvNoCC, buildPackages, MacOSX-SDK }:
let self = stdenvNoCC.mkDerivation {
pname = "libcompression";
version = MacOSX-SDK.version;
dontUnpack = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/lib
cp ${MacOSX-SDK}/usr/lib/libcompression* $out/lib
'';
passthru = {
tbdRewrites = {
const."/usr/lib/libcompression.dylib" = "${self}/lib/libcompression.dylib";
};
};
}; in self
@@ -1,20 +0,0 @@
{ stdenvNoCC, buildPackages, MacOSX-SDK }:
let self = stdenvNoCC.mkDerivation {
pname = "libnetwork";
version = MacOSX-SDK.version;
dontUnpack = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/lib
cp ${MacOSX-SDK}/usr/lib/libnetwork* $out/lib
'';
passthru = {
tbdRewrites = {
const."/usr/lib/libnetwork.dylib" = "${self}/lib/libnetwork.dylib";
};
};
}; in self
@@ -1,24 +0,0 @@
{ stdenvNoCC, MacOSX-SDK, libcharset }:
let self = stdenvNoCC.mkDerivation {
pname = "libobjc";
version = MacOSX-SDK.version;
dontUnpack = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/{include,lib/swift}
cp -r ${MacOSX-SDK}/usr/include/objc $out/include
cp ${MacOSX-SDK}/usr/lib/libobjc* $out/lib
cp -r ${MacOSX-SDK}/usr/lib/swift/ObjectiveC.swiftmodule $out/lib/swift
cp ${MacOSX-SDK}/usr/lib/swift/libswiftObjectiveC.tbd $out/lib/swift
'';
passthru = {
tbdRewrites = {
const."/usr/lib/libobjc.A.dylib" = "${self}/lib/libobjc.A.dylib";
const."/usr/lib/swift/libswiftObjectiveC.dylib" = "${self}/lib/swift/libswiftObjectiveC.dylib";
};
};
}; in self
@@ -1,23 +0,0 @@
{ stdenvNoCC, MacOSX-SDK, checkReexportsHook }:
stdenvNoCC.mkDerivation {
pname = "libpm";
version = MacOSX-SDK.version;
dontUnpack = true;
dontBuild = true;
nativeBuildInputs = [ checkReexportsHook ];
installPhase = ''
mkdir -p $out/lib
cp ${MacOSX-SDK}/usr/lib/libpm* $out/lib
'';
passthru = {
tbdRewrites = {
const."/usr/lib/libpmenergy.dylib" = "${placeholder "out"}/lib/libpmenergy.dylib";
const."/usr/lib/libpmsample.dylib" = "${placeholder "out"}/lib/libpmsample.dylib";
};
};
}
@@ -1,24 +0,0 @@
{ stdenvNoCC, buildPackages, MacOSX-SDK }:
stdenvNoCC.mkDerivation {
pname = "libunwind";
version = MacOSX-SDK.version;
dontUnpack = true;
dontBuild = true;
nativeBuildInputs = [ buildPackages.darwin.checkReexportsHook ];
installPhase = ''
mkdir -p $out/include/mach-o
cp \
${MacOSX-SDK}/usr/include/libunwind.h \
${MacOSX-SDK}/usr/include/unwind.h \
$out/include
cp \
${MacOSX-SDK}/usr/include/mach-o/compact_unwind_encoding.h \
$out/include/mach-o
'';
}
@@ -1,32 +0,0 @@
{ frameworks, libobjc }: with frameworks;
# generated by hand to avoid exposing all private frameworks
# frameworks here are only the necessary ones used by public frameworks.
{
Apple80211 = {};
AVFCapture = {};
AVFCore = {};
AddressBookCore = { inherit ContactsPersistence; };
AudioToolboxCore = {};
ContactsPersistence = {};
GameCenterFoundation = {};
GameCenterUI = {};
GameCenterUICore = {};
MediaRemote = {};
PassKitCore = {};
SignpostMetrics = {};
SkyLight = {};
UIFoundation = {};
URLFormatting = {};
# Also expose CoreSymbolication; used by `root` package.
CoreSymbolication = {};
# Also expose DebugSymbols; used by `llvmPackages_8.lldb` package.
DebugSymbols = {};
# Also expose DisplayServices; used by `sketchybar` package.
DisplayServices = { inherit libobjc; };
# Also expose MultitouchSupport; used by `chuck` package.
MultitouchSupport = {};
}
+5 -5
View File
@@ -57,9 +57,7 @@ makeScopeWithSplicing' {
};
# macOS 11.0 SDK
apple_sdk_11_0 = pkgs.callPackage ../os-specific/darwin/apple-sdk-11.0 {
fetchurl = fetchurlBoot;
};
apple_sdk_11_0 = pkgs.callPackage ../os-specific/darwin/apple-sdk-11.0 { };
# macOS 12.3 SDK
apple_sdk_12_3 = pkgs.callPackage ../os-specific/darwin/apple-sdk-12.3 { };
@@ -94,13 +92,15 @@ makeScopeWithSplicing' {
) Security;
};
stubs = lib.genAttrs [
stubs = {
inherit apple_sdk_11_0;
} // lib.genAttrs [
] (mkStub apple_sdk.version);
in
impure-cmds // appleSourcePackages // chooseLibs // stubs // {
inherit apple_sdk apple_sdk_10_12 apple_sdk_11_0 apple_sdk_12_3;
inherit apple_sdk apple_sdk_10_12 apple_sdk_12_3;
stdenvNoCF = stdenv.override {
extraBuildInputs = [];