diff --git a/lib/systems/architectures.nix b/lib/systems/architectures.nix index 94127fa9..5253e4bb 100644 --- a/lib/systems/architectures.nix +++ b/lib/systems/architectures.nix @@ -32,9 +32,24 @@ rec { armv5te = [ ]; armv6 = [ ]; armv7-a = [ ]; - armv8-a = [ ]; + armv8-a = [ "fp" "simd" ]; + "armv8.1-a" = [ "crc" "lse" "rdma" ] ++ features.armv8-a; + "armv8.2-a" = features."armv8.1-a"; + "armv8.3-a" = [ "pauth" ] ++ features."armv8.2-a"; + "armv8.4-a" = [ "flagm" "fp16fml" "dotprod" ] ++ features."armv8.3-a"; + "armv8.5-a" = [ "sb" "sbss" "predres" ] ++ features."armv8.4-a"; + "armv8.6-a" = [ "bf16" "i8mm" ] ++ features."armv8.5-a"; + "armv8.7-a" = [ "ls64" ] ++ features."armv8.6-a"; + "armv8.8-a" = [ "mops" ] ++ features."armv8.7-a"; + "armv9-a" = [ "sve" "sve2" ] ++ features."armv8.5-a"; + "armv9.1-a" = [ "bf16" "i8mm" ] ++ features."armv9-a"; + "armv9.2-a" = [ "ls64" ] ++ features."armv9.1-a"; + "armv9.3-a" = [ "mops" ] ++ features."armv9.2-a"; mips32 = [ ]; loongson2f = [ ]; + riscv64-g = [ "multiply" "atomic" "float" "double" "csr" "ifencei" ]; + riscv64-gc = [ "compressed" ] ++ features.riscv64-g; + riscv64-gcv = [ "vector" ] ++ features.riscv64-gc; }; # a superior CPU has all the features of an inferior and is able to build and test code for it @@ -85,8 +100,23 @@ rec { armv6 = [ ]; armv7-a = [ ]; armv8-a = [ ]; + "armv8.1-a" = [ "armv8-a" ] ++ inferiors.armv8-a; + "armv8.2-a" = [ "armv8.1-a" ] ++ inferiors."armv8.1-a"; + "armv8.3-a" = [ "armv8.2-a" ] ++ inferiors."armv8.2-a"; + "armv8.4-a" = [ "armv8.3-a" ] ++ inferiors."armv8.3-a"; + "armv8.5-a" = [ "armv8.4-a" ] ++ inferiors."armv8.4-a"; + "armv8.6-a" = [ "armv8.5-a" ] ++ inferiors."armv8.5-a"; + "armv8.7-a" = [ "armv8.6-a" ] ++ inferiors."armv8.6-a"; + "armv8.8-a" = [ "armv8.7-a" ] ++ inferiors."armv8.7-a"; + "armv9-a" = [ "armv8.5-a" ] ++ inferiors."armv8.5-a"; + "armv9.1-a" = [ "armv9-a" "armv8.6-a" ] ++ inferiors."armv9-a" ++ inferiors."armv8.6-a"; + "armv9.2-a" = [ "armv9.1-a" "armv8.7-a" ] ++ inferiors."armv9.1-a" ++ inferiors."armv8.7-a"; + "armv9.3-a" = [ "armv9.2-a" "armv8.8-a" ] ++ inferiors."armv9.2-a" ++ inferiors."armv8.8-a"; mips32 = [ ]; loongson2f = [ ]; + riscv64-g = [ ]; + riscv64-gc = [ "riscv64-g" ] ++ inferiors.riscv64-g; + riscv64-gcv = [ "riscv64-gc" ] ++ inferiors.riscv64-gc; }; predicates = let diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index e0ee3dae41f..49dbbe56594 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -122,6 +122,10 @@ let znver1 = versionAtLeast ccVersion "6.0"; znver2 = versionAtLeast ccVersion "9.0"; znver3 = versionAtLeast ccVersion "11.0"; + # ARM + # TODO: Fill in as needed + # RISCV + # TODO: Fill in as needed }.${arch} or true else if isClang then { # Intel @@ -132,6 +136,10 @@ let # AMD znver1 = versionAtLeast ccVersion "4.0"; znver2 = versionAtLeast ccVersion "9.0"; + # AMD + # TODO: Fill in as needed + # RISCV + # TODO: Fill in as needed }.${arch} or true else false; diff --git a/pkgs/top-level/impure.nix b/pkgs/top-level/impure.nix index 4d847e280f4..874b776c1e1 100644 --- a/pkgs/top-level/impure.nix +++ b/pkgs/top-level/impure.nix @@ -9,12 +9,15 @@ let # Return ‘x’ if it evaluates, or ‘def’ if it throws an exception. try = x: def: let res = builtins.tryEval x; in if res.success then res.value else def; + configuredLocalSystem = if builtins.pathExists "/etc/nix/local-system.json" then builtins.fromJSON (builtins.readFile "/etc/nix/local-system.json") else { system = builtins.currentSystem; }; + localSystemOverriden = args: args ? system && (args.system != configuredLocalSystem); + defaultLocalSystem = args: if localSystemOverriden args then { system = args.system; } else configuredLocalSystem; in { # We put legacy `system` into `localSystem`, if `localSystem` was not passed. # If neither is passed, assume we are building packages on the current # (build, in GNU Autotools parlance) platform. - localSystem ? { system = args.system or builtins.currentSystem; } + localSystem ? null # These are needed only because nix's `--arg` command-line logic doesn't work # with unnamed parameters allowed by ... @@ -78,6 +81,9 @@ in , ... } @ args: +let + localSystem' = if localSystem == null then defaultLocalSystem args else localSystem; +in # If `localSystem` was explicitly passed, legacy `system` should # not be passed, and vice-versa. @@ -85,5 +91,6 @@ assert args ? localSystem -> !(args ? system); assert args ? system -> !(args ? localSystem); import ./. (builtins.removeAttrs args [ "system" ] // { - inherit config overlays localSystem; + inherit config overlays; + localSystem = localSystem'; })