1{ lib, pkgs, ... }:
2let
3 nixpkgsFun = import ../../top-level;
4in
5lib.recurseIntoAttrs {
6 platformEquality =
7 let
8 configsLocal = [
9 # crossSystem is implicitly set to localSystem.
10 {
11 localSystem = {
12 system = "x86_64-linux";
13 };
14 }
15 {
16 localSystem = {
17 system = "aarch64-linux";
18 };
19 crossSystem = null;
20 }
21 # Both systems explicitly set to the same string.
22 {
23 localSystem = {
24 system = "x86_64-linux";
25 };
26 crossSystem = {
27 system = "x86_64-linux";
28 };
29 }
30 # Vendor and ABI inferred from system double.
31 {
32 localSystem = {
33 system = "aarch64-linux";
34 };
35 crossSystem = {
36 config = "aarch64-unknown-linux-gnu";
37 };
38 }
39 ];
40 configsCross = [
41 # GNU is inferred from double, but config explicitly requests musl.
42 {
43 localSystem = {
44 system = "aarch64-linux";
45 };
46 crossSystem = {
47 config = "aarch64-unknown-linux-musl";
48 };
49 }
50 # Cross-compile from AArch64 to x86-64.
51 {
52 localSystem = {
53 system = "aarch64-linux";
54 };
55 crossSystem = {
56 system = "x86_64-unknown-linux-gnu";
57 };
58 }
59 ];
60
61 pkgsLocal = map nixpkgsFun configsLocal;
62 pkgsCross = map nixpkgsFun configsCross;
63 in
64 assert lib.all (p: p.buildPlatform == p.hostPlatform) pkgsLocal;
65 assert lib.all (p: p.buildPlatform != p.hostPlatform) pkgsCross;
66 pkgs.emptyFile;
67}