core/pkgs/stdenv/darwin/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

2684 lines
69 KiB
Nix
Raw Normal View History

2024-05-02 00:46:19 +00: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.
{
lib,
localSystem,
crossSystem,
config,
overlays,
crossOverlays ? [ ],
# Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools
bootstrapFiles ?
if localSystem.isAarch64 then
import ./bootstrap-files/aarch64-apple-darwin.nix
else
import ./bootstrap-files/x86_64-apple-darwin.nix,
}:
assert crossSystem == localSystem;
let
inherit (localSystem) system;
useAppleSDKLibs = localSystem.isAarch64;
commonImpureHostDeps = [
"/bin/sh"
"/usr/lib/libSystem.B.dylib"
"/usr/lib/system/libunc.dylib" # This dependency is "hidden", so our scanning code doesn't pick it up
];
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;
commonPreHook = ''
export NIX_ENFORCE_NO_NATIVE=''${NIX_ENFORCE_NO_NATIVE-1}
export NIX_ENFORCE_PURITY=''${NIX_ENFORCE_PURITY-1}
export NIX_IGNORE_LD_THROUGH_GCC=1
unset SDKROOT
'';
bootstrapTools =
derivation (
{
inherit system;
name = "bootstrap-tools";
builder = "${bootstrapFiles.unpack}/bin/bash";
args = [
"${bootstrapFiles.unpack}/bootstrap-tools-unpack.sh"
bootstrapFiles.bootstrapTools
];
PATH = lib.makeBinPath [
(placeholder "out")
bootstrapFiles.unpack
];
__impureHostDeps = commonImpureHostDeps;
}
// lib.optionalAttrs config.contentAddressedByDefault {
__contentAddressed = true;
outputHashAlgo = "sha256";
outputHashMode = "recursive";
}
)
// {
passthru.isFromBootstrapFiles = true;
};
stageFun =
prevStage:
{
name,
overrides ? (self: super: { }),
extraNativeBuildInputs ? [ ],
extraPreHook ? "",
}:
let
cc =
if prevStage.llvmPackages.clang-unwrapped == null then
null
else
lib.makeOverridable (import ../../build-support/cc-wrapper) {
name = "${name}-clang-wrapper";
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
nativeTools = false;
nativeLibc = false;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
expand-response-params = lib.optionalString (
prevStage.stdenv.hasCC or false && prevStage.stdenv.cc != "/dev/null"
) prevStage.expand-response-params;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
extraPackages = [ prevStage.llvmPackages.compiler-rt ];
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00: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"
}
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
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
'';
cc = prevStage.llvmPackages.clang-unwrapped;
bintools = prevStage.darwin.binutils;
isClang = true;
libc = prevStage.darwin.Libsystem;
inherit (prevStage.llvmPackages) libcxx;
inherit lib;
inherit (prevStage) coreutils gnugrep;
stdenvNoCC = prevStage.ccWrapperStdenv;
runtimeShell = prevStage.ccWrapperStdenv.shell;
};
bash = prevStage.bash or bootstrapTools;
thisStdenv = import ../generic {
name = "${name}-stdenv-darwin";
buildPlatform = localSystem;
hostPlatform = localSystem;
targetPlatform = localSystem;
inherit config;
extraBuildInputs = [ prevStage.darwin.CF ];
extraNativeBuildInputs = extraNativeBuildInputs ++ [ prevStage.darwin.apple_sdk.sdkRoot ];
preHook =
lib.optionalString (!isBuiltByNixpkgsCompiler bash) ''
# Don't patch #!/interpreter because it leads to retained
# dependencies on the bootstrapTools in the final stdenv.
dontPatchShebangs=1
''
+ ''
${commonPreHook}
${extraPreHook}
''
+ lib.optionalString (prevStage.darwin ? locale) ''
export PATH_LOCALE=${prevStage.darwin.locale}/share/locale
'';
shell = bash + "/bin/bash";
initialPath = [
bash
bootstrapTools
];
fetchurlBoot = import ../../build-support/fetchurl {
inherit lib;
stdenvNoCC = prevStage.ccWrapperStdenv or thisStdenv;
curl = bootstrapTools;
};
inherit cc;
# The stdenvs themselves don't use mkDerivation, so I need to specify this here
__stdenvImpureHostDeps = commonImpureHostDeps;
__extraImpureHostDeps = commonImpureHostDeps;
# Using the bootstrap tools curl for fetchers allows the stdenv bootstrap to avoid
# having a dependency on curl, allowing curl to be updated without triggering a
# new stdenv bootstrap on Darwin.
overrides =
self: super:
(overrides self super)
// {
fetchurl = thisStdenv.fetchurlBoot;
fetchpatch = super.fetchpatch.override { inherit (self) fetchurl; };
fetchgit = super.fetchgit.override { git = super.git.override { curl = bootstrapTools; }; };
fetchzip = super.fetchzip.override { inherit (self) fetchurl; };
};
};
in
{
inherit config overlays;
stdenv = thisStdenv;
};
in
assert bootstrapTools.passthru.isFromBootstrapFiles or false; # sanity check
[
(
{ }:
2024-06-30 08:16:52 +00:00
{
2024-05-02 00:46:19 +00:00
__raw = true;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
coreutils = null;
gnugrep = null;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
pbzx = null;
cpio = null;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
darwin = {
apple_sdk.sdkRoot = null;
binutils = null;
binutils-unwrapped = null;
cctools = null;
print-reexports = null;
rewrite-tbd = null;
sigtool = null;
CF = null;
Libsystem = null;
};
llvmPackages = {
clang-unwrapped = null;
libllvm = null;
libcxx = 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;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
bash = bootstrapTools;
coreutils = bootstrapTools;
cpio = bootstrapTools;
gnugrep = bootstrapTools;
pbzx = bootstrapTools;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
darwin = super.darwin.overrideScope (
selfDarwin: superDarwin:
2024-06-30 08:16:52 +00:00
{
2024-05-02 00:46:19 +00:00
# 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;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
binutils-unwrapped = bootstrapTools // {
version = "boot";
2024-06-30 08:16:52 +00:00
};
2024-05-02 00:46:19 +00:00
binutils = super.wrapBintoolsWith {
name = "bootstrap-stage0-binutils-wrapper";
nativeTools = false;
nativeLibc = false;
expand-response-params = "";
libc = selfDarwin.Libsystem;
inherit lib;
inherit (self) stdenvNoCC coreutils gnugrep;
runtimeShell = self.stdenvNoCC.shell;
bintools = selfDarwin.binutils-unwrapped;
inherit (selfDarwin) postLinkSignHook signingUtils;
};
cctools = bootstrapTools // {
targetPrefix = "";
version = "boot";
man = bootstrapTools;
};
locale = self.stdenv.mkDerivation {
name = "bootstrap-stage0-locale";
buildCommand = ''
mkdir -p $out/share/locale
2024-06-30 08:16:52 +00:00
'';
};
2024-05-02 00:46:19 +00:00
print-reexports = bootstrapTools;
rewrite-tbd = bootstrapTools;
sigtool = bootstrapTools;
2024-06-30 08:16:52 +00:00
}
2024-05-02 00:46:19 +00:00
// lib.optionalAttrs (!useAppleSDKLibs) {
Libsystem = self.stdenv.mkDerivation {
name = "bootstrap-stage0-Libsystem";
buildCommand = ''
mkdir -p $out
cp -r ${selfDarwin.darwin-stubs}/usr/lib $out/lib
chmod -R +w $out/lib
substituteInPlace $out/lib/libSystem.B.tbd --replace /usr/lib/system $out/lib/system
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
2024-06-30 08:16:52 +00:00
done
2024-05-02 00:46:19 +00:00
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
ln -s ${bootstrapTools}/include-Libsystem $out/include
'';
passthru.isFromBootstrapFiles = true;
};
2024-06-30 08:16:52 +00:00
}
2024-05-02 00:46:19 +00:00
);
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
llvmPackages =
super.llvmPackages
2024-06-30 08:16:52 +00:00
// (
2024-05-02 00:46:19 +00:00
let
tools = super.llvmPackages.tools.extend (
selfTools: _: {
libclang = self.stdenv.mkDerivation {
name = "bootstrap-stage0-clang";
version = "boot";
outputs = [
2024-06-30 08:16:52 +00:00
"out"
"lib"
];
2024-05-02 00:46:19 +00:00
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
2024-06-30 08:16:52 +00:00
'';
2024-05-02 00:46:19 +00:00
passthru = {
isFromBootstrapFiles = true;
hardeningUnsupportedFlags = [
"fortify3"
"zerocallusedregs"
2024-06-30 08:16:52 +00:00
];
};
};
2024-05-02 00:46:19 +00:00
clang-unwrapped = selfTools.libclang;
libllvm = self.stdenv.mkDerivation {
name = "bootstrap-stage0-llvm";
outputs = [
2024-06-30 08:16:52 +00:00
"out"
"lib"
];
2024-05-02 00:46:19 +00:00
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;
2024-06-30 08:16:52 +00:00
};
2024-05-02 00:46:19 +00:00
llvm = selfTools.libllvm;
2024-06-30 08:16:52 +00:00
}
);
2024-05-02 00:46:19 +00:00
libraries = super.llvmPackages.libraries.extend (
2024-06-30 08:16:52 +00:00
_: _: {
2024-05-02 00:46:19 +00:00
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
2024-06-30 08:16:52 +00:00
'';
2024-05-02 00:46:19 +00:00
passthru = {
isLLVM = true;
isFromBootstrapFiles = true;
};
2024-06-30 08:16:52 +00:00
};
2024-05-02 00:46:19 +00:00
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
);
};
# 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:
assert lib.all isFromBootstrapFiles (
with prevStage;
[
bash
coreutils
cpio
gnugrep
]
++ lib.optionals useAppleSDKLibs [ pbzx ]
);
assert lib.all isFromBootstrapFiles (
with prevStage.darwin;
[
binutils-unwrapped
cctools
print-reexports
rewrite-tbd
sigtool
]
);
assert (!useAppleSDKLibs) -> lib.all isFromBootstrapFiles (with prevStage.darwin; [ Libsystem ]);
assert useAppleSDKLibs -> lib.all isFromNixpkgs (with prevStage.darwin; [ Libsystem ]);
assert lib.all isFromNixpkgs (
with prevStage.darwin;
[
dyld
launchd
xnu
]
);
assert (with prevStage.darwin; (!useAppleSDKLibs) -> CF == null);
assert lib.all isFromBootstrapFiles (
with prevStage.llvmPackages;
[
clang-unwrapped
libclang
libllvm
llvm
compiler-rt
libcxx
]
);
stageFun prevStage {
name = "bootstrap-stage1";
overrides = self: super: {
inherit (prevStage) ccWrapperStdenv coreutils gnugrep;
# Use this stages CF to build CMake. Its required but cant be included in the stdenv.
cmake = self.cmakeMinimal;
cmakeMinimal = super.cmakeMinimal.overrideAttrs (old: {
buildInputs = old.buildInputs ++ [ self.darwin.CF ];
});
# 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; };
# Use this stages CF to build Python. Its required but cant be included in the stdenv.
python3 = self.python3Minimal;
python3Minimal = super.python3Minimal.overrideAttrs (old: {
buildInputs = old.buildInputs ++ [ self.darwin.CF ];
});
darwin = super.darwin.overrideScope (
selfDarwin: superDarwin: {
apple_sdk = superDarwin.apple_sdk // {
inherit (prevStage.darwin.apple_sdk) sdkRoot;
};
# Use this stages CF to build configd. Its required but cant be included in the stdenv.
configd = superDarwin.configd.overrideAttrs (old: {
buildInputs = old.buildInputs or [ ] ++ [ self.darwin.CF ];
});
signingUtils = prevStage.darwin.signingUtils.override { inherit (selfDarwin) sigtool; };
postLinkSignHook = prevStage.darwin.postLinkSignHook.override { inherit (selfDarwin) sigtool; };
binutils = superDarwin.binutils.override {
inherit (self) coreutils;
inherit (selfDarwin) postLinkSignHook signingUtils;
bintools = selfDarwin.binutils-unwrapped;
libc = selfDarwin.Libsystem;
# TODO(@sternenseemann): can this be removed?
runtimeShell = "${bootstrapTools}/bin/bash";
};
binutils-unwrapped = superDarwin.binutils-unwrapped.override { inherit (selfDarwin) cctools; };
cctools = selfDarwin.cctools-port;
}
);
llvmPackages =
super.llvmPackages
2024-06-30 08:16:52 +00:00
// (
let
2024-05-02 00:46:19 +00:00
tools = super.llvmPackages.tools.extend (
2024-06-30 08:16:52 +00:00
_: _: {
2024-05-02 00:46:19 +00:00
inherit (prevStage.llvmPackages)
clang-unwrapped
2024-06-30 08:16:52 +00:00
libclang
libllvm
llvm
;
}
);
2024-05-02 00:46:19 +00:00
libraries = super.llvmPackages.libraries.extend (
_: _: { inherit (prevStage.llvmPackages) compiler-rt libcxx; }
2024-06-30 08:16:52 +00:00
);
in
{
2024-05-02 00:46:19 +00:00
inherit tools libraries;
inherit (prevStage.llvmPackages) release_version;
2024-06-30 08:16:52 +00:00
}
// tools
2024-05-02 00:46:19 +00:00
// libraries
2024-06-30 08:16:52 +00:00
);
};
2024-05-02 00:46:19 +00: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"
# Dont assume the ld64 in bootstrap tools supports response files. Only recent versions do.
export NIX_LD_USE_RESPONSE_FILE=0
'';
}
)
# Build cctools, Python, and sysctl for use by LLVMs check phase. They must be built in
# their stage to prevent infinite recursions and to make sure the stdenv used to build
# LLVM has the newly built cctools instead of the one from the bootstrap tools.
(
prevStage:
# previous stage1 stdenv:
assert lib.all isFromBootstrapFiles (
with prevStage;
[
coreutils
gnugrep
]
);
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage;
[
autoconf
automake
bash
binutils-unwrapped
bison
brotli
cmake
cpio
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
]
);
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.darwin;
[
binutils-unwrapped
cctools
locale
libtapi
print-reexports
rewrite-tbd
sigtool
]
);
assert
(!useAppleSDKLibs)
-> lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.darwin;
[
Libsystem
configd
2024-06-30 08:16:52 +00:00
]
);
2024-05-02 00:46:19 +00:00
assert (!useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
assert
useAppleSDKLibs
-> lib.all isFromNixpkgs (
with prevStage.darwin;
[
2024-06-30 08:16:52 +00:00
CF
2024-05-02 00:46:19 +00:00
Libsystem
2024-06-30 08:16:52 +00:00
libobjc
2024-05-02 00:46:19 +00:00
]
);
assert lib.all isFromNixpkgs (
with prevStage.darwin;
[
2024-06-30 08:16:52 +00:00
dyld
launchd
xnu
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isFromBootstrapFiles (
with prevStage.llvmPackages;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
clang-unwrapped
libclang
libllvm
llvm
compiler-rt
libcxx
]
);
assert lib.getVersion prevStage.stdenv.cc.bintools.bintools == "boot";
stageFun prevStage {
name = "bootstrap-stage1-sysctl";
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
overrides = self: super: {
inherit (prevStage)
ccWrapperStdenv
autoconf
automake
bash
binutils
binutils-unwrapped
bison
brotli
cmake
cmakeMinimal
coreutils
cpio
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
2024-06-30 08:16:52 +00:00
scons
sed
2024-05-02 00:46:19 +00:00
serf
sharutils
sqlite
subversion
texinfo
2024-06-30 08:16:52 +00:00
unzip
which
xz
2024-05-02 00:46:19 +00:00
zlib
2024-06-30 08:16:52 +00:00
zstd
2024-05-02 00:46:19 +00:00
;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
# 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";
});
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
darwin = super.darwin.overrideScope (
_: superDarwin: {
inherit (prevStage.darwin)
CF
sdkRoot
Libsystem
binutils-unwrapped
cctools
cctools-port
configd
darwin-stubs
dyld
launchd
libclosure
libdispatch
libobjc
locale
objc4
postLinkSignHook
print-reexports
rewrite-tbd
signingUtils
sigtool
;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
apple_sdk = superDarwin.apple_sdk // {
inherit (prevStage.darwin.apple_sdk) sdkRoot;
};
}
);
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00: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; }
);
in
{
inherit tools libraries;
inherit (prevStage.llvmPackages) release_version;
}
// tools
// libraries
);
};
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
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;
[
binutils-unwrapped
cctools
locale
libtapi
print-reexports
rewrite-tbd
sigtool
]
);
assert
(!useAppleSDKLibs)
-> lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.darwin;
[
Libsystem
configd
]
);
assert (!useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
2024-06-30 08:16:52 +00:00
assert
2024-05-02 00:46:19 +00:00
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
]
);
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
2024-06-30 08:16:52 +00:00
autoconf
2024-05-02 00:46:19 +00:00
automake
2024-06-30 08:16:52 +00:00
bash
2024-05-02 00:46:19 +00:00
binutils
binutils-unwrapped
bison
2024-06-30 08:16:52 +00:00
brotli
cmake
2024-05-02 00:46:19 +00:00
cmakeMinimal
cpio
cyrus_sasl
db
2024-06-30 08:16:52 +00:00
ed
2024-05-02 00:46:19 +00:00
expat
2024-06-30 08:16:52 +00:00
flex
gettext
gmp
groff
icu
2024-05-02 00:46:19 +00:00
libedit
2024-06-30 08:16:52 +00:00
libffi
libiconv
libidn2
libkrb5
2024-05-02 00:46:19 +00:00
libssh2
2024-06-30 08:16:52 +00:00
libtool
2024-05-02 00:46:19 +00:00
libunistring
2024-06-30 08:16:52 +00:00
libxml2
2024-05-02 00:46:19 +00:00
m4
ncurses
nghttp2
2024-06-30 08:16:52 +00:00
ninja
2024-05-02 00:46:19 +00:00
openldap
2024-06-30 08:16:52 +00:00
openssh
openssl
2024-05-02 00:46:19 +00:00
patchutils
2024-06-30 08:16:52 +00:00
pbzx
perl
2024-05-02 00:46:19 +00:00
pkg-config
2024-06-30 08:16:52 +00:00
python3
2024-05-02 00:46:19 +00:00
python3Minimal
2024-06-30 08:16:52 +00:00
scons
2024-05-02 00:46:19 +00:00
sed
2024-06-30 08:16:52 +00:00
serf
2024-05-02 00:46:19 +00:00
sharutils
2024-06-30 08:16:52 +00:00
sqlite
2024-05-02 00:46:19 +00:00
subversion
2024-06-30 08:16:52 +00:00
sysctl
texinfo
unzip
which
xz
zlib
zstd
2024-05-02 00:46:19 +00:00
;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
# 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
2024-06-30 08:16:52 +00:00
libobjc
2024-05-02 00:46:19 +00:00
locale
2024-06-30 08:16:52 +00:00
objc4
2024-05-02 00:46:19 +00:00
postLinkSignHook
print-reexports
rewrite-tbd
signingUtils
sigtool
2024-06-30 08:16:52 +00:00
;
2024-05-02 00:46:19 +00:00
apple_sdk = superDarwin.apple_sdk // {
inherit (prevStage.darwin.apple_sdk) sdkRoot;
};
# Avoid building unnecessary Python dependencies due to building LLVM manpages.
cctools-llvm = superDarwin.cctools-llvm.override { enableManpages = false; };
}
);
llvmPackages =
super.llvmPackages
2024-06-30 08:16:52 +00:00
// (
let
2024-05-02 00:46:19 +00:00
llvmMajor = lib.versions.major super.llvmPackages.release_version;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00: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 = [ ]; };
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
libcxxBootstrapStdenv = self.overrideCC stdenvNoCF (
self.llvmPackages.clangNoCompilerRtWithLibc.override {
nixSupport.cc-cflags = [ "-nostdlib" ];
nixSupport.cc-ldflags = [ "-lSystem" ];
2024-06-30 08:16:52 +00:00
}
);
2024-05-02 00:46:19 +00:00
libraries = super.llvmPackages.libraries.extend (
selfLib: superLib: {
compiler-rt = null;
libcxx = superLib.libcxx.override ({ stdenv = libcxxBootstrapStdenv; });
}
);
in
{ inherit libraries; } // libraries
);
};
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"
'';
}
)
# 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).
(
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
]
);
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage;
[
brotli
libffi
libiconv
libidn2
libkrb5
libssh2
libunistring
libxml2
ncurses
nghttp2
openssl
zlib
zstd
]
);
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.darwin;
[
binutils-unwrapped
cctools
locale
libtapi
print-reexports
rewrite-tbd
sigtool
]
);
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
assert
(!useAppleSDKLibs)
-> lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.darwin;
[
Libsystem
configd
]
);
assert (!useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
assert
useAppleSDKLibs
-> lib.all isFromNixpkgs (
with prevStage.darwin;
[
CF
Libsystem
libobjc
]
);
assert lib.all isFromNixpkgs (
with prevStage.darwin;
[
dyld
launchd
libclosure
libdispatch
xnu
2024-06-30 08:16:52 +00:00
]
2024-05-02 00:46:19 +00:00
);
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.llvmPackages;
[
clang-unwrapped
libclang
libllvm
llvm
]
);
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx ]);
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
autoconf
automake
binutils-unwrapped
2024-06-30 08:16:52 +00:00
bison
2024-05-02 00:46:19 +00:00
brotli
2024-06-30 08:16:52 +00:00
cmake
2024-05-02 00:46:19 +00:00
cmakeMinimal
coreutils
cpio
cyrus_sasl
db
2024-06-30 08:16:52 +00:00
ed
2024-05-02 00:46:19 +00:00
expat
flex
gettext
2024-06-30 08:16:52 +00:00
gmp
gnugrep
2024-05-02 00:46:19 +00:00
groff
2024-06-30 08:16:52 +00:00
icu
libedit
libffi
libiconv
libidn2
libkrb5
libssh2
libtool
2024-05-02 00:46:19 +00:00
libunistring
2024-06-30 08:16:52 +00:00
libxml2
m4
ncurses
2024-05-02 00:46:19 +00:00
nghttp2
2024-06-30 08:16:52 +00:00
ninja
openbsm
openldap
openpam
openssh
openssl
2024-05-02 00:46:19 +00:00
patchutils
pbzx
2024-06-30 08:16:52 +00:00
perl
2024-05-02 00:46:19 +00:00
pkg-config
python3
python3Minimal
2024-06-30 08:16:52 +00:00
scons
serf
sqlite
2024-05-02 00:46:19 +00:00
subversion
2024-06-30 08:16:52 +00:00
sysctl
2024-05-02 00:46:19 +00:00
texinfo
2024-06-30 08:16:52 +00:00
unzip
2024-05-02 00:46:19 +00:00
which
2024-06-30 08:16:52 +00:00
xz
zlib
zstd
;
2024-05-02 00:46:19 +00: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 ];
});
darwin = super.darwin.overrideScope (
selfDarwin: superDarwin: {
inherit (prevStage.darwin)
2024-06-30 08:16:52 +00:00
CF
2024-05-02 00:46:19 +00:00
binutils-unwrapped
2024-06-30 08:16:52 +00:00
cctools
configd
2024-05-02 00:46:19 +00:00
darwin-stubs
2024-06-30 08:16:52 +00:00
launchd
libobjc
libtapi
locale
objc4
2024-05-02 00:46:19 +00:00
print-reexports
rewrite-tbd
signingUtils
2024-06-30 08:16:52 +00:00
sigtool
;
2024-05-02 00:46:19 +00:00
apple_sdk = superDarwin.apple_sdk // {
inherit (prevStage.darwin.apple_sdk) sdkRoot;
2024-06-30 08:16:52 +00:00
};
}
);
2024-05-02 00:46:19 +00:00
llvmPackages =
super.llvmPackages
2024-06-30 08:16:52 +00:00
// (
let
2024-05-02 00:46:19 +00:00
tools = super.llvmPackages.tools.extend (
2024-06-30 08:16:52 +00:00
_: _: {
2024-05-02 00:46:19 +00:00
inherit (prevStage.llvmPackages)
clang-unwrapped
clangNoCompilerRtWithLibc
2024-06-30 08:16:52 +00:00
libclang
libllvm
llvm
;
}
);
2024-05-02 00:46:19 +00:00
libraries = super.llvmPackages.libraries.extend (
selfLib: superLib: { inherit (prevStage.llvmPackages) compiler-rt libcxx; }
2024-06-30 08:16:52 +00:00
);
in
{
2024-05-02 00:46:19 +00:00
inherit tools libraries;
inherit (prevStage.llvmPackages) release_version;
2024-06-30 08:16:52 +00:00
}
// tools
2024-05-02 00:46:19 +00:00
// libraries
2024-06-30 08:16:52 +00:00
);
2024-05-02 00:46:19 +00:00
# Dont 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.
2024-06-30 08:16:52 +00:00
stdenv =
let
2024-05-02 00:46:19 +00:00
stdenvNoCF = super.stdenv.override { extraBuildInputs = [ ]; };
2024-06-30 08:16:52 +00:00
in
2024-05-02 00:46:19 +00:00
self.overrideCC stdenvNoCF (
self.llvmPackages.clangNoCompilerRtWithLibc.override { inherit (self.llvmPackages) libcxx; }
2024-06-30 08:16:52 +00:00
);
};
2024-05-02 00:46:19 +00:00
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
prevStage.updateAutotoolsGnuConfigScriptsHook
prevStage.gnu-config
2024-06-30 08:16:52 +00:00
];
2024-05-02 00:46:19 +00:00
extraPreHook = ''
stripDebugFlags="-S" # llvm-strip does not support "-p" for Mach-O
'';
}
)
# This stage rebuilds CF, compiler-rt, and the sdkRoot derivation.
#
# CF requires:
# - aarch64-darwin: libobjc (due to being apple_sdk.frameworks.CoreFoundation instead of swift-corefoundation)
# - x86_64-darwin: libiconv libxml2 icu zlib
(
prevStage:
# previous stage2-Libsystem stdenv:
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage;
[
autoconf
automake
binutils-unwrapped
bison
brotli
cmake
cmakeMinimal
coreutils
cpio
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
]
);
assert lib.all isBuiltByNixpkgsCompiler (with prevStage; [ bash ]);
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage;
[
libffi
libiconv
libxml2
ncurses
zlib
zstd
]
);
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.darwin;
[
binutils-unwrapped
cctools
locale
libtapi
print-reexports
rewrite-tbd
sigtool
]
);
assert
(!useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ configd ]);
assert
(!useAppleSDKLibs) -> lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [ Libsystem ]);
assert (!useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
2024-06-30 08:16:52 +00:00
assert
2024-05-02 00:46:19 +00:00
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 ]);
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
2024-06-30 08:16:52 +00:00
autoconf
2024-05-02 00:46:19 +00:00
automake
bash
2024-06-30 08:16:52 +00:00
bison
brotli
cmake
2024-05-02 00:46:19 +00:00
cmakeMinimal
coreutils
cpio
cyrus_sasl
db
2024-06-30 08:16:52 +00:00
ed
expat
flex
gettext
gmp
gnugrep
groff
2024-05-02 00:46:19 +00:00
libedit
2024-06-30 08:16:52 +00:00
libidn2
libkrb5
2024-05-02 00:46:19 +00:00
libssh2
2024-06-30 08:16:52 +00:00
libtool
2024-05-02 00:46:19 +00:00
libunistring
m4
ncurses
2024-06-30 08:16:52 +00:00
nghttp2
ninja
openbsm
2024-05-02 00:46:19 +00:00
openldap
openpam
2024-06-30 08:16:52 +00:00
openssh
openssl
2024-05-02 00:46:19 +00:00
patchutils
2024-06-30 08:16:52 +00:00
pbzx
perl
2024-05-02 00:46:19 +00:00
pkg-config
2024-06-30 08:16:52 +00:00
python3
2024-05-02 00:46:19 +00:00
python3Minimal
2024-06-30 08:16:52 +00:00
scons
serf
sqlite
2024-05-02 00:46:19 +00:00
subversion
2024-06-30 08:16:52 +00:00
sysctl
texinfo
2024-05-02 00:46:19 +00:00
unzip
2024-06-30 08:16:52 +00:00
which
xz
zstd
;
2024-05-02 00:46:19 +00:00
# Avoid pulling in a full python and its extra dependencies for the llvm/clang builds.
libxml2 = super.libxml2.override { pythonSupport = false; };
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
darwin = super.darwin.overrideScope (
selfDarwin: superDarwin: {
inherit (prevStage.darwin)
Libsystem
configd
darwin-stubs
2024-06-30 08:16:52 +00:00
launchd
locale
2024-05-02 00:46:19 +00:00
print-reexports
rewrite-tbd
signingUtils
sigtool
2024-06-30 08:16:52 +00:00
;
2024-05-02 00:46:19 +00:00
# Rewrap binutils so it uses the rebuilt Libsystem.
binutils =
superDarwin.binutils.override {
inherit (prevStage) expand-response-params;
libc = selfDarwin.Libsystem;
2024-06-30 08:16:52 +00:00
}
// {
2024-05-02 00:46:19 +00:00
passthru = {
inherit (prevStage.bintools.passthru) isFromBootstrapFiles;
};
2024-06-30 08:16:52 +00:00
};
2024-05-02 00:46:19 +00:00
# Avoid building unnecessary Python dependencies due to building LLVM manpages.
cctools-llvm = superDarwin.cctools-llvm.override { enableManpages = false; };
}
);
llvmPackages =
super.llvmPackages
2024-06-30 08:16:52 +00:00
// (
let
2024-05-02 00:46:19 +00:00
tools = super.llvmPackages.tools.extend (
_: _: {
inherit (prevStage.llvmPackages)
clang-unwrapped
clangNoCompilerRtWithLibc
libclang
2024-06-30 08:16:52 +00:00
libllvm
llvm
;
2024-05-02 00:46:19 +00:00
clang = prevStage.stdenv.cc;
2024-06-30 08:16:52 +00:00
}
);
2024-05-02 00:46:19 +00:00
libraries = super.llvmPackages.libraries.extend (
selfLib: superLib: {
inherit (prevStage.llvmPackages) libcxx;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
# 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 (self.llvmPackages) libllvm;
stdenv = self.stdenv.override { extraBuildInputs = [ self.darwin.CF ]; };
2024-06-30 08:16:52 +00:00
});
}
);
in
{
2024-05-02 00:46:19 +00:00
inherit tools libraries;
inherit (prevStage.llvmPackages) release_version;
2024-06-30 08:16:52 +00:00
}
// tools
2024-05-02 00:46:19 +00:00
// libraries
2024-06-30 08:16:52 +00:00
);
2024-05-02 00:46:19 +00:00
# Dont 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 dont use a stdenv with
# compiler-rt because it needs to be built in this stage.
2024-06-30 08:16:52 +00:00
stdenv =
let
2024-05-02 00:46:19 +00:00
stdenvNoCF = super.stdenv.override { extraBuildInputs = [ ]; };
2024-06-30 08:16:52 +00:00
in
2024-05-02 00:46:19 +00:00
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;
};
}
);
};
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 libffi libiconv libxml2 ncurses zlib
(
prevStage:
# previous stage2-CF stdenv:
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage;
[
autoconf
automake
bison
brotli
cmake
cmakeMinimal
coreutils
cpio
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
2024-06-30 08:16:52 +00:00
pbzx
2024-05-02 00:46:19 +00:00
perl
pkg-config.pkg-config
2024-06-30 08:16:52 +00:00
python3
2024-05-02 00:46:19 +00:00
python3Minimal
2024-06-30 08:16:52 +00:00
scons
2024-05-02 00:46:19 +00:00
serf
sqlite
subversion
sysctl.provider
texinfo
unzip
which
2024-06-30 08:16:52 +00:00
xz
2024-05-02 00:46:19 +00:00
zstd
]
);
assert lib.all isBuiltByNixpkgsCompiler (
with prevStage;
[
bash
binutils-unwrapped
2024-06-30 08:16:52 +00:00
icu
2024-05-02 00:46:19 +00:00
libffi
libiconv
libxml2
2024-06-30 08:16:52 +00:00
zlib
2024-05-02 00:46:19 +00:00
]
);
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
locale
2024-05-02 00:46:19 +00:00
print-reexports
rewrite-tbd
sigtool
2024-06-30 08:16:52 +00:00
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByNixpkgsCompiler (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
binutils-unwrapped
cctools
2024-06-30 08:16:52 +00:00
libtapi
]
);
2024-05-02 00:46:19 +00:00
2024-06-30 08:16:52 +00:00
assert
2024-05-02 00:46:19 +00:00
(!useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ configd ]);
2024-06-30 08:16:52 +00:00
assert
2024-05-02 00:46:19 +00:00
(!useAppleSDKLibs) -> lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [ Libsystem ]);
assert (!useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
2024-06-30 08:16:52 +00:00
assert
2024-05-02 00:46:19 +00:00
useAppleSDKLibs
-> lib.all isFromNixpkgs (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
CF
2024-05-02 00:46:19 +00:00
Libsystem
2024-06-30 08:16:52 +00:00
libobjc
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isFromNixpkgs (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
dyld
2024-05-02 00:46:19 +00:00
launchd
libclosure
libdispatch
2024-06-30 08:16:52 +00:00
xnu
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.llvmPackages;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
clang-unwrapped
2024-06-30 08:16:52 +00:00
libclang
libllvm
llvm
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByNixpkgsCompiler (with prevStage.llvmPackages; [ libcxx ]);
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
autoconf
automake
2024-06-30 08:16:52 +00:00
bash
2024-05-02 00:46:19 +00:00
binutils
binutils-unwrapped
2024-06-30 08:16:52 +00:00
bison
brotli
2024-05-02 00:46:19 +00:00
cmake
cmakeMinimal
coreutils
cpio
cyrus_sasl
2024-06-30 08:16:52 +00:00
db
2024-05-02 00:46:19 +00:00
ed
2024-06-30 08:16:52 +00:00
expat
flex
2024-05-02 00:46:19 +00:00
gettext
2024-06-30 08:16:52 +00:00
gmp
gnugrep
groff
libedit
libidn2
libkrb5
2024-05-02 00:46:19 +00:00
libssh2
libtool
libunistring
m4
2024-06-30 08:16:52 +00:00
nghttp2
ninja
2024-05-02 00:46:19 +00:00
openbsm
openldap
2024-06-30 08:16:52 +00:00
openpam
2024-05-02 00:46:19 +00:00
openssh
2024-06-30 08:16:52 +00:00
openssl
2024-05-02 00:46:19 +00:00
patchutils
2024-06-30 08:16:52 +00:00
pbzx
perl
2024-05-02 00:46:19 +00:00
pkg-config
2024-06-30 08:16:52 +00:00
python3
2024-05-02 00:46:19 +00:00
python3Minimal
scons
sed
2024-06-30 08:16:52 +00:00
serf
2024-05-02 00:46:19 +00:00
sharutils
sqlite
subversion
sysctl
texinfo
2024-06-30 08:16:52 +00:00
unzip
which
xz
2024-05-02 00:46:19 +00:00
zstd
# CF dependencies - dont rebuild them.
2024-06-30 08:16:52 +00:00
icu
libiconv
libxml2
zlib
;
2024-05-02 00:46:19 +00:00
# Disable tests because they use dejagnu, which fails to run.
libffi = super.libffi.override { doCheck = false; };
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
darwin = super.darwin.overrideScope (
selfDarwin: superDarwin: {
inherit (prevStage.darwin)
2024-06-30 08:16:52 +00:00
CF
2024-05-02 00:46:19 +00:00
Libsystem
binutils
binutils-unwrapped
2024-06-30 08:16:52 +00:00
cctools
2024-05-02 00:46:19 +00:00
cctools-llvm
cctools-port
2024-06-30 08:16:52 +00:00
configd
2024-05-02 00:46:19 +00:00
darwin-stubs
2024-06-30 08:16:52 +00:00
dyld
launchd
2024-05-02 00:46:19 +00:00
libclosure
libdispatch
2024-06-30 08:16:52 +00:00
libobjc
libtapi
locale
objc4
2024-05-02 00:46:19 +00:00
postLinkSignHook
print-reexports
rewrite-tbd
signingUtils
2024-06-30 08:16:52 +00:00
sigtool
;
2024-05-02 00:46:19 +00:00
apple_sdk = superDarwin.apple_sdk // {
inherit (prevStage.darwin.apple_sdk) sdkRoot;
};
2024-06-30 08:16:52 +00:00
}
);
2024-05-02 00:46:19 +00:00
llvmPackages =
super.llvmPackages
2024-06-30 08:16:52 +00:00
// (
let
2024-05-02 00:46:19 +00:00
libraries = super.llvmPackages.libraries.extend (
_: _: { inherit (prevStage.llvmPackages) compiler-rt libcxx; }
2024-06-30 08:16:52 +00:00
);
in
2024-05-02 00:46:19 +00:00
{ inherit libraries; } // libraries
2024-06-30 08:16:52 +00:00
);
};
2024-05-02 00:46:19 +00:00
extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
prevStage.updateAutotoolsGnuConfigScriptsHook
prevStage.gnu-config
2024-06-30 08:16:52 +00:00
];
2024-05-02 00:46:19 +00:00
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 isnt required by it, CF, or Libsystem.
(
prevStage:
# previous stage3 stdenv:
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage;
[
autoconf
automake
bison
brotli
cmake
cmakeMinimal
coreutils
cpio
cyrus_sasl
db
ed
expat
flex
gettext
gmp
gnugrep
groff
libedit
libidn2
libkrb5
libssh2
libtool
libunistring
2024-06-30 08:16:52 +00:00
m4
nghttp2
2024-05-02 00:46:19 +00:00
ninja
openbsm
openldap
2024-06-30 08:16:52 +00:00
openpam
2024-05-02 00:46:19 +00:00
openssh
openssl
patchutils
pbzx
perl
pkg-config.pkg-config
python3
python3Minimal
scons
serf
sqlite
subversion
sysctl.provider
texinfo
unzip
which
2024-06-30 08:16:52 +00:00
xz
zstd
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByNixpkgsCompiler (
with prevStage;
2024-06-30 08:16:52 +00:00
[
bash
2024-05-02 00:46:19 +00:00
binutils-unwrapped
icu
2024-06-30 08:16:52 +00:00
libffi
libiconv
libxml2
zlib
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
locale
2024-05-02 00:46:19 +00:00
print-reexports
rewrite-tbd
2024-06-30 08:16:52 +00:00
sigtool
]
2024-05-02 00:46:19 +00:00
);
assert lib.all isBuiltByNixpkgsCompiler (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
binutils-unwrapped
cctools
libtapi
2024-06-30 08:16:52 +00:00
]
);
2024-05-02 00:46:19 +00:00
assert
(!useAppleSDKLibs) -> lib.all isBuiltByBootstrapFilesCompiler (with prevStage.darwin; [ configd ]);
assert
(!useAppleSDKLibs) -> lib.all isBuiltByNixpkgsCompiler (with prevStage.darwin; [ Libsystem ]);
assert (!useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
assert
useAppleSDKLibs
-> lib.all isFromNixpkgs (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
CF
Libsystem
libobjc
2024-06-30 08:16:52 +00:00
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isFromNixpkgs (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
dyld
launchd
2024-05-02 00:46:19 +00:00
libclosure
libdispatch
2024-06-30 08:16:52 +00:00
xnu
]
2024-05-02 00:46:19 +00:00
);
assert lib.all isBuiltByNixpkgsCompiler (
with prevStage.llvmPackages;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
clang-unwrapped
2024-06-30 08:16:52 +00:00
libclang
libllvm
llvm
2024-05-02 00:46:19 +00:00
compiler-rt
2024-06-30 08:16:52 +00:00
libcxx
]
2024-05-02 00:46:19 +00:00
);
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
2024-06-30 08:16:52 +00:00
autoconf
automake
bash
2024-05-02 00:46:19 +00:00
bison
cmake
cmakeMinimal
cyrus_sasl
2024-06-30 08:16:52 +00:00
db
2024-05-02 00:46:19 +00:00
expat
2024-06-30 08:16:52 +00:00
flex
groff
libedit
libtool
m4
ninja
2024-05-02 00:46:19 +00:00
openldap
2024-06-30 08:16:52 +00:00
openssh
2024-05-02 00:46:19 +00:00
patchutils
2024-06-30 08:16:52 +00:00
perl
2024-05-02 00:46:19 +00:00
pkg-config
python3
scons
serf
sqlite
subversion
2024-06-30 08:16:52 +00:00
sysctl
2024-05-02 00:46:19 +00:00
texinfo
2024-06-30 08:16:52 +00:00
unzip
which
2024-05-02 00:46:19 +00:00
# CF dependencies - dont rebuild them.
2024-06-30 08:16:52 +00:00
icu
2024-05-02 00:46:19 +00:00
# LLVM dependencies - dont rebuild them.
2024-06-30 08:16:52 +00:00
libffi
libiconv
libxml2
ncurses
zlib
;
2024-05-02 00:46:19 +00:00
darwin = super.darwin.overrideScope (
selfDarwin: superDarwin: {
inherit (prevStage.darwin)
2024-06-30 08:16:52 +00:00
dyld
CF
2024-05-02 00:46:19 +00:00
Libsystem
darwin-stubs
# CF dependencies - dont rebuild them.
libobjc
2024-06-30 08:16:52 +00:00
objc4
;
2024-05-02 00:46:19 +00:00
apple_sdk = superDarwin.apple_sdk // {
inherit (prevStage.darwin.apple_sdk) sdkRoot;
2024-06-30 08:16:52 +00:00
};
2024-05-02 00:46:19 +00:00
signingUtils = superDarwin.signingUtils.override { inherit (selfDarwin) sigtool; };
binutils = superDarwin.binutils.override {
inherit (prevStage) expand-response-params;
bintools = selfDarwin.binutils-unwrapped;
libc = selfDarwin.Libsystem;
};
# cctools needs to build the LLVM man pages, which requires sphinx. Sphinx
# has hatch-vcs as a transitive dependency, which pulls in git (and curl).
# Disabling the tests for hatch-vcs allows the stdenv bootstrap to avoid having
# any dependency on curl other than the one provided in the bootstrap tools.
cctools-llvm = superDarwin.cctools-llvm.override (old: {
llvmPackages =
let
tools = old.llvmPackages.tools.extend (
_: superTools: {
llvm-manpages = superTools.llvm-manpages.override {
python3Packages = prevStage.python3Packages.overrideScope (
_: superPython: {
hatch-vcs = (
superPython.hatch-vcs.override {
git = null;
pytestCheckHook = null;
2024-06-30 08:16:52 +00:00
}
);
}
);
};
}
);
2024-05-02 00:46:19 +00:00
inherit (old.llvmPackages) libraries release_version;
in
{ inherit tools libraries release_version; } // tools // libraries;
});
2024-06-30 08:16:52 +00:00
}
2024-05-02 00:46:19 +00:00
);
llvmPackages =
super.llvmPackages
2024-06-30 08:16:52 +00:00
// (
let
2024-05-02 00:46:19 +00:00
tools = super.llvmPackages.tools.extend (
2024-06-30 08:16:52 +00:00
_: _: {
2024-05-02 00:46:19 +00:00
inherit (prevStage.llvmPackages)
clang-unwrapped
libclang
2024-06-30 08:16:52 +00:00
libllvm
llvm
;
2024-05-02 00:46:19 +00:00
libcxxClang = lib.makeOverridable (import ../../build-support/cc-wrapper) {
nativeTools = false;
nativeLibc = false;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
inherit (prevStage) expand-response-params;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
extraPackages = [ self.llvmPackages.compiler-rt ];
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
extraBuildCommands =
2024-06-30 08:16:52 +00:00
let
2024-05-02 00:46:19 +00:00
inherit (self.llvmPackages) clang-unwrapped compiler-rt release_version;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
# Clang 16+ uses only the major version in resource-root, but older versions use the complete one.
clangResourceRootIncludePath =
clangLib: clangRelease:
2024-06-30 08:16:52 +00:00
let
2024-05-02 00:46:19 +00:00
clangVersion =
if lib.versionAtLeast clangRelease "16" then lib.versions.major clangRelease else clangRelease;
2024-06-30 08:16:52 +00:00
in
2024-05-02 00:46:19 +00:00
"${clangLib}/lib/clang/${clangVersion}/include";
2024-06-30 08:16:52 +00:00
in
''
2024-05-02 00:46:19 +00:00
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
2024-06-30 08:16:52 +00:00
'';
2024-05-02 00:46:19 +00:00
cc = self.llvmPackages.clang-unwrapped;
bintools = self.darwin.binutils;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
isClang = true;
libc = self.darwin.Libsystem;
inherit (self.llvmPackages) libcxx;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
inherit lib;
inherit (self)
stdenvNoCC
coreutils
gnugrep
runtimeShell
2024-06-30 08:16:52 +00:00
;
2024-05-02 00:46:19 +00:00
};
}
);
libraries = super.llvmPackages.libraries.extend (
_: _: { inherit (prevStage.llvmPackages) compiler-rt libcxx; }
);
in
{ inherit tools libraries; } // tools // libraries
);
};
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;
[
bash
binutils-unwrapped
brotli
bzip2
cpio
diffutils
ed
file
findutils
gawk
gettext
gmp
gnugrep
gnumake
gnused
gnutar
gzip
icu
libffi
libiconv
2024-06-30 08:16:52 +00:00
libidn2
libkrb5
libssh2
2024-05-02 00:46:19 +00:00
libunistring
libxml2
2024-06-30 08:16:52 +00:00
libyaml
2024-05-02 00:46:19 +00:00
ncurses
2024-06-30 08:16:52 +00:00
nghttp2
2024-05-02 00:46:19 +00:00
openbsm
openpam
2024-06-30 08:16:52 +00:00
openssl
2024-05-02 00:46:19 +00:00
patch
2024-06-30 08:16:52 +00:00
pbzx
pcre
2024-05-02 00:46:19 +00:00
python3Minimal
xar
xz
zlib
2024-06-30 08:16:52 +00:00
zstd
2024-05-02 00:46:19 +00:00
]
2024-06-30 08:16:52 +00:00
);
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByNixpkgsCompiler (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
binutils-unwrapped
cctools
2024-06-30 08:16:52 +00:00
libtapi
locale
2024-05-02 00:46:19 +00:00
print-reexports
rewrite-tbd
sigtool
]
2024-06-30 08:16:52 +00:00
);
assert
2024-05-02 00:46:19 +00:00
(!useAppleSDKLibs)
-> lib.all isBuiltByNixpkgsCompiler (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
Libsystem
2024-06-30 08:16:52 +00:00
configd
]
);
2024-05-02 00:46:19 +00:00
assert (!useAppleSDKLibs) -> lib.all isFromNixpkgs (with prevStage.darwin; [ CF ]);
2024-06-30 08:16:52 +00:00
assert
2024-05-02 00:46:19 +00:00
useAppleSDKLibs
-> lib.all isFromNixpkgs (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
CF
2024-05-02 00:46:19 +00:00
Libsystem
2024-06-30 08:16:52 +00:00
libobjc
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isFromNixpkgs (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
dyld
launchd
2024-05-02 00:46:19 +00:00
libclosure
libdispatch
2024-06-30 08:16:52 +00:00
xnu
]
);
2024-05-02 00:46:19 +00:00
assert lib.all isBuiltByNixpkgsCompiler (
with prevStage.llvmPackages;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
clang-unwrapped
libclang
2024-06-30 08:16:52 +00:00
libllvm
llvm
2024-05-02 00:46:19 +00:00
compiler-rt
libcxx
]
);
assert lib.all isBuiltByBootstrapFilesCompiler (
with prevStage;
2024-06-30 08:16:52 +00:00
[
2024-05-02 00:46:19 +00:00
autoconf
2024-06-30 08:16:52 +00:00
automake
bison
cmake
2024-05-02 00:46:19 +00:00
cmakeMinimal
cyrus_sasl
2024-06-30 08:16:52 +00:00
db
2024-05-02 00:46:19 +00:00
expat
2024-06-30 08:16:52 +00:00
flex
groff
libedit
libtool
m4
ninja
openldap
openssh
2024-05-02 00:46:19 +00:00
patchutils
2024-06-30 08:16:52 +00:00
perl
2024-05-02 00:46:19 +00:00
pkg-config.pkg-config
python3
2024-06-30 08:16:52 +00:00
scons
serf
sqlite
2024-05-02 00:46:19 +00:00
subversion
sysctl.provider
2024-06-30 08:16:52 +00:00
texinfo
unzip
which
]
);
2024-05-02 00:46:19 +00:00
assert prevStage.darwin.cctools == prevStage.darwin.cctools-llvm;
2024-06-30 08:16:52 +00:00
let
2024-05-02 00:46:19 +00:00
doSign = localSystem.isAarch64;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
cc = prevStage.llvmPackages.clang;
2024-06-30 08:16:52 +00:00
in
{
2024-05-02 00:46:19 +00:00
inherit config overlays;
stdenv = import ../generic {
name = "stdenv-darwin";
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
buildPlatform = localSystem;
hostPlatform = localSystem;
targetPlatform = localSystem;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
inherit config;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
preHook = ''
${commonPreHook}
stripDebugFlags="-S" # llvm-strip does not support "-p" for Mach-O
export PATH_LOCALE=${prevStage.darwin.locale}/share/locale
2024-06-30 08:16:52 +00:00
'';
2024-05-02 00:46:19 +00:00
initialPath = ((import ../generic/common-path.nix) { pkgs = prevStage; });
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
extraNativeBuildInputs =
lib.optionals localSystem.isAarch64 [ prevStage.updateAutotoolsGnuConfigScriptsHook ]
++ [ prevStage.darwin.apple_sdk.sdkRoot ];
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
extraBuildInputs = [ prevStage.darwin.CF ];
inherit cc;
shell = cc.shell;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
inherit (prevStage.stdenv) fetchurlBoot;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
extraAttrs =
2024-06-30 08:16:52 +00:00
{
2024-05-02 00:46:19 +00:00
inherit bootstrapTools;
libc = prevStage.darwin.Libsystem;
shellPackage = prevStage.bash;
2024-06-30 08:16:52 +00:00
}
2024-05-02 00:46:19 +00: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.
inherit (prevStage.darwin) objc4;
};
disallowedRequisites = [ bootstrapTools.out ];
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
allowedRequisites =
(
with prevStage;
2024-06-30 08:16:52 +00:00
[
bash
2024-05-02 00:46:19 +00:00
binutils.bintools
binutils.bintools.lib
2024-06-30 08:16:52 +00:00
bzip2.bin
bzip2.out
2024-05-02 00:46:19 +00:00
cc.expand-response-params
coreutils
darwin.binutils
darwin.binutils.bintools
diffutils
ed
2024-06-30 08:16:52 +00:00
file
2024-05-02 00:46:19 +00:00
findutils
2024-06-30 08:16:52 +00:00
gawk
2024-05-02 00:46:19 +00:00
gettext
gmp.out
2024-06-30 08:16:52 +00:00
gnugrep
2024-05-02 00:46:19 +00:00
gnugrep.pcre2.out
2024-06-30 08:16:52 +00:00
gnumake
2024-05-02 00:46:19 +00:00
gnused
2024-06-30 08:16:52 +00:00
gnutar
gzip
2024-05-02 00:46:19 +00:00
icu.out
libffi.out
libiconv
libunistring.out
libxml2.out
ncurses.dev
ncurses.man
2024-06-30 08:16:52 +00:00
ncurses.out
2024-05-02 00:46:19 +00:00
openbsm
2024-06-30 08:16:52 +00:00
openpam
patch
xz.bin
xz.out
zlib.dev
zlib.out
]
2024-05-02 00:46:19 +00:00
++ lib.optionals doSign [ openssl.out ]
)
++ lib.optionals localSystem.isAarch64 [
prevStage.updateAutotoolsGnuConfigScriptsHook
prevStage.gnu-config
2024-06-30 08:16:52 +00:00
]
2024-05-02 00:46:19 +00:00
++ (with prevStage.llvmPackages; [
bintools-unwrapped
clang-unwrapped
clang-unwrapped.lib
compiler-rt
compiler-rt.dev
libcxx
libcxx.dev
2024-06-30 08:16:52 +00:00
lld
llvm
2024-05-02 00:46:19 +00:00
llvm.lib
])
++ (
with prevStage.darwin;
2024-06-30 08:16:52 +00:00
[
CF
2024-05-02 00:46:19 +00:00
Libsystem
cctools-llvm
cctools-port
2024-06-30 08:16:52 +00:00
dyld
libtapi
locale
2024-05-02 00:46:19 +00:00
apple_sdk.sdkRoot
2024-06-30 08:16:52 +00:00
]
2024-05-02 00:46:19 +00:00
++ lib.optional useAppleSDKLibs [ objc4 ]
++ lib.optionals doSign [
postLinkSignHook
2024-06-30 08:16:52 +00:00
sigtool
2024-05-02 00:46:19 +00:00
signingUtils
2024-06-30 08:16:52 +00:00
]
2024-05-02 00:46:19 +00:00
);
__stdenvImpureHostDeps = commonImpureHostDeps;
__extraImpureHostDeps = commonImpureHostDeps;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
overrides =
self: super:
2024-06-30 08:16:52 +00:00
{
2024-05-02 00:46:19 +00:00
inherit (prevStage)
2024-06-30 08:16:52 +00:00
bash
binutils
brotli
bzip2
2024-05-02 00:46:19 +00:00
coreutils
2024-06-30 08:16:52 +00:00
cpio
2024-05-02 00:46:19 +00:00
diffutils
2024-06-30 08:16:52 +00:00
ed
file
2024-05-02 00:46:19 +00:00
findutils
2024-06-30 08:16:52 +00:00
gawk
gettext
gmp
gnugrep
gnumake
gnused
gnutar
gzip
icu
libffi
libiconv
libidn2
libssh2
2024-05-02 00:46:19 +00:00
libunistring
2024-06-30 08:16:52 +00:00
libxml2
libyaml
ncurses
nghttp2
openbsm
openpam
openssl
patch
pbzx
pcre
2024-05-02 00:46:19 +00:00
python3Minimal
2024-06-30 08:16:52 +00:00
xar
xz
zlib
zstd
;
2024-05-02 00:46:19 +00:00
darwin = super.darwin.overrideScope (
_: superDarwin:
2024-06-30 08:16:52 +00:00
{
2024-05-02 00:46:19 +00:00
inherit (prevStage.darwin)
2024-06-30 08:16:52 +00:00
CF
ICU
2024-05-02 00:46:19 +00:00
Libsystem
darwin-stubs
2024-06-30 08:16:52 +00:00
dyld
locale
libobjc
libtapi
2024-05-02 00:46:19 +00:00
rewrite-tbd
2024-06-30 08:16:52 +00:00
xnu
;
2024-05-02 00:46:19 +00:00
apple_sdk = superDarwin.apple_sdk // {
inherit (prevStage.darwin.apple_sdk) sdkRoot;
2024-06-30 08:16:52 +00:00
};
}
2024-05-02 00:46:19 +00:00
// lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
inherit (prevStage.darwin)
2024-06-30 08:16:52 +00:00
binutils
2024-05-02 00:46:19 +00:00
binutils-unwrapped
cctools-llvm
cctools-port
2024-06-30 08:16:52 +00:00
;
}
);
}
2024-05-02 00:46:19 +00:00
// lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
inherit (prevStage.llvmPackages) clang llvm;
2024-06-30 08:16:52 +00:00
2024-05-02 00:46:19 +00:00
# Need to get rid of these when cross-compiling.
llvmPackages =
super.llvmPackages
2024-06-30 08:16:52 +00:00
// (
let
2024-05-02 00:46:19 +00:00
tools = super.llvmPackages.tools.extend (
2024-06-30 08:16:52 +00:00
_: _: {
2024-05-02 00:46:19 +00:00
inherit (prevStage.llvmPackages)
2024-06-30 08:16:52 +00:00
clang
2024-05-02 00:46:19 +00:00
clang-unwrapped
2024-06-30 08:16:52 +00:00
libclang
libllvm
llvm
;
}
);
2024-05-02 00:46:19 +00:00
libraries = super.llvmPackages.libraries.extend (
_: _: { inherit (prevStage.llvmPackages) compiler-rt libcxx; }
2024-06-30 08:16:52 +00:00
);
in
2024-05-02 00:46:19 +00:00
{ inherit tools libraries; } // tools // libraries
2024-06-30 08:16:52 +00:00
);
2024-05-02 00:46:19 +00:00
inherit (prevStage) binutils binutils-unwrapped;
2024-06-30 08:16:52 +00:00
};
2024-05-02 00:46:19 +00:00
};
}
)
# 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.compiler-rt;
{
inherit (prevStage) config overlays stdenv;
}
)
]