aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
authorRobert Hensing <roberth@users.noreply.github.com>2023-07-19 12:07:23 +0200
committerGitHub <noreply@github.com>2023-07-19 12:07:23 +0200
commiteca07b2a472b3b24ad7fd850b9b2448dd94e73bd (patch)
treef80c9fe81aa1e1f7790bbc0d5ed6ad2e83f2ca68 /src/libstore
parent0e3a7e34a056e8f3f5afde36c9410821bc09d488 (diff)
parent0779005f4945d373b81c933a6b7390c8bc7ad6cb (diff)
Merge pull request #8315 from fricklerhandwerk/doc-system
add information on the system type string
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/globals.hh56
1 files changed, 32 insertions, 24 deletions
diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh
index d4b8fb1f9..723d18d74 100644
--- a/src/libstore/globals.hh
+++ b/src/libstore/globals.hh
@@ -193,18 +193,24 @@ public:
Setting<std::string> thisSystem{
this, SYSTEM, "system",
R"(
- This option specifies the canonical Nix system name of the current
- installation, such as `i686-linux` or `x86_64-darwin`. Nix can only
- build derivations whose `system` attribute equals the value
- specified here. In general, it never makes sense to modify this
- value from its default, since you can use it to ‘lie’ about the
- platform you are building on (e.g., perform a Mac OS build on a
- Linux machine; the result would obviously be wrong). It only makes
- sense if the Nix binaries can run on multiple platforms, e.g.,
- ‘universal binaries’ that run on `x86_64-linux` and `i686-linux`.
-
- It defaults to the canonical Nix system name detected by `configure`
- at build time.
+ The system type of the current Nix installation.
+ Nix will only build a given [derivation](@docroot@/language/derivations.md) locally when its `system` attribute equals any of the values specified here or in [`extra-platforms`](#conf-extra-platforms).
+
+ The default value is set when Nix itself is compiled for the system it will run on.
+ The following system types are widely used, as [Nix is actively supported on these platforms](@docroot@/contributing/hacking.md#platforms):
+
+ - `x86_64-linux`
+ - `x86_64-darwin`
+ - `i686-linux`
+ - `aarch64-linux`
+ - `aarch64-darwin`
+ - `armv6l-linux`
+ - `armv7l-linux`
+
+ In general, you do not have to modify this setting.
+ While you can force Nix to run a Darwin-specific `builder` executable on a Linux machine, the result would obviously be wrong.
+
+ This value is available in the Nix language as [`builtins.currentSystem`](@docroot@/language/builtin-constants.md#builtins-currentSystem).
)"};
Setting<time_t> maxSilentTime{
@@ -670,18 +676,20 @@ public:
getDefaultExtraPlatforms(),
"extra-platforms",
R"(
- Platforms other than the native one which this machine is capable of
- building for. This can be useful for supporting additional
- architectures on compatible machines: i686-linux can be built on
- x86\_64-linux machines (and the default for this setting reflects
- this); armv7 is backwards-compatible with armv6 and armv5tel; some
- aarch64 machines can also natively run 32-bit ARM code; and
- qemu-user may be used to support non-native platforms (though this
- may be slow and buggy). Most values for this are not enabled by
- default because build systems will often misdetect the target
- platform and generate incompatible code, so you may wish to
- cross-check the results of using this option against proper
- natively-built versions of your derivations.
+ System types of executables that can be run on this machine.
+
+ Nix will only build a given [derivation](@docroot@/language/derivations.md) locally when its `system` attribute equals any of the values specified here or in the [`system` option](#conf-system).
+
+ Setting this can be useful to build derivations locally on compatible machines:
+ - `i686-linux` executables can be run on `x86_64-linux` machines (set by default)
+ - `x86_64-darwin` executables can be run on macOS `aarch64-darwin` with Rosetta 2 (set by default where applicable)
+ - `armv6` and `armv5tel` executables can be run on `armv7`
+ - some `aarch64` machines can also natively run 32-bit ARM code
+ - `qemu-user` may be used to support non-native platforms (though this
+ may be slow and buggy)
+
+ Build systems will usually detect the target platform to be the current physical system and therefore produce machine code incompatible with what may be intended in the derivation.
+ You should design your derivation's `builder` accordingly and cross-check the results when using this option against natively-built versions of your derivation.
)", {}, false};
Setting<StringSet> systemFeatures{