2023-05-10 09:03:00 +02:00
|
|
|
|
# This file contains the standard build environment for Darwin. It is based on LLVM and is patterned
|
|
|
|
|
# after the Linux stdenv. It shares similar goals to the Linux standard environment in that the
|
|
|
|
|
# resulting environment should be built purely and not contain any references to it.
|
|
|
|
|
#
|
|
|
|
|
# For more on the design of the stdenv and updating it, see `README.md`.
|
|
|
|
|
#
|
|
|
|
|
# See also the top comments of the Linux stdenv `../linux/default.nix` for a good overview of
|
|
|
|
|
# the bootstrap process and working with it.
|
|
|
|
|
|
2016-12-16 14:22:02 +01:00
|
|
|
|
{ lib
|
2021-06-02 06:25:56 +02:00
|
|
|
|
, 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
|
2024-01-28 23:39:28 +01:00
|
|
|
|
import ./bootstrap-files/aarch64-apple-darwin.nix
|
2020-11-19 09:28:20 +01:00
|
|
|
|
else
|
2024-01-28 23:39:28 +01:00
|
|
|
|
import ./bootstrap-files/x86_64-apple-darwin.nix
|
2015-06-18 19:03:32 +02:00
|
|
|
|
}:
|
|
|
|
|
|
2018-12-05 04:06:46 +01:00
|
|
|
|
assert crossSystem == localSystem;
|
2016-12-01 00:51:13 +01:00
|
|
|
|
|
2015-06-18 19:03:32 +02:00
|
|
|
|
let
|
2021-01-24 23:51:12 +01:00
|
|
|
|
inherit (localSystem) system;
|
2016-12-24 19:55:11 +01:00
|
|
|
|
|
2020-11-19 09:28:20 +01:00
|
|
|
|
useAppleSDKLibs = localSystem.isAarch64;
|
|
|
|
|
|
2017-11-14 16:36:04 +01:00
|
|
|
|
commonImpureHostDeps = [
|
|
|
|
|
"/bin/sh"
|
|
|
|
|
"/usr/lib/libSystem.B.dylib"
|
2017-11-14 21:13:31 +01:00
|
|
|
|
"/usr/lib/system/libunc.dylib" # This dependency is "hidden", so our scanning code doesn't pick it up
|
2017-11-14 16:36:04 +01:00
|
|
|
|
];
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
isFromNixpkgs = pkg: !(isFromBootstrapFiles pkg);
|
|
|
|
|
isFromBootstrapFiles =
|
|
|
|
|
pkg: pkg.passthru.isFromBootstrapFiles or false;
|
|
|
|
|
isBuiltByNixpkgsCompiler =
|
|
|
|
|
pkg: isFromNixpkgs pkg && isFromNixpkgs pkg.stdenv.cc.cc;
|
|
|
|
|
isBuiltByBootstrapFilesCompiler =
|
|
|
|
|
pkg: isFromNixpkgs pkg && isFromBootstrapFiles pkg.stdenv.cc.cc;
|
|
|
|
|
|
2023-07-26 03:25:46 +02:00
|
|
|
|
commonPreHook = ''
|
2020-01-13 17:46:11 +01:00
|
|
|
|
export NIX_ENFORCE_NO_NATIVE=''${NIX_ENFORCE_NO_NATIVE-1}
|
|
|
|
|
export NIX_ENFORCE_PURITY=''${NIX_ENFORCE_PURITY-1}
|
2015-06-18 19:03:32 +02:00
|
|
|
|
export NIX_IGNORE_LD_THROUGH_GCC=1
|
2020-09-03 09:13:19 +02:00
|
|
|
|
unset SDKROOT
|
2015-06-18 19:03:32 +02:00
|
|
|
|
'';
|
|
|
|
|
|
2021-04-26 17:21:17 +02:00
|
|
|
|
bootstrapTools = derivation ({
|
2016-01-04 03:47:09 +01:00
|
|
|
|
inherit system;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2021-06-02 06:25:56 +02:00
|
|
|
|
name = "bootstrap-tools";
|
2015-06-18 19:03:32 +02:00
|
|
|
|
builder = bootstrapFiles.sh; # Not a filename! Attribute 'sh' on bootstrapFiles
|
2021-06-02 06:25:56 +02:00
|
|
|
|
args = if localSystem.isAarch64 then [ ./unpack-bootstrap-tools-aarch64.sh ] else [ ./unpack-bootstrap-tools.sh ];
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2016-01-04 03:47:09 +01:00
|
|
|
|
inherit (bootstrapFiles) mkdir bzip2 cpio tarball;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2017-11-14 16:36:04 +01:00
|
|
|
|
__impureHostDeps = commonImpureHostDeps;
|
2022-04-27 22:21:32 +02:00
|
|
|
|
} // lib.optionalAttrs config.contentAddressedByDefault {
|
2021-04-26 17:21:17 +02:00
|
|
|
|
__contentAddressed = true;
|
|
|
|
|
outputHashAlgo = "sha256";
|
|
|
|
|
outputHashMode = "recursive";
|
2023-05-10 09:03:00 +02:00
|
|
|
|
}) // { passthru.isFromBootstrapFiles = true; };
|
2018-02-25 23:03:40 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
stageFun = prevStage:
|
|
|
|
|
{ name, overrides ? (self: super: { }), extraNativeBuildInputs ? [ ], extraPreHook ? "" }:
|
2017-08-26 17:43:30 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
let
|
|
|
|
|
cc = if prevStage.llvmPackages.clang-unwrapped == null
|
|
|
|
|
then null else
|
|
|
|
|
lib.makeOverridable (import ../../build-support/cc-wrapper) {
|
|
|
|
|
name = "${name}-clang-wrapper";
|
2020-07-31 16:03:51 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
nativeTools = false;
|
|
|
|
|
nativeLibc = false;
|
2020-07-31 16:03:51 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
buildPackages = lib.optionalAttrs (prevStage ? stdenv) {
|
|
|
|
|
inherit (prevStage) stdenv;
|
|
|
|
|
};
|
2021-06-02 06:25:56 +02:00
|
|
|
|
|
2020-07-31 16:03:51 +02:00
|
|
|
|
extraPackages = [
|
2023-05-10 09:03:00 +02:00
|
|
|
|
prevStage.llvmPackages.libcxxabi
|
|
|
|
|
prevStage.llvmPackages.compiler-rt
|
2020-07-31 16:03:51 +02:00
|
|
|
|
];
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraBuildCommands =
|
|
|
|
|
let
|
|
|
|
|
inherit (prevStage.llvmPackages) clang-unwrapped compiler-rt release_version;
|
|
|
|
|
in
|
|
|
|
|
''
|
|
|
|
|
function clangResourceRootIncludePath() {
|
|
|
|
|
clangLib="$1/lib/clang"
|
|
|
|
|
if (( $(ls "$clangLib" | wc -l) > 1 )); then
|
|
|
|
|
echo "Multiple LLVM versions were found at "$clangLib", but there must only be one used when building the stdenv." >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
echo "$clangLib/$(ls -1 "$clangLib")/include"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rsrc="$out/resource-root"
|
|
|
|
|
mkdir "$rsrc"
|
|
|
|
|
ln -s "$(clangResourceRootIncludePath "${clang-unwrapped.lib}")" "$rsrc"
|
|
|
|
|
ln -s "${compiler-rt.out}/lib" "$rsrc/lib"
|
|
|
|
|
ln -s "${compiler-rt.out}/share" "$rsrc/share"
|
|
|
|
|
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
|
|
|
|
|
'';
|
2017-08-26 17:43:30 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
cc = prevStage.llvmPackages.clang-unwrapped;
|
|
|
|
|
bintools = prevStage.darwin.binutils;
|
2018-02-25 23:03:40 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
isClang = true;
|
|
|
|
|
libc = prevStage.darwin.Libsystem;
|
|
|
|
|
inherit (prevStage.llvmPackages) libcxx;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
inherit lib;
|
|
|
|
|
inherit (prevStage) coreutils gnugrep;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
stdenvNoCC = prevStage.ccWrapperStdenv;
|
|
|
|
|
};
|
|
|
|
|
|
2023-07-09 19:00:13 +02:00
|
|
|
|
bash = prevStage.bash or bootstrapTools;
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
thisStdenv = import ../generic {
|
|
|
|
|
name = "${name}-stdenv-darwin";
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2017-07-06 03:47:48 +02:00
|
|
|
|
buildPlatform = localSystem;
|
|
|
|
|
hostPlatform = localSystem;
|
|
|
|
|
targetPlatform = localSystem;
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
inherit config extraNativeBuildInputs;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraBuildInputs = [ prevStage.darwin.CF ];
|
|
|
|
|
|
2023-07-09 19:00:13 +02:00
|
|
|
|
preHook = lib.optionalString (!isBuiltByNixpkgsCompiler bash) ''
|
2015-06-18 19:03:32 +02:00
|
|
|
|
# Don't patch #!/interpreter because it leads to retained
|
|
|
|
|
# dependencies on the bootstrapTools in the final stdenv.
|
|
|
|
|
dontPatchShebangs=1
|
2023-07-09 19:00:13 +02:00
|
|
|
|
'' + ''
|
2023-07-26 03:25:46 +02:00
|
|
|
|
${commonPreHook}
|
2015-06-18 19:03:32 +02:00
|
|
|
|
${extraPreHook}
|
2023-05-10 09:03:00 +02:00
|
|
|
|
'' + lib.optionalString (prevStage.darwin ? locale) ''
|
|
|
|
|
export PATH_LOCALE=${prevStage.darwin.locale}/share/locale
|
2015-06-18 19:03:32 +02:00
|
|
|
|
'';
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
2023-07-09 19:00:13 +02:00
|
|
|
|
shell = bash + "/bin/bash";
|
|
|
|
|
initialPath = [ bash bootstrapTools ];
|
2017-05-22 03:37:16 +02:00
|
|
|
|
|
2015-06-18 19:03:32 +02:00
|
|
|
|
fetchurlBoot = import ../../build-support/fetchurl {
|
2018-02-17 19:44:43 +01:00
|
|
|
|
inherit lib;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
stdenvNoCC = prevStage.ccWrapperStdenv or thisStdenv;
|
2018-01-10 00:38:19 +01:00
|
|
|
|
curl = bootstrapTools;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
};
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
inherit cc;
|
|
|
|
|
|
2015-06-18 19:03:32 +02:00
|
|
|
|
# The stdenvs themselves don't use mkDerivation, so I need to specify this here
|
2017-11-14 16:36:04 +01:00
|
|
|
|
__stdenvImpureHostDeps = commonImpureHostDeps;
|
|
|
|
|
__extraImpureHostDeps = commonImpureHostDeps;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2021-06-02 06:25:56 +02:00
|
|
|
|
overrides = self: super: (overrides self super) // {
|
2020-07-31 16:03:51 +02:00
|
|
|
|
fetchurl = thisStdenv.fetchurlBoot;
|
|
|
|
|
};
|
2015-06-18 19:03:32 +02:00
|
|
|
|
};
|
|
|
|
|
|
2021-06-02 06:25:56 +02:00
|
|
|
|
in
|
|
|
|
|
{
|
2016-12-24 19:55:11 +01:00
|
|
|
|
inherit config overlays;
|
2016-12-16 14:22:02 +01:00
|
|
|
|
stdenv = thisStdenv;
|
|
|
|
|
};
|
2023-05-10 09:03:00 +02:00
|
|
|
|
in
|
|
|
|
|
assert bootstrapTools.passthru.isFromBootstrapFiles or false; # sanity check
|
|
|
|
|
[
|
|
|
|
|
({}: {
|
|
|
|
|
__raw = true;
|
|
|
|
|
|
|
|
|
|
coreutils = null;
|
|
|
|
|
gnugrep = null;
|
|
|
|
|
|
|
|
|
|
pbzx = null;
|
|
|
|
|
cpio = null;
|
|
|
|
|
|
|
|
|
|
darwin = {
|
|
|
|
|
binutils = null;
|
|
|
|
|
binutils-unwrapped = null;
|
|
|
|
|
cctools = null;
|
|
|
|
|
print-reexports = null;
|
|
|
|
|
rewrite-tbd = null;
|
|
|
|
|
sigtool = null;
|
|
|
|
|
CF = null;
|
|
|
|
|
Libsystem = null;
|
|
|
|
|
};
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
llvmPackages = {
|
|
|
|
|
clang-unwrapped = null;
|
|
|
|
|
libllvm = null;
|
|
|
|
|
libcxx = null;
|
|
|
|
|
libcxxabi = null;
|
|
|
|
|
compiler-rt = null;
|
|
|
|
|
};
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# Create a stage with the bootstrap tools. This will be used to build the subsequent stages and
|
|
|
|
|
# build up the standard environment.
|
|
|
|
|
#
|
|
|
|
|
# Note: Each stage depends only on the the packages in `prevStage`. If a package is not to be
|
|
|
|
|
# rebuilt, it should be passed through by inheriting it.
|
|
|
|
|
(prevStage: stageFun prevStage {
|
|
|
|
|
name = "bootstrap-stage0";
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
# We thread stage0's stdenv through under this name so downstream stages
|
|
|
|
|
# can use it for wrapping gcc too. This way, downstream stages don't need
|
|
|
|
|
# to refer to this stage directly, which violates the principle that each
|
|
|
|
|
# stage should only access the stage that came before it.
|
|
|
|
|
ccWrapperStdenv = self.stdenv;
|
|
|
|
|
|
2023-07-09 19:00:13 +02:00
|
|
|
|
bash = bootstrapTools;
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
coreutils = bootstrapTools;
|
|
|
|
|
gnugrep = bootstrapTools;
|
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
# Either pbzx or Libsystem is required from bootstrap tools (one is used building the other).
|
|
|
|
|
pbzx = if localSystem.isAarch64 then bootstrapTools else super.pbzx;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
cpio = self.stdenv.mkDerivation {
|
|
|
|
|
name = "bootstrap-stage0-cpio";
|
2020-12-16 05:59:18 +01:00
|
|
|
|
buildCommand = ''
|
2023-05-10 09:03:00 +02:00
|
|
|
|
mkdir -p $out/bin
|
|
|
|
|
ln -s ${bootstrapFiles.cpio} $out/bin/cpio
|
2020-12-16 05:59:18 +01:00
|
|
|
|
'';
|
2023-05-10 09:03:00 +02:00
|
|
|
|
passthru.isFromBootstrapFiles = true;
|
2020-12-16 05:59:18 +01:00
|
|
|
|
};
|
2020-07-31 16:03:51 +02:00
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
darwin = super.darwin.overrideScope (selfDarwin: superDarwin: {
|
|
|
|
|
# Prevent CF from being propagated to the initial stdenv. Packages that require it
|
|
|
|
|
# will have to manually add it to their build inputs.
|
|
|
|
|
CF = null;
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
binutils-unwrapped = bootstrapTools // {
|
|
|
|
|
version = "boot";
|
|
|
|
|
};
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
binutils = (import ../../build-support/bintools-wrapper) {
|
|
|
|
|
name = "bootstrap-stage0-binutils-wrapper";
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
nativeTools = false;
|
|
|
|
|
nativeLibc = false;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
buildPackages = { };
|
|
|
|
|
libc = selfDarwin.Libsystem;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
inherit lib;
|
|
|
|
|
inherit (self) stdenvNoCC coreutils gnugrep;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
bintools = selfDarwin.binutils-unwrapped;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
inherit (selfDarwin) postLinkSignHook signingUtils;
|
2022-12-08 03:30:26 +01:00
|
|
|
|
};
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2022-12-08 03:30:26 +01:00
|
|
|
|
cctools = bootstrapTools // {
|
2020-11-19 09:28:20 +01:00
|
|
|
|
targetPrefix = "";
|
2023-05-10 09:03:00 +02:00
|
|
|
|
version = "boot";
|
|
|
|
|
man = bootstrapTools;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
};
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
locale = self.stdenv.mkDerivation {
|
|
|
|
|
name = "bootstrap-stage0-locale";
|
|
|
|
|
buildCommand = ''
|
|
|
|
|
mkdir -p $out/share/locale
|
|
|
|
|
'';
|
|
|
|
|
};
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
print-reexports = bootstrapTools;
|
|
|
|
|
|
|
|
|
|
rewrite-tbd = bootstrapTools;
|
|
|
|
|
|
|
|
|
|
sigtool = bootstrapTools;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
} // lib.optionalAttrs (! useAppleSDKLibs) {
|
2023-05-10 09:03:00 +02:00
|
|
|
|
Libsystem = self.stdenv.mkDerivation {
|
2018-02-25 23:03:40 +01:00
|
|
|
|
name = "bootstrap-stage0-Libsystem";
|
2015-06-18 19:03:32 +02:00
|
|
|
|
buildCommand = ''
|
|
|
|
|
mkdir -p $out
|
2020-12-16 05:59:18 +01:00
|
|
|
|
|
2021-05-04 06:08:20 +02:00
|
|
|
|
cp -r ${selfDarwin.darwin-stubs}/usr/lib $out/lib
|
2020-12-16 05:59:18 +01:00
|
|
|
|
chmod -R +w $out/lib
|
|
|
|
|
substituteInPlace $out/lib/libSystem.B.tbd --replace /usr/lib/system $out/lib/system
|
|
|
|
|
|
|
|
|
|
ln -s libSystem.B.tbd $out/lib/libSystem.tbd
|
|
|
|
|
|
|
|
|
|
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.tbd $out/lib/lib$name.tbd
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
ln -s ${bootstrapTools}/lib/*.o $out/lib
|
|
|
|
|
|
|
|
|
|
ln -s ${bootstrapTools}/lib/libresolv.9.dylib $out/lib
|
|
|
|
|
ln -s libresolv.9.dylib $out/lib/libresolv.dylib
|
|
|
|
|
|
2015-06-18 19:03:32 +02:00
|
|
|
|
ln -s ${bootstrapTools}/include-Libsystem $out/include
|
|
|
|
|
'';
|
2023-05-10 09:03:00 +02:00
|
|
|
|
passthru.isFromBootstrapFiles = true;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
};
|
2021-05-04 06:08:20 +02:00
|
|
|
|
});
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
tools = super.llvmPackages.tools.extend (selfTools: _: {
|
|
|
|
|
libclang = self.stdenv.mkDerivation {
|
|
|
|
|
name = "bootstrap-stage0-clang";
|
|
|
|
|
version = "boot";
|
|
|
|
|
outputs = [ "out" "lib" ];
|
|
|
|
|
buildCommand = ''
|
|
|
|
|
mkdir -p $out/lib
|
|
|
|
|
ln -s $out $lib
|
|
|
|
|
ln -s ${bootstrapTools}/bin $out/bin
|
|
|
|
|
ln -s ${bootstrapTools}/lib/clang $out/lib
|
|
|
|
|
ln -s ${bootstrapTools}/include $out
|
|
|
|
|
'';
|
2023-10-08 23:56:46 +02:00
|
|
|
|
passthru = {
|
|
|
|
|
isFromBootstrapFiles = true;
|
|
|
|
|
hardeningUnsupportedFlags = [ "fortify3" "zerocallusedregs" ];
|
|
|
|
|
};
|
2023-05-10 09:03:00 +02:00
|
|
|
|
};
|
|
|
|
|
clang-unwrapped = selfTools.libclang;
|
|
|
|
|
libllvm = self.stdenv.mkDerivation {
|
|
|
|
|
name = "bootstrap-stage0-llvm";
|
|
|
|
|
outputs = [ "out" "lib" ];
|
|
|
|
|
buildCommand = ''
|
|
|
|
|
mkdir -p $out/bin $out/lib
|
|
|
|
|
ln -s $out $lib
|
|
|
|
|
ln -s ${bootstrapTools}/bin/strip $out/bin/llvm-strip
|
|
|
|
|
ln -s ${bootstrapTools}/lib/libLLVM* $out/lib
|
|
|
|
|
'';
|
|
|
|
|
passthru.isFromBootstrapFiles = true;
|
|
|
|
|
};
|
|
|
|
|
llvm = selfTools.libllvm;
|
|
|
|
|
});
|
|
|
|
|
libraries = super.llvmPackages.libraries.extend (_: _: {
|
|
|
|
|
libcxx = self.stdenv.mkDerivation {
|
|
|
|
|
name = "bootstrap-stage0-libcxx";
|
|
|
|
|
buildCommand = ''
|
|
|
|
|
mkdir -p $out/lib $out/include
|
|
|
|
|
ln -s ${bootstrapTools}/lib/libc++.dylib $out/lib
|
|
|
|
|
ln -s ${bootstrapTools}/include/c++ $out/include
|
|
|
|
|
'';
|
|
|
|
|
passthru = {
|
|
|
|
|
isLLVM = true;
|
|
|
|
|
cxxabi = self.llvmPackages.libcxxabi;
|
|
|
|
|
isFromBootstrapFiles = true;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
libcxxabi = self.stdenv.mkDerivation {
|
|
|
|
|
name = "bootstrap-stage0-libcxxabi";
|
|
|
|
|
buildCommand = ''
|
|
|
|
|
mkdir -p $out/lib
|
|
|
|
|
ln -s ${bootstrapTools}/lib/libc++abi.dylib $out/lib
|
|
|
|
|
'';
|
|
|
|
|
passthru = {
|
|
|
|
|
libName = "c++abi";
|
|
|
|
|
isFromBootstrapFiles = true;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
compiler-rt = self.stdenv.mkDerivation {
|
|
|
|
|
name = "bootstrap-stage0-compiler-rt";
|
|
|
|
|
buildCommand = ''
|
|
|
|
|
mkdir -p $out/lib $out/share
|
|
|
|
|
ln -s ${bootstrapTools}/lib/libclang_rt* $out/lib
|
|
|
|
|
ln -s ${bootstrapTools}/lib/darwin $out/lib
|
|
|
|
|
'';
|
|
|
|
|
passthru.isFromBootstrapFiles = true;
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit tools libraries; } // tools // libraries
|
|
|
|
|
);
|
|
|
|
|
};
|
2020-07-31 16:03:51 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
# The bootstrap tools may use `strip` from cctools, so use a compatible set of flags until LLVM
|
|
|
|
|
# is rebuilt, and darwin.binutils can use its implementation instead.
|
|
|
|
|
extraPreHook = ''
|
|
|
|
|
stripAllFlags=" " # the cctools "strip" command doesn't know "-s"
|
|
|
|
|
stripDebugFlags="-S" # the cctools "strip" command does something odd with "-p"
|
|
|
|
|
'';
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# This stage is primarily responsible for building the linker and setting up versions of
|
|
|
|
|
# certain dependencies needed by the rest of the build process. It is necessary to rebuild the
|
|
|
|
|
# linker because the `compiler-rt` build process checks the version and attempts to manually
|
|
|
|
|
# run `codesign` if it detects a version of `ld64` it considers too old. If that happens, the
|
|
|
|
|
# build process will fail for a few different reasons:
|
|
|
|
|
# - sigtool is too old and does not accept the `--sign` argument;
|
|
|
|
|
# - sigtool is new enough to accept the `--sign` argument, but it aborts when it is invoked on a
|
|
|
|
|
# binary that is already signed; or
|
|
|
|
|
# - compiler-rt attempts to invoke `codesign` on x86_64-darwin, but `sigtool` is not currently
|
|
|
|
|
# part of the x86_64-darwin bootstrap tools.
|
|
|
|
|
#
|
|
|
|
|
# This stage also builds CF and Libsystem to simplify assertions and assumptions for later by
|
|
|
|
|
# making sure both packages are present on x86_64-darwin and aarch64-darwin.
|
|
|
|
|
(prevStage:
|
|
|
|
|
# previous stage0 stdenv:
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert lib.all isFromBootstrapFiles (
|
|
|
|
|
with prevStage; [ bash coreutils cpio gnugrep ] ++ lib.optionals useAppleSDKLibs [ pbzx ]
|
|
|
|
|
);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
assert lib.all isFromBootstrapFiles (with prevStage.darwin; [
|
2023-07-26 03:25:46 +02:00
|
|
|
|
binutils-unwrapped cctools print-reexports rewrite-tbd sigtool
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isFromBootstrapFiles (with prevStage.darwin; [ Libsystem ]);
|
|
|
|
|
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ Libsystem ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd xnu ]);
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (with prevStage.darwin; (! useAppleSDKLibs) -> CF == null);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
assert lib.all isFromBootstrapFiles (with prevStage.llvmPackages; [
|
|
|
|
|
clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
stageFun prevStage {
|
|
|
|
|
name = "bootstrap-stage1";
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
inherit (prevStage) ccWrapperStdenv
|
|
|
|
|
coreutils gnugrep;
|
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
# Use this stage’s CF to build CMake. It’s required but can’t be included in the stdenv.
|
|
|
|
|
cmake = self.cmakeMinimal;
|
|
|
|
|
cmakeMinimal = super.cmakeMinimal.overrideAttrs (old: {
|
|
|
|
|
buildInputs = old.buildInputs ++ [ self.darwin.CF ];
|
|
|
|
|
});
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
curl = super.curlMinimal;
|
|
|
|
|
|
|
|
|
|
# Disable tests because they use dejagnu, which fails to run.
|
|
|
|
|
libffi = super.libffi.override { doCheck = false; };
|
|
|
|
|
|
|
|
|
|
# Avoid pulling in a full python and its extra dependencies for the llvm/clang builds.
|
|
|
|
|
libxml2 = super.libxml2.override { pythonSupport = false; };
|
|
|
|
|
|
|
|
|
|
ninja = super.ninja.override { buildDocs = false; };
|
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
# Use this stage’s CF to build Python. It’s required but can’t be included in the stdenv.
|
|
|
|
|
python3 = self.python3Minimal;
|
|
|
|
|
python3Minimal = super.python3Minimal.overrideAttrs (old: {
|
|
|
|
|
buildInputs = old.buildInputs ++ [ self.darwin.CF ];
|
|
|
|
|
});
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
darwin = super.darwin.overrideScope (selfDarwin: superDarwin: {
|
2023-11-02 01:56:50 +01:00
|
|
|
|
# Use this stage’s CF to build configd. It’s required but can’t be included in the stdenv.
|
|
|
|
|
configd = superDarwin.configd.overrideAttrs (old: {
|
|
|
|
|
buildInputs = old.buildInputs or [ ] ++ [ self.darwin.CF ];
|
|
|
|
|
});
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
signingUtils = prevStage.darwin.signingUtils.override {
|
|
|
|
|
inherit (selfDarwin) sigtool;
|
2018-06-14 16:22:33 +02:00
|
|
|
|
};
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-07-08 11:44:20 +02:00
|
|
|
|
postLinkSignHook = prevStage.darwin.postLinkSignHook.override {
|
|
|
|
|
inherit (selfDarwin) sigtool;
|
|
|
|
|
};
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
binutils = superDarwin.binutils.override {
|
|
|
|
|
inherit (self) coreutils;
|
|
|
|
|
inherit (selfDarwin) postLinkSignHook signingUtils;
|
|
|
|
|
|
|
|
|
|
bintools = selfDarwin.binutils-unwrapped;
|
|
|
|
|
libc = selfDarwin.Libsystem;
|
2018-06-14 16:22:33 +02:00
|
|
|
|
};
|
2020-07-31 16:03:51 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
binutils-unwrapped = superDarwin.binutils-unwrapped.override {
|
|
|
|
|
inherit (selfDarwin) cctools;
|
2020-07-31 16:03:51 +02:00
|
|
|
|
};
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
cctools = selfDarwin.cctools-port;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
tools = super.llvmPackages.tools.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) clang-unwrapped libclang libllvm llvm;
|
|
|
|
|
});
|
|
|
|
|
libraries = super.llvmPackages.libraries.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi;
|
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit tools libraries; inherit (prevStage.llvmPackages) release_version; } // tools // libraries
|
|
|
|
|
);
|
2015-06-18 19:03:32 +02:00
|
|
|
|
};
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
|
|
|
|
prevStage.gnu-config
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
# The bootstrap tools may use `strip` from cctools, so use a compatible set of flags until LLVM
|
|
|
|
|
# is rebuilt, and darwin.binutils can use its implementation instead.
|
|
|
|
|
extraPreHook = ''
|
|
|
|
|
stripAllFlags=" " # the cctools "strip" command doesn't know "-s"
|
|
|
|
|
stripDebugFlags="-S" # the cctools "strip" command does something odd with "-p"
|
|
|
|
|
|
|
|
|
|
# Don’t assume the ld64 in bootstrap tools supports response files. Only recent versions do.
|
|
|
|
|
export NIX_LD_USE_RESPONSE_FILE=0
|
|
|
|
|
'';
|
|
|
|
|
})
|
|
|
|
|
|
2023-07-26 03:25:46 +02:00
|
|
|
|
# Build sysctl and Python for use by LLVM’s check phase. These must be built in their
|
2023-05-10 09:03:00 +02:00
|
|
|
|
# own stage, or an infinite recursion results on x86_64-darwin when using the source-based SDK.
|
|
|
|
|
(prevStage:
|
|
|
|
|
# previous stage1 stdenv:
|
|
|
|
|
assert lib.all isFromBootstrapFiles (with prevStage; [ coreutils gnugrep ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
|
|
|
|
autoconf automake bash binutils-unwrapped bison brotli cmake cpio curl cyrus_sasl db
|
|
|
|
|
ed expat flex gettext gmp groff icu libedit libffi libiconv libidn2 libkrb5 libssh2
|
|
|
|
|
libtool libunistring libxml2 m4 ncurses nghttp2 ninja openldap openssh openssl
|
|
|
|
|
patchutils pbzx perl pkg-config.pkg-config python3 python3Minimal scons serf sqlite
|
|
|
|
|
subversion texinfo unzip which xz zlib zstd
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [
|
|
|
|
|
binutils-unwrapped cctools locale libtapi print-reexports rewrite-tbd sigtool
|
|
|
|
|
]);
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ Libsystem configd ]);
|
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF Libsystem libobjc]);
|
|
|
|
|
assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd xnu ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isFromBootstrapFiles (with prevStage.llvmPackages; [
|
|
|
|
|
clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == "boot";
|
|
|
|
|
|
|
|
|
|
stageFun prevStage {
|
|
|
|
|
name = "bootstrap-stage1-sysctl";
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
inherit (prevStage) ccWrapperStdenv
|
|
|
|
|
autoconf automake bash binutils binutils-unwrapped bison brotli cmake cmakeMinimal
|
|
|
|
|
coreutils cpio curl cyrus_sasl db ed expat flex gettext gmp gnugrep groff icu
|
|
|
|
|
libedit libffi libiconv libidn2 libkrb5 libssh2 libtool libunistring libxml2 m4
|
|
|
|
|
ncurses nghttp2 ninja openldap openssh openssl patchutils pbzx perl pkg-config
|
|
|
|
|
python3Minimal scons sed serf sharutils sqlite subversion texinfo unzip which xz
|
|
|
|
|
zlib zstd;
|
|
|
|
|
|
|
|
|
|
# Support for the SystemConfiguration framework is required to run the LLVM tests, but trying
|
|
|
|
|
# to override python3Minimal does not appear to work.
|
|
|
|
|
python3 = (super.python3.override {
|
|
|
|
|
inherit (self) libffi;
|
|
|
|
|
inherit (self.darwin) configd;
|
|
|
|
|
openssl = null;
|
|
|
|
|
readline = null;
|
|
|
|
|
ncurses = null;
|
|
|
|
|
gdbm = null;
|
|
|
|
|
sqlite = null;
|
|
|
|
|
tzdata = null;
|
|
|
|
|
stripConfig = true;
|
|
|
|
|
stripIdlelib = true;
|
|
|
|
|
stripTests = true;
|
|
|
|
|
stripTkinter = true;
|
|
|
|
|
rebuildBytecode = false;
|
|
|
|
|
stripBytecode = true;
|
|
|
|
|
includeSiteCustomize = false;
|
|
|
|
|
enableOptimizations = false;
|
|
|
|
|
enableLTO = false;
|
|
|
|
|
mimetypesSupport = false;
|
|
|
|
|
}).overrideAttrs (_: { pname = "python3-minimal-scproxy"; });
|
|
|
|
|
|
|
|
|
|
darwin = super.darwin.overrideScope (_: superDarwin: {
|
|
|
|
|
inherit (prevStage.darwin)
|
|
|
|
|
CF Libsystem binutils-unwrapped cctools cctools-port configd darwin-stubs dyld
|
|
|
|
|
launchd libclosure libdispatch libobjc locale objc4 postLinkSignHook
|
|
|
|
|
print-reexports rewrite-tbd signingUtils sigtool;
|
|
|
|
|
});
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
tools = super.llvmPackages.tools.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) clang-unwrapped libclang libllvm llvm;
|
|
|
|
|
clang = prevStage.stdenv.cc;
|
|
|
|
|
});
|
|
|
|
|
libraries = super.llvmPackages.libraries.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi;
|
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit tools libraries; inherit (prevStage.llvmPackages) release_version; } // tools // libraries
|
|
|
|
|
);
|
|
|
|
|
};
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
|
|
|
|
prevStage.gnu-config
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
# Until LLVM is rebuilt, assume `strip` is the one from cctools.
|
|
|
|
|
extraPreHook = ''
|
|
|
|
|
stripAllFlags=" " # the cctools "strip" command doesn't know "-s"
|
|
|
|
|
stripDebugFlags="-S" # the cctools "strip" command does something odd with "-p"
|
|
|
|
|
'';
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# First rebuild of LLVM. While this LLVM is linked to a bunch of junk from the bootstrap tools,
|
|
|
|
|
# the libc++ and libc++abi it produces are not. The compiler will be rebuilt in a later stage,
|
|
|
|
|
# but those libraries will be used in the final stdenv.
|
|
|
|
|
#
|
|
|
|
|
# Rebuild coreutils and gnugrep to avoid unwanted references to the bootstrap tools on `PATH`.
|
|
|
|
|
(prevStage:
|
|
|
|
|
# previous stage-sysctl stdenv:
|
|
|
|
|
assert lib.all isFromBootstrapFiles (with prevStage; [ coreutils gnugrep ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
|
|
|
|
autoconf automake bash binutils-unwrapped bison brotli cmake cpio curl cyrus_sasl db
|
|
|
|
|
ed expat flex gettext gmp groff icu libedit libffi libiconv libidn2 libkrb5 libssh2
|
|
|
|
|
libtool libunistring libxml2 m4 ncurses nghttp2 ninja openldap openssh openssl
|
|
|
|
|
patchutils pbzx perl pkg-config.pkg-config python3 python3Minimal scons serf sqlite
|
|
|
|
|
subversion sysctl.provider texinfo unzip which xz zlib zstd
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [
|
2023-07-26 03:25:46 +02:00
|
|
|
|
binutils-unwrapped cctools locale libtapi print-reexports rewrite-tbd sigtool
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ Libsystem configd ]);
|
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF Libsystem libobjc ]);
|
|
|
|
|
assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd xnu ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isFromBootstrapFiles (with prevStage.llvmPackages; [
|
|
|
|
|
clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-port;
|
|
|
|
|
|
|
|
|
|
stageFun prevStage {
|
|
|
|
|
name = "bootstrap-stage-xclang";
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
inherit (prevStage) ccWrapperStdenv
|
|
|
|
|
autoconf automake bash binutils binutils-unwrapped bison brotli cmake cmakeMinimal
|
|
|
|
|
cpio curl cyrus_sasl db ed expat flex gettext gmp groff icu libedit libffi libiconv
|
|
|
|
|
libidn2 libkrb5 libssh2 libtool libunistring libxml2 m4 ncurses nghttp2 ninja
|
|
|
|
|
openldap openssh openssl patchutils pbzx perl pkg-config python3 python3Minimal
|
|
|
|
|
scons sed serf sharutils sqlite subversion sysctl texinfo unzip which xz zlib zstd;
|
|
|
|
|
|
|
|
|
|
# Switch from cctools-port to cctools-llvm now that LLVM has been built.
|
|
|
|
|
darwin = super.darwin.overrideScope (_: superDarwin: {
|
|
|
|
|
inherit (prevStage.darwin)
|
|
|
|
|
CF Libsystem configd darwin-stubs dyld launchd libclosure libdispatch libobjc
|
2023-07-26 03:25:46 +02:00
|
|
|
|
locale objc4 postLinkSignHook print-reexports rewrite-tbd signingUtils sigtool;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
# Avoid building unnecessary Python dependencies due to building LLVM manpages.
|
|
|
|
|
cctools-llvm = superDarwin.cctools-llvm.override { enableManpages = false; };
|
|
|
|
|
});
|
2022-01-13 11:00:27 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
llvmMajor = lib.versions.major super.llvmPackages.release_version;
|
2018-09-09 19:36:05 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
# libc++, and libc++abi do not need CoreFoundation. Avoid propagating the CF from prior
|
|
|
|
|
# stages to the final stdenv via rpath by dropping it from `extraBuildInputs`.
|
|
|
|
|
stdenvNoCF = self.stdenv.override {
|
|
|
|
|
extraBuildInputs = [ ];
|
|
|
|
|
};
|
2020-07-31 16:03:51 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
libcxxBootstrapStdenv = self.overrideCC stdenvNoCF (self.llvmPackages.clangNoCompilerRtWithLibc.override {
|
|
|
|
|
nixSupport.cc-cflags = [ "-nostdlib" ];
|
|
|
|
|
nixSupport.cc-ldflags = [ "-lSystem" ];
|
|
|
|
|
});
|
2020-07-31 16:03:51 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
libraries = super.llvmPackages.libraries.extend (selfLib: superLib: {
|
|
|
|
|
compiler-rt = null;
|
|
|
|
|
libcxx = superLib.libcxx.override ({
|
|
|
|
|
inherit (selfLib) libcxxabi;
|
|
|
|
|
stdenv = libcxxBootstrapStdenv;
|
2021-06-02 06:25:56 +02:00
|
|
|
|
});
|
2023-05-10 09:03:00 +02:00
|
|
|
|
libcxxabi = superLib.libcxxabi.override {
|
|
|
|
|
stdenv = libcxxBootstrapStdenv;
|
|
|
|
|
}
|
|
|
|
|
# Setting `standalone = true` is only needed with older verions of LLVM. Newer ones
|
|
|
|
|
# automatically do what is necessary to bootstrap lib++abi.
|
|
|
|
|
// lib.optionalAttrs (builtins.any (v: llvmMajor == v) [ "7" "11" "12" "13" ]) {
|
|
|
|
|
standalone = true;
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit libraries; } // libraries
|
|
|
|
|
);
|
|
|
|
|
};
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
|
|
|
|
prevStage.gnu-config
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
extraPreHook = ''
|
|
|
|
|
stripAllFlags=" " # the cctools "strip" command doesn't know "-s"
|
|
|
|
|
stripDebugFlags="-S" # the cctools "strip" command does something odd with "-p"
|
|
|
|
|
'';
|
|
|
|
|
})
|
|
|
|
|
|
2023-07-09 19:00:13 +02:00
|
|
|
|
# This stage rebuilds Libsystem. It also rebuilds bash, which will be needed in later stages
|
|
|
|
|
# to use in patched shebangs (e.g., to make sure `icu-config` uses bash from nixpkgs).
|
2023-05-10 09:03:00 +02:00
|
|
|
|
(prevStage:
|
|
|
|
|
# previous stage-xclang stdenv:
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
|
|
|
|
autoconf automake bash binutils-unwrapped bison cmake cmakeMinimal coreutils cpio
|
|
|
|
|
cyrus_sasl db ed expat flex gettext gmp gnugrep groff icu libedit libtool m4 ninja
|
|
|
|
|
openbsm openldap openpam openssh patchutils pbzx perl pkg-config.pkg-config python3
|
|
|
|
|
python3Minimal scons serf sqlite subversion sysctl.provider texinfo unzip which xz
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
|
|
|
|
brotli curl libffi libiconv libidn2 libkrb5 libssh2 libunistring libxml2 ncurses
|
|
|
|
|
nghttp2 openssl zlib zstd
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [
|
2023-07-26 03:25:46 +02:00
|
|
|
|
binutils-unwrapped cctools locale libtapi print-reexports rewrite-tbd sigtool
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ Libsystem configd ]);
|
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF Libsystem libobjc ]);
|
|
|
|
|
assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd libclosure libdispatch xnu ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.llvmPackages; [
|
|
|
|
|
clang-unwrapped libclang libllvm llvm
|
|
|
|
|
]);
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx libcxxabi ]);
|
|
|
|
|
assert prevStage.llvmPackages.compiler-rt == null;
|
|
|
|
|
|
|
|
|
|
assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-port;
|
|
|
|
|
|
|
|
|
|
stageFun prevStage {
|
|
|
|
|
|
|
|
|
|
name = "bootstrap-stage2-Libsystem";
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
inherit (prevStage) ccWrapperStdenv
|
2023-07-09 19:00:13 +02:00
|
|
|
|
autoconf automake binutils-unwrapped bison brotli cmake cmakeMinimal coreutils
|
2023-05-10 09:03:00 +02:00
|
|
|
|
cpio curl cyrus_sasl db ed expat flex gettext gmp gnugrep groff icu libedit libffi
|
|
|
|
|
libiconv libidn2 libkrb5 libssh2 libtool libunistring libxml2 m4 ncurses nghttp2
|
|
|
|
|
ninja openbsm openldap openpam openssh openssl patchutils pbzx perl pkg-config
|
|
|
|
|
python3 python3Minimal scons serf sqlite subversion sysctl texinfo unzip which xz
|
|
|
|
|
zlib zstd;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-07-09 19:00:13 +02:00
|
|
|
|
# Bash must be linked against the system CoreFoundation instead of the open-source one.
|
|
|
|
|
# Otherwise, there will be a dependency cycle: bash -> CF -> icu -> bash (for icu^dev).
|
|
|
|
|
bash = super.bash.overrideAttrs (super: {
|
|
|
|
|
buildInputs = super.buildInputs ++ [ self.darwin.apple_sdk.frameworks.CoreFoundation ];
|
|
|
|
|
});
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
darwin = super.darwin.overrideScope (selfDarwin: superDarwin: {
|
|
|
|
|
inherit (prevStage.darwin)
|
|
|
|
|
CF binutils-unwrapped cctools configd darwin-stubs launchd libobjc libtapi locale
|
2023-07-26 03:25:46 +02:00
|
|
|
|
objc4 print-reexports rewrite-tbd signingUtils sigtool;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
tools = super.llvmPackages.tools.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) clang-unwrapped clangNoCompilerRtWithLibc libclang libllvm llvm;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
libraries = super.llvmPackages.libraries.extend (selfLib: superLib: {
|
|
|
|
|
inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi;
|
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit tools libraries; inherit (prevStage.llvmPackages) release_version; } // tools // libraries
|
|
|
|
|
);
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
# Don’t link anything in this stage against CF to prevent propagating CF from prior stages to
|
|
|
|
|
# the final stdenv, which happens because of the rpath hook.
|
|
|
|
|
stdenv =
|
|
|
|
|
let
|
|
|
|
|
stdenvNoCF = super.stdenv.override {
|
|
|
|
|
extraBuildInputs = [ ];
|
2020-07-31 16:03:51 +02:00
|
|
|
|
};
|
2023-05-10 09:03:00 +02:00
|
|
|
|
in
|
|
|
|
|
self.overrideCC stdenvNoCF (self.llvmPackages.clangNoCompilerRtWithLibc.override {
|
|
|
|
|
inherit (self.llvmPackages) libcxx;
|
|
|
|
|
extraPackages = [ self.llvmPackages.libcxxabi ];
|
2020-07-31 16:03:51 +02:00
|
|
|
|
});
|
2015-06-18 19:03:32 +02:00
|
|
|
|
};
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
|
|
|
|
prevStage.gnu-config
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
extraPreHook = ''
|
|
|
|
|
stripDebugFlags="-S" # llvm-strip does not support "-p" for Mach-O
|
|
|
|
|
'';
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# This stage rebuilds CF and compiler-rt.
|
|
|
|
|
#
|
|
|
|
|
# CF requires:
|
|
|
|
|
# - aarch64-darwin: libobjc (due to being apple_sdk.frameworks.CoreFoundation instead of swift-corefoundation)
|
2023-06-30 02:38:08 +02:00
|
|
|
|
# - x86_64-darwin: libiconv libxml2 icu zlib
|
2023-05-10 09:03:00 +02:00
|
|
|
|
(prevStage:
|
|
|
|
|
# previous stage2-Libsystem stdenv:
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
2023-07-09 19:00:13 +02:00
|
|
|
|
autoconf automake binutils-unwrapped bison brotli cmake cmakeMinimal coreutils
|
2023-06-30 02:38:08 +02:00
|
|
|
|
cpio curl cyrus_sasl db ed expat flex gettext gmp gnugrep groff icu libedit libidn2
|
|
|
|
|
libkrb5 libssh2 libtool libunistring m4 nghttp2 ninja openbsm openldap openpam openssh
|
|
|
|
|
openssl patchutils pbzx perl pkg-config.pkg-config python3 python3Minimal scons serf
|
|
|
|
|
sqlite subversion sysctl.provider texinfo unzip which xz zstd
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
2023-07-09 19:00:13 +02:00
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage; [ bash ]);
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
2023-06-30 02:38:08 +02:00
|
|
|
|
libffi libiconv libxml2 ncurses zlib zstd
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [
|
2023-07-26 03:25:46 +02:00
|
|
|
|
binutils-unwrapped cctools locale libtapi print-reexports rewrite-tbd sigtool
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ configd ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [ Libsystem ]);
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF Libsystem libobjc ]);
|
|
|
|
|
assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd libclosure libdispatch xnu ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.llvmPackages; [
|
|
|
|
|
clang-unwrapped libclang libllvm llvm
|
|
|
|
|
]);
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx libcxxabi ]);
|
|
|
|
|
assert prevStage.llvmPackages.compiler-rt == null;
|
|
|
|
|
|
|
|
|
|
assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-llvm;
|
|
|
|
|
|
|
|
|
|
stageFun prevStage {
|
|
|
|
|
|
|
|
|
|
name = "bootstrap-stage2-CF";
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
inherit (prevStage) ccWrapperStdenv
|
2023-06-30 02:38:08 +02:00
|
|
|
|
autoconf automake bash bison brotli cmake cmakeMinimal coreutils cpio curl
|
|
|
|
|
cyrus_sasl db ed expat flex gettext gmp gnugrep groff libedit libidn2 libkrb5
|
|
|
|
|
libssh2 libtool libunistring m4 ncurses nghttp2 ninja openbsm openldap openpam
|
|
|
|
|
openssh openssl patchutils pbzx perl pkg-config python3 python3Minimal scons serf
|
|
|
|
|
sqlite subversion sysctl texinfo unzip which xz zstd;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
# Avoid pulling in a full python and its extra dependencies for the llvm/clang builds.
|
|
|
|
|
libxml2 = super.libxml2.override { pythonSupport = false; };
|
|
|
|
|
|
|
|
|
|
darwin = super.darwin.overrideScope (selfDarwin: superDarwin: {
|
|
|
|
|
inherit (prevStage.darwin)
|
|
|
|
|
Libsystem configd darwin-stubs launchd locale print-reexports rewrite-tbd
|
2023-07-26 03:25:46 +02:00
|
|
|
|
signingUtils sigtool;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
# Rewrap binutils so it uses the rebuilt Libsystem.
|
|
|
|
|
binutils = superDarwin.binutils.override {
|
|
|
|
|
buildPackages = {
|
|
|
|
|
inherit (prevStage) stdenv;
|
|
|
|
|
};
|
|
|
|
|
libc = selfDarwin.Libsystem;
|
|
|
|
|
} // {
|
|
|
|
|
passthru = { inherit (prevStage.bintools.passthru) isFromBootstrapFiles; };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
# Avoid building unnecessary Python dependencies due to building LLVM manpages.
|
|
|
|
|
cctools-llvm = superDarwin.cctools-llvm.override { enableManpages = false; };
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
tools = super.llvmPackages.tools.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) clang-unwrapped clangNoCompilerRtWithLibc libclang libllvm llvm;
|
|
|
|
|
clang = prevStage.stdenv.cc;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
libraries = super.llvmPackages.libraries.extend (selfLib: superLib: {
|
|
|
|
|
inherit (prevStage.llvmPackages) libcxx libcxxabi;
|
|
|
|
|
|
|
|
|
|
# Make sure compiler-rt is linked against the CF from this stage, which can be
|
|
|
|
|
# propagated to the final stdenv. CF is required by ASAN.
|
|
|
|
|
compiler-rt = superLib.compiler-rt.override ({
|
|
|
|
|
inherit (selfLib) libcxxabi;
|
|
|
|
|
inherit (self.llvmPackages) libllvm;
|
|
|
|
|
stdenv = self.stdenv.override {
|
|
|
|
|
extraBuildInputs = [ self.darwin.CF ];
|
2021-06-02 06:25:56 +02:00
|
|
|
|
};
|
|
|
|
|
});
|
2023-05-10 09:03:00 +02:00
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit tools libraries; inherit (prevStage.llvmPackages) release_version; } // tools // libraries
|
|
|
|
|
);
|
2021-06-02 06:25:56 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
# Don’t link anything in this stage against CF to prevent propagating CF from prior stages to
|
|
|
|
|
# the final stdenv, which happens because of the rpath hook. Also don’t use a stdenv with
|
|
|
|
|
# compiler-rt because it needs to be built in this stage.
|
|
|
|
|
stdenv =
|
|
|
|
|
let
|
|
|
|
|
stdenvNoCF = super.stdenv.override {
|
|
|
|
|
extraBuildInputs = [ ];
|
|
|
|
|
};
|
|
|
|
|
in
|
|
|
|
|
self.overrideCC stdenvNoCF (self.llvmPackages.clangNoCompilerRtWithLibc.override {
|
|
|
|
|
inherit (self.llvmPackages) libcxx;
|
|
|
|
|
|
|
|
|
|
# Make sure the stdenv is using the Libsystem that will be propagated to the final stdenv.
|
|
|
|
|
libc = self.darwin.Libsystem;
|
|
|
|
|
bintools = self.llvmPackages.clangNoCompilerRtWithLibc.bintools.override {
|
|
|
|
|
libc = self.darwin.Libsystem;
|
|
|
|
|
};
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraPackages = [ self.llvmPackages.libcxxabi ];
|
|
|
|
|
});
|
2017-08-16 22:36:21 +02:00
|
|
|
|
};
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
|
|
|
|
prevStage.gnu-config
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
extraPreHook = ''
|
|
|
|
|
stripDebugFlags="-S" # llvm-strip does not support "-p" for Mach-O
|
|
|
|
|
'';
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# Rebuild LLVM with LLVM. This stage also rebuilds certain dependencies needed by LLVM.
|
|
|
|
|
#
|
|
|
|
|
# LLVM requires: libcxx libcxxabi libffi libiconv libxml2 ncurses zlib
|
|
|
|
|
(prevStage:
|
|
|
|
|
# previous stage2-CF stdenv:
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
2023-07-09 19:00:13 +02:00
|
|
|
|
autoconf automake bison brotli cmake cmakeMinimal coreutils cpio curl cyrus_sasl
|
2023-06-30 02:38:08 +02:00
|
|
|
|
db ed expat flex gettext gmp gnugrep groff libedit libidn2 libkrb5 libssh2 libtool
|
|
|
|
|
libunistring m4 ncurses nghttp2 ninja openbsm openldap openpam openssh openssl
|
|
|
|
|
patchutils pbzx perl pkg-config.pkg-config python3 python3Minimal scons serf sqlite
|
|
|
|
|
subversion sysctl.provider texinfo unzip which xz zstd
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage; [
|
2023-07-09 19:00:13 +02:00
|
|
|
|
bash binutils-unwrapped icu libffi libiconv libxml2 zlib
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [
|
2023-07-26 03:25:46 +02:00
|
|
|
|
locale print-reexports rewrite-tbd sigtool
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [
|
|
|
|
|
binutils-unwrapped cctools libtapi
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ configd ]);
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [ Libsystem ]);
|
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF Libsystem libobjc ]);
|
|
|
|
|
assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd libclosure libdispatch xnu ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.llvmPackages; [
|
|
|
|
|
clang-unwrapped libclang libllvm llvm
|
|
|
|
|
]);
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx libcxxabi ]);
|
|
|
|
|
|
|
|
|
|
assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-llvm;
|
|
|
|
|
|
|
|
|
|
stageFun prevStage {
|
|
|
|
|
|
|
|
|
|
name = "bootstrap-stage3";
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
inherit (prevStage) ccWrapperStdenv
|
2023-06-30 02:38:08 +02:00
|
|
|
|
autoconf automake bash binutils binutils-unwrapped bison brotli cmake cmakeMinimal
|
|
|
|
|
coreutils cpio curl cyrus_sasl db ed expat flex gettext gmp gnugrep groff libedit
|
|
|
|
|
libidn2 libkrb5 libssh2 libtool libunistring m4 nghttp2 ninja openbsm openldap
|
|
|
|
|
openpam openssh openssl patchutils pbzx perl pkg-config python3 python3Minimal scons
|
|
|
|
|
sed serf sharutils sqlite subversion sysctl texinfo unzip which xz zstd
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
# CF dependencies - don’t rebuild them.
|
2023-06-30 02:38:08 +02:00
|
|
|
|
icu libiconv libxml2 zlib;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
# Disable tests because they use dejagnu, which fails to run.
|
|
|
|
|
libffi = super.libffi.override { doCheck = false; };
|
2021-06-02 06:25:56 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
darwin = super.darwin.overrideScope (selfDarwin: superDarwin: {
|
|
|
|
|
inherit (prevStage.darwin)
|
|
|
|
|
CF Libsystem binutils binutils-unwrapped cctools cctools-llvm cctools-port configd
|
|
|
|
|
darwin-stubs dyld launchd libclosure libdispatch libobjc libtapi locale objc4
|
2023-07-26 03:25:46 +02:00
|
|
|
|
postLinkSignHook print-reexports rewrite-tbd signingUtils sigtool;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
});
|
2018-09-09 19:36:05 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
libraries = super.llvmPackages.libraries.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi;
|
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit libraries; } // libraries
|
|
|
|
|
);
|
2015-06-18 19:03:32 +02:00
|
|
|
|
};
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
|
|
|
|
prevStage.gnu-config
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
extraPreHook = ''
|
|
|
|
|
stripDebugFlags="-S" # llvm-strip does not support "-p" for Mach-O
|
|
|
|
|
'';
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# Construct a standard environment with the new clang. Also use the new compiler to rebuild
|
|
|
|
|
# everything that will be part of the final stdenv and isn’t required by it, CF, or Libsystem.
|
|
|
|
|
(prevStage:
|
|
|
|
|
# previous stage3 stdenv:
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
2023-07-09 19:00:13 +02:00
|
|
|
|
autoconf automake bison brotli cmake cmakeMinimal coreutils cpio curl cyrus_sasl
|
2023-06-30 02:38:08 +02:00
|
|
|
|
db ed expat flex gettext gmp gnugrep groff libedit libidn2 libkrb5 libssh2 libtool
|
|
|
|
|
libunistring m4 nghttp2 ninja openbsm openldap openpam openssh openssl patchutils pbzx
|
|
|
|
|
perl pkg-config.pkg-config python3 python3Minimal scons serf sqlite subversion
|
|
|
|
|
sysctl.provider texinfo unzip which xz zstd
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage; [
|
2023-07-09 19:00:13 +02:00
|
|
|
|
bash binutils-unwrapped icu libffi libiconv libxml2 zlib
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [
|
2023-07-26 03:25:46 +02:00
|
|
|
|
locale print-reexports rewrite-tbd sigtool
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [
|
|
|
|
|
binutils-unwrapped cctools libtapi
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ configd ]);
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [ Libsystem ]);
|
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF Libsystem libobjc ]);
|
|
|
|
|
assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd libclosure libdispatch xnu ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [
|
|
|
|
|
clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == lib.getVersion prevStage.darwin.cctools-llvm;
|
|
|
|
|
|
|
|
|
|
stageFun prevStage {
|
|
|
|
|
|
|
|
|
|
name = "bootstrap-stage4";
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
inherit (prevStage) ccWrapperStdenv
|
2023-10-14 00:28:27 +02:00
|
|
|
|
autoconf automake bash bison cmake cmakeMinimal cyrus_sasl db expat flex groff
|
|
|
|
|
libedit libtool m4 ninja openldap openssh patchutils perl pkg-config python3 scons
|
|
|
|
|
serf sqlite subversion sysctl texinfo unzip which
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
# CF dependencies - don’t rebuild them.
|
2023-06-30 02:38:08 +02:00
|
|
|
|
icu
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
# LLVM dependencies - don’t rebuild them.
|
|
|
|
|
libffi libiconv libxml2 ncurses zlib;
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-10-14 00:28:27 +02:00
|
|
|
|
# These overrides are required to break an infinite recursion. curl depends on Darwin
|
|
|
|
|
# frameworks, but those frameworks require these dependencies to build, which
|
|
|
|
|
# depend on curl indirectly.
|
|
|
|
|
cpio = super.cpio.override {
|
|
|
|
|
inherit (prevStage) fetchurl;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
libyaml = super.libyaml.override {
|
|
|
|
|
inherit (prevStage) fetchFromGitHub;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
pbzx = super.pbzx.override {
|
|
|
|
|
inherit (prevStage) fetchFromGitHub;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
python3Minimal = super.python3Minimal.override {
|
|
|
|
|
inherit (prevStage) fetchurl;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
xar = super.xar.override {
|
|
|
|
|
inherit (prevStage) fetchurl;
|
|
|
|
|
};
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
darwin = super.darwin.overrideScope (selfDarwin: superDarwin: {
|
|
|
|
|
inherit (prevStage.darwin) dyld CF Libsystem darwin-stubs
|
|
|
|
|
# CF dependencies - don’t rebuild them.
|
|
|
|
|
libobjc objc4;
|
2021-06-02 06:25:56 +02:00
|
|
|
|
|
2023-10-14 00:28:27 +02:00
|
|
|
|
# rewrite-tbd is also needed to build Darwin frameworks, so it’s built using the
|
|
|
|
|
# previous stage’s fetchFromGitHub to avoid an infinite recursion (same as above).
|
|
|
|
|
rewrite-tbd = superDarwin.rewrite-tbd.override {
|
|
|
|
|
inherit (prevStage) fetchFromGitHub;
|
|
|
|
|
};
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
signingUtils = superDarwin.signingUtils.override {
|
|
|
|
|
inherit (selfDarwin) sigtool;
|
|
|
|
|
};
|
2021-06-02 06:25:56 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
binutils = superDarwin.binutils.override {
|
|
|
|
|
shell = self.bash + "/bin/bash";
|
|
|
|
|
|
|
|
|
|
buildPackages = {
|
|
|
|
|
inherit (prevStage) stdenv;
|
2021-06-02 06:25:56 +02:00
|
|
|
|
};
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
bintools = selfDarwin.binutils-unwrapped;
|
|
|
|
|
libc = selfDarwin.Libsystem;
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
tools = super.llvmPackages.tools.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) clang-unwrapped libclang libllvm llvm;
|
|
|
|
|
libcxxClang = lib.makeOverridable (import ../../build-support/cc-wrapper) {
|
|
|
|
|
nativeTools = false;
|
|
|
|
|
nativeLibc = false;
|
|
|
|
|
|
|
|
|
|
buildPackages = {
|
|
|
|
|
inherit (prevStage) stdenv;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extraPackages = [
|
|
|
|
|
self.llvmPackages.libcxxabi
|
|
|
|
|
self.llvmPackages.compiler-rt
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
extraBuildCommands =
|
|
|
|
|
let
|
|
|
|
|
inherit (self.llvmPackages) clang-unwrapped compiler-rt release_version;
|
|
|
|
|
|
|
|
|
|
# Clang 16+ uses only the major version in resource-root, but older versions use the complete one.
|
|
|
|
|
clangResourceRootIncludePath = clangLib: clangRelease:
|
|
|
|
|
let
|
|
|
|
|
clangVersion =
|
|
|
|
|
if lib.versionAtLeast clangRelease "16"
|
|
|
|
|
then lib.versions.major clangRelease
|
|
|
|
|
else clangRelease;
|
|
|
|
|
in
|
|
|
|
|
"${clangLib}/lib/clang/${clangVersion}/include";
|
|
|
|
|
in
|
|
|
|
|
''
|
|
|
|
|
rsrc="$out/resource-root"
|
|
|
|
|
mkdir "$rsrc"
|
|
|
|
|
ln -s "${clangResourceRootIncludePath clang-unwrapped.lib release_version}" "$rsrc"
|
|
|
|
|
ln -s "${compiler-rt.out}/lib" "$rsrc/lib"
|
|
|
|
|
ln -s "${compiler-rt.out}/share" "$rsrc/share"
|
|
|
|
|
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
cc = self.llvmPackages.clang-unwrapped;
|
|
|
|
|
bintools = self.darwin.binutils;
|
|
|
|
|
|
|
|
|
|
isClang = true;
|
|
|
|
|
libc = self.darwin.Libsystem;
|
|
|
|
|
inherit (self.llvmPackages) libcxx;
|
|
|
|
|
|
|
|
|
|
inherit lib;
|
|
|
|
|
inherit (self) stdenvNoCC coreutils gnugrep;
|
|
|
|
|
|
|
|
|
|
shell = self.bash + "/bin/bash";
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
libraries = super.llvmPackages.libraries.extend (_: _:{
|
|
|
|
|
inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi;
|
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit tools libraries; } // tools // libraries
|
|
|
|
|
);
|
2015-06-18 19:03:32 +02:00
|
|
|
|
};
|
2018-02-25 23:03:40 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
|
|
|
|
prevStage.gnu-config
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
extraPreHook = ''
|
|
|
|
|
stripDebugFlags="-S" # llvm-strip does not support "-p" for Mach-O
|
|
|
|
|
'';
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# Construct the final stdenv. The version of LLVM provided should match the one defined in
|
|
|
|
|
# `all-packages.nix` for Darwin. Nothing should depend on the bootstrap tools or originate from
|
|
|
|
|
# the bootstrap tools.
|
|
|
|
|
#
|
|
|
|
|
# When updating the Darwin stdenv, make sure that the result has no dependency (`nix-store -qR`)
|
|
|
|
|
# on `bootstrapTools` or the binutils built in stage 1.
|
|
|
|
|
(prevStage:
|
|
|
|
|
# previous stage4 stdenv:
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage; [
|
2023-10-14 00:28:27 +02:00
|
|
|
|
bash binutils-unwrapped brotli bzip2 cpio curl diffutils ed file findutils gawk
|
|
|
|
|
gettext gmp gnugrep gnumake gnused gnutar gzip icu libffi libiconv libidn2 libkrb5
|
|
|
|
|
libssh2 libunistring libxml2 libyaml ncurses nghttp2 openbsm openpam openssl patch
|
|
|
|
|
pbzx pcre python3Minimal xar xz zlib zstd
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [
|
2023-07-26 03:25:46 +02:00
|
|
|
|
binutils-unwrapped cctools libtapi locale print-reexports rewrite-tbd sigtool
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
2023-11-02 01:56:50 +01:00
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [ Libsystem configd ]);
|
|
|
|
|
assert (! useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
|
2023-05-10 09:03:00 +02:00
|
|
|
|
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF Libsystem libobjc ]);
|
|
|
|
|
assert lib.all isFromNixpkgs (with prevStage.darwin; [ dyld launchd libclosure libdispatch xnu ]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [
|
|
|
|
|
clang-unwrapped libclang libllvm llvm compiler-rt libcxx libcxxabi
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert lib.all isBuiltByBootstrapFilesCompiler (with prevStage; [
|
2023-10-14 00:28:27 +02:00
|
|
|
|
autoconf automake bison cmake cmakeMinimal cyrus_sasl db expat flex groff libedit
|
|
|
|
|
libtool m4 ninja openldap openssh patchutils perl pkg-config.pkg-config python3 scons
|
|
|
|
|
serf sqlite subversion sysctl.provider texinfo unzip which
|
2023-05-10 09:03:00 +02:00
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
assert prevStage.darwin.cctools == prevStage.darwin.cctools-llvm;
|
|
|
|
|
|
2021-06-02 06:25:56 +02:00
|
|
|
|
let
|
|
|
|
|
doSign = localSystem.isAarch64;
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
cc = prevStage.llvmPackages.clang;
|
2021-06-02 06:25:56 +02:00
|
|
|
|
in
|
2023-05-10 09:03:00 +02:00
|
|
|
|
{
|
|
|
|
|
inherit config overlays;
|
|
|
|
|
stdenv = import ../generic {
|
2021-06-02 06:25:56 +02:00
|
|
|
|
name = "stdenv-darwin";
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2021-06-02 06:25:56 +02:00
|
|
|
|
buildPlatform = localSystem;
|
|
|
|
|
hostPlatform = localSystem;
|
|
|
|
|
targetPlatform = localSystem;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
inherit config;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-07-26 03:25:46 +02:00
|
|
|
|
preHook = ''
|
|
|
|
|
${commonPreHook}
|
2023-05-10 09:03:00 +02:00
|
|
|
|
stripDebugFlags="-S" # llvm-strip does not support "-p" for Mach-O
|
|
|
|
|
export PATH_LOCALE=${prevStage.darwin.locale}/share/locale
|
|
|
|
|
'';
|
2020-11-19 09:28:20 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
initialPath = ((import ../generic/common-path.nix) { pkgs = prevStage; });
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2021-06-02 06:25:56 +02:00
|
|
|
|
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
|
2023-05-10 09:03:00 +02:00
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
2021-06-02 06:25:56 +02:00
|
|
|
|
];
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
extraBuildInputs = [ prevStage.darwin.CF ];
|
|
|
|
|
|
|
|
|
|
inherit cc;
|
|
|
|
|
|
|
|
|
|
shell = cc.shell;
|
|
|
|
|
|
|
|
|
|
inherit (prevStage.stdenv) fetchurlBoot;
|
2015-06-18 19:03:32 +02:00
|
|
|
|
|
2021-06-02 06:25:56 +02:00
|
|
|
|
extraAttrs = {
|
|
|
|
|
inherit bootstrapTools;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
libc = prevStage.darwin.Libsystem;
|
|
|
|
|
shellPackage = prevStage.bash;
|
2022-07-19 15:20:53 +02:00
|
|
|
|
} // lib.optionalAttrs useAppleSDKLibs {
|
|
|
|
|
# This objc4 will be propagated to all builds using the final stdenv,
|
|
|
|
|
# and we shouldn't mix different builds, because they would be
|
|
|
|
|
# conflicting LLVM modules. Export it here so we can grab it later.
|
2023-05-10 09:03:00 +02:00
|
|
|
|
inherit (prevStage.darwin) objc4;
|
2021-06-02 06:25:56 +02:00
|
|
|
|
};
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
disallowedRequisites = [ bootstrapTools.out ];
|
|
|
|
|
|
|
|
|
|
allowedRequisites = (with prevStage; [
|
|
|
|
|
bash
|
|
|
|
|
binutils.bintools
|
|
|
|
|
binutils.bintools.lib
|
2021-06-02 06:25:56 +02:00
|
|
|
|
bzip2.bin
|
2023-05-10 09:03:00 +02:00
|
|
|
|
bzip2.out
|
|
|
|
|
cc.expand-response-params
|
2021-06-02 06:25:56 +02:00
|
|
|
|
coreutils
|
2023-05-10 09:03:00 +02:00
|
|
|
|
darwin.binutils
|
|
|
|
|
darwin.binutils.bintools
|
2021-06-02 06:25:56 +02:00
|
|
|
|
diffutils
|
2023-05-10 09:03:00 +02:00
|
|
|
|
ed
|
|
|
|
|
file
|
|
|
|
|
findutils
|
2021-06-02 06:25:56 +02:00
|
|
|
|
gawk
|
2023-05-10 09:03:00 +02:00
|
|
|
|
gettext
|
|
|
|
|
gmp.out
|
2021-06-02 06:25:56 +02:00
|
|
|
|
gnugrep
|
2023-04-28 12:47:45 +02:00
|
|
|
|
gnugrep.pcre2.out
|
2023-05-10 09:03:00 +02:00
|
|
|
|
gnumake
|
|
|
|
|
gnused
|
|
|
|
|
gnutar
|
|
|
|
|
gzip
|
|
|
|
|
icu.out
|
|
|
|
|
libffi.out
|
|
|
|
|
libiconv
|
|
|
|
|
libunistring.out
|
2021-06-02 06:25:56 +02:00
|
|
|
|
libxml2.out
|
2023-05-10 09:03:00 +02:00
|
|
|
|
ncurses.dev
|
|
|
|
|
ncurses.man
|
|
|
|
|
ncurses.out
|
|
|
|
|
openbsm
|
|
|
|
|
openpam
|
|
|
|
|
patch
|
|
|
|
|
xz.bin
|
|
|
|
|
xz.out
|
|
|
|
|
zlib.dev
|
|
|
|
|
zlib.out
|
2023-06-30 02:38:08 +02:00
|
|
|
|
]
|
|
|
|
|
++ lib.optionals doSign [ openssl.out ])
|
2023-05-10 09:03:00 +02:00
|
|
|
|
++ lib.optionals localSystem.isAarch64 [
|
|
|
|
|
prevStage.updateAutotoolsGnuConfigScriptsHook
|
|
|
|
|
prevStage.gnu-config
|
|
|
|
|
]
|
|
|
|
|
++ (with prevStage.llvmPackages; [
|
|
|
|
|
bintools-unwrapped
|
|
|
|
|
clang-unwrapped
|
|
|
|
|
clang-unwrapped.lib
|
|
|
|
|
compiler-rt
|
|
|
|
|
compiler-rt.dev
|
2021-06-02 06:25:56 +02:00
|
|
|
|
libcxx
|
|
|
|
|
libcxx.dev
|
|
|
|
|
libcxxabi
|
|
|
|
|
libcxxabi.dev
|
2023-05-10 09:03:00 +02:00
|
|
|
|
lld
|
2021-06-02 06:25:56 +02:00
|
|
|
|
llvm
|
|
|
|
|
llvm.lib
|
|
|
|
|
])
|
2023-05-10 09:03:00 +02:00
|
|
|
|
++ (with prevStage.darwin; [
|
2021-06-02 06:25:56 +02:00
|
|
|
|
CF
|
2023-05-10 09:03:00 +02:00
|
|
|
|
Libsystem
|
|
|
|
|
cctools-llvm
|
|
|
|
|
cctools-port
|
|
|
|
|
dyld
|
2021-06-02 06:25:56 +02:00
|
|
|
|
libtapi
|
2023-05-10 09:03:00 +02:00
|
|
|
|
locale
|
|
|
|
|
]
|
|
|
|
|
++ lib.optional useAppleSDKLibs [ objc4 ]
|
2021-06-02 06:25:56 +02:00
|
|
|
|
++ lib.optionals doSign [ postLinkSignHook sigtool signingUtils ]);
|
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
__stdenvImpureHostDeps = commonImpureHostDeps;
|
|
|
|
|
__extraImpureHostDeps = commonImpureHostDeps;
|
|
|
|
|
|
|
|
|
|
overrides = self: super: {
|
|
|
|
|
inherit (prevStage)
|
2023-10-14 00:28:27 +02:00
|
|
|
|
bash binutils brotli bzip2 coreutils cpio curl diffutils ed file findutils gawk
|
|
|
|
|
gettext gmp gnugrep gnumake gnused gnutar gzip icu libffi libiconv libidn2 libssh2
|
|
|
|
|
libunistring libxml2 libyaml ncurses nghttp2 openbsm openpam openssl patch pbzx
|
|
|
|
|
pcre python3Minimal xar xz zlib zstd;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
|
|
|
|
|
darwin = super.darwin.overrideScope (_: _: {
|
|
|
|
|
inherit (prevStage.darwin)
|
2023-10-14 00:28:27 +02:00
|
|
|
|
CF ICU Libsystem darwin-stubs dyld locale libobjc libtapi rewrite-tbd xnu;
|
2023-05-10 09:03:00 +02:00
|
|
|
|
} // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
|
|
|
|
|
inherit (prevStage.darwin) binutils binutils-unwrapped cctools-llvm cctools-port;
|
2021-06-02 06:25:56 +02:00
|
|
|
|
});
|
|
|
|
|
} // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
|
2023-05-10 09:03:00 +02:00
|
|
|
|
inherit (prevStage.llvmPackages) clang llvm;
|
2016-01-04 03:47:09 +01:00
|
|
|
|
|
2023-05-10 09:03:00 +02:00
|
|
|
|
# Need to get rid of these when cross-compiling.
|
|
|
|
|
llvmPackages = super.llvmPackages // (
|
|
|
|
|
let
|
|
|
|
|
tools = super.llvmPackages.tools.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) clang clang-unwrapped libclang libllvm llvm;
|
|
|
|
|
});
|
|
|
|
|
libraries = super.llvmPackages.libraries.extend (_: _: {
|
|
|
|
|
inherit (prevStage.llvmPackages) compiler-rt libcxx libcxxabi;
|
|
|
|
|
});
|
|
|
|
|
in
|
|
|
|
|
{ inherit tools libraries; } // tools // libraries
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
inherit (prevStage) binutils binutils-unwrapped;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
# This "no-op" stage is just a place to put the assertions about stage6.
|
|
|
|
|
(prevStage:
|
|
|
|
|
# previous final stage stdenv:
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.darwin.sigtool;
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.darwin.binutils-unwrapped;
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.darwin.print-reexports;
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.darwin.rewrite-tbd;
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.darwin.cctools;
|
|
|
|
|
|
|
|
|
|
assert isFromNixpkgs prevStage.darwin.CF;
|
|
|
|
|
assert isFromNixpkgs prevStage.darwin.Libsystem;
|
|
|
|
|
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.clang-unwrapped;
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.libllvm;
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.libcxx;
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.libcxxabi;
|
|
|
|
|
assert isBuiltByNixpkgsCompiler prevStage.llvmPackages.compiler-rt;
|
|
|
|
|
{ inherit (prevStage) config overlays stdenv; })
|
|
|
|
|
]
|