diff options
Diffstat (limited to 'lib/systems/parse.nix')
-rw-r--r-- | lib/systems/parse.nix | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix index 73b065689d0..7db09fc550e 100644 --- a/lib/systems/parse.nix +++ b/lib/systems/parse.nix @@ -209,8 +209,15 @@ rec { abis = setTypes types.openAbi { cygnus = {}; msvc = {}; - eabi = {}; - elf = {}; + + # Note: eabi is specific to ARM and PowerPC. + # On PowerPC, this corresponds to PPCEABI. + # On ARM, this corresponds to ARMEABI. + eabi = { float = "soft"; }; + eabihf = { float = "hard"; }; + + # Other architectures should use ELF in embedded situations. + elf = {}; androideabi = {}; android = { @@ -272,10 +279,8 @@ rec { "2" = # We only do 2-part hacks for things Nix already supports if elemAt l 1 == "cygwin" then { cpu = elemAt l 0; kernel = "windows"; abi = "cygnus"; } - else if (elemAt l 1 == "eabi") - then { cpu = elemAt l 0; vendor = "none"; kernel = "none"; abi = elemAt l 1; } - else if (elemAt l 1 == "elf") - then { cpu = elemAt l 0; vendor = "none"; kernel = "none"; abi = elemAt l 1; } + else if (elemAt l 1) == "elf" + then { cpu = elemAt l 0; vendor = "unknown"; kernel = "none"; abi = elemAt l 1; } else { cpu = elemAt l 0; kernel = elemAt l 1; }; "3" = # Awkwards hacks, beware! if elemAt l 1 == "apple" @@ -286,10 +291,8 @@ rec { then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "windows"; abi = "gnu"; } else if hasPrefix "netbsd" (elemAt l 2) then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; } - else if (elemAt l 2 == "eabi") - then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "none"; abi = elemAt l 2; } - else if (elemAt l 2 == "elf") - then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "none"; abi = elemAt l 2; } + else if (elem (elemAt l 2) ["eabi" "eabihf" "elf"]) + then { cpu = elemAt l 0; vendor = "unknown"; kernel = elemAt l 1; abi = elemAt l 2; } else throw "Target specification with 3 components is ambiguous"; "4" = { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; abi = elemAt l 3; }; }.${toString (length l)} |