Merge pull request #121654 from Ericson2314/darwin-cross-prep

treewide: Do a number of no-op cleanups for cross and darwin
This commit is contained in:
John Ericson 2021-05-06 11:38:09 -04:00 committed by GitHub
commit 8e84cafcd9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 111 additions and 83 deletions

View file

@ -219,16 +219,17 @@ rec {
/* Like the above, but aims to support cross compilation. It's still ugly, but /* Like the above, but aims to support cross compilation. It's still ugly, but
hopefully it helps a little bit. */ hopefully it helps a little bit. */
makeScopeWithSplicing = splicePackages: newScope: otherSplices: keep: f: makeScopeWithSplicing = splicePackages: newScope: otherSplices: keep: extra: f:
let let
spliced = splicePackages { spliced0 = splicePackages {
pkgsBuildBuild = otherSplices.selfBuildBuild; pkgsBuildBuild = otherSplices.selfBuildBuild;
pkgsBuildHost = otherSplices.selfBuildHost; pkgsBuildHost = otherSplices.selfBuildHost;
pkgsBuildTarget = otherSplices.selfBuildTarget; pkgsBuildTarget = otherSplices.selfBuildTarget;
pkgsHostHost = otherSplices.selfHostHost; pkgsHostHost = otherSplices.selfHostHost;
pkgsHostTarget = self; # Not `otherSplices.selfHostTarget`; pkgsHostTarget = self; # Not `otherSplices.selfHostTarget`;
pkgsTargetTarget = otherSplices.selfTargetTarget; pkgsTargetTarget = otherSplices.selfTargetTarget;
} // keep self; };
spliced = extra spliced0 // spliced0 // keep self;
self = f self // { self = f self // {
newScope = scope: newScope (spliced // scope); newScope = scope: newScope (spliced // scope);
callPackage = newScope spliced; # == self.newScope {}; callPackage = newScope spliced; # == self.newScope {};
@ -239,6 +240,7 @@ rec {
newScope newScope
otherSplices otherSplices
keep keep
extra
(lib.fixedPoints.extends g f); (lib.fixedPoints.extends g f);
packages = f; packages = f;
}; };

View file

@ -69,6 +69,7 @@ with pkgs;
recursivePthLoader recursivePthLoader
; ;
}; };
extra = _: {};
optionalExtensions = cond: as: if cond then as else []; optionalExtensions = cond: as: if cond then as else [];
python2Extension = import ../../../top-level/python2-packages.nix; python2Extension = import ../../../top-level/python2-packages.nix;
extensions = lib.composeManyExtensions ((optionalExtensions (!self.isPy3k) [python2Extension]) ++ [ overrides ]); extensions = lib.composeManyExtensions ((optionalExtensions (!self.isPy3k) [python2Extension]) ++ [ overrides ]);
@ -77,6 +78,7 @@ with pkgs;
pkgs.newScope pkgs.newScope
otherSplices otherSplices
keep keep
extra
(lib.extends extensions pythonPackagesFun)) (lib.extends extensions pythonPackagesFun))
{ {
overrides = packageOverrides; overrides = packageOverrides;

View file

@ -1,9 +1,6 @@
{ lib, stdenv, fetchurl, fetchzip, pkgs }: { lib, stdenv, stdenvNoCC, fetchurl, fetchzip, pkgs }:
let let
macosPackages_11_0_1 = import ./macos-11.0.1.nix { inherit applePackage'; };
developerToolsPackages_11_3_1 = import ./developer-tools-11.3.1.nix { inherit applePackage'; };
# This attrset can in theory be computed automatically, but for that to work nicely we need # This attrset can in theory be computed automatically, but for that to work nicely we need
# import-from-derivation to work properly. Currently it's rather ugly when we try to bootstrap # import-from-derivation to work properly. Currently it's rather ugly when we try to bootstrap
# a stdenv out of something like this. With some care we can probably get rid of this, but for # a stdenv out of something like this. With some care we can probably get rid of this, but for
@ -190,17 +187,6 @@ let
}) // (attrs.meta or {}); }) // (attrs.meta or {});
}); });
applePackage' = namePath: version: sdkName: sha256: let
pname = builtins.head (lib.splitString "/" namePath);
appleDerivation = appleDerivation' pname version sdkName sha256;
callPackage = pkgs.newScope (packages // pkgs.darwin // { inherit appleDerivation; });
in callPackage (./. + "/${namePath}");
applePackage = namePath: sdkName: sha256: let
pname = builtins.head (lib.splitString "/" namePath);
version = versions.${sdkName}.${pname};
in applePackage' namePath version sdkName sha256;
IOKitSpecs = { IOKitSpecs = {
IOAudioFamily = fetchApple "osx-10.10.5" "0ggq7za3iq8g02j16rj67prqhrw828jsw3ah3bxq8a1cvr55aqnq"; IOAudioFamily = fetchApple "osx-10.10.5" "0ggq7za3iq8g02j16rj67prqhrw828jsw3ah3bxq8a1cvr55aqnq";
IOFireWireFamily = fetchApple "osx-10.10.5" "059qa1m668kwvchl90cqcx35b31zaqdg61zi11y1imn5s389y2g1"; IOFireWireFamily = fetchApple "osx-10.10.5" "059qa1m668kwvchl90cqcx35b31zaqdg61zi11y1imn5s389y2g1";
@ -225,11 +211,35 @@ let
IOKitSrcs = lib.mapAttrs (name: value: if lib.isFunction value then value name else value) IOKitSpecs; IOKitSrcs = lib.mapAttrs (name: value: if lib.isFunction value then value name else value) IOKitSpecs;
in
# darwin package set
self:
let
macosPackages_11_0_1 = import ./macos-11.0.1.nix { inherit applePackage'; };
developerToolsPackages_11_3_1 = import ./developer-tools-11.3.1.nix { inherit applePackage'; };
applePackage' = namePath: version: sdkName: sha256:
let
pname = builtins.head (lib.splitString "/" namePath);
appleDerivation = appleDerivation' pname version sdkName sha256;
callPackage = self.newScope { inherit appleDerivation; };
in callPackage (./. + "/${namePath}");
applePackage = namePath: sdkName: sha256: let
pname = builtins.head (lib.splitString "/" namePath);
version = versions.${sdkName}.${pname};
in applePackage' namePath version sdkName sha256;
# Only used for bootstrapping. Its convenient because it was the last version to come with a real makefile. # Only used for bootstrapping. Its convenient because it was the last version to come with a real makefile.
adv_cmds-boot = applePackage "adv_cmds/boot.nix" "osx-10.5.8" "102ssayxbg9wb35mdmhswbnw0bg7js3pfd8fcbic83c5q3bqa6c6" {}; adv_cmds-boot = applePackage "adv_cmds/boot.nix" "osx-10.5.8" "102ssayxbg9wb35mdmhswbnw0bg7js3pfd8fcbic83c5q3bqa6c6" {};
# TODO: shorten this list, we should cut down to a minimum set of bootstrap or necessary packages here. in
stubPackages = {
developerToolsPackages_11_3_1 // macosPackages_11_0_1 // {
# TODO: shorten this list, we should cut down to a minimum set of bootstrap or necessary packages here.
inherit (adv_cmds-boot) ps locale; inherit (adv_cmds-boot) ps locale;
architecture = applePackage "architecture" "osx-10.11.6" "1pbpjcd7is69hn8y29i98ci0byik826if8gnp824ha92h90w0fq3" {}; architecture = applePackage "architecture" "osx-10.11.6" "1pbpjcd7is69hn8y29i98ci0byik826if8gnp824ha92h90w0fq3" {};
bsdmake = applePackage "bsdmake" "dev-tools-3.2.6" "11a9kkhz5bfgi1i8kpdkis78lhc6b5vxmhd598fcdgra1jw4iac2" {}; bsdmake = applePackage "bsdmake" "dev-tools-3.2.6" "11a9kkhz5bfgi1i8kpdkis78lhc6b5vxmhd598fcdgra1jw4iac2" {};
@ -290,7 +300,4 @@ let
# TODO(matthewbauer): # TODO(matthewbauer):
# To be removed, once I figure out how to build a newer Security version. # To be removed, once I figure out how to build a newer Security version.
Security = applePackage "Security/boot.nix" "osx-10.9.5" "1nv0dczf67dhk17hscx52izgdcyacgyy12ag0jh6nl5hmfzsn8yy" {}; Security = applePackage "Security/boot.nix" "osx-10.9.5" "1nv0dczf67dhk17hscx52izgdcyacgyy12ag0jh6nl5hmfzsn8yy" {};
}; }
packages = developerToolsPackages_11_3_1 // macosPackages_11_0_1 // stubPackages;
in packages

View file

@ -176,13 +176,13 @@ in rec {
''; '';
}; };
darwin = super.darwin // { darwin = super.darwin.overrideScope (selfDarwin: superDarwin: {
Libsystem = stdenv.mkDerivation { Libsystem = stdenv.mkDerivation {
name = "bootstrap-stage0-Libsystem"; name = "bootstrap-stage0-Libsystem";
buildCommand = '' buildCommand = ''
mkdir -p $out mkdir -p $out
cp -r ${self.darwin.darwin-stubs}/usr/lib $out/lib cp -r ${selfDarwin.darwin-stubs}/usr/lib $out/lib
chmod -R +w $out/lib chmod -R +w $out/lib
substituteInPlace $out/lib/libSystem.B.tbd --replace /usr/lib/system $out/lib/system substituteInPlace $out/lib/libSystem.B.tbd --replace /usr/lib/system $out/lib/system
@ -201,7 +201,7 @@ in rec {
''; '';
}; };
darwin-stubs = super.darwin.darwin-stubs.override { inherit (self) stdenv fetchurl; }; darwin-stubs = superDarwin.darwin-stubs.override { inherit (self) stdenv fetchurl; };
dyld = { dyld = {
name = "bootstrap-stage0-dyld"; name = "bootstrap-stage0-dyld";
@ -220,10 +220,10 @@ in rec {
nativeTools = false; nativeTools = false;
nativeLibc = false; nativeLibc = false;
inherit (self) buildPackages coreutils gnugrep; inherit (self) buildPackages coreutils gnugrep;
libc = self.pkgs.darwin.Libsystem; libc = selfDarwin.Libsystem;
bintools = { name = "bootstrap-stage0-binutils"; outPath = bootstrapTools; }; bintools = { name = "bootstrap-stage0-binutils"; outPath = bootstrapTools; };
}; };
}; });
llvmPackages_7 = { llvmPackages_7 = {
clang-unwrapped = stdenv.mkDerivation { clang-unwrapped = stdenv.mkDerivation {
@ -291,12 +291,12 @@ in rec {
}); });
in { inherit tools libraries; } // tools // libraries); in { inherit tools libraries; } // tools // libraries);
darwin = super.darwin // { darwin = super.darwin.overrideScope (selfDarwin: _: {
binutils = darwin.binutils.override { binutils = darwin.binutils.override {
coreutils = self.coreutils; coreutils = self.coreutils;
libc = self.darwin.Libsystem; libc = selfDarwin.Libsystem;
}; };
}; });
}; };
in with prevStage; stageFun 1 prevStage { in with prevStage; stageFun 1 prevStage {
extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\""; extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\"";
@ -337,11 +337,11 @@ in rec {
}); });
in { inherit tools libraries; } // tools // libraries); in { inherit tools libraries; } // tools // libraries);
darwin = super.darwin // { darwin = super.darwin.overrideScope (_: _: {
inherit (darwin) inherit (darwin)
binutils dyld Libsystem xnu configd ICU libdispatch libclosure binutils dyld Libsystem xnu configd ICU libdispatch libclosure
launchd CF darwin-stubs; launchd CF darwin-stubs;
}; });
}; };
in with prevStage; stageFun 2 prevStage { in with prevStage; stageFun 2 prevStage {
extraPreHook = '' extraPreHook = ''
@ -382,11 +382,11 @@ in rec {
}); });
in { inherit libraries; } // libraries); in { inherit libraries; } // libraries);
darwin = super.darwin // { darwin = super.darwin.overrideScope (_: _: {
inherit (darwin) inherit (darwin)
dyld Libsystem xnu configd libdispatch libclosure launchd libiconv dyld Libsystem xnu configd libdispatch libclosure launchd libiconv
locale darwin-stubs; locale darwin-stubs;
}; });
}; };
in with prevStage; stageFun 3 prevStage { in with prevStage; stageFun 3 prevStage {
shell = "${pkgs.bash}/bin/bash"; shell = "${pkgs.bash}/bin/bash";
@ -442,14 +442,14 @@ in rec {
}); });
in { inherit tools libraries; } // tools // libraries); in { inherit tools libraries; } // tools // libraries);
darwin = super.darwin // rec { darwin = super.darwin.overrideScope (_: superDarwin: {
inherit (darwin) dyld Libsystem libiconv locale darwin-stubs; inherit (darwin) dyld Libsystem libiconv locale darwin-stubs;
CF = super.darwin.CF.override { CF = superDarwin.CF.override {
inherit libxml2; inherit libxml2;
python3 = prevStage.python3; python3 = prevStage.python3;
}; };
}; });
}; };
in with prevStage; stageFun 4 prevStage { in with prevStage; stageFun 4 prevStage {
shell = "${pkgs.bash}/bin/bash"; shell = "${pkgs.bash}/bin/bash";
@ -480,11 +480,11 @@ in rec {
}); });
in { inherit tools libraries; } // tools // libraries); in { inherit tools libraries; } // tools // libraries);
darwin = super.darwin // { darwin = super.darwin.overrideScope (_: _: {
inherit (darwin) dyld ICU Libsystem libiconv; inherit (darwin) dyld ICU Libsystem libiconv;
} // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) { } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
inherit (darwin) binutils binutils-unwrapped cctools; inherit (darwin) binutils binutils-unwrapped cctools;
}; });
} // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) { } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
# Need to get rid of these when cross-compiling. # Need to get rid of these when cross-compiling.
inherit binutils binutils-unwrapped; inherit binutils binutils-unwrapped;
@ -537,14 +537,14 @@ in rec {
]); ]);
overrides = lib.composeExtensions persistent (self: super: { overrides = lib.composeExtensions persistent (self: super: {
darwin = super.darwin.overrideScope (_: superDarwin: {
inherit (prevStage.darwin) CF darwin-stubs;
xnu = superDarwin.xnu.override { inherit (prevStage) python3; };
});
} // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
clang = cc; clang = cc;
llvmPackages = super.llvmPackages // { clang = cc; }; llvmPackages = super.llvmPackages // { clang = cc; };
inherit cc; inherit cc;
darwin = super.darwin // {
inherit (prevStage.darwin) CF darwin-stubs;
xnu = super.darwin.xnu.override { inherit (prevStage) python3; };
};
}); });
}; };

View file

@ -10395,15 +10395,7 @@ in
# The GCC used to build libc for the target platform. Normal gccs will be # The GCC used to build libc for the target platform. Normal gccs will be
# built with, and use, that cross-compiled libc. # built with, and use, that cross-compiled libc.
gccCrossStageStatic = assert stdenv.targetPlatform != stdenv.hostPlatform; let gccCrossStageStatic = assert stdenv.targetPlatform != stdenv.hostPlatform; let
libcCross1 = libcCross1 = binutilsNoLibc.libc;
if stdenv.targetPlatform.libc == "msvcrt" then targetPackages.windows.mingw_w64_headers
else if stdenv.targetPlatform.libc == "libSystem" then darwin.xcode
else if stdenv.targetPlatform.libc == "nblibc" then netbsd.headers
else null;
binutils1 = wrapBintoolsWith {
bintools = binutils-unwrapped;
libc = libcCross1;
};
in wrapCCWith { in wrapCCWith {
cc = gccFun { cc = gccFun {
# copy-pasted # copy-pasted
@ -10416,10 +10408,10 @@ in
crossStageStatic = true; crossStageStatic = true;
langCC = false; langCC = false;
libcCross = libcCross1; libcCross = libcCross1;
targetPackages.stdenv.cc.bintools = binutils1; targetPackages.stdenv.cc.bintools = binutilsNoLibc;
enableShared = false; enableShared = false;
}; };
bintools = binutils1; bintools = binutilsNoLibc;
libc = libcCross1; libc = libcCross1;
extraPackages = []; extraPackages = [];
}; };
@ -12532,6 +12524,14 @@ in
gold = false; gold = false;
}; };
}); });
binutilsNoLibc = wrapBintoolsWith {
bintools = binutils-unwrapped;
libc =
/**/ if stdenv.targetPlatform.libc == "msvcrt" then targetPackages.windows.mingw_w64_headers
else if stdenv.targetPlatform.libc == "libSystem" then darwin.xcode
else if stdenv.targetPlatform.libc == "nblibc" then targetPackages.netbsdCross.headers
else null;
};
bison = callPackage ../development/tools/parsing/bison { }; bison = callPackage ../development/tools/parsing/bison { };

View file

@ -1,27 +1,44 @@
{ buildPackages, pkgs, targetPackages { lib
, darwin, stdenv, callPackage, callPackages, newScope , buildPackages, pkgs, targetPackages
, pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget, pkgsHostHost, pkgsTargetTarget
, stdenv, splicePackages, newScope
}: }:
let 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 { };
in 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.
apple-source-releases = pkgs.callPackage ../os-specific/darwin/apple-source-releases { } self;
impure-cmds = pkgs.callPackage ../os-specific/darwin/impure-cmds { };
apple_sdk = pkgs.callPackage ../os-specific/darwin/apple-sdk {
inherit (buildPackages.darwin) print-reexports;
inherit (self) darwin-stubs;
};
in
impure-cmds // apple-source-releases // {
inherit apple_sdk;
stdenvNoCF = stdenv.override { stdenvNoCF = stdenv.override {
extraBuildInputs = []; extraBuildInputs = [];
}; };
apple_sdk = callPackage ../os-specific/darwin/apple-sdk {
inherit (darwin) darwin-stubs print-reexports;
};
binutils-unwrapped = callPackage ../os-specific/darwin/binutils { binutils-unwrapped = callPackage ../os-specific/darwin/binutils {
inherit (darwin) cctools;
inherit (pkgs) binutils-unwrapped; inherit (pkgs) binutils-unwrapped;
inherit (pkgs.llvmPackages_7) llvm clang-unwrapped; inherit (pkgs.llvmPackages_7) llvm clang-unwrapped;
}; };
@ -31,17 +48,21 @@ in
if stdenv.targetPlatform != stdenv.hostPlatform if stdenv.targetPlatform != stdenv.hostPlatform
then pkgs.libcCross then pkgs.libcCross
else pkgs.stdenv.cc.libc; else pkgs.stdenv.cc.libc;
bintools = darwin.binutils-unwrapped; bintools = self.binutils-unwrapped;
};
binutilsNoLibc = pkgs.wrapBintoolsWith {
libc = null;
bintools = self.binutils-unwrapped;
}; };
cctools = callPackage ../os-specific/darwin/cctools/port.nix { cctools = callPackage ../os-specific/darwin/cctools/port.nix {
inherit (darwin) libobjc maloader libtapi;
stdenv = if stdenv.isDarwin then stdenv else pkgs.libcxxStdenv; stdenv = if stdenv.isDarwin then stdenv else pkgs.libcxxStdenv;
libcxxabi = pkgs.libcxxabi; libcxxabi = pkgs.libcxxabi;
}; };
# TODO: remove alias. # TODO: remove alias.
cf-private = darwin.apple_sdk.frameworks.CoreFoundation; cf-private = self.apple_sdk.frameworks.CoreFoundation;
DarwinTools = callPackage ../os-specific/darwin/DarwinTools { }; DarwinTools = callPackage ../os-specific/darwin/DarwinTools { };
@ -50,15 +71,13 @@ in
print-reexports = callPackage ../os-specific/darwin/apple-sdk/print-reexports { }; print-reexports = callPackage ../os-specific/darwin/apple-sdk/print-reexports { };
maloader = callPackage ../os-specific/darwin/maloader { maloader = callPackage ../os-specific/darwin/maloader {
inherit (darwin) opencflite;
}; };
insert_dylib = callPackage ../os-specific/darwin/insert_dylib { }; 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; buildIosSdk = buildPackages.darwin.iosSdkPkgs.sdk;
targetIosSdkPkgs = targetPackages.darwin.iosSdkPkgs; targetIosSdkPkgs = targetPackages.darwin.iosSdkPkgs;
xcode = darwin.xcode;
inherit (pkgs.llvmPackages) clang-unwrapped; inherit (pkgs.llvmPackages) clang-unwrapped;
}; };
@ -70,13 +89,13 @@ in
opencflite = callPackage ../os-specific/darwin/opencflite { }; 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 { }; 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_8_1 xcode_8_2
xcode_9_1 xcode_9_2 xcode_9_4 xcode_9_4_1 xcode_9_1 xcode_9_2 xcode_9_4 xcode_9_4_1
xcode_10_2 xcode_10_2_1 xcode_10_3 xcode_10_2 xcode_10_2_1 xcode_10_3
@ -85,10 +104,10 @@ in
CoreSymbolication = callPackage ../os-specific/darwin/CoreSymbolication { }; CoreSymbolication = callPackage ../os-specific/darwin/CoreSymbolication { };
CF = callPackage ../os-specific/darwin/swift-corelibs/corefoundation.nix { inherit (darwin) objc4 ICU; }; CF = 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 # 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 { }; darling = callPackage ../os-specific/darwin/darling/default.nix { };
@ -96,8 +115,6 @@ in
ios-deploy = callPackage ../os-specific/darwin/ios-deploy {}; ios-deploy = callPackage ../os-specific/darwin/ios-deploy {};
discrete-scroll = callPackage ../os-specific/darwin/discrete-scroll { discrete-scroll = callPackage ../os-specific/darwin/discrete-scroll { };
inherit (darwin.apple_sdk.frameworks) Cocoa;
};
}) })

View file

@ -25,7 +25,7 @@ self: super: let
}; in stdenv // { }; in stdenv // {
mkDerivation = args: stdenv.mkDerivation (args // { mkDerivation = args: stdenv.mkDerivation (args // {
NIX_CFLAGS_LINK = toString (args.NIX_CFLAGS_LINK or "") NIX_CFLAGS_LINK = toString (args.NIX_CFLAGS_LINK or "")
+ optionalString stdenv.cc.isGNU " -static-libgcc"; + optionalString (stdenv_.cc.isGNU or false) " -static-libgcc";
nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ (makeSetupHook { nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ (makeSetupHook {
substitutions = { substitutions = {
libsystem = "${stdenv.cc.libc}/lib/libSystem.B.dylib"; libsystem = "${stdenv.cc.libc}/lib/libSystem.B.dylib";