Merge pull request #98541 from thefloweringash/darwin-tapi-stdenv
darwin (Big Sur): tbd based stdenv
This commit is contained in:
commit
411f9e25d7
@ -41,6 +41,11 @@ stdenv.mkDerivation rec {
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
] ++ stdenv.lib.optionals (bareMetal) [
|
||||
"-DCOMPILER_RT_OS_DIR=baremetal"
|
||||
] ++ stdenv.lib.optionals (stdenv.hostPlatform.isDarwin) [
|
||||
# The compiler-rt build infrastructure sniffs supported platforms on Darwin
|
||||
# and finds i386;x86_64;x86_64h. We only build for x86_64, so linking fails
|
||||
# when it tries to use libc++ and libc++api for i386.
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.parsed.cpu.name}"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
@ -41,6 +41,11 @@ stdenv.mkDerivation {
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
] ++ stdenv.lib.optionals (bareMetal) [
|
||||
"-DCOMPILER_RT_OS_DIR=baremetal"
|
||||
] ++ stdenv.lib.optionals (stdenv.hostPlatform.isDarwin) [
|
||||
# The compiler-rt build infrastructure sniffs supported platforms on Darwin
|
||||
# and finds i386;x86_64;x86_64h. We only build for x86_64, so linking fails
|
||||
# when it tries to use libc++ and libc++api for i386.
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.parsed.cpu.name}"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
@ -41,6 +41,11 @@ stdenv.mkDerivation {
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
] ++ stdenv.lib.optionals (bareMetal) [
|
||||
"-DCOMPILER_RT_OS_DIR=baremetal"
|
||||
] ++ stdenv.lib.optionals (stdenv.hostPlatform.isDarwin) [
|
||||
# The compiler-rt build infrastructure sniffs supported platforms on Darwin
|
||||
# and finds i386;x86_64;x86_64h. We only build for x86_64, so linking fails
|
||||
# when it tries to use libc++ and libc++api for i386.
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.parsed.cpu.name}"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
@ -41,6 +41,11 @@ stdenv.mkDerivation {
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
] ++ stdenv.lib.optionals (bareMetal) [
|
||||
"-DCOMPILER_RT_OS_DIR=baremetal"
|
||||
] ++ stdenv.lib.optionals (stdenv.hostPlatform.isDarwin) [
|
||||
# The compiler-rt build infrastructure sniffs supported platforms on Darwin
|
||||
# and finds i386;x86_64;x86_64h. We only build for x86_64, so linking fails
|
||||
# when it tries to use libc++ and libc++api for i386.
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.parsed.cpu.name}"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
@ -1,4 +1,5 @@
|
||||
{ stdenv, cmake, fetch, libcxx, llvm, version
|
||||
, standalone ? false
|
||||
# on musl the shared objects don't build
|
||||
, enableShared ? ! stdenv.hostPlatform.isMusl }:
|
||||
|
||||
@ -20,7 +21,9 @@ stdenv.mkDerivation {
|
||||
patch -p1 -d $(ls -d libcxx-*) -i ${../libcxx-0001-musl-hacks.patch}
|
||||
'';
|
||||
|
||||
cmakeFlags = stdenv.lib.optional (!enableShared) "-DLIBCXXABI_ENABLE_SHARED=OFF";
|
||||
cmakeFlags =
|
||||
stdenv.lib.optional standalone "-DLLVM_ENABLE_LIBCXX=ON" ++
|
||||
stdenv.lib.optional (!enableShared) "-DLIBCXXABI_ENABLE_SHARED=OFF";
|
||||
|
||||
installPhase = if stdenv.isDarwin
|
||||
then ''
|
||||
|
@ -41,6 +41,11 @@ stdenv.mkDerivation {
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
] ++ stdenv.lib.optionals (bareMetal) [
|
||||
"-DCOMPILER_RT_OS_DIR=baremetal"
|
||||
] ++ stdenv.lib.optionals (stdenv.hostPlatform.isDarwin) [
|
||||
# The compiler-rt build infrastructure sniffs supported platforms on Darwin
|
||||
# and finds i386;x86_64;x86_64h. We only build for x86_64, so linking fails
|
||||
# when it tries to use libc++ and libc++api for i386.
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.parsed.cpu.name}"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
@ -41,6 +41,11 @@ stdenv.mkDerivation rec {
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
] ++ stdenv.lib.optionals (bareMetal) [
|
||||
"-DCOMPILER_RT_OS_DIR=baremetal"
|
||||
] ++ stdenv.lib.optionals (stdenv.hostPlatform.isDarwin) [
|
||||
# The compiler-rt build infrastructure sniffs supported platforms on Darwin
|
||||
# and finds i386;x86_64;x86_64h. We only build for x86_64, so linking fails
|
||||
# when it tries to use libc++ and libc++api for i386.
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.parsed.cpu.name}"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
@ -55,6 +55,10 @@ let
|
||||
./qtbase.patch.d/0001-qtbase-mkspecs-mac.patch
|
||||
./qtbase.patch.d/0002-qtbase-mac.patch
|
||||
./qtbase.patch.d/0013-define-kiosurfacesuccess.patch
|
||||
|
||||
# Patch framework detection to support X.framework/X.tbd,
|
||||
# extending the current support for X.framework/X.
|
||||
./qtbase.patch.d/0015-qtbase-tbd-frameworks.patch
|
||||
]
|
||||
++ [
|
||||
./qtbase.patch.d/0003-qtbase-mkspecs.patch
|
||||
|
@ -0,0 +1,15 @@
|
||||
diff --git a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
index 84dbbfebd4..615bfed124 100644
|
||||
--- a/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
+++ b/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
@@ -119,6 +119,10 @@ macro(_qt5gui_find_extra_libs Name Libs LibDir IncDirs)
|
||||
if (NOT EXISTS "${Qt5Gui_${_cmake_lib_name}_LIBRARY}")
|
||||
set(Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
endif()
|
||||
+ set(Qt5Gui_${_cmake_lib_name}_LIBRARY "${Qt5Gui_${_cmake_lib_name}_LIBRARY}/${_lib}.tbd")
|
||||
+ if (NOT EXISTS "${Qt5Gui_${_cmake_lib_name}_LIBRARY}")
|
||||
+ set(Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
+ endif()
|
||||
!!ENDIF
|
||||
if (NOT Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
# The above find_library call doesn\'t work for finding
|
@ -55,6 +55,10 @@ let
|
||||
optionals stdenv.isDarwin [
|
||||
./qtbase.patch.d/0001-qtbase-mkspecs-mac.patch
|
||||
./qtbase.patch.d/0002-qtbase-mac.patch
|
||||
|
||||
# Patch framework detection to support X.framework/X.tbd,
|
||||
# extending the current support for X.framework/X.
|
||||
./qtbase.patch.d/0012-qtbase-tbd-frameworks.patch
|
||||
]
|
||||
++ [
|
||||
./qtbase.patch.d/0003-qtbase-mkspecs.patch
|
||||
|
@ -0,0 +1,15 @@
|
||||
diff --git a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
index 84dbbfebd4..615bfed124 100644
|
||||
--- a/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
+++ b/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
@@ -119,6 +119,10 @@ macro(_qt5gui_find_extra_libs Name Libs LibDir IncDirs)
|
||||
if (NOT EXISTS "${Qt5Gui_${_cmake_lib_name}_LIBRARY}")
|
||||
set(Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
endif()
|
||||
+ set(Qt5Gui_${_cmake_lib_name}_LIBRARY "${Qt5Gui_${_cmake_lib_name}_LIBRARY}/${_lib}.tbd")
|
||||
+ if (NOT EXISTS "${Qt5Gui_${_cmake_lib_name}_LIBRARY}")
|
||||
+ set(Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
+ endif()
|
||||
!!ENDIF
|
||||
if (NOT Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
# The above find_library call doesn\'t work for finding
|
@ -55,6 +55,10 @@ let
|
||||
optionals stdenv.isDarwin [
|
||||
./qtbase.patch.d/0001-qtbase-mkspecs-mac.patch
|
||||
./qtbase.patch.d/0002-qtbase-mac.patch
|
||||
|
||||
# Patch framework detection to support X.framework/X.tbd,
|
||||
# extending the current support for X.framework/X.
|
||||
./qtbase.patch.d/0012-qtbase-tbd-frameworks.patch
|
||||
]
|
||||
++ [
|
||||
./qtbase.patch.d/0003-qtbase-mkspecs.patch
|
||||
|
@ -0,0 +1,15 @@
|
||||
diff --git a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
index 84dbbfebd4..615bfed124 100644
|
||||
--- a/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
+++ b/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
@@ -119,6 +119,10 @@ macro(_qt5gui_find_extra_libs Name Libs LibDir IncDirs)
|
||||
if (NOT EXISTS "${Qt5Gui_${_cmake_lib_name}_LIBRARY}")
|
||||
set(Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
endif()
|
||||
+ set(Qt5Gui_${_cmake_lib_name}_LIBRARY "${Qt5Gui_${_cmake_lib_name}_LIBRARY}/${_lib}.tbd")
|
||||
+ if (NOT EXISTS "${Qt5Gui_${_cmake_lib_name}_LIBRARY}")
|
||||
+ set(Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
+ endif()
|
||||
!!ENDIF
|
||||
if (NOT Qt5Gui_${_cmake_lib_name}_LIBRARY)
|
||||
# The above find_library call doesn\'t work for finding
|
@ -3,7 +3,7 @@ linkSystemCoreFoundationFramework() {
|
||||
# gross! many symbols (such as _OBJC_CLASS_$_NSArray) are defined in system CF, but not
|
||||
# in the opensource release
|
||||
# if the package needs private headers, we assume they also want to link with system CF
|
||||
NIX_LDFLAGS+=" /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation"
|
||||
NIX_LDFLAGS+=" @out@/Library/Frameworks/CoreFoundation.framework/CoreFoundation"
|
||||
}
|
||||
|
||||
preConfigureHooks+=(linkSystemCoreFoundationFramework)
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, fetchurl, xar, cpio, pkgs, python3, pbzx, lib }:
|
||||
{ stdenv, fetchurl, xar, cpio, pkgs, python3, pbzx, lib, darwin-stubs, print-reexports }:
|
||||
|
||||
let version = "10.12"; in
|
||||
|
||||
@ -42,7 +42,12 @@ let
|
||||
rmdir System
|
||||
|
||||
pushd lib
|
||||
ln -s -L /usr/lib/libcups*.dylib .
|
||||
cp ${darwin-stubs}/usr/lib/libcups*.tbd .
|
||||
ln -s libcups.2.tbd libcups.tbd
|
||||
ln -s libcupscgi.1.tbd libcupscgi.tbd
|
||||
ln -s libcupsimage.2.tbd libcupsimage.tbd
|
||||
ln -s libcupsmime.1.tbd libcupsmime.tbd
|
||||
ln -s libcupsppdc.1.tbd libcupsppdc.tbd
|
||||
popd
|
||||
'';
|
||||
|
||||
@ -53,6 +58,12 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
mkFrameworkSubs = name: deps:
|
||||
let
|
||||
deps' = deps // { "${name}" = placeholder "out"; };
|
||||
substArgs = lib.concatMap (x: [ "--subst-var-by" x deps'."${x}" ]) (lib.attrNames deps');
|
||||
in lib.escapeShellArgs substArgs;
|
||||
|
||||
framework = name: deps: stdenv.mkDerivation {
|
||||
name = "apple-framework-${name}";
|
||||
|
||||
@ -63,11 +74,14 @@ let
|
||||
|
||||
disallowedRequisites = [ sdk ];
|
||||
|
||||
nativeBuildInputs = [ print-reexports ];
|
||||
|
||||
extraTBDFiles = [];
|
||||
|
||||
installPhase = ''
|
||||
linkFramework() {
|
||||
local path="$1"
|
||||
local nested_path="$1"
|
||||
local dest="$out/Library/Frameworks/$path"
|
||||
if [ "$path" == "JavaNativeFoundation.framework" ]; then
|
||||
local nested_path="JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework"
|
||||
fi
|
||||
@ -80,21 +94,29 @@ let
|
||||
current=A
|
||||
fi
|
||||
|
||||
mkdir -p "$dest"
|
||||
pushd "$dest" >/dev/null
|
||||
local dest="$out/Library/Frameworks/$path"
|
||||
|
||||
# Keep track of if this is a child or a child rescue as with
|
||||
# ApplicationServices in the 10.9 SDK
|
||||
local isChild=0
|
||||
mkdir -p "$dest/Versions/$current"
|
||||
pushd "$dest/Versions/$current" >/dev/null
|
||||
|
||||
if [ -d "${sdk.out}/Library/Frameworks/$nested_path/Versions/$current/Headers" ]; then
|
||||
isChild=1
|
||||
cp -R "${sdk.out}/Library/Frameworks/$nested_path/Versions/$current/Headers" .
|
||||
elif [ -d "${sdk.out}/Library/Frameworks/$name.framework/Versions/$current/Headers" ]; then
|
||||
current="$(readlink "/System/Library/Frameworks/$name.framework/Versions/Current")"
|
||||
cp -R "${sdk.out}/Library/Frameworks/$name.framework/Versions/$current/Headers" .
|
||||
fi
|
||||
ln -s -L "/System/Library/Frameworks/$nested_path/Versions/$current/$name"
|
||||
|
||||
local tbd_source=${darwin-stubs}/System/Library/Frameworks/$nested_path/Versions/$current
|
||||
if [ "${name}" != "Kernel" ]; then
|
||||
# The Kernel.framework has headers but no actual library component.
|
||||
cp -v $tbd_source/*.tbd .
|
||||
fi
|
||||
|
||||
if [ -d "$tbd_source/Libraries" ]; then
|
||||
mkdir Libraries
|
||||
cp -v $tbd_source/Libraries/*.tbd Libraries/
|
||||
fi
|
||||
|
||||
ln -s -L "/System/Library/Frameworks/$nested_path/Versions/$current/Resources"
|
||||
|
||||
if [ -f "/System/Library/Frameworks/$nested_path/module.map" ]; then
|
||||
@ -110,17 +132,45 @@ let
|
||||
linkFramework "$childpath"
|
||||
done
|
||||
|
||||
if [ -d "$dest/Versions/$current" ]; then
|
||||
mv $dest/Versions/$current/* .
|
||||
fi
|
||||
pushd ../.. >/dev/null
|
||||
ln -s "$current" Versions/Current
|
||||
ln -s Versions/Current/* .
|
||||
popd >/dev/null
|
||||
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
linkFramework "${name}.framework"
|
||||
|
||||
# linkFramework is recursive, the rest of the processing is not.
|
||||
|
||||
local tbd_source=${darwin-stubs}/System/Library/Frameworks/${name}.framework
|
||||
for tbd in $extraTBDFiles; do
|
||||
local tbd_dest_dir=$out/Library/Frameworks/${name}.framework/$(dirname "$tbd")
|
||||
mkdir -p "$tbd_dest_dir"
|
||||
cp -v "$tbd_source/$tbd" "$tbd_dest_dir"
|
||||
done
|
||||
|
||||
# Fix and check tbd re-export references
|
||||
find $out -name '*.tbd' | while read tbd; do
|
||||
echo "Fixing re-exports in $tbd"
|
||||
substituteInPlace "$tbd" ${mkFrameworkSubs name deps}
|
||||
|
||||
echo "Checking re-exports in $tbd"
|
||||
print-reexports "$tbd" | while read target; do
|
||||
local expected="''${target%.dylib}.tbd"
|
||||
if ! [ -e "$expected" ]; then
|
||||
echo -e "Re-export missing:\n\t$target\n\t(expected $expected)"
|
||||
echo -e "While processing\n\t$tbd"
|
||||
exit 1
|
||||
else
|
||||
echo "Re-exported target $target ok"
|
||||
fi
|
||||
done
|
||||
done
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = deps;
|
||||
propagatedBuildInputs = builtins.attrValues deps;
|
||||
|
||||
# don't use pure CF for dylibs that depend on frameworks
|
||||
setupHook = ./framework-setup-hook.sh;
|
||||
@ -139,6 +189,17 @@ let
|
||||
platforms = platforms.darwin;
|
||||
};
|
||||
};
|
||||
|
||||
tbdOnlyFramework = name: { private ? true }: stdenv.mkDerivation {
|
||||
name = "apple-framework-${name}";
|
||||
dontUnpack = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/Library/Frameworks/
|
||||
cp -r ${darwin-stubs}/System/Library/${lib.optionalString private "Private"}Frameworks/${name}.framework \
|
||||
$out/Library/Frameworks
|
||||
# NOTE there's no re-export checking here, this is probably wrong
|
||||
'';
|
||||
};
|
||||
in rec {
|
||||
libs = {
|
||||
xpc = stdenv.mkDerivation {
|
||||
@ -168,7 +229,8 @@ in rec {
|
||||
installPhase = ''
|
||||
mkdir -p $out/include $out/lib
|
||||
ln -s "${lib.getDev sdk}/include/Xplugin.h" $out/include/Xplugin.h
|
||||
ln -s "/usr/lib/libXplugin.1.dylib" $out/lib/libXplugin.dylib
|
||||
cp ${darwin-stubs}/usr/lib/libXplugin.1.tbd $out/lib
|
||||
ln -s libXplugin.1.tbd $out/lib/libXplugin.tbd
|
||||
'';
|
||||
};
|
||||
|
||||
@ -193,6 +255,10 @@ in rec {
|
||||
];
|
||||
});
|
||||
|
||||
Carbon = stdenv.lib.overrideDerivation super.Carbon (drv: {
|
||||
extraTBDFiles = [ "Versions/A/Frameworks/HTMLRendering.framework/Versions/A/HTMLRendering.tbd" ];
|
||||
});
|
||||
|
||||
CoreFoundation = stdenv.lib.overrideDerivation super.CoreFoundation (drv: {
|
||||
setupHook = ./cf-setup-hook.sh;
|
||||
});
|
||||
@ -210,6 +276,10 @@ in rec {
|
||||
setupHook = ./private-frameworks-setup-hook.sh;
|
||||
});
|
||||
|
||||
IMServicePlugIn = stdenv.lib.overrideDerivation super.IMServicePlugIn (drv: {
|
||||
extraTBDFiles = [ "Versions/A/Frameworks/IMServicePlugInSupport.framework/Versions/A/IMServicePlugInSupport.tbd" ];
|
||||
});
|
||||
|
||||
Security = stdenv.lib.overrideDerivation super.Security (drv: {
|
||||
setupHook = ./security-setup-hook.sh;
|
||||
});
|
||||
@ -228,7 +298,14 @@ in rec {
|
||||
cp ${lib.getDev sdk}/include/simd/*.h $out/include/simd/
|
||||
'';
|
||||
});
|
||||
};
|
||||
|
||||
WebKit = stdenv.lib.overrideDerivation super.WebKit (drv: {
|
||||
extraTBDFiles = [
|
||||
"Versions/A/Frameworks/WebCore.framework/Versions/A/WebCore.tbd"
|
||||
"Versions/A/Frameworks/WebKitLegacy.framework/Versions/A/WebKitLegacy.tbd"
|
||||
];
|
||||
});
|
||||
} // lib.genAttrs [ "ContactsPersistence" "UIFoundation" "GameCenter" ] (x: tbdOnlyFramework x {});
|
||||
|
||||
bareFrameworks = stdenv.lib.mapAttrs framework (import ./frameworks.nix {
|
||||
inherit frameworks libs;
|
||||
|
@ -5,123 +5,125 @@
|
||||
{ frameworks, libs, libobjc, }:
|
||||
|
||||
with frameworks; with libs; {
|
||||
AGL = [ Carbon OpenGL ];
|
||||
AVFoundation = [ ApplicationServices CoreGraphics ];
|
||||
AVKit = [];
|
||||
Accounts = [];
|
||||
AddressBook = [ Carbon ];
|
||||
AppKit = [ AudioToolbox AudioUnit Foundation QuartzCore ];
|
||||
AppKitScripting = [];
|
||||
AppleScriptKit = [];
|
||||
AppleScriptObjC = [];
|
||||
AudioToolbox = [ CoreAudio CoreMIDI ];
|
||||
AudioUnit = [ AudioToolbox Carbon CoreAudio ];
|
||||
AudioVideoBridging = [ Foundation ];
|
||||
Automator = [];
|
||||
CFNetwork = [];
|
||||
CalendarStore = [];
|
||||
Cocoa = [ AppKit ];
|
||||
Collaboration = [];
|
||||
AGL = { inherit Carbon OpenGL; };
|
||||
AVFoundation = { inherit ApplicationServices CoreGraphics; };
|
||||
AVKit = {};
|
||||
Accounts = {};
|
||||
AddressBook = { inherit libobjc Carbon ContactsPersistence; };
|
||||
AppKit = { inherit ApplicationServices AudioToolbox AudioUnit Foundation QuartzCore UIFoundation; };
|
||||
AppKitScripting = {};
|
||||
AppleScriptKit = {};
|
||||
AppleScriptObjC = {};
|
||||
AudioToolbox = { inherit CoreAudio CoreMIDI; };
|
||||
AudioUnit = { inherit AudioToolbox Carbon CoreAudio; };
|
||||
AudioVideoBridging = { inherit Foundation; };
|
||||
Automator = {};
|
||||
CFNetwork = {};
|
||||
CalendarStore = {};
|
||||
Cocoa = { inherit AppKit CoreData; };
|
||||
Collaboration = {};
|
||||
# Impure version of CoreFoundation, this should not be used unless another
|
||||
# framework includes headers that are not available in the pure version.
|
||||
CoreFoundation = [];
|
||||
CoreAudio = [ IOKit ];
|
||||
CoreAudioKit = [ AudioUnit ];
|
||||
CoreData = [];
|
||||
CoreGraphics = [ Accelerate IOKit IOSurface SystemConfiguration ];
|
||||
CoreImage = [];
|
||||
CoreLocation = [];
|
||||
CoreMIDI = [];
|
||||
CoreMIDIServer = [];
|
||||
CoreMedia = [ ApplicationServices AudioToolbox AudioUnit CoreAudio CoreGraphics CoreVideo ];
|
||||
CoreMediaIO = [ CoreMedia ];
|
||||
CoreText = [ CoreGraphics ];
|
||||
CoreVideo = [ ApplicationServices CoreGraphics IOSurface OpenGL ];
|
||||
CoreWLAN = [ SecurityFoundation ];
|
||||
DVDPlayback = [];
|
||||
DirectoryService = [];
|
||||
DiscRecording = [ CoreServices IOKit ];
|
||||
DiscRecordingUI = [];
|
||||
DiskArbitration = [ IOKit ];
|
||||
EventKit = [];
|
||||
ExceptionHandling = [];
|
||||
FWAUserLib = [];
|
||||
ForceFeedback = [ IOKit ];
|
||||
Foundation = [ libobjc CoreFoundation Security ApplicationServices SystemConfiguration ];
|
||||
GLKit = [];
|
||||
GLUT = [ OpenGL ];
|
||||
GSS = [];
|
||||
GameController = [];
|
||||
GameKit = [ Foundation ];
|
||||
Hypervisor = [];
|
||||
ICADevices = [ Carbon IOBluetooth ];
|
||||
IMServicePlugIn = [];
|
||||
IOBluetoothUI = [ IOBluetooth ];
|
||||
IOKit = [];
|
||||
IOSurface = [ IOKit xpc ];
|
||||
ImageCaptureCore = [];
|
||||
ImageIO = [ CoreGraphics ];
|
||||
InputMethodKit = [ Carbon ];
|
||||
InstallerPlugins = [];
|
||||
InstantMessage = [];
|
||||
JavaFrameEmbedding = [];
|
||||
JavaNativeFoundation = [];
|
||||
JavaRuntimeSupport = [];
|
||||
JavaScriptCore = [];
|
||||
Kerberos = [];
|
||||
Kernel = [ IOKit ];
|
||||
LDAP = [];
|
||||
LatentSemanticMapping = [ Carbon ];
|
||||
LocalAuthentication = [];
|
||||
MapKit = [];
|
||||
MediaAccessibility = [ CoreGraphics CoreText QuartzCore ];
|
||||
MediaPlayer = [];
|
||||
MediaToolbox = [ AudioToolbox AudioUnit CoreMedia ];
|
||||
Metal = [];
|
||||
MetalKit = [ ModelIO Metal ];
|
||||
ModelIO = [ ];
|
||||
NetFS = [];
|
||||
OSAKit = [ Carbon ];
|
||||
OpenAL = [];
|
||||
OpenCL = [ IOSurface OpenGL ];
|
||||
OpenGL = [];
|
||||
PCSC = [ CoreData ];
|
||||
PreferencePanes = [];
|
||||
PubSub = [];
|
||||
QTKit = [ CoreMediaIO CoreMedia MediaToolbox QuickTime VideoToolbox ];
|
||||
QuickLook = [ ApplicationServices ];
|
||||
SceneKit = [];
|
||||
ScreenSaver = [];
|
||||
Scripting = [];
|
||||
ScriptingBridge = [];
|
||||
Security = [ IOKit ];
|
||||
SecurityFoundation = [];
|
||||
SecurityInterface = [ Security ];
|
||||
ServiceManagement = [ Security ];
|
||||
Social = [];
|
||||
SpriteKit = [];
|
||||
StoreKit = [];
|
||||
SyncServices = [];
|
||||
SystemConfiguration = [ Security ];
|
||||
TWAIN = [ Carbon ];
|
||||
Tcl = [];
|
||||
VideoDecodeAcceleration = [ CoreVideo ];
|
||||
VideoToolbox = [ CoreMedia CoreVideo ];
|
||||
WebKit = [ ApplicationServices Carbon JavaScriptCore OpenGL ];
|
||||
CoreFoundation = {};
|
||||
CoreAudio = { inherit IOKit; };
|
||||
CoreAudioKit = { inherit AudioUnit; };
|
||||
CoreData = {};
|
||||
CoreGraphics = { inherit Accelerate IOKit IOSurface SystemConfiguration; };
|
||||
CoreImage = {};
|
||||
CoreLocation = {};
|
||||
CoreMIDI = {};
|
||||
CoreMIDIServer = { inherit CoreMIDI; };
|
||||
CoreMedia = { inherit ApplicationServices AudioToolbox AudioUnit CoreAudio CoreGraphics CoreVideo; };
|
||||
CoreMediaIO = { inherit CoreMedia; };
|
||||
CoreText = { inherit CoreGraphics; };
|
||||
CoreVideo = { inherit ApplicationServices CoreGraphics IOSurface OpenGL; };
|
||||
CoreWLAN = { inherit SecurityFoundation; };
|
||||
DVDPlayback = {};
|
||||
DirectoryService = {};
|
||||
DiscRecording = { inherit libobjc CoreServices IOKit; };
|
||||
DiscRecordingUI = {};
|
||||
DiskArbitration = { inherit IOKit; };
|
||||
EventKit = {};
|
||||
ExceptionHandling = {};
|
||||
FWAUserLib = {};
|
||||
ForceFeedback = { inherit IOKit; };
|
||||
Foundation = { inherit libobjc CoreFoundation Security ApplicationServices SystemConfiguration; };
|
||||
GLKit = {};
|
||||
GLUT = { inherit OpenGL; };
|
||||
GSS = {};
|
||||
GameCenter = {};
|
||||
GameController = {};
|
||||
GameKit = { inherit Cocoa Foundation GameCenter GameController GameplayKit Metal MetalKit ModelIO SceneKit SpriteKit; };
|
||||
GameplayKit = {};
|
||||
Hypervisor = {};
|
||||
ICADevices = { inherit libobjc Carbon IOBluetooth; };
|
||||
IMServicePlugIn = {};
|
||||
IOBluetoothUI = { inherit IOBluetooth; };
|
||||
IOKit = {};
|
||||
IOSurface = { inherit IOKit xpc; };
|
||||
ImageCaptureCore = {};
|
||||
ImageIO = { inherit CoreGraphics; };
|
||||
InputMethodKit = { inherit Carbon; };
|
||||
InstallerPlugins = {};
|
||||
InstantMessage = {};
|
||||
JavaFrameEmbedding = {};
|
||||
JavaNativeFoundation = {};
|
||||
JavaRuntimeSupport = {};
|
||||
JavaScriptCore = { inherit libobjc; };
|
||||
Kerberos = {};
|
||||
Kernel = { inherit IOKit; };
|
||||
LDAP = {};
|
||||
LatentSemanticMapping = { inherit Carbon; };
|
||||
LocalAuthentication = {};
|
||||
MapKit = {};
|
||||
MediaAccessibility = { inherit CoreGraphics CoreText QuartzCore; };
|
||||
MediaPlayer = {};
|
||||
MediaToolbox = { inherit AudioToolbox AudioUnit CoreMedia; };
|
||||
Metal = {};
|
||||
MetalKit = { inherit ModelIO Metal; };
|
||||
ModelIO = {};
|
||||
NetFS = {};
|
||||
OSAKit = { inherit Carbon; };
|
||||
OpenAL = {};
|
||||
OpenCL = { inherit IOSurface OpenGL; };
|
||||
OpenGL = {};
|
||||
PCSC = { inherit CoreData; };
|
||||
PreferencePanes = {};
|
||||
PubSub = {};
|
||||
QTKit = { inherit CoreMediaIO CoreMedia MediaToolbox QuickTime VideoToolbox; };
|
||||
QuickLook = { inherit ApplicationServices; };
|
||||
SceneKit = {};
|
||||
ScreenSaver = {};
|
||||
Scripting = {};
|
||||
ScriptingBridge = {};
|
||||
Security = { inherit IOKit; };
|
||||
SecurityFoundation = {};
|
||||
SecurityInterface = { inherit Security SecurityFoundation; };
|
||||
ServiceManagement = { inherit Security; };
|
||||
Social = {};
|
||||
SpriteKit = {};
|
||||
StoreKit = {};
|
||||
SyncServices = {};
|
||||
SystemConfiguration = { inherit Security; };
|
||||
TWAIN = { inherit Carbon; };
|
||||
Tcl = {};
|
||||
VideoDecodeAcceleration = { inherit CoreVideo; };
|
||||
VideoToolbox = { inherit CoreMedia CoreVideo; };
|
||||
WebKit = { inherit libobjc ApplicationServices Carbon JavaScriptCore OpenGL; };
|
||||
|
||||
# Umbrellas
|
||||
Accelerate = [ CoreWLAN IOBluetooth ];
|
||||
ApplicationServices = [ CoreServices CoreText ImageIO ];
|
||||
Carbon = [ ApplicationServices CoreServices Foundation IOKit Security QuartzCore ];
|
||||
CoreBluetooth = [];
|
||||
Accelerate = { inherit CoreWLAN IOBluetooth; };
|
||||
ApplicationServices = { inherit CoreGraphics CoreServices CoreText ImageIO; };
|
||||
Carbon = { inherit libobjc ApplicationServices CoreServices Foundation IOKit Security QuartzCore; };
|
||||
CoreBluetooth = {};
|
||||
# TODO: figure out which part of the umbrella depends on CoreFoundation and move it there.
|
||||
CoreServices = [ CFNetwork CoreFoundation CoreAudio CoreData DiskArbitration Security NetFS OpenDirectory ServiceManagement ];
|
||||
IOBluetooth = [ IOKit ];
|
||||
JavaVM = [];
|
||||
OpenDirectory = [];
|
||||
Quartz = [ QuickLook QTKit ];
|
||||
QuartzCore = [ ApplicationServices CoreVideo OpenCL CoreImage Metal ];
|
||||
QuickTime = [ ApplicationServices AudioUnit Carbon CoreAudio CoreServices OpenGL QuartzCore ];
|
||||
CoreServices = { inherit CFNetwork CoreFoundation CoreAudio CoreData DiskArbitration Security NetFS OpenDirectory ServiceManagement; };
|
||||
IOBluetooth = { inherit CoreBluetooth IOKit; };
|
||||
JavaVM = {};
|
||||
OpenDirectory = {};
|
||||
Quartz = { inherit QuartzCore QuickLook QTKit; };
|
||||
QuartzCore = { inherit libobjc ApplicationServices CoreVideo OpenCL CoreImage Metal; };
|
||||
QuickTime = { inherit ApplicationServices AudioUnit Carbon CoreAudio CoreServices OpenGL QuartzCore; };
|
||||
|
||||
vmnet = [];
|
||||
vmnet = {};
|
||||
}
|
||||
|
@ -0,0 +1,17 @@
|
||||
{ stdenv, libyaml }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "print-reexports";
|
||||
src = stdenv.lib.sourceFilesBySuffices ./. [".c"];
|
||||
|
||||
buildInputs = [ libyaml ];
|
||||
|
||||
buildPhase = ''
|
||||
$CC -lyaml -o $name main.c
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
mv $name $out/bin
|
||||
'';
|
||||
}
|
148
pkgs/os-specific/darwin/apple-sdk/print-reexports/main.c
Normal file
148
pkgs/os-specific/darwin/apple-sdk/print-reexports/main.c
Normal file
@ -0,0 +1,148 @@
|
||||
/**
|
||||
* Display the list of re-exported libraries from a TAPI v2 .tbd file, one per
|
||||
* line on stdout.
|
||||
*
|
||||
* TAPI files are the equivalent of library files for the purposes of linking.
|
||||
* Like dylib files, they may re-export other libraries. In upstream usage
|
||||
* these refer to the absolute paths of dylibs, and are resolved to .tbd files
|
||||
* in combination with the syslibroot option. In nixpkgs, the .tbd files refer
|
||||
* directly to other .tbd files without a syslibroot. Note that each .tbd file
|
||||
* contains an install name, so the re-exported path does not affect the final
|
||||
* result.
|
||||
*
|
||||
* In nixpkgs each framework is a distinct store path and some frameworks
|
||||
* re-export other frameworks. The re-exported names are rewritten to refer to
|
||||
* the store paths of dependencies via textual substitution. This utility is
|
||||
* used to emit every file that is listed as a re-exported library, which
|
||||
* allows the framework builder to verify their existence.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/errno.h>
|
||||
#include <yaml.h>
|
||||
|
||||
static yaml_node_t *get_mapping_entry(yaml_document_t *document, yaml_node_t *mapping, const char *name) {
|
||||
if (!mapping) {
|
||||
fprintf(stderr, "get_mapping_entry: mapping is null\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (
|
||||
yaml_node_pair_t *pair = mapping->data.mapping.pairs.start;
|
||||
pair < mapping->data.mapping.pairs.top;
|
||||
++pair
|
||||
) {
|
||||
yaml_node_t *key = yaml_document_get_node(document, pair->key);
|
||||
|
||||
if (!key) {
|
||||
fprintf(stderr, "get_mapping_entry: key (%i) is null\n", pair->key);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (key->type != YAML_SCALAR_NODE) {
|
||||
fprintf(stderr, "get_mapping_entry: key is not a scalar\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (strncmp((const char *)key->data.scalar.value, name, key->data.scalar.length) != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return yaml_document_get_node(document, pair->value);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int emit_reexports(yaml_document_t *document) {
|
||||
yaml_node_t *root = yaml_document_get_root_node(document);
|
||||
|
||||
yaml_node_t *exports = get_mapping_entry(document, root, "exports");
|
||||
|
||||
if (!exports) {
|
||||
fprintf(stderr, "emit_reexports: no exports found\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (exports->type != YAML_SEQUENCE_NODE) {
|
||||
fprintf(stderr, "emit_reexports, value is not a sequence\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (
|
||||
yaml_node_item_t *export = exports->data.sequence.items.start;
|
||||
export < exports->data.sequence.items.top;
|
||||
++export
|
||||
) {
|
||||
yaml_node_t *export_node = yaml_document_get_node(document, *export);
|
||||
|
||||
yaml_node_t *reexports = get_mapping_entry(document, export_node, "re-exports");
|
||||
|
||||
if (!reexports) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (
|
||||
yaml_node_item_t *reexport = reexports->data.sequence.items.start;
|
||||
reexport < reexports->data.sequence.items.top;
|
||||
++reexport
|
||||
) {
|
||||
yaml_node_t *val = yaml_document_get_node(document, *reexport);
|
||||
|
||||
if (val->type != YAML_SCALAR_NODE) {
|
||||
fprintf(stderr, "item is not a scalar\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
fwrite(val->data.scalar.value, val->data.scalar.length, 1, stdout);
|
||||
putchar('\n');
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
int result = 0;
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "Invalid usage\n");
|
||||
result = 2;
|
||||
goto done;
|
||||
}
|
||||
|
||||
FILE *f = fopen(argv[1], "r");
|
||||
if (!f) {
|
||||
perror("opening input file");
|
||||
result = errno;
|
||||
goto done;
|
||||
}
|
||||
|
||||
yaml_parser_t yaml_parser;
|
||||
if (!yaml_parser_initialize(&yaml_parser)) {
|
||||
fprintf(stderr, "Failed to initialize yaml parser\n");
|
||||
result = 1;
|
||||
goto err_file;
|
||||
}
|
||||
|
||||
yaml_parser_set_input_file(&yaml_parser, f);
|
||||
|
||||
yaml_document_t yaml_document;
|
||||
|
||||
if(!yaml_parser_load(&yaml_parser, &yaml_document)) {
|
||||
fprintf(stderr, "Failed to load yaml file\n");
|
||||
result = 1;
|
||||
goto err_yaml;
|
||||
}
|
||||
|
||||
emit_reexports(&yaml_document);
|
||||
|
||||
err_yaml:
|
||||
yaml_parser_delete(&yaml_parser);
|
||||
|
||||
err_file:
|
||||
fclose(f);
|
||||
|
||||
done:
|
||||
return result;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, appleDerivation, IOKitSrcs, xnu }:
|
||||
{ stdenv, appleDerivation, IOKitSrcs, xnu, darwin-stubs }:
|
||||
|
||||
# Someday it'll make sense to split these out into their own packages, but today is not that day.
|
||||
appleDerivation {
|
||||
@ -14,12 +14,15 @@ appleDerivation {
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
###### IMPURITIES
|
||||
mkdir -p $out/Library/Frameworks/IOKit.framework
|
||||
pushd $out/Library/Frameworks/IOKit.framework
|
||||
ln -s /System/Library/Frameworks/IOKit.framework/IOKit
|
||||
ln -s /System/Library/Frameworks/IOKit.framework/Resources
|
||||
popd
|
||||
|
||||
###### IMPURITIES
|
||||
ln -s /System/Library/Frameworks/IOKit.framework/Resources \
|
||||
$out/Library/Frameworks/IOKit.framework
|
||||
|
||||
###### STUBS
|
||||
cp ${darwin-stubs}/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit.tbd \
|
||||
$out/Library/Frameworks/IOKit.framework
|
||||
|
||||
###### HEADERS
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ stdenv, appleDerivation, cpio, xnu, Libc, Libm, libdispatch, cctools, Libinfo
|
||||
, dyld, Csu, architecture, libclosure, CarbonHeaders, ncurses, CommonCrypto
|
||||
, copyfile, removefile, libresolv, Libnotify, libplatform, libpthread
|
||||
, mDNSResponder, launchd, libutil, hfs, darling }:
|
||||
, mDNSResponder, launchd, libutil, hfs, darling, darwin-stubs }:
|
||||
|
||||
appleDerivation {
|
||||
dontBuild = true;
|
||||
@ -88,52 +88,18 @@ appleDerivation {
|
||||
# The startup object files
|
||||
cp ${Csu}/lib/* $out/lib
|
||||
|
||||
# We can't re-exported libsystem_c and libsystem_kernel directly,
|
||||
# so we link against the central library here.
|
||||
mkdir -p $out/lib/system
|
||||
ld -macosx_version_min 10.7 -arch x86_64 -dylib \
|
||||
-o $out/lib/system/libsystem_c.dylib \
|
||||
/usr/lib/libSystem.dylib \
|
||||
-reexported_symbols_list ${./system_c_symbols}
|
||||
cp -vr \
|
||||
${darwin-stubs}/usr/lib/libSystem.B.tbd \
|
||||
${darwin-stubs}/usr/lib/system \
|
||||
$out/lib
|
||||
|
||||
ld -macosx_version_min 10.7 -arch x86_64 -dylib \
|
||||
-o $out/lib/system/libsystem_kernel.dylib \
|
||||
/usr/lib/libSystem.dylib \
|
||||
-reexported_symbols_list ${./system_kernel_symbols}
|
||||
|
||||
# The umbrella libSystem also exports some symbols,
|
||||
# but we don't want to pull in everything from the other libraries.
|
||||
ld -macosx_version_min 10.7 -arch x86_64 -dylib \
|
||||
-o $out/lib/libSystem_internal.dylib \
|
||||
/usr/lib/libSystem.dylib \
|
||||
-reexported_symbols_list ${./system_symbols}
|
||||
|
||||
# We used to determine these impurely based on the host system, but then when we got some 10.12 Hydra boxes,
|
||||
# one of them accidentally built this derivation, referenced libsystem_symptoms.dylib, which doesn't exist on
|
||||
# 10.11, and then broke all subsequent builds on 10.11. By picking a 10.11 compatible subset of the libraries,
|
||||
# we avoid scary impurity issues like that.
|
||||
libs=$(cat ${./reexported_libraries} | grep -v '^#')
|
||||
|
||||
for i in $libs; do
|
||||
if [ "$i" != "/usr/lib/system/libsystem_kernel.dylib" ] && [ "$i" != "/usr/lib/system/libsystem_c.dylib" ]; then
|
||||
args="$args -reexport_library $i"
|
||||
fi
|
||||
done
|
||||
|
||||
ld -macosx_version_min 10.7 -arch x86_64 -dylib \
|
||||
-o $out/lib/libSystem.B.dylib \
|
||||
-compatibility_version 1.0 \
|
||||
-current_version 1226.10.1 \
|
||||
-reexport_library $out/lib/system/libsystem_c.dylib \
|
||||
-reexport_library $out/lib/system/libsystem_kernel.dylib \
|
||||
-reexport_library $out/lib/libSystem_internal.dylib \
|
||||
$args
|
||||
|
||||
ln -s libSystem.B.dylib $out/lib/libSystem.dylib
|
||||
substituteInPlace $out/lib/libSystem.B.tbd \
|
||||
--replace "/usr/lib/system/" "$out/lib/system/"
|
||||
ln -s libSystem.B.tbd $out/lib/libSystem.tbd
|
||||
|
||||
# Set up links to pretend we work like a conventional unix (Apple's design, not mine!)
|
||||
for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.10.4 gcc_s.10.5; do
|
||||
ln -s libSystem.dylib $out/lib/lib$name.dylib
|
||||
ln -s libSystem.tbd $out/lib/lib$name.tbd
|
||||
done
|
||||
|
||||
# This probably doesn't belong here, but we want to stay similar to glibc, which includes resolv internally...
|
||||
@ -144,13 +110,13 @@ appleDerivation {
|
||||
chmod +w $out/lib/libresolv.9.dylib
|
||||
install_name_tool \
|
||||
-id $out/lib/libresolv.9.dylib \
|
||||
-change "$resolv_libSystem" $out/lib/libSystem.dylib \
|
||||
-change "$resolv_libSystem" /usr/lib/libSystem.dylib \
|
||||
$out/lib/libresolv.9.dylib
|
||||
ln -s libresolv.9.dylib $out/lib/libresolv.dylib
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "The Mac OS libc/libSystem (impure symlinks to binaries with pure headers)";
|
||||
description = "The Mac OS libc/libSystem (tapi library with pure headers)";
|
||||
maintainers = with maintainers; [ copumpkin gridaphobe ];
|
||||
platforms = platforms.darwin;
|
||||
license = licenses.apsl20;
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ appleDerivation }:
|
||||
{ appleDerivation, darwin-stubs }:
|
||||
|
||||
appleDerivation {
|
||||
phases = [ "unpackPhase" "installPhase" ];
|
||||
@ -12,14 +12,15 @@ appleDerivation {
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
###### IMPURITIES
|
||||
mkdir -p $out/Library/Frameworks/Security.framework
|
||||
pushd $out/Library/Frameworks/Security.framework
|
||||
ln -s /System/Library/Frameworks/Security.framework/Security
|
||||
ln -s /System/Library/Frameworks/Security.framework/Resources
|
||||
ln -s /System/Library/Frameworks/Security.framework/PlugIns
|
||||
ln -s /System/Library/Frameworks/Security.framework/XPCServices
|
||||
popd
|
||||
|
||||
###### IMPURITIES
|
||||
ln -s /System/Library/Frameworks/Security.framework/{Resources,Plugins,XPCServices} \
|
||||
$out/Library/Frameworks/Security.framework
|
||||
|
||||
###### STUBS
|
||||
cp ${darwin-stubs}/System/Library/Frameworks/Security.framework/Versions/A/Security.tbd \
|
||||
$out/Library/Frameworks/Security.framework
|
||||
|
||||
###### HEADERS
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ appleDerivation }:
|
||||
{ appleDerivation, darwin-stubs }:
|
||||
|
||||
appleDerivation {
|
||||
phases = [ "unpackPhase" "installPhase" ];
|
||||
@ -14,7 +14,8 @@ appleDerivation {
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/include/objc $out/lib
|
||||
ln -s /usr/lib/libobjc.dylib $out/lib/libobjc.dylib
|
||||
cp ${darwin-stubs}/usr/lib/libobjc.A.tbd $out/lib/libobjc.A.tbd
|
||||
ln -s libobjc.A.tbd $out/lib/libobjc.tbd
|
||||
cp runtime/OldClasses.subproj/List.h $out/include/objc/List.h
|
||||
cp runtime/NSObjCRuntime.h $out/include/objc/NSObjCRuntime.h
|
||||
cp runtime/NSObject.h $out/include/objc/NSObject.h
|
||||
|
20
pkgs/os-specific/darwin/darwin-stubs/default.nix
Normal file
20
pkgs/os-specific/darwin/darwin-stubs/default.nix
Normal file
@ -0,0 +1,20 @@
|
||||
{ stdenv, fetchFromGitHub }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "darwin-stubs";
|
||||
version = "10.12";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "NixOS";
|
||||
repo = "darwin-stubs";
|
||||
rev = "80b3d4a57d3454c975eefd984c804dbd76f04ef2";
|
||||
sha256 = "0sslg4rmskms8ixixv1gvnrvvvmn723vbfjj6mcn24fj2ncg38y7";
|
||||
};
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -vr stubs/$version/* $out
|
||||
'';
|
||||
}
|
@ -7,15 +7,15 @@
|
||||
# Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools
|
||||
, bootstrapFiles ? let
|
||||
fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> {
|
||||
url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/d5bdfcbfe6346761a332918a267e82799ec954d2/${file}";
|
||||
url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/5ab5783e4f46c373c6de84deac9ad59b608bb2e6/${file}";
|
||||
inherit (localSystem) system;
|
||||
inherit sha256 executable;
|
||||
}; in {
|
||||
sh = fetch { file = "sh"; sha256 = "07wm33f1yzfpcd3rh42f8g096k4cvv7g65p968j28agzmm2s7s8m"; };
|
||||
bzip2 = fetch { file = "bzip2"; sha256 = "0y9ri2aprkrp2dkzm6229l0mw4rxr2jy7vvh3d8mxv2698v2kdbm"; };
|
||||
mkdir = fetch { file = "mkdir"; sha256 = "0sb07xpy66ws6f2jfnpjibyimzb71al8n8c6y4nr8h50al3g90nr"; };
|
||||
cpio = fetch { file = "cpio"; sha256 = "0r5c54hg678w7zydx27bzl9p3v9fs25y5ix6vdfi1ilqim7xh65n"; };
|
||||
tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "18hp5w6klr8g307ap4368r255qpzg9r0vwg9vqvj8f2zy1xilcjf"; executable = false; };
|
||||
sh = fetch { file = "sh"; sha256 = "sha256-nbb4XEk3go7ttiWrQyKQMLzPr+qUnwnHkWMtVCZsMCs="; };
|
||||
bzip2 = fetch { file = "bzip2"; sha256 = "sha256-ybnA+JWrKhXSfn20+GVKXkHFTp2Zt79hat8hAVmsUOc="; };
|
||||
mkdir = fetch { file = "mkdir"; sha256 = "sha256-nmvMxmfcY41/60Z/E8L9u0vgePW5l30Dqw1z+Nr02Hk="; };
|
||||
cpio = fetch { file = "cpio"; sha256 = "sha256-cB36rN3NLj19Tk37Kc5bodMFMO+mCpEQkKKo0AEMkaU="; };
|
||||
tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "sha256-kh2vKmjCr/HvR06czZbxUxV5KDRxSF27M6nN3cyofRI="; executable = false; };
|
||||
}
|
||||
}:
|
||||
|
||||
@ -24,6 +24,8 @@ assert crossSystem == localSystem;
|
||||
let
|
||||
inherit (localSystem) system platform;
|
||||
|
||||
bootstrapClangVersion = "7.1.0";
|
||||
|
||||
commonImpureHostDeps = [
|
||||
"/bin/sh"
|
||||
"/usr/lib/libSystem.B.dylib"
|
||||
@ -72,33 +74,48 @@ in rec {
|
||||
inherit (last) stdenv;
|
||||
};
|
||||
|
||||
coreutils = { name = "${name}-coreutils"; outPath = bootstrapTools; };
|
||||
gnugrep = { name = "${name}-gnugrep"; outPath = bootstrapTools; };
|
||||
mkExtraBuildCommands = cc: ''
|
||||
rsrc="$out/resource-root"
|
||||
mkdir "$rsrc"
|
||||
ln -s "${cc}/lib/clang/${cc.version}/include" "$rsrc"
|
||||
ln -s "${last.pkgs.llvmPackages_7.compiler-rt.out}/lib" "$rsrc/lib"
|
||||
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
|
||||
'';
|
||||
|
||||
bintools = import ../../build-support/bintools-wrapper {
|
||||
inherit shell;
|
||||
inherit (last) stdenvNoCC;
|
||||
mkCC = overrides: import ../../build-support/cc-wrapper (
|
||||
let args = {
|
||||
inherit shell;
|
||||
inherit (last) stdenvNoCC;
|
||||
|
||||
nativeTools = false;
|
||||
nativeLibc = false;
|
||||
inherit buildPackages coreutils gnugrep;
|
||||
libc = last.pkgs.darwin.Libsystem;
|
||||
bintools = { name = "${name}-binutils"; outPath = bootstrapTools; };
|
||||
};
|
||||
nativeTools = false;
|
||||
nativeLibc = false;
|
||||
inherit buildPackages libcxx;
|
||||
inherit (last.pkgs) coreutils gnugrep;
|
||||
bintools = last.pkgs.darwin.binutils;
|
||||
libc = last.pkgs.darwin.Libsystem;
|
||||
isClang = true;
|
||||
cc = last.pkgs.llvmPackages_7.clang-unwrapped;
|
||||
}; in args // (overrides args));
|
||||
|
||||
cc = if last == null then "/dev/null" else import ../../build-support/cc-wrapper {
|
||||
inherit shell;
|
||||
inherit (last) stdenvNoCC;
|
||||
cc = if last == null then "/dev/null" else mkCC ({ cc, ... }: {
|
||||
extraPackages = [
|
||||
last.pkgs.llvmPackages_7.libcxxabi
|
||||
last.pkgs.llvmPackages_7.compiler-rt
|
||||
];
|
||||
extraBuildCommands = mkExtraBuildCommands cc;
|
||||
});
|
||||
|
||||
extraPackages = [];
|
||||
|
||||
nativeTools = false;
|
||||
nativeLibc = false;
|
||||
inherit buildPackages coreutils gnugrep bintools libcxx;
|
||||
libc = last.pkgs.darwin.Libsystem;
|
||||
isClang = true;
|
||||
cc = { name = "${name}-clang"; outPath = bootstrapTools; };
|
||||
};
|
||||
ccNoLibcxx = if last == null then "/dev/null" else mkCC ({ cc, ... }: {
|
||||
libcxx = null;
|
||||
extraPackages = [
|
||||
last.pkgs.llvmPackages_7.compiler-rt
|
||||
];
|
||||
extraBuildCommands = ''
|
||||
echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
|
||||
echo "-B${last.pkgs.llvmPackages_7.compiler-rt}/lib" >> $out/nix-support/cc-cflags
|
||||
echo "-nostdlib++" >> $out/nix-support/cc-cflags
|
||||
'' + mkExtraBuildCommands cc;
|
||||
});
|
||||
|
||||
thisStdenv = import ../generic {
|
||||
name = "${name}-stdenv-darwin";
|
||||
@ -137,7 +154,10 @@ in rec {
|
||||
extraAttrs = {
|
||||
inherit macosVersionMin appleSdkVersion platform;
|
||||
};
|
||||
overrides = self: super: (overrides self super) // { fetchurl = thisStdenv.fetchurlBoot; };
|
||||
overrides = self: super: (overrides self super) // {
|
||||
inherit ccNoLibcxx;
|
||||
fetchurl = thisStdenv.fetchurlBoot;
|
||||
};
|
||||
};
|
||||
|
||||
in {
|
||||
@ -147,6 +167,9 @@ in rec {
|
||||
|
||||
stage0 = stageFun 0 null {
|
||||
overrides = self: super: with stage0; {
|
||||
coreutils = { name = "bootstrap-stage0-coreutils"; outPath = bootstrapTools; };
|
||||
gnugrep = { name = "bootstrap-stage0-gnugrep"; outPath = bootstrapTools; };
|
||||
|
||||
darwin = super.darwin // {
|
||||
Libsystem = stdenv.mkDerivation {
|
||||
name = "bootstrap-stage0-Libsystem";
|
||||
@ -157,9 +180,26 @@ in rec {
|
||||
'';
|
||||
};
|
||||
dyld = bootstrapTools;
|
||||
|
||||
binutils = lib.makeOverridable (import ../../build-support/bintools-wrapper) {
|
||||
shell = "${bootstrapTools}/bin/bash";
|
||||
inherit (self) stdenvNoCC;
|
||||
|
||||
nativeTools = false;
|
||||
nativeLibc = false;
|
||||
inherit (self) buildPackages coreutils gnugrep;
|
||||
libc = self.pkgs.darwin.Libsystem;
|
||||
bintools = { name = "bootstrap-stage0-binutils"; outPath = bootstrapTools; };
|
||||
};
|
||||
};
|
||||
|
||||
llvmPackages_7 = {
|
||||
clang-unwrapped = {
|
||||
name = "bootstrap-stage0-clang";
|
||||
outPath = bootstrapTools;
|
||||
version = bootstrapClangVersion;
|
||||
};
|
||||
|
||||
libcxx = stdenv.mkDerivation {
|
||||
name = "bootstrap-stage0-libcxx";
|
||||
phases = [ "installPhase" "fixupPhase" ];
|
||||
@ -180,6 +220,15 @@ in rec {
|
||||
ln -s ${bootstrapTools}/lib/libc++abi.dylib $out/lib/libc++abi.dylib
|
||||
'';
|
||||
};
|
||||
|
||||
compiler-rt = stdenv.mkDerivation {
|
||||
name = "bootstrap-stage0-compiler-rt";
|
||||
buildCommand = ''
|
||||
mkdir -p $out/lib
|
||||
ln -s ${bootstrapTools}/lib/libclang_rt* $out/lib
|
||||
ln -s ${bootstrapTools}/lib/darwin $out/lib/darwin
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -195,6 +244,21 @@ in rec {
|
||||
python3 = super.python3Minimal;
|
||||
|
||||
ninja = super.ninja.override { buildDocs = false; };
|
||||
|
||||
llvmPackages_7 = super.llvmPackages_7 // (let
|
||||
tools = super.llvmPackages_7.tools.extend (_: _: {
|
||||
inherit (llvmPackages_7) clang-unwrapped;
|
||||
});
|
||||
libraries = super.llvmPackages_7.libraries.extend (_: _: {
|
||||
inherit (llvmPackages_7) compiler-rt libcxx libcxxabi;
|
||||
});
|
||||
in { inherit tools libraries; } // tools // libraries);
|
||||
|
||||
darwin = super.darwin // {
|
||||
binutils = darwin.binutils.override {
|
||||
libc = self.darwin.Libsystem;
|
||||
};
|
||||
};
|
||||
};
|
||||
in with prevStage; stageFun 1 prevStage {
|
||||
extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\"";
|
||||
@ -203,7 +267,9 @@ in rec {
|
||||
libcxx = pkgs.libcxx;
|
||||
|
||||
allowedRequisites =
|
||||
[ bootstrapTools ] ++ (with pkgs; [ libcxx libcxxabi ]) ++ [ pkgs.darwin.Libsystem ];
|
||||
[ bootstrapTools ] ++
|
||||
(with pkgs; [ libcxx libcxxabi llvmPackages_7.compiler-rt ]) ++
|
||||
(with pkgs.darwin; [ Libsystem ]);
|
||||
|
||||
overrides = persistent;
|
||||
};
|
||||
@ -217,9 +283,26 @@ in rec {
|
||||
findfreetype libssh curl cmake autoconf automake libtool ed cpio coreutils
|
||||
libssh2 nghttp2 libkrb5 ninja;
|
||||
|
||||
llvmPackages_7 = super.llvmPackages_7 // (let
|
||||
tools = super.llvmPackages_7.tools.extend (_: _: {
|
||||
inherit (llvmPackages_7) clang-unwrapped;
|
||||
});
|
||||
libraries = super.llvmPackages_7.libraries.extend (_: libSuper: {
|
||||
inherit (llvmPackages_7) compiler-rt;
|
||||
libcxx = libSuper.libcxx.override {
|
||||
stdenv = overrideCC self.stdenv self.ccNoLibcxx;
|
||||
};
|
||||
libcxxabi = libSuper.libcxxabi.override {
|
||||
stdenv = overrideCC self.stdenv self.ccNoLibcxx;
|
||||
standalone = true;
|
||||
};
|
||||
});
|
||||
in { inherit tools libraries; } // tools // libraries);
|
||||
|
||||
darwin = super.darwin // {
|
||||
inherit (darwin)
|
||||
dyld Libsystem xnu configd ICU libdispatch libclosure launchd CF;
|
||||
binutils dyld Libsystem xnu configd ICU libdispatch libclosure
|
||||
launchd CF darwin-stubs;
|
||||
};
|
||||
};
|
||||
in with prevStage; stageFun 2 prevStage {
|
||||
@ -234,8 +317,9 @@ in rec {
|
||||
allowedRequisites =
|
||||
[ bootstrapTools ] ++
|
||||
(with pkgs; [
|
||||
xz.bin xz.out libcxx libcxxabi zlib libxml2.out curl.out openssl.out libssh2.out
|
||||
nghttp2.lib libkrb5
|
||||
xz.bin xz.out libcxx libcxxabi llvmPackages_7.compiler-rt
|
||||
zlib libxml2.out curl.out openssl.out libssh2.out
|
||||
nghttp2.lib libkrb5 coreutils gnugrep pcre.out gmp libiconv
|
||||
]) ++
|
||||
(with pkgs.darwin; [ dyld Libsystem CF ICU locale ]);
|
||||
|
||||
@ -262,7 +346,8 @@ in rec {
|
||||
|
||||
darwin = super.darwin // {
|
||||
inherit (darwin)
|
||||
dyld Libsystem xnu configd libdispatch libclosure launchd libiconv locale;
|
||||
dyld Libsystem xnu configd libdispatch libclosure launchd libiconv
|
||||
locale darwin-stubs;
|
||||
};
|
||||
};
|
||||
in with prevStage; stageFun 3 prevStage {
|
||||
@ -284,8 +369,9 @@ in rec {
|
||||
allowedRequisites =
|
||||
[ bootstrapTools ] ++
|
||||
(with pkgs; [
|
||||
xz.bin xz.out bash libcxx libcxxabi zlib libxml2.out curl.out openssl.out libssh2.out
|
||||
nghttp2.lib libkrb5
|
||||
xz.bin xz.out bash libcxx libcxxabi llvmPackages_7.compiler-rt
|
||||
zlib libxml2.out curl.out openssl.out libssh2.out
|
||||
nghttp2.lib libkrb5 coreutils gnugrep pcre.out gmp libiconv
|
||||
]) ++
|
||||
(with pkgs.darwin; [ dyld ICU Libsystem locale ]);
|
||||
|
||||
@ -319,7 +405,7 @@ in rec {
|
||||
in { inherit tools libraries; } // tools // libraries);
|
||||
|
||||
darwin = super.darwin // rec {
|
||||
inherit (darwin) dyld Libsystem libiconv locale;
|
||||
inherit (darwin) dyld Libsystem libiconv locale darwin-stubs;
|
||||
|
||||
CF = super.darwin.CF.override {
|
||||
inherit libxml2;
|
||||
@ -418,7 +504,7 @@ in rec {
|
||||
inherit cc;
|
||||
|
||||
darwin = super.darwin // {
|
||||
inherit (prevStage.darwin) CF;
|
||||
inherit (prevStage.darwin) CF darwin-stubs;
|
||||
xnu = super.darwin.xnu.override { inherit (prevStage) python3; };
|
||||
};
|
||||
});
|
||||
|
@ -28,11 +28,8 @@ in rec {
|
||||
buildCommand = ''
|
||||
mkdir -p $out/bin $out/lib $out/lib/system
|
||||
|
||||
# We're not going to bundle the actual libSystem.dylib; instead we reconstruct it on
|
||||
# the other side. See the notes in stdenv/darwin/default.nix for more information.
|
||||
# We also need the .o files for various low-level boot stuff.
|
||||
# Copy libSystem's .o files for various low-level boot stuff.
|
||||
cp -d ${darwin.Libsystem}/lib/*.o $out/lib
|
||||
cp -d ${darwin.Libsystem}/lib/system/*.dylib $out/lib/system
|
||||
|
||||
# Resolv is actually a link to another package, so let's copy it properly
|
||||
cp -L ${darwin.Libsystem}/lib/libresolv.9.dylib $out/lib
|
||||
@ -208,39 +205,6 @@ in rec {
|
||||
fi
|
||||
done
|
||||
|
||||
install_name_tool \
|
||||
-id $out/lib/system/libsystem_c.dylib \
|
||||
$out/lib/system/libsystem_c.dylib
|
||||
|
||||
install_name_tool \
|
||||
-id $out/lib/system/libsystem_kernel.dylib \
|
||||
$out/lib/system/libsystem_kernel.dylib
|
||||
|
||||
# TODO: this logic basically duplicates similar logic in the Libsystem expression. Deduplicate them!
|
||||
libs=$(cat $reexportedLibrariesFile | grep -v '^#')
|
||||
|
||||
for i in $libs; do
|
||||
if [ "$i" != "/usr/lib/system/libsystem_kernel.dylib" ] && [ "$i" != "/usr/lib/system/libsystem_c.dylib" ]; then
|
||||
args="$args -reexport_library $i"
|
||||
fi
|
||||
done
|
||||
|
||||
ld -macosx_version_min 10.7 \
|
||||
-arch x86_64 \
|
||||
-dylib \
|
||||
-o $out/lib/libSystem.B.dylib \
|
||||
-compatibility_version 1.0 \
|
||||
-current_version 1226.10.1 \
|
||||
-reexport_library $out/lib/system/libsystem_c.dylib \
|
||||
-reexport_library $out/lib/system/libsystem_kernel.dylib \
|
||||
$args
|
||||
|
||||
ln -s libSystem.B.dylib $out/lib/libSystem.dylib
|
||||
|
||||
for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.10.4 gcc_s.10.5; do
|
||||
ln -s libSystem.dylib $out/lib/lib$name.dylib
|
||||
done
|
||||
|
||||
ln -s libresolv.9.dylib $out/lib/libresolv.dylib
|
||||
|
||||
for i in $out/lib/*.dylib $out/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation; do
|
||||
@ -309,7 +273,20 @@ in rec {
|
||||
|
||||
${build}/on-server/sh -c 'echo Hello World'
|
||||
|
||||
export flags="-idirafter ${unpack}/include-Libsystem --sysroot=${unpack} -L${unpack}/lib"
|
||||
# This approximates a bootstrap version of libSystem can that be
|
||||
# assembled via fetchurl. Adapted from main libSystem expression.
|
||||
mkdir libSystem-boot
|
||||
cp -vr \
|
||||
${darwin.darwin-stubs}/usr/lib/libSystem.B.tbd \
|
||||
${darwin.darwin-stubs}/usr/lib/system \
|
||||
libSystem-boot
|
||||
|
||||
substituteInPlace libSystem-boot/libSystem.B.tbd \
|
||||
--replace "/usr/lib/system/" "$PWD/libSystem-boot/system/"
|
||||
ln -s libSystem.B.tbd libSystem-boot/libSystem.tbd
|
||||
# End of bootstrap libSystem
|
||||
|
||||
export flags="-idirafter ${unpack}/include-Libsystem --sysroot=${unpack} -L${unpack}/lib -L$PWD/libSystem-boot"
|
||||
|
||||
export CPP="clang -E $flags"
|
||||
export CC="clang $flags -Wl,-rpath,${unpack}/lib -Wl,-v -Wl,-sdk_version,10.10"
|
||||
|
@ -16,8 +16,10 @@ python3Packages.buildPythonApplication rec {
|
||||
(substituteAll {
|
||||
src = ./nix-paths.patch;
|
||||
df = "${coreutils}/bin/df";
|
||||
libc = let ext = if stdenv.isDarwin then ".dylib" else ".so.6";
|
||||
in "${stdenv.cc.libc}/lib/libc${ext}";
|
||||
libc =
|
||||
if stdenv.hostPlatform.isDarwin
|
||||
then "/usr/lib/libSystem.dylib"
|
||||
else "${stdenv.cc.libc}/lib/libc.so.6";
|
||||
})
|
||||
|
||||
# Fix build on Python 3.6.
|
||||
|
@ -14,7 +14,9 @@ in
|
||||
extraBuildInputs = [];
|
||||
};
|
||||
|
||||
apple_sdk = callPackage ../os-specific/darwin/apple-sdk { };
|
||||
apple_sdk = callPackage ../os-specific/darwin/apple-sdk {
|
||||
inherit (darwin) darwin-stubs print-reexports;
|
||||
};
|
||||
|
||||
binutils-unwrapped = callPackage ../os-specific/darwin/binutils {
|
||||
inherit (darwin) cctools;
|
||||
@ -41,6 +43,10 @@ in
|
||||
|
||||
DarwinTools = callPackage ../os-specific/darwin/DarwinTools { };
|
||||
|
||||
darwin-stubs = callPackage ../os-specific/darwin/darwin-stubs { };
|
||||
|
||||
print-reexports = callPackage ../os-specific/darwin/apple-sdk/print-reexports { };
|
||||
|
||||
maloader = callPackage ../os-specific/darwin/maloader {
|
||||
inherit (darwin) opencflite;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user