From bf139d83eca3ef5442aa875458193d44ddf9dc6c Mon Sep 17 00:00:00 2001 From: yvt Date: Mon, 23 May 2022 09:52:36 +0900 Subject: [PATCH] systems: support cross-compiling for Renesas RX microcontrollers (#173858) --- lib/systems/doubles.nix | 3 ++- lib/systems/examples.nix | 5 +++++ lib/systems/inspect.nix | 1 + lib/systems/parse.nix | 1 + pkgs/build-support/bintools-wrapper/default.nix | 1 + pkgs/top-level/release-cross.nix | 1 + 6 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/systems/doubles.nix b/lib/systems/doubles.nix index 3cdebbc07c1f..90a6eb9f35c9 100644 --- a/lib/systems/doubles.nix +++ b/lib/systems/doubles.nix @@ -41,7 +41,7 @@ let # none "aarch64_be-none" "aarch64-none" "arm-none" "armv6l-none" "avr-none" "i686-none" "msp430-none" "or1k-none" "m68k-none" "powerpc-none" "powerpcle-none" - "riscv32-none" "riscv64-none" "s390-none" "s390x-none" "vc4-none" + "riscv32-none" "riscv64-none" "rx-none" "s390-none" "s390x-none" "vc4-none" "x86_64-none" # OpenBSD @@ -76,6 +76,7 @@ in { riscv = filterDoubles predicates.isRiscV; riscv32 = filterDoubles predicates.isRiscV32; riscv64 = filterDoubles predicates.isRiscV64; + rx = filterDoubles predicates.isRx; vc4 = filterDoubles predicates.isVc4; or1k = filterDoubles predicates.isOr1k; m68k = filterDoubles predicates.isM68k; diff --git a/lib/systems/examples.nix b/lib/systems/examples.nix index 997a7a8c273a..170db6fb9fa0 100644 --- a/lib/systems/examples.nix +++ b/lib/systems/examples.nix @@ -145,6 +145,11 @@ rec { libc = "newlib"; }; + rx-embedded = { + config = "rx-none-elf"; + libc = "newlib"; + }; + msp430 = { config = "msp430-elf"; libc = "newlib"; diff --git a/lib/systems/inspect.nix b/lib/systems/inspect.nix index 27c25deafec3..00cbe4f012cb 100644 --- a/lib/systems/inspect.nix +++ b/lib/systems/inspect.nix @@ -26,6 +26,7 @@ rec { isRiscV = { cpu = { family = "riscv"; }; }; isRiscV32 = { cpu = { family = "riscv"; bits = 32; }; }; isRiscV64 = { cpu = { family = "riscv"; bits = 64; }; }; + isRx = { cpu = { family = "rx"; }; }; isSparc = { cpu = { family = "sparc"; }; }; isWasm = { cpu = { family = "wasm"; }; }; isMsp430 = { cpu = { family = "msp430"; }; }; diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix index 3ceddbb599b9..bf436ec8db57 100644 --- a/lib/systems/parse.nix +++ b/lib/systems/parse.nix @@ -116,6 +116,7 @@ rec { alpha = { bits = 64; significantByte = littleEndian; family = "alpha"; }; + rx = { bits = 32; significantByte = littleEndian; family = "rx"; }; msp430 = { bits = 16; significantByte = littleEndian; family = "msp430"; }; avr = { bits = 8; family = "avr"; }; diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index c2d67169c9ca..6b15aa0ddaff 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -213,6 +213,7 @@ stdenv.mkDerivation { else if targetPlatform.isM68k then "m68k" else if targetPlatform.isS390 then "s390" else if targetPlatform.isRiscV then "lriscv" + else if targetPlatform.isRx then "rx" else throw "unknown emulation for platform: ${targetPlatform.config}"; in if targetPlatform.useLLVM or false then "" else targetPlatform.bfdEmulation or (fmt + sep + arch); diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index 13a49179bcbd..63a4a335dc9b 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -197,6 +197,7 @@ in x86_64-embedded = mapTestOnCross lib.systems.examples.x86_64-embedded embedded; riscv64-embedded = mapTestOnCross lib.systems.examples.riscv64-embedded embedded; riscv32-embedded = mapTestOnCross lib.systems.examples.riscv32-embedded embedded; + rx-embedded = mapTestOnCross lib.systems.examples.rx-embedded embedded; x86_64-netbsd = mapTestOnCross lib.systems.examples.x86_64-netbsd common;