diff options
Diffstat (limited to 'nixpkgs/pkgs/stdenv/darwin/default.nix')
-rw-r--r-- | nixpkgs/pkgs/stdenv/darwin/default.nix | 892 |
1 files changed, 575 insertions, 317 deletions
diff --git a/nixpkgs/pkgs/stdenv/darwin/default.nix b/nixpkgs/pkgs/stdenv/darwin/default.nix index e8b3ef6c10fd..4ff512386e82 100644 --- a/nixpkgs/pkgs/stdenv/darwin/default.nix +++ b/nixpkgs/pkgs/stdenv/darwin/default.nix @@ -1,18 +1,38 @@ { lib -, localSystem, crossSystem, config, overlays, crossOverlays ? [] -# 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/5ab5783e4f46c373c6de84deac9ad59b608bb2e6/${file}"; - inherit (localSystem) system; - inherit sha256 executable; - }; in { - 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; }; - } +, localSystem +, crossSystem +, config +, overlays +, crossOverlays ? [ ] + # Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools +, bootstrapFiles ? if localSystem.isAarch64 then + let + fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> { + url = "http://tarballs.nixos.org/stdenv-darwin/aarch64/20acd4c4f14040485f40e55c0a76c186aa8ca4f3/${file}"; + inherit (localSystem) system; + inherit sha256 executable; + }; in + { + sh = fetch { file = "sh"; sha256 = "17m3xrlbl99j3vm7rzz3ghb47094dyddrbvs2a6jalczvmx7spnj"; }; + bzip2 = fetch { file = "bzip2"; sha256 = "1khs8s5klf76plhlvlc1ma838r8pc1qigk9f5bdycwgbn0nx240q"; }; + mkdir = fetch { file = "mkdir"; sha256 = "1m9nk90paazl93v43myv2ay68c1arz39pqr7lk5ddbgb177hgg8a"; }; + cpio = fetch { file = "cpio"; sha256 = "17pxq61yjjvyd738fy9f392hc9cfzkl612sdr9rxr3v0dgvm8y09"; }; + tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "1v2332k33akm6mrm4bj749rxnnmc2pkbgcslmd0bbkf76bz2ildy"; executable = false; }; + } + else + let + fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> { + url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/5ab5783e4f46c373c6de84deac9ad59b608bb2e6/${file}"; + inherit (localSystem) system; + inherit sha256 executable; + }; in + { + 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; }; + } }: assert crossSystem == localSystem; @@ -20,14 +40,24 @@ assert crossSystem == localSystem; let inherit (localSystem) system; - bootstrapClangVersion = "7.1.0"; + # Bootstrap version needs to be known to reference headers included in the bootstrap tools + bootstrapLlvmVersion = if localSystem.isAarch64 then "11.1.0" else "7.1.0"; + + useAppleSDKLibs = localSystem.isAarch64; + haveKRB5 = localSystem.isx86_64; + + # final toolchain is injected into llvmPackages_${finalLlvmVersion} + finalLlvmVersion = if localSystem.isAarch64 then "11" else "7"; + finalLlvmPackages = "llvmPackages_${finalLlvmVersion}"; commonImpureHostDeps = [ "/bin/sh" "/usr/lib/libSystem.B.dylib" "/usr/lib/system/libunc.dylib" # This dependency is "hidden", so our scanning code doesn't pick it up ]; -in rec { + +in +rec { commonPreHook = '' export NIX_ENFORCE_NO_NATIVE=''${NIX_ENFORCE_NO_NATIVE-1} export NIX_ENFORCE_PURITY=''${NIX_ENFORCE_PURITY-1} @@ -40,25 +70,30 @@ in rec { stripAllFlags=" " # the Darwin "strip" command doesn't know "-s" ''; - bootstrapTools = derivation { + bootstrapTools = derivation ({ inherit system; - name = "bootstrap-tools"; + name = "bootstrap-tools"; builder = bootstrapFiles.sh; # Not a filename! Attribute 'sh' on bootstrapFiles - args = [ ./unpack-bootstrap-tools.sh ]; + args = if localSystem.isAarch64 then [ ./unpack-bootstrap-tools-aarch64.sh ] else [ ./unpack-bootstrap-tools.sh ]; inherit (bootstrapFiles) mkdir bzip2 cpio tarball; __impureHostDeps = commonImpureHostDeps; - }; - - stageFun = step: last: {shell ? "${bootstrapTools}/bin/bash", - overrides ? (self: super: {}), - extraPreHook ? "", - extraNativeBuildInputs, - extraBuildInputs, - libcxx, - allowedRequisites ? null}: + } // lib.optionalAttrs (config.contentAddressedByDefault or false) { + __contentAddressed = true; + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + }); + + stageFun = step: last: { shell ? "${bootstrapTools}/bin/bash" + , overrides ? (self: super: { }) + , extraPreHook ? "" + , extraNativeBuildInputs + , extraBuildInputs + , libcxx + , allowedRequisites ? null + }: let name = "bootstrap-stage${toString step}"; @@ -66,11 +101,14 @@ in rec { inherit (last) stdenv; }; + doSign = localSystem.isAarch64 && last != null; + doUpdateAutoTools = localSystem.isAarch64 && last != null; + 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" + ln -s "${cc.lib or cc}/lib/clang/${cc.version}/include" "$rsrc" + ln -s "${last.pkgs."${finalLlvmPackages}".compiler-rt.out}/lib" "$rsrc/lib" echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags ''; @@ -79,32 +117,35 @@ in rec { inherit lib shell; inherit (last) stdenvNoCC; - nativeTools = false; - nativeLibc = false; + 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 mkCC ({ cc, ... }: { + bintools = last.pkgs.darwin.binutils; + libc = last.pkgs.darwin.Libsystem; + isClang = true; + cc = last.pkgs."${finalLlvmPackages}".clang-unwrapped; + }; in args // (overrides args) + ); + + cc = if last == null then "/dev/null" else + mkCC ({ cc, ... }: { extraPackages = [ - last.pkgs.llvmPackages_7.libcxxabi - last.pkgs.llvmPackages_7.compiler-rt + last.pkgs."${finalLlvmPackages}".libcxxabi + last.pkgs."${finalLlvmPackages}".compiler-rt ]; extraBuildCommands = mkExtraBuildCommands cc; }); - ccNoLibcxx = if last == null then "/dev/null" else mkCC ({ cc, ... }: { + ccNoLibcxx = if last == null then "/dev/null" else + mkCC ({ cc, ... }: { libcxx = null; extraPackages = [ - last.pkgs.llvmPackages_7.compiler-rt + last.pkgs."${finalLlvmPackages}".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 "-B${last.pkgs."${finalLlvmPackages}".compiler-rt}/lib" >> $out/nix-support/cc-cflags echo "-nostdlib++" >> $out/nix-support/cc-cflags '' + mkExtraBuildCommands cc; }); @@ -112,9 +153,23 @@ in rec { thisStdenv = import ../generic { name = "${name}-stdenv-darwin"; - inherit config shell extraNativeBuildInputs extraBuildInputs; + inherit config shell extraBuildInputs; + + extraNativeBuildInputs = extraNativeBuildInputs ++ lib.optionals doUpdateAutoTools [ + last.pkgs.updateAutotoolsGnuConfigScriptsHook + last.pkgs.gnu-config + ]; + allowedRequisites = if allowedRequisites == null then null else allowedRequisites ++ [ - cc.expand-response-params cc.bintools + cc.expand-response-params + cc.bintools + ] ++ lib.optionals doUpdateAutoTools [ + last.pkgs.updateAutotoolsGnuConfigScriptsHook + last.pkgs.gnu-config + ] ++ lib.optionals doSign [ + last.pkgs.darwin.postLinkSignHook + last.pkgs.darwin.sigtool + last.pkgs.darwin.signingUtils ]; buildPlatform = localSystem; @@ -131,7 +186,7 @@ in rec { ${commonPreHook} ${extraPreHook} ''; - initialPath = [ bootstrapTools ]; + initialPath = [ bootstrapTools ]; fetchurlBoot = import ../../build-support/fetchurl { inherit lib; @@ -143,13 +198,14 @@ in rec { __stdenvImpureHostDeps = commonImpureHostDeps; __extraImpureHostDeps = commonImpureHostDeps; - overrides = self: super: (overrides self super) // { + overrides = self: super: (overrides self super) // { inherit ccNoLibcxx; fetchurl = thisStdenv.fetchurlBoot; }; }; - in { + in + { inherit config overlays; stdenv = thisStdenv; }; @@ -172,13 +228,103 @@ in rec { ''; }; - darwin = super.darwin // { + pbzx = stdenv.mkDerivation { + name = "bootstrap-stage0-pbzx"; + phases = [ "installPhase" ]; + installPhase = '' + mkdir -p $out/bin + ln -s ${bootstrapTools}/bin/pbzx $out/bin + ''; + }; + + cpio = stdenv.mkDerivation { + name = "bootstrap-stage0-cpio"; + phases = [ "installPhase" ]; + installPhase = '' + mkdir -p $out/bin + ln -s ${bootstrapFiles.cpio} $out/bin/cpio + ''; + }; + + darwin = super.darwin.overrideScope (selfDarwin: superDarwin: { + darwin-stubs = superDarwin.darwin-stubs.override { inherit (self) stdenvNoCC fetchurl; }; + + dyld = { + name = "bootstrap-stage0-dyld"; + buildCommand = '' + mkdir -p $out + ln -s ${bootstrapTools}/lib $out/lib + ln -s ${bootstrapTools}/include $out/include + ''; + }; + + sigtool = stdenv.mkDerivation { + name = "bootstrap-stage0-sigtool"; + phases = [ "installPhase" ]; + installPhase = '' + mkdir -p $out/bin + ln -s ${bootstrapTools}/bin/sigtool $out/bin + + # Rewrite nuked references + sed -e "s|[^( ]*\bsigtool\b|$out/bin/sigtool|g" \ + ${bootstrapTools}/bin/codesign > $out/bin/codesign + chmod a+x $out/bin/codesign + ''; + }; + + print-reexports = stdenv.mkDerivation { + name = "bootstrap-stage0-print-reexports"; + phases = [ "installPhase" ]; + installPhase = '' + mkdir -p $out/bin + ln -s ${bootstrapTools}/bin/print-reexports $out/bin + ''; + }; + + rewrite-tbd = stdenv.mkDerivation { + name = "bootstrap-stage0-rewrite-tbd"; + phases = [ "installPhase" ]; + installPhase = '' + mkdir -p $out/bin + ln -s ${bootstrapTools}/bin/rewrite-tbd $out/bin + ''; + }; + + binutils-unwrapped = { name = "bootstrap-stage0-binutils"; outPath = bootstrapTools; }; + + cctools = { + name = "bootstrap-stage0-cctools"; + outPath = bootstrapTools; + targetPrefix = ""; + }; + + binutils = lib.makeOverridable (import ../../build-support/bintools-wrapper) { + shell = "${bootstrapTools}/bin/bash"; + inherit lib; + inherit (self) stdenvNoCC; + + nativeTools = false; + nativeLibc = false; + inherit (self) buildPackages coreutils gnugrep; + libc = selfDarwin.Libsystem; + bintools = selfDarwin.binutils-unwrapped; + inherit (selfDarwin) postLinkSignHook signingUtils; + }; + } // lib.optionalAttrs (! useAppleSDKLibs) { + CF = stdenv.mkDerivation { + name = "bootstrap-stage0-CF"; + buildCommand = '' + mkdir -p $out/Library/Frameworks + ln -s ${bootstrapTools}/Library/Frameworks/CoreFoundation.framework $out/Library/Frameworks + ''; + }; + Libsystem = stdenv.mkDerivation { name = "bootstrap-stage0-Libsystem"; buildCommand = '' 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 substituteInPlace $out/lib/libSystem.B.tbd --replace /usr/lib/system $out/lib/system @@ -196,35 +342,12 @@ in rec { ln -s ${bootstrapTools}/include-Libsystem $out/include ''; }; + }); - darwin-stubs = super.darwin.darwin-stubs.override { inherit (self) stdenv fetchurl; }; - - dyld = { - name = "bootstrap-stage0-dyld"; - buildCommand = '' - mkdir -p $out - ln -s ${bootstrapTools}/lib $out/lib - ln -s ${bootstrapTools}/include $out/include - ''; - }; - - binutils = lib.makeOverridable (import ../../build-support/bintools-wrapper) { - shell = "${bootstrapTools}/bin/bash"; - inherit lib; - 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 = { + "${finalLlvmPackages}" = { clang-unwrapped = stdenv.mkDerivation { name = "bootstrap-stage0-clang"; - version = bootstrapClangVersion; + version = bootstrapLlvmVersion; buildCommand = '' mkdir -p $out/lib ln -s ${bootstrapTools}/bin $out/bin @@ -265,284 +388,419 @@ in rec { }; }; - extraNativeBuildInputs = []; - extraBuildInputs = []; + extraNativeBuildInputs = [ ]; + extraBuildInputs = [ ]; libcxx = null; }; - stage1 = prevStage: let - persistent = self: super: with prevStage; { - cmake = super.cmakeMinimal; + stage1 = prevStage: + let + persistent = self: super: with prevStage; { + cmake = super.cmakeMinimal; - python3 = super.python3Minimal; + inherit pbzx cpio; - ninja = super.ninja.override { buildDocs = false; }; + python3 = super.python3Minimal; - 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 { - coreutils = self.coreutils; - libc = self.darwin.Libsystem; - }; - }; - }; - in with prevStage; stageFun 1 prevStage { - extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\""; - extraNativeBuildInputs = []; - extraBuildInputs = [ ]; - libcxx = pkgs.libcxx; + ninja = super.ninja.override { buildDocs = false; }; - allowedRequisites = - [ bootstrapTools ] ++ - (with pkgs; [ coreutils gnugrep libcxx libcxxabi llvmPackages_7.clang-unwrapped llvmPackages_7.compiler-rt ]) ++ - (with pkgs.darwin; [ darwin-stubs Libsystem ]); + "${finalLlvmPackages}" = super."${finalLlvmPackages}" // ( + let + tools = super."${finalLlvmPackages}".tools.extend (_: _: { + inherit (pkgs."${finalLlvmPackages}") clang-unwrapped; + }); + libraries = super."${finalLlvmPackages}".libraries.extend (_: _: { + inherit (pkgs."${finalLlvmPackages}") compiler-rt libcxx libcxxabi; + }); + in + { inherit tools libraries; } // tools // libraries + ); - overrides = persistent; - }; + darwin = super.darwin.overrideScope (selfDarwin: _: { + inherit (darwin) rewrite-tbd binutils-unwrapped; - stage2 = prevStage: let - persistent = self: super: with prevStage; { - inherit - zlib patchutils m4 scons flex perl bison unifdef unzip openssl python3 - libxml2 gettext sharutils gmp libarchive ncurses pkg-config libedit groff - openssh sqlite sed serf openldap db cyrus-sasl expat apr-util subversion xz - findfreetype libssh curl cmake autoconf automake libtool ed cpio coreutils - libssh2 nghttp2 libkrb5 ninja brotli; - - 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; + signingUtils = darwin.signingUtils.override { + inherit (selfDarwin) sigtool; }; - libcxxabi = libSuper.libcxxabi.override { - stdenv = overrideCC self.stdenv self.ccNoLibcxx; - standalone = true; + + binutils = darwin.binutils.override { + coreutils = self.coreutils; + libc = selfDarwin.Libsystem; + inherit (selfDarwin) postLinkSignHook signingUtils; }; }); - in { inherit tools libraries; } // tools // libraries); - - darwin = super.darwin // { - inherit (darwin) - binutils dyld Libsystem xnu configd ICU libdispatch libclosure - launchd CF darwin-stubs; }; + in + with prevStage; stageFun 1 prevStage { + extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\""; + extraNativeBuildInputs = [ ]; + extraBuildInputs = [ pkgs.darwin.CF ]; + libcxx = pkgs."${finalLlvmPackages}".libcxx; + + allowedRequisites = + [ bootstrapTools ] ++ + (with pkgs; [ coreutils gnugrep ]) ++ + (with pkgs."${finalLlvmPackages}"; [ libcxx libcxxabi compiler-rt clang-unwrapped ]) ++ + (with pkgs.darwin; [ Libsystem CF ] ++ lib.optional useAppleSDKLibs objc4); + + overrides = persistent; }; - in with prevStage; stageFun 2 prevStage { - extraPreHook = '' - export PATH_LOCALE=${pkgs.darwin.locale}/share/locale - ''; - - extraNativeBuildInputs = [ pkgs.xz ]; - extraBuildInputs = [ pkgs.darwin.CF ]; - libcxx = pkgs.libcxx; - - allowedRequisites = - [ bootstrapTools ] ++ - (with pkgs; [ - xz.bin xz.out libcxx libcxxabi llvmPackages_7.compiler-rt - llvmPackages_7.clang-unwrapped zlib libxml2.out curl.out brotli.lib openssl.out - libssh2.out nghttp2.lib libkrb5 coreutils gnugrep pcre.out gmp libiconv - ]) ++ - (with pkgs.darwin; [ dyld Libsystem CF ICU locale ]); - - overrides = persistent; - }; - stage3 = prevStage: let - persistent = self: super: with prevStage; { - inherit - patchutils m4 scons flex perl bison unifdef unzip openssl python3 - gettext sharutils libarchive pkg-config groff bash subversion - openssh sqlite sed serf openldap db cyrus-sasl expat apr-util - findfreetype libssh curl cmake autoconf automake libtool cpio - libssh2 nghttp2 libkrb5 ninja; - - # Avoid pulling in a full python and its extra dependencies for the llvm/clang builds. - libxml2 = super.libxml2.override { pythonSupport = false; }; - - llvmPackages_7 = super.llvmPackages_7 // (let - libraries = super.llvmPackages_7.libraries.extend (_: _: { - inherit (llvmPackages_7) libcxx libcxxabi; + stage2 = prevStage: + let + persistent = self: super: with prevStage; { + inherit + zlib patchutils m4 scons flex perl bison unifdef unzip openssl python3 + libxml2 gettext sharutils gmp libarchive ncurses pkg-config libedit groff + openssh sqlite sed serf openldap db cyrus-sasl expat apr-util subversion xz + findfreetype libssh curl cmake autoconf automake libtool ed cpio coreutils + libssh2 nghttp2 libkrb5 ninja brotli; + + "${finalLlvmPackages}" = super."${finalLlvmPackages}" // ( + let + tools = super."${finalLlvmPackages}".tools.extend (_: _: { + inherit (pkgs."${finalLlvmPackages}") clang-unwrapped; + }); + libraries = super."${finalLlvmPackages}".libraries.extend (_: libSuper: { + inherit (pkgs."${finalLlvmPackages}") compiler-rt; + libcxx = libSuper.libcxx.override { + stdenv = overrideCC self.stdenv self.ccNoLibcxx; + }; + libcxxabi = libSuper.libcxxabi.override ({ + stdenv = overrideCC self.stdenv self.ccNoLibcxx; + } // lib.optionalAttrs (finalLlvmVersion == "7") { + # TODO: the bootstrapping of llvm packages isn't consistent. + # `standalone` may be redundant if darwin behaves like useLLVM (or + # has useLLVM = true). + standalone = true; + }); + }); + in + { inherit tools libraries; } // tools // libraries + ); + + darwin = super.darwin.overrideScope (_: _: { + inherit (darwin) + binutils dyld Libsystem xnu configd ICU libdispatch libclosure + launchd CF objc4 darwin-stubs sigtool postLinkSignHook signingUtils; }); - in { inherit libraries; } // libraries); - - darwin = super.darwin // { - inherit (darwin) - dyld Libsystem xnu configd libdispatch libclosure launchd libiconv - locale darwin-stubs; }; - }; - in with prevStage; stageFun 3 prevStage { - shell = "${pkgs.bash}/bin/bash"; - - # We have a valid shell here (this one has no bootstrap-tools runtime deps) so stageFun - # enables patchShebangs above. Unfortunately, patchShebangs ignores our $SHELL setting - # and instead goes by $PATH, which happens to contain bootstrapTools. So it goes and - # patches our shebangs back to point at bootstrapTools. This makes sure bash comes first. - extraNativeBuildInputs = with pkgs; [ xz ]; - extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ]; - libcxx = pkgs.libcxx; - - extraPreHook = '' - export PATH=${pkgs.bash}/bin:$PATH - export PATH_LOCALE=${pkgs.darwin.locale}/share/locale - ''; - - allowedRequisites = - [ bootstrapTools ] ++ - (with pkgs; [ - xz.bin xz.out bash libcxx libcxxabi llvmPackages_7.compiler-rt - llvmPackages_7.clang-unwrapped zlib libxml2.out curl.out brotli.lib openssl.out - libssh2.out nghttp2.lib libkrb5 coreutils gnugrep pcre.out gmp libiconv - ]) ++ - (with pkgs.darwin; [ dyld ICU Libsystem locale ]); - - overrides = persistent; - }; + in + with prevStage; stageFun 2 prevStage { + extraPreHook = '' + export PATH_LOCALE=${pkgs.darwin.locale}/share/locale + ''; - stage4 = prevStage: let - persistent = self: super: with prevStage; { - inherit - gnumake gzip gnused bzip2 gawk ed xz patch bash python3 - ncurses libffi zlib gmp pcre gnugrep cmake - coreutils findutils diffutils patchutils ninja libxml2; - - # Hack to make sure we don't link ncurses in bootstrap tools. The proper - # solution is to avoid passing -L/nix-store/...-bootstrap-tools/lib, - # quite a sledgehammer just to get the C runtime. - gettext = super.gettext.overrideAttrs (drv: { - configureFlags = drv.configureFlags ++ [ - "--disable-curses" - ]; - }); + extraNativeBuildInputs = [ pkgs.xz ]; + extraBuildInputs = [ pkgs.darwin.CF ]; + libcxx = pkgs."${finalLlvmPackages}".libcxx; + + allowedRequisites = + [ bootstrapTools ] ++ + (with pkgs; [ + xz.bin + xz.out + zlib + libxml2.out + curl.out + openssl.out + libssh2.out + nghttp2.lib + coreutils + gnugrep + pcre.out + gmp + libiconv + brotli.lib + ] ++ lib.optional haveKRB5 libkrb5) ++ + (with pkgs."${finalLlvmPackages}"; [ + libcxx + libcxxabi + compiler-rt + clang-unwrapped + ]) ++ + (with pkgs.darwin; [ dyld Libsystem CF ICU locale ] ++ lib.optional useAppleSDKLibs objc4); + + overrides = persistent; + }; - llvmPackages_7 = super.llvmPackages_7 // (let - tools = super.llvmPackages_7.tools.extend (llvmSelf: _: { - clang-unwrapped = llvmPackages_7.clang-unwrapped.override { llvm = llvmSelf.llvm; }; - llvm = llvmPackages_7.llvm.override { inherit libxml2; }; - }); - libraries = super.llvmPackages_7.libraries.extend (llvmSelf: _: { - inherit (llvmPackages_7) libcxx libcxxabi compiler-rt; + stage3 = prevStage: + let + persistent = self: super: with prevStage; { + inherit + patchutils m4 scons flex perl bison unifdef unzip openssl python3 + gettext sharutils libarchive pkg-config groff bash subversion + openssh sqlite sed serf openldap db cyrus-sasl expat apr-util + findfreetype libssh curl cmake autoconf automake libtool cpio + libssh2 nghttp2 libkrb5 ninja; + + # Avoid pulling in a full python and its extra dependencies for the llvm/clang builds. + libxml2 = super.libxml2.override { pythonSupport = false; }; + + "${finalLlvmPackages}" = super."${finalLlvmPackages}" // ( + let + libraries = super."${finalLlvmPackages}".libraries.extend (_: _: { + inherit (pkgs."${finalLlvmPackages}") libcxx libcxxabi; + }); + in + { inherit libraries; } // libraries + ); + + darwin = super.darwin.overrideScope (_: _: { + inherit (darwin) + dyld Libsystem xnu configd libdispatch libclosure launchd libiconv + locale darwin-stubs sigtool; }); - in { inherit tools libraries; } // tools // libraries); - - darwin = super.darwin // rec { - inherit (darwin) dyld Libsystem libiconv locale darwin-stubs; - - CF = super.darwin.CF.override { - inherit libxml2; - python3 = prevStage.python3; - }; }; + in + with prevStage; stageFun 3 prevStage { + shell = "${pkgs.bash}/bin/bash"; + + # We have a valid shell here (this one has no bootstrap-tools runtime deps) so stageFun + # enables patchShebangs above. Unfortunately, patchShebangs ignores our $SHELL setting + # and instead goes by $PATH, which happens to contain bootstrapTools. So it goes and + # patches our shebangs back to point at bootstrapTools. This makes sure bash comes first. + extraNativeBuildInputs = with pkgs; [ xz ]; + extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ]; + libcxx = pkgs."${finalLlvmPackages}".libcxx; + + extraPreHook = '' + export PATH=${pkgs.bash}/bin:$PATH + export PATH_LOCALE=${pkgs.darwin.locale}/share/locale + ''; + + allowedRequisites = + [ bootstrapTools ] ++ + (with pkgs; [ + xz.bin + xz.out + bash + zlib + libxml2.out + curl.out + openssl.out + libssh2.out + nghttp2.lib + coreutils + gnugrep + pcre.out + gmp + libiconv + brotli.lib + ] ++ lib.optional haveKRB5 libkrb5) ++ + (with pkgs."${finalLlvmPackages}"; [ + libcxx + libcxx.dev + libcxxabi + libcxxabi.dev + compiler-rt + clang-unwrapped + ]) ++ + (with pkgs.darwin; [ dyld ICU Libsystem locale ] ++ lib.optional useAppleSDKLibs objc4); + + overrides = persistent; }; - in with prevStage; stageFun 4 prevStage { - shell = "${pkgs.bash}/bin/bash"; - extraNativeBuildInputs = with pkgs; [ xz ]; - extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ]; - libcxx = pkgs.libcxx; - - extraPreHook = '' - export PATH_LOCALE=${pkgs.darwin.locale}/share/locale - ''; - overrides = persistent; - }; - stdenvDarwin = prevStage: let - pkgs = prevStage; - persistent = self: super: with prevStage; { - inherit - gnumake gzip gnused bzip2 gawk ed xz patch bash - ncurses libffi zlib llvm gmp pcre gnugrep - coreutils findutils diffutils patchutils; - - llvmPackages_7 = super.llvmPackages_7 // (let - tools = super.llvmPackages_7.tools.extend (_: super: { - inherit (llvmPackages_7) llvm clang-unwrapped; + stage4 = prevStage: + let + persistent = self: super: with prevStage; { + inherit + gnumake gzip gnused bzip2 gawk ed xz patch bash python3 + ncurses libffi zlib gmp pcre gnugrep cmake + coreutils findutils diffutils patchutils ninja libxml2; + + # Hack to make sure we don't link ncurses in bootstrap tools. The proper + # solution is to avoid passing -L/nix-store/...-bootstrap-tools/lib, + # quite a sledgehammer just to get the C runtime. + gettext = super.gettext.overrideAttrs (drv: { + configureFlags = drv.configureFlags ++ [ + "--disable-curses" + ]; }); - libraries = super.llvmPackages_7.libraries.extend (_: _: { - inherit (llvmPackages_7) compiler-rt libcxx libcxxabi; + + "${finalLlvmPackages}" = super."${finalLlvmPackages}" // ( + let + tools = super."${finalLlvmPackages}".tools.extend (llvmSelf: _: { + clang-unwrapped-all-outputs = pkgs."${finalLlvmPackages}".clang-unwrapped-all-outputs.override { llvm = llvmSelf.llvm; }; + libllvm = pkgs."${finalLlvmPackages}".libllvm.override { inherit libxml2; }; + }); + libraries = super."${finalLlvmPackages}".libraries.extend (llvmSelf: _: { + inherit (pkgs."${finalLlvmPackages}") libcxx libcxxabi compiler-rt; + }); + in + { inherit tools libraries; } // tools // libraries + ); + + darwin = super.darwin.overrideScope (_: superDarwin: { + inherit (darwin) dyld Libsystem libiconv locale darwin-stubs; + + # See useAppleSDKLibs in darwin-packages.nix + CF = if useAppleSDKLibs then super.darwin.CF else + superDarwin.CF.override { + inherit libxml2; + python3 = prevStage.python3; + }; }); - in { inherit tools libraries; } // tools // libraries); + }; + in + with prevStage; stageFun 4 prevStage { + shell = "${pkgs.bash}/bin/bash"; + extraNativeBuildInputs = with pkgs; [ xz ]; + extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ]; + libcxx = pkgs."${finalLlvmPackages}".libcxx; + + extraPreHook = '' + export PATH_LOCALE=${pkgs.darwin.locale}/share/locale + ''; + overrides = persistent; + }; - darwin = super.darwin // { - inherit (darwin) dyld ICU Libsystem libiconv; + stdenvDarwin = prevStage: + let + doSign = localSystem.isAarch64; + pkgs = prevStage; + persistent = self: super: with prevStage; { + inherit + gnumake gzip gnused bzip2 gawk ed xz patch bash + ncurses libffi zlib gmp pcre gnugrep + coreutils findutils diffutils patchutils pbzx; + + darwin = super.darwin.overrideScope (_: _: { + inherit (darwin) dyld ICU Libsystem Csu libiconv rewrite-tbd; + } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) { + inherit (darwin) binutils binutils-unwrapped cctools; + }); } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) { - inherit (darwin) binutils binutils-unwrapped cctools; + inherit llvm; + + # Need to get rid of these when cross-compiling. + "${finalLlvmPackages}" = super."${finalLlvmPackages}" // ( + let + tools = super."${finalLlvmPackages}".tools.extend (_: super: { + inherit (pkgs."${finalLlvmPackages}") llvm clang-unwrapped; + }); + libraries = super."${finalLlvmPackages}".libraries.extend (_: _: { + inherit (pkgs."${finalLlvmPackages}") compiler-rt libcxx libcxxabi; + }); + in + { inherit tools libraries; } // tools // libraries + ); + + inherit binutils binutils-unwrapped; }; - } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) { - # Need to get rid of these when cross-compiling. - inherit binutils binutils-unwrapped; - }; - in import ../generic rec { - name = "stdenv-darwin"; + in + import ../generic rec { + name = "stdenv-darwin"; - inherit config; - inherit (pkgs.stdenv) fetchurlBoot; + inherit config; + inherit (pkgs.stdenv) fetchurlBoot; - buildPlatform = localSystem; - hostPlatform = localSystem; - targetPlatform = localSystem; + buildPlatform = localSystem; + hostPlatform = localSystem; + targetPlatform = localSystem; - preHook = commonPreHook + '' - export NIX_COREFOUNDATION_RPATH=${pkgs.darwin.CF}/Library/Frameworks - export PATH_LOCALE=${pkgs.darwin.locale}/share/locale - ''; + preHook = commonPreHook + '' + export NIX_COREFOUNDATION_RPATH=${pkgs.darwin.CF}/Library/Frameworks + export PATH_LOCALE=${pkgs.darwin.locale}/share/locale + ''; - __stdenvImpureHostDeps = commonImpureHostDeps; - __extraImpureHostDeps = commonImpureHostDeps; + __stdenvImpureHostDeps = commonImpureHostDeps; + __extraImpureHostDeps = commonImpureHostDeps; - initialPath = import ../common-path.nix { inherit pkgs; }; - shell = "${pkgs.bash}/bin/bash"; + initialPath = import ../common-path.nix { inherit pkgs; }; + shell = "${pkgs.bash}/bin/bash"; - cc = pkgs.llvmPackages.libcxxClang.override { - cc = pkgs.llvmPackages.clang-unwrapped; - }; + cc = pkgs."${finalLlvmPackages}".libcxxClang; - extraNativeBuildInputs = []; - extraBuildInputs = [ pkgs.darwin.CF ]; + extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [ + pkgs.updateAutotoolsGnuConfigScriptsHook + ]; - extraAttrs = { - libc = pkgs.darwin.Libsystem; - shellPackage = pkgs.bash; - inherit bootstrapTools; - }; + extraBuildInputs = [ pkgs.darwin.CF ]; - allowedRequisites = (with pkgs; [ - xz.out xz.bin libcxx libcxxabi gmp.out gnumake findutils bzip2.out - bzip2.bin llvmPackages.llvm llvmPackages.llvm.lib llvmPackages.compiler-rt llvmPackages.compiler-rt.dev - zlib.out zlib.dev libffi.out coreutils ed diffutils gnutar - gzip ncurses.out ncurses.dev ncurses.man gnused bash gawk - gnugrep llvmPackages.clang-unwrapped llvmPackages.clang-unwrapped.lib patch pcre.out gettext - binutils.bintools darwin.binutils darwin.binutils.bintools - curl.out brotli.lib openssl.out libssh2.out nghttp2.lib libkrb5 - cc.expand-response-params libxml2.out - ]) ++ (with pkgs.darwin; [ - dyld Libsystem CF cctools ICU libiconv locale libtapi - ]); - - overrides = lib.composeExtensions persistent (self: super: { - clang = cc; - llvmPackages = super.llvmPackages // { clang = cc; }; - inherit cc; - - darwin = super.darwin // { - inherit (prevStage.darwin) CF darwin-stubs; - xnu = super.darwin.xnu.override { inherit (prevStage) python3; }; + extraAttrs = { + libc = pkgs.darwin.Libsystem; + shellPackage = pkgs.bash; + inherit bootstrapTools; }; - }); - }; + + allowedRequisites = (with pkgs; [ + xz.out + xz.bin + gmp.out + gnumake + findutils + bzip2.out + bzip2.bin + zlib.out + zlib.dev + libffi.out + coreutils + ed + diffutils + gnutar + gzip + ncurses.out + ncurses.dev + ncurses.man + gnused + bash + gawk + gnugrep + patch + pcre.out + gettext + binutils.bintools + darwin.binutils + darwin.binutils.bintools + curl.out + openssl.out + libssh2.out + nghttp2.lib + brotli.lib + cc.expand-response-params + libxml2.out + ] ++ lib.optional haveKRB5 libkrb5 + ++ lib.optionals localSystem.isAarch64 [ + pkgs.updateAutotoolsGnuConfigScriptsHook + pkgs.gnu-config + ]) + ++ (with pkgs."${finalLlvmPackages}"; [ + libcxx + libcxx.dev + libcxxabi + libcxxabi.dev + llvm + llvm.lib + compiler-rt + compiler-rt.dev + clang-unwrapped + libclang.dev + libclang.lib + ]) + ++ (with pkgs.darwin; [ + dyld + Libsystem + CF + cctools + ICU + libiconv + locale + libtapi + ] ++ lib.optional useAppleSDKLibs objc4 + ++ lib.optionals doSign [ postLinkSignHook sigtool signingUtils ]); + + 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; + llvmPackages = super.llvmPackages // { clang = cc; }; + inherit cc; + }); + }; stagesDarwin = [ ({}: stage0) |