27 lines
1.7 KiB
Markdown
27 lines
1.7 KiB
Markdown
|
# Darwin stdenv design goals
|
||
|
|
||
|
There are two more goals worth calling out explicitly:
|
||
|
|
||
|
1. The standard environment should build successfully with sandboxing enabled on Darwin. It is
|
||
|
fine if a package requires a `sandboxProfile` to build, but it should not be necessary to
|
||
|
disable the sandbox to build the stdenv successfully; and
|
||
|
2. The output should depend weakly on the bootstrap tools. Historically, Darwin required updating
|
||
|
the bootstrap tools prior to updating the version of LLVM used in the standard environment.
|
||
|
By not depending on a specific version, the LLVM used on Darwin can be updated simply by
|
||
|
bumping the definition of llvmPackages in `all-packages.nix`.
|
||
|
|
||
|
# Updating the stdenv
|
||
|
|
||
|
There are effectively two steps when updating the standard environment:
|
||
|
|
||
|
1. Update the definition of llvmPackages in `all-packages.nix` for Darwin to match the value of
|
||
|
llvmPackages.latest in `all-packages.nix`. Timing-wise, this done currently using the spring
|
||
|
release of LLVM and once llvmPackages.latest has been updated to match. If the LLVM project
|
||
|
has announced a release schedule of patch updates, wait until those are in nixpkgs. Otherwise,
|
||
|
the LLVM updates will have to go through staging instead of being merged into master; and
|
||
|
2. Fix the resulting breakage. Most things break due to additional warnings being turned into
|
||
|
errors or additional strictness applied by LLVM. Fixes may come in the form of disabling those
|
||
|
new warnings or by fixing the actual source (e.g., with a patch or update upstream). If the
|
||
|
fix is trivial (e.g., adding a missing int to an implicit declaration), it is better to fix
|
||
|
the problem instead of silencing the warning.
|