stdenv/darwin: Apple Silicon support
This commit is contained in:
parent
3eacdfe24a
commit
768aae66ef
|
@ -1,7 +1,22 @@
|
||||||
{ lib
|
{ lib
|
||||||
, localSystem, crossSystem, config, overlays, crossOverlays ? []
|
, localSystem, crossSystem, config, overlays, crossOverlays ? []
|
||||||
# Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools
|
# Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools
|
||||||
, bootstrapFiles ? let
|
, bootstrapFiles ?
|
||||||
|
if localSystem.isAarch64 then
|
||||||
|
let
|
||||||
|
fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> {
|
||||||
|
url = null; # to be built by hydra and injected here
|
||||||
|
inherit (localSystem) system;
|
||||||
|
inherit sha256 executable;
|
||||||
|
}; in {
|
||||||
|
sh = fetch { file = "sh"; sha256 = "0000000000000000000000000000000000000000000000000000"; };
|
||||||
|
bzip2 = fetch { file = "bzip2"; sha256 = "0000000000000000000000000000000000000000000000000000"; };
|
||||||
|
mkdir = fetch { file = "mkdir"; sha256 = "0000000000000000000000000000000000000000000000000000"; };
|
||||||
|
cpio = fetch { file = "cpio"; sha256 = "0000000000000000000000000000000000000000000000000000"; };
|
||||||
|
tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "0000000000000000000000000000000000000000000000000000"; executable = false; };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
let
|
||||||
fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> {
|
fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> {
|
||||||
url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/5ab5783e4f46c373c6de84deac9ad59b608bb2e6/${file}";
|
url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/5ab5783e4f46c373c6de84deac9ad59b608bb2e6/${file}";
|
||||||
inherit (localSystem) system;
|
inherit (localSystem) system;
|
||||||
|
@ -20,13 +35,22 @@ assert crossSystem == localSystem;
|
||||||
let
|
let
|
||||||
inherit (localSystem) system;
|
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 = [
|
commonImpureHostDeps = [
|
||||||
"/bin/sh"
|
"/bin/sh"
|
||||||
"/usr/lib/libSystem.B.dylib"
|
"/usr/lib/libSystem.B.dylib"
|
||||||
"/usr/lib/system/libunc.dylib" # This dependency is "hidden", so our scanning code doesn't pick it up
|
"/usr/lib/system/libunc.dylib" # This dependency is "hidden", so our scanning code doesn't pick it up
|
||||||
];
|
];
|
||||||
|
|
||||||
in rec {
|
in rec {
|
||||||
commonPreHook = ''
|
commonPreHook = ''
|
||||||
export NIX_ENFORCE_NO_NATIVE=''${NIX_ENFORCE_NO_NATIVE-1}
|
export NIX_ENFORCE_NO_NATIVE=''${NIX_ENFORCE_NO_NATIVE-1}
|
||||||
|
@ -45,7 +69,7 @@ in rec {
|
||||||
|
|
||||||
name = "bootstrap-tools";
|
name = "bootstrap-tools";
|
||||||
builder = bootstrapFiles.sh; # Not a filename! Attribute 'sh' on bootstrapFiles
|
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;
|
inherit (bootstrapFiles) mkdir bzip2 cpio tarball;
|
||||||
|
|
||||||
|
@ -70,11 +94,14 @@ in rec {
|
||||||
inherit (last) stdenv;
|
inherit (last) stdenv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
doSign = localSystem.isAarch64 && last != null;
|
||||||
|
doUpdateAutoTools = localSystem.isAarch64 && last != null;
|
||||||
|
|
||||||
mkExtraBuildCommands = cc: ''
|
mkExtraBuildCommands = cc: ''
|
||||||
rsrc="$out/resource-root"
|
rsrc="$out/resource-root"
|
||||||
mkdir "$rsrc"
|
mkdir "$rsrc"
|
||||||
ln -s "${cc.lib or cc}/lib/clang/${cc.version}/include" "$rsrc"
|
ln -s "${cc.lib or cc}/lib/clang/${cc.version}/include" "$rsrc"
|
||||||
ln -s "${last.pkgs.llvmPackages_7.compiler-rt.out}/lib" "$rsrc/lib"
|
ln -s "${last.pkgs."${finalLlvmPackages}".compiler-rt.out}/lib" "$rsrc/lib"
|
||||||
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
|
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -90,13 +117,13 @@ in rec {
|
||||||
bintools = last.pkgs.darwin.binutils;
|
bintools = last.pkgs.darwin.binutils;
|
||||||
libc = last.pkgs.darwin.Libsystem;
|
libc = last.pkgs.darwin.Libsystem;
|
||||||
isClang = true;
|
isClang = true;
|
||||||
cc = last.pkgs.llvmPackages_7.clang-unwrapped;
|
cc = last.pkgs."${finalLlvmPackages}".clang-unwrapped;
|
||||||
}; in args // (overrides args));
|
}; in args // (overrides args));
|
||||||
|
|
||||||
cc = if last == null then "/dev/null" else mkCC ({ cc, ... }: {
|
cc = if last == null then "/dev/null" else mkCC ({ cc, ... }: {
|
||||||
extraPackages = [
|
extraPackages = [
|
||||||
last.pkgs.llvmPackages_7.libcxxabi
|
last.pkgs."${finalLlvmPackages}".libcxxabi
|
||||||
last.pkgs.llvmPackages_7.compiler-rt
|
last.pkgs."${finalLlvmPackages}".compiler-rt
|
||||||
];
|
];
|
||||||
extraBuildCommands = mkExtraBuildCommands cc;
|
extraBuildCommands = mkExtraBuildCommands cc;
|
||||||
});
|
});
|
||||||
|
@ -104,11 +131,11 @@ in rec {
|
||||||
ccNoLibcxx = if last == null then "/dev/null" else mkCC ({ cc, ... }: {
|
ccNoLibcxx = if last == null then "/dev/null" else mkCC ({ cc, ... }: {
|
||||||
libcxx = null;
|
libcxx = null;
|
||||||
extraPackages = [
|
extraPackages = [
|
||||||
last.pkgs.llvmPackages_7.compiler-rt
|
last.pkgs."${finalLlvmPackages}".compiler-rt
|
||||||
];
|
];
|
||||||
extraBuildCommands = ''
|
extraBuildCommands = ''
|
||||||
echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
|
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
|
echo "-nostdlib++" >> $out/nix-support/cc-cflags
|
||||||
'' + mkExtraBuildCommands cc;
|
'' + mkExtraBuildCommands cc;
|
||||||
});
|
});
|
||||||
|
@ -116,9 +143,20 @@ in rec {
|
||||||
thisStdenv = import ../generic {
|
thisStdenv = import ../generic {
|
||||||
name = "${name}-stdenv-darwin";
|
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 ++ [
|
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;
|
buildPlatform = localSystem;
|
||||||
|
@ -176,7 +214,97 @@ in rec {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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 = 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 {
|
Libsystem = stdenv.mkDerivation {
|
||||||
name = "bootstrap-stage0-Libsystem";
|
name = "bootstrap-stage0-Libsystem";
|
||||||
buildCommand = ''
|
buildCommand = ''
|
||||||
|
@ -200,35 +328,12 @@ in rec {
|
||||||
ln -s ${bootstrapTools}/include-Libsystem $out/include
|
ln -s ${bootstrapTools}/include-Libsystem $out/include
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
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 = { name = "bootstrap-stage0-binutils"; outPath = bootstrapTools; };
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
llvmPackages_7 = {
|
"${finalLlvmPackages}" = {
|
||||||
clang-unwrapped = stdenv.mkDerivation {
|
clang-unwrapped = stdenv.mkDerivation {
|
||||||
name = "bootstrap-stage0-clang";
|
name = "bootstrap-stage0-clang";
|
||||||
version = bootstrapClangVersion;
|
version = bootstrapLlvmVersion;
|
||||||
buildCommand = ''
|
buildCommand = ''
|
||||||
mkdir -p $out/lib
|
mkdir -p $out/lib
|
||||||
ln -s ${bootstrapTools}/bin $out/bin
|
ln -s ${bootstrapTools}/bin $out/bin
|
||||||
|
@ -278,36 +383,46 @@ in rec {
|
||||||
persistent = self: super: with prevStage; {
|
persistent = self: super: with prevStage; {
|
||||||
cmake = super.cmakeMinimal;
|
cmake = super.cmakeMinimal;
|
||||||
|
|
||||||
|
inherit pbzx cpio;
|
||||||
|
|
||||||
python3 = super.python3Minimal;
|
python3 = super.python3Minimal;
|
||||||
|
|
||||||
ninja = super.ninja.override { buildDocs = false; };
|
ninja = super.ninja.override { buildDocs = false; };
|
||||||
|
|
||||||
llvmPackages_7 = super.llvmPackages_7 // (let
|
"${finalLlvmPackages}" = super."${finalLlvmPackages}" // (let
|
||||||
tools = super.llvmPackages_7.tools.extend (_: _: {
|
tools = super."${finalLlvmPackages}".tools.extend (_: _: {
|
||||||
inherit (llvmPackages_7) clang-unwrapped;
|
inherit (pkgs."${finalLlvmPackages}") clang-unwrapped;
|
||||||
});
|
});
|
||||||
libraries = super.llvmPackages_7.libraries.extend (_: _: {
|
libraries = super."${finalLlvmPackages}".libraries.extend (_: _: {
|
||||||
inherit (llvmPackages_7) compiler-rt libcxx libcxxabi;
|
inherit (pkgs."${finalLlvmPackages}") compiler-rt libcxx libcxxabi;
|
||||||
});
|
});
|
||||||
in { inherit tools libraries; } // tools // libraries);
|
in { inherit tools libraries; } // tools // libraries);
|
||||||
|
|
||||||
darwin = super.darwin.overrideScope (selfDarwin: _: {
|
darwin = super.darwin.overrideScope (selfDarwin: _: {
|
||||||
|
inherit (darwin) rewrite-tbd binutils-unwrapped;
|
||||||
|
|
||||||
|
signingUtils = darwin.signingUtils.override {
|
||||||
|
inherit (selfDarwin) sigtool;
|
||||||
|
};
|
||||||
|
|
||||||
binutils = darwin.binutils.override {
|
binutils = darwin.binutils.override {
|
||||||
coreutils = self.coreutils;
|
coreutils = self.coreutils;
|
||||||
libc = selfDarwin.Libsystem;
|
libc = selfDarwin.Libsystem;
|
||||||
|
inherit (selfDarwin) postLinkSignHook signingUtils;
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
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\"";
|
||||||
extraNativeBuildInputs = [];
|
extraNativeBuildInputs = [];
|
||||||
extraBuildInputs = [ ];
|
extraBuildInputs = [ pkgs.darwin.CF ];
|
||||||
libcxx = pkgs.libcxx;
|
libcxx = pkgs."${finalLlvmPackages}".libcxx;
|
||||||
|
|
||||||
allowedRequisites =
|
allowedRequisites =
|
||||||
[ bootstrapTools ] ++
|
[ bootstrapTools ] ++
|
||||||
(with pkgs; [ coreutils gnugrep libcxx libcxxabi llvmPackages_7.clang-unwrapped llvmPackages_7.compiler-rt ]) ++
|
(with pkgs; [ coreutils gnugrep ]) ++
|
||||||
(with pkgs.darwin; [ darwin-stubs Libsystem ]);
|
(with pkgs."${finalLlvmPackages}"; [ libcxx libcxxabi compiler-rt clang-unwrapped ]) ++
|
||||||
|
(with pkgs.darwin; [ Libsystem CF ] ++ lib.optional useAppleSDKLibs objc4);
|
||||||
|
|
||||||
overrides = persistent;
|
overrides = persistent;
|
||||||
};
|
};
|
||||||
|
@ -321,26 +436,30 @@ in rec {
|
||||||
findfreetype libssh curl cmake autoconf automake libtool ed cpio coreutils
|
findfreetype libssh curl cmake autoconf automake libtool ed cpio coreutils
|
||||||
libssh2 nghttp2 libkrb5 ninja brotli;
|
libssh2 nghttp2 libkrb5 ninja brotli;
|
||||||
|
|
||||||
llvmPackages_7 = super.llvmPackages_7 // (let
|
"${finalLlvmPackages}" = super."${finalLlvmPackages}" // (let
|
||||||
tools = super.llvmPackages_7.tools.extend (_: _: {
|
tools = super."${finalLlvmPackages}".tools.extend (_: _: {
|
||||||
inherit (llvmPackages_7) clang-unwrapped;
|
inherit (pkgs."${finalLlvmPackages}") clang-unwrapped;
|
||||||
});
|
});
|
||||||
libraries = super.llvmPackages_7.libraries.extend (_: libSuper: {
|
libraries = super."${finalLlvmPackages}".libraries.extend (_: libSuper: {
|
||||||
inherit (llvmPackages_7) compiler-rt;
|
inherit (pkgs."${finalLlvmPackages}") compiler-rt;
|
||||||
libcxx = libSuper.libcxx.override {
|
libcxx = libSuper.libcxx.override {
|
||||||
stdenv = overrideCC self.stdenv self.ccNoLibcxx;
|
stdenv = overrideCC self.stdenv self.ccNoLibcxx;
|
||||||
};
|
};
|
||||||
libcxxabi = libSuper.libcxxabi.override {
|
libcxxabi = libSuper.libcxxabi.override ({
|
||||||
stdenv = overrideCC self.stdenv self.ccNoLibcxx;
|
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;
|
standalone = true;
|
||||||
};
|
});
|
||||||
});
|
});
|
||||||
in { inherit tools libraries; } // tools // libraries);
|
in { inherit tools libraries; } // tools // libraries);
|
||||||
|
|
||||||
darwin = super.darwin.overrideScope (_: _: {
|
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 objc4 darwin-stubs sigtool postLinkSignHook signingUtils;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
in with prevStage; stageFun 2 prevStage {
|
in with prevStage; stageFun 2 prevStage {
|
||||||
|
@ -350,16 +469,18 @@ in rec {
|
||||||
|
|
||||||
extraNativeBuildInputs = [ pkgs.xz ];
|
extraNativeBuildInputs = [ pkgs.xz ];
|
||||||
extraBuildInputs = [ pkgs.darwin.CF ];
|
extraBuildInputs = [ pkgs.darwin.CF ];
|
||||||
libcxx = pkgs.libcxx;
|
libcxx = pkgs."${finalLlvmPackages}".libcxx;
|
||||||
|
|
||||||
allowedRequisites =
|
allowedRequisites =
|
||||||
[ bootstrapTools ] ++
|
[ bootstrapTools ] ++
|
||||||
(with pkgs; [
|
(with pkgs; [
|
||||||
xz.bin xz.out libcxx libcxxabi llvmPackages_7.compiler-rt
|
xz.bin xz.out zlib libxml2.out curl.out openssl.out libssh2.out
|
||||||
llvmPackages_7.clang-unwrapped zlib libxml2.out curl.out brotli.lib openssl.out
|
nghttp2.lib coreutils gnugrep pcre.out gmp libiconv brotli.lib
|
||||||
libssh2.out nghttp2.lib libkrb5 coreutils gnugrep pcre.out gmp libiconv
|
] ++ lib.optional haveKRB5 libkrb5) ++
|
||||||
|
(with pkgs."${finalLlvmPackages}"; [
|
||||||
|
libcxx libcxxabi compiler-rt clang-unwrapped
|
||||||
]) ++
|
]) ++
|
||||||
(with pkgs.darwin; [ dyld Libsystem CF ICU locale ]);
|
(with pkgs.darwin; [ dyld Libsystem CF ICU locale ] ++ lib.optional useAppleSDKLibs objc4);
|
||||||
|
|
||||||
overrides = persistent;
|
overrides = persistent;
|
||||||
};
|
};
|
||||||
|
@ -376,16 +497,16 @@ in rec {
|
||||||
# Avoid pulling in a full python and its extra dependencies for the llvm/clang builds.
|
# Avoid pulling in a full python and its extra dependencies for the llvm/clang builds.
|
||||||
libxml2 = super.libxml2.override { pythonSupport = false; };
|
libxml2 = super.libxml2.override { pythonSupport = false; };
|
||||||
|
|
||||||
llvmPackages_7 = super.llvmPackages_7 // (let
|
"${finalLlvmPackages}" = super."${finalLlvmPackages}" // (let
|
||||||
libraries = super.llvmPackages_7.libraries.extend (_: _: {
|
libraries = super."${finalLlvmPackages}".libraries.extend (_: _: {
|
||||||
inherit (llvmPackages_7) libcxx libcxxabi;
|
inherit (pkgs."${finalLlvmPackages}") libcxx libcxxabi;
|
||||||
});
|
});
|
||||||
in { inherit libraries; } // libraries);
|
in { inherit libraries; } // libraries);
|
||||||
|
|
||||||
darwin = super.darwin.overrideScope (_: _: {
|
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 sigtool;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
in with prevStage; stageFun 3 prevStage {
|
in with prevStage; stageFun 3 prevStage {
|
||||||
|
@ -397,7 +518,7 @@ in rec {
|
||||||
# patches our shebangs back to point at bootstrapTools. This makes sure bash comes first.
|
# patches our shebangs back to point at bootstrapTools. This makes sure bash comes first.
|
||||||
extraNativeBuildInputs = with pkgs; [ xz ];
|
extraNativeBuildInputs = with pkgs; [ xz ];
|
||||||
extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ];
|
extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ];
|
||||||
libcxx = pkgs.libcxx;
|
libcxx = pkgs."${finalLlvmPackages}".libcxx;
|
||||||
|
|
||||||
extraPreHook = ''
|
extraPreHook = ''
|
||||||
export PATH=${pkgs.bash}/bin:$PATH
|
export PATH=${pkgs.bash}/bin:$PATH
|
||||||
|
@ -407,11 +528,13 @@ in rec {
|
||||||
allowedRequisites =
|
allowedRequisites =
|
||||||
[ bootstrapTools ] ++
|
[ bootstrapTools ] ++
|
||||||
(with pkgs; [
|
(with pkgs; [
|
||||||
xz.bin xz.out bash libcxx libcxx.dev libcxxabi libcxxabi.dev llvmPackages_7.compiler-rt
|
xz.bin xz.out bash zlib libxml2.out curl.out openssl.out libssh2.out
|
||||||
llvmPackages_7.clang-unwrapped zlib libxml2.out curl.out brotli.lib openssl.out
|
nghttp2.lib coreutils gnugrep pcre.out gmp libiconv brotli.lib
|
||||||
libssh2.out nghttp2.lib libkrb5 coreutils gnugrep pcre.out gmp libiconv
|
] ++ lib.optional haveKRB5 libkrb5) ++
|
||||||
|
(with pkgs."${finalLlvmPackages}"; [
|
||||||
|
libcxx libcxx.dev libcxxabi libcxxabi.dev compiler-rt clang-unwrapped
|
||||||
]) ++
|
]) ++
|
||||||
(with pkgs.darwin; [ dyld ICU Libsystem locale ]);
|
(with pkgs.darwin; [ dyld ICU Libsystem locale ] ++ lib.optional useAppleSDKLibs objc4);
|
||||||
|
|
||||||
overrides = persistent;
|
overrides = persistent;
|
||||||
};
|
};
|
||||||
|
@ -432,20 +555,21 @@ in rec {
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
llvmPackages_7 = super.llvmPackages_7 // (let
|
"${finalLlvmPackages}" = super."${finalLlvmPackages}" // (let
|
||||||
tools = super.llvmPackages_7.tools.extend (llvmSelf: _: {
|
tools = super."${finalLlvmPackages}".tools.extend (llvmSelf: _: {
|
||||||
clang-unwrapped-all-outputs = llvmPackages_7.clang-unwrapped-all-outputs.override { llvm = llvmSelf.llvm; };
|
clang-unwrapped-all-outputs = pkgs."${finalLlvmPackages}".clang-unwrapped-all-outputs.override { llvm = llvmSelf.llvm; };
|
||||||
libllvm = llvmPackages_7.libllvm.override { inherit libxml2; };
|
libllvm = pkgs."${finalLlvmPackages}".libllvm.override { inherit libxml2; };
|
||||||
});
|
});
|
||||||
libraries = super.llvmPackages_7.libraries.extend (llvmSelf: _: {
|
libraries = super."${finalLlvmPackages}".libraries.extend (llvmSelf: _: {
|
||||||
inherit (llvmPackages_7) libcxx libcxxabi compiler-rt;
|
inherit (pkgs."${finalLlvmPackages}") libcxx libcxxabi compiler-rt;
|
||||||
});
|
});
|
||||||
in { inherit tools libraries; } // tools // libraries);
|
in { inherit tools libraries; } // tools // libraries);
|
||||||
|
|
||||||
darwin = super.darwin.overrideScope (_: superDarwin: {
|
darwin = super.darwin.overrideScope (_: superDarwin: {
|
||||||
inherit (darwin) dyld Libsystem libiconv locale darwin-stubs;
|
inherit (darwin) dyld Libsystem libiconv locale darwin-stubs;
|
||||||
|
|
||||||
CF = superDarwin.CF.override {
|
# See useAppleSDKLibs in darwin-packages.nix
|
||||||
|
CF = if useAppleSDKLibs then super.darwin.CF else superDarwin.CF.override {
|
||||||
inherit libxml2;
|
inherit libxml2;
|
||||||
python3 = prevStage.python3;
|
python3 = prevStage.python3;
|
||||||
};
|
};
|
||||||
|
@ -455,7 +579,7 @@ in rec {
|
||||||
shell = "${pkgs.bash}/bin/bash";
|
shell = "${pkgs.bash}/bin/bash";
|
||||||
extraNativeBuildInputs = with pkgs; [ xz ];
|
extraNativeBuildInputs = with pkgs; [ xz ];
|
||||||
extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ];
|
extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ];
|
||||||
libcxx = pkgs.libcxx;
|
libcxx = pkgs."${finalLlvmPackages}".libcxx;
|
||||||
|
|
||||||
extraPreHook = ''
|
extraPreHook = ''
|
||||||
export PATH_LOCALE=${pkgs.darwin.locale}/share/locale
|
export PATH_LOCALE=${pkgs.darwin.locale}/share/locale
|
||||||
|
@ -464,29 +588,32 @@ in rec {
|
||||||
};
|
};
|
||||||
|
|
||||||
stdenvDarwin = prevStage: let
|
stdenvDarwin = prevStage: let
|
||||||
|
doSign = localSystem.isAarch64;
|
||||||
pkgs = prevStage;
|
pkgs = prevStage;
|
||||||
persistent = self: super: with prevStage; {
|
persistent = self: super: with prevStage; {
|
||||||
inherit
|
inherit
|
||||||
gnumake gzip gnused bzip2 gawk ed xz patch bash
|
gnumake gzip gnused bzip2 gawk ed xz patch bash
|
||||||
ncurses libffi zlib llvm gmp pcre gnugrep
|
ncurses libffi zlib gmp pcre gnugrep
|
||||||
coreutils findutils diffutils patchutils;
|
coreutils findutils diffutils patchutils pbzx;
|
||||||
|
|
||||||
llvmPackages_7 = super.llvmPackages_7 // (let
|
|
||||||
tools = super.llvmPackages_7.tools.extend (_: super: {
|
|
||||||
inherit (llvmPackages_7) llvm clang-unwrapped;
|
|
||||||
});
|
|
||||||
libraries = super.llvmPackages_7.libraries.extend (_: _: {
|
|
||||||
inherit (llvmPackages_7) compiler-rt libcxx libcxxabi;
|
|
||||||
});
|
|
||||||
in { inherit tools libraries; } // tools // libraries);
|
|
||||||
|
|
||||||
darwin = super.darwin.overrideScope (_: _: {
|
darwin = super.darwin.overrideScope (_: _: {
|
||||||
inherit (darwin) dyld ICU Libsystem libiconv;
|
inherit (darwin) dyld ICU Libsystem Csu libiconv rewrite-tbd;
|
||||||
} // 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) {
|
||||||
|
inherit llvm;
|
||||||
|
|
||||||
# Need to get rid of these when cross-compiling.
|
# 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;
|
inherit binutils binutils-unwrapped;
|
||||||
};
|
};
|
||||||
in import ../generic rec {
|
in import ../generic rec {
|
||||||
|
@ -510,11 +637,12 @@ in rec {
|
||||||
initialPath = import ../common-path.nix { inherit pkgs; };
|
initialPath = import ../common-path.nix { inherit pkgs; };
|
||||||
shell = "${pkgs.bash}/bin/bash";
|
shell = "${pkgs.bash}/bin/bash";
|
||||||
|
|
||||||
cc = pkgs.llvmPackages.libcxxClang.override {
|
cc = pkgs."${finalLlvmPackages}".libcxxClang;
|
||||||
cc = pkgs.llvmPackages.clang-unwrapped;
|
|
||||||
};
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
||||||
|
pkgs.updateAutotoolsGnuConfigScriptsHook
|
||||||
|
];
|
||||||
|
|
||||||
extraNativeBuildInputs = [];
|
|
||||||
extraBuildInputs = [ pkgs.darwin.CF ];
|
extraBuildInputs = [ pkgs.darwin.CF ];
|
||||||
|
|
||||||
extraAttrs = {
|
extraAttrs = {
|
||||||
|
@ -524,19 +652,27 @@ in rec {
|
||||||
};
|
};
|
||||||
|
|
||||||
allowedRequisites = (with pkgs; [
|
allowedRequisites = (with pkgs; [
|
||||||
xz.out xz.bin libcxx libcxx.dev libcxxabi libcxxabi.dev gmp.out gnumake findutils bzip2.out
|
xz.out xz.bin gmp.out gnumake findutils bzip2.out
|
||||||
bzip2.bin llvmPackages.llvm llvmPackages.llvm.lib llvmPackages.compiler-rt llvmPackages.compiler-rt.dev
|
bzip2.bin
|
||||||
zlib.out zlib.dev libffi.out coreutils ed diffutils gnutar
|
zlib.out zlib.dev libffi.out coreutils ed diffutils gnutar
|
||||||
gzip ncurses.out ncurses.dev ncurses.man gnused bash gawk
|
gzip ncurses.out ncurses.dev ncurses.man gnused bash gawk
|
||||||
gnugrep llvmPackages.clang-unwrapped
|
gnugrep patch pcre.out gettext
|
||||||
llvmPackages.libclang.dev llvmPackages.libclang.lib
|
|
||||||
patch pcre.out gettext
|
|
||||||
binutils.bintools darwin.binutils darwin.binutils.bintools
|
binutils.bintools darwin.binutils darwin.binutils.bintools
|
||||||
curl.out brotli.lib openssl.out libssh2.out nghttp2.lib libkrb5
|
curl.out openssl.out libssh2.out nghttp2.lib brotli.lib
|
||||||
cc.expand-response-params libxml2.out
|
cc.expand-response-params libxml2.out
|
||||||
]) ++ (with pkgs.darwin; [
|
] ++ 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
|
dyld Libsystem CF cctools ICU libiconv locale libtapi
|
||||||
]);
|
] ++ lib.optional useAppleSDKLibs objc4
|
||||||
|
++ lib.optionals doSign [ postLinkSignHook sigtool signingUtils ]);
|
||||||
|
|
||||||
overrides = lib.composeExtensions persistent (self: super: {
|
overrides = lib.composeExtensions persistent (self: super: {
|
||||||
darwin = super.darwin.overrideScope (_: superDarwin: {
|
darwin = super.darwin.overrideScope (_: superDarwin: {
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Unpack the bootstrap tools tarball.
|
||||||
|
echo Unpacking the bootstrap tools...
|
||||||
|
$mkdir $out
|
||||||
|
$bzip2 -d < $tarball | (cd $out && $cpio -i)
|
||||||
|
|
||||||
|
export PATH=$out/bin
|
||||||
|
|
||||||
|
# Fix codesign wrapper paths
|
||||||
|
sed -i \
|
||||||
|
-e "1c\
|
||||||
|
#!$out/bin/bash" \
|
||||||
|
-e "s|[^( ]*\bsigtool\b|$out/bin/sigtool|g" \
|
||||||
|
$out/bin/codesign
|
||||||
|
|
||||||
|
updateInstallName() {
|
||||||
|
local path="$1"
|
||||||
|
|
||||||
|
cp "$path" "$path.new"
|
||||||
|
install_name_tool -id "$path" "$path.new"
|
||||||
|
codesign -f -i "$(basename "$path")" -s - "$path.new"
|
||||||
|
mv -f "$path.new" "$path"
|
||||||
|
}
|
||||||
|
|
||||||
|
find $out
|
||||||
|
|
||||||
|
ln -s bash $out/bin/sh
|
||||||
|
ln -s bzip2 $out/bin/bunzip2
|
||||||
|
|
||||||
|
find $out/lib -type f -name '*.dylib' -print0 | while IFS= read -r -d $'\0' lib; do
|
||||||
|
updateInstallName "$lib"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Provide a gunzip script.
|
||||||
|
cat > $out/bin/gunzip <<EOF
|
||||||
|
#!$out/bin/sh
|
||||||
|
exec $out/bin/gzip -d "\$@"
|
||||||
|
EOF
|
||||||
|
chmod +x $out/bin/gunzip
|
||||||
|
|
||||||
|
# Provide fgrep/egrep.
|
||||||
|
echo "#! $out/bin/sh" > $out/bin/egrep
|
||||||
|
echo "exec $out/bin/grep -E \"\$@\"" >> $out/bin/egrep
|
||||||
|
echo "#! $out/bin/sh" > $out/bin/fgrep
|
||||||
|
echo "exec $out/bin/grep -F \"\$@\"" >> $out/bin/fgrep
|
||||||
|
|
||||||
|
cat >$out/bin/dsymutil << EOF
|
||||||
|
#!$out/bin/sh
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x $out/bin/egrep $out/bin/fgrep $out/bin/dsymutil
|
|
@ -57,6 +57,7 @@ in
|
||||||
powerpc64-linux = stagesLinux;
|
powerpc64-linux = stagesLinux;
|
||||||
powerpc64le-linux = stagesLinux;
|
powerpc64le-linux = stagesLinux;
|
||||||
x86_64-darwin = stagesDarwin;
|
x86_64-darwin = stagesDarwin;
|
||||||
|
aarch64-darwin = stagesDarwin;
|
||||||
x86_64-solaris = stagesNix;
|
x86_64-solaris = stagesNix;
|
||||||
i686-cygwin = stagesNative;
|
i686-cygwin = stagesNative;
|
||||||
x86_64-cygwin = stagesNative;
|
x86_64-cygwin = stagesNative;
|
||||||
|
|
Loading…
Reference in New Issue