2 with import ./parse.nix { inherit lib; };
7 let abis = lib.mapAttrs (_: abi: builtins.removeAttrs abi [ "assertions" ]) abis_; in
11 isi686 = { cpu = cpuTypes.i686; };
12 isx86_32 = { cpu = { family = "x86"; bits = 32; }; };
13 isx86_64 = { cpu = { family = "x86"; bits = 64; }; };
14 isPower = { cpu = { family = "power"; }; };
15 isPower64 = { cpu = { family = "power"; bits = 64; }; };
16 # This ABI is the default in NixOS PowerPC64 BE, but not on mainline GCC,
17 # so it sometimes causes issues in certain packages that makes the wrong
18 # assumption on the used ABI.
20 { abi = { abi = "elfv2"; }; }
21 { abi = { name = "musl"; }; cpu = { family = "power"; bits = 64; }; }
23 isx86 = { cpu = { family = "x86"; }; };
24 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
25 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
26 isAarch = { cpu = { family = "arm"; }; };
27 isMicroBlaze = { cpu = { family = "microblaze"; }; };
28 isMips = { cpu = { family = "mips"; }; };
29 isMips32 = { cpu = { family = "mips"; bits = 32; }; };
30 isMips64 = { cpu = { family = "mips"; bits = 64; }; };
31 isMips64n32 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "n32"; }; };
32 isMips64n64 = { cpu = { family = "mips"; bits = 64; }; abi = { abi = "64"; }; };
33 isMmix = { cpu = { family = "mmix"; }; };
34 isRiscV = { cpu = { family = "riscv"; }; };
35 isRiscV32 = { cpu = { family = "riscv"; bits = 32; }; };
36 isRiscV64 = { cpu = { family = "riscv"; bits = 64; }; };
37 isRx = { cpu = { family = "rx"; }; };
38 isSparc = { cpu = { family = "sparc"; }; };
39 isWasm = { cpu = { family = "wasm"; }; };
40 isMsp430 = { cpu = { family = "msp430"; }; };
41 isVc4 = { cpu = { family = "vc4"; }; };
42 isAvr = { cpu = { family = "avr"; }; };
43 isAlpha = { cpu = { family = "alpha"; }; };
44 isOr1k = { cpu = { family = "or1k"; }; };
45 isM68k = { cpu = { family = "m68k"; }; };
46 isS390 = { cpu = { family = "s390"; }; };
47 isJavaScript = { cpu = cpuTypes.js; };
49 is32bit = { cpu = { bits = 32; }; };
50 is64bit = { cpu = { bits = 64; }; };
51 isBigEndian = { cpu = { significantByte = significantBytes.bigEndian; }; };
52 isLittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; };
54 isBSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; };
55 isDarwin = { kernel = { families = { inherit (kernelFamilies) darwin; }; }; };
56 isUnix = [ isBSD isDarwin isLinux isSunOS isCygwin isRedox ];
58 isMacOS = { kernel = kernels.macos; };
59 isiOS = { kernel = kernels.ios; };
60 isLinux = { kernel = kernels.linux; };
61 isSunOS = { kernel = kernels.solaris; };
62 isFreeBSD = { kernel = { name = "freebsd"; }; };
63 isNetBSD = { kernel = kernels.netbsd; };
64 isOpenBSD = { kernel = kernels.openbsd; };
65 isWindows = { kernel = kernels.windows; };
66 isCygwin = { kernel = kernels.windows; abi = abis.cygnus; };
67 isMinGW = { kernel = kernels.windows; abi = abis.gnu; };
68 isWasi = { kernel = kernels.wasi; };
69 isRedox = { kernel = kernels.redox; };
70 isGhcjs = { kernel = kernels.ghcjs; };
71 isGenode = { kernel = kernels.genode; };
72 isNone = { kernel = kernels.none; };
74 isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ];
75 isGnu = with abis; map (a: { abi = a; }) [ gnuabi64 gnu gnueabi gnueabihf gnuabielfv1 gnuabielfv2 ];
76 isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf muslabin32 muslabi64 ];
77 isUClibc = with abis; map (a: { abi = a; }) [ uclibc uclibceabi uclibceabihf ];
79 isEfi = map (family: { cpu.family = family; })
80 [ "x86" "arm" "aarch64" ];
83 matchAnyAttrs = patterns:
84 if builtins.isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns
85 else matchAttrs patterns;
87 predicates = mapAttrs (_: matchAnyAttrs) patterns;