at 23.05-pre 4.4 kB view raw
1{ lib }: 2with import ./parse.nix { inherit lib; }; 3with lib.attrsets; 4with lib.lists; 5 6let abis_ = abis; in 7let abis = lib.mapAttrs (_: abi: builtins.removeAttrs abi [ "assertions" ]) abis_; in 8 9rec { 10 patterns = rec { 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. 19 isAbiElfv2 = [ 20 { abi = { abi = "elfv2"; }; } 21 { abi = { name = "musl"; }; cpu = { family = "power"; bits = 64; }; } 22 ]; 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; }; 48 49 is32bit = { cpu = { bits = 32; }; }; 50 is64bit = { cpu = { bits = 64; }; }; 51 isBigEndian = { cpu = { significantByte = significantBytes.bigEndian; }; }; 52 isLittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; }; 53 54 isBSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; }; 55 isDarwin = { kernel = { families = { inherit (kernelFamilies) darwin; }; }; }; 56 isUnix = [ isBSD isDarwin isLinux isSunOS isCygwin isRedox ]; 57 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; }; 73 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 ]; 78 79 isEfi = map (family: { cpu.family = family; }) 80 [ "x86" "arm" "aarch64" ]; 81 }; 82 83 matchAnyAttrs = patterns: 84 if builtins.isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns 85 else matchAttrs patterns; 86 87 predicates = mapAttrs (_: matchAnyAttrs) patterns; 88}