From 1fe81a4bcd25dba9319bc1bb49b078872f28ffa6 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 10 May 2018 17:31:07 -0400 Subject: [PATCH] lib: Clean up float/fpu options ARM ABIs now have a float field. This is used as a fallback to lessen our use of `platform.gcc.float`. I didn't know what the MIPs convention is so I kept using `platform.gcc.float` in that case. --- lib/systems/examples.nix | 9 +----- lib/systems/parse.nix | 32 +++++++++++-------- lib/systems/platforms.nix | 6 +--- .../compilers/gcc/common/platform-flags.nix | 3 +- pkgs/development/libraries/glibc/common.nix | 4 ++- 5 files changed, 25 insertions(+), 29 deletions(-) diff --git a/lib/systems/examples.nix b/lib/systems/examples.nix index 80e320406bf..32c24bab7c9 100644 --- a/lib/systems/examples.nix +++ b/lib/systems/examples.nix @@ -11,21 +11,16 @@ rec { sheevaplug = rec { config = "armv5tel-unknown-linux-gnueabi"; - float = "soft"; platform = platforms.sheevaplug; }; raspberryPi = rec { config = "armv6l-unknown-linux-gnueabihf"; - float = "hard"; - fpu = "vfp"; platform = platforms.raspberrypi; }; armv7l-hf-multiplatform = rec { config = "armv7a-unknown-linux-gnueabihf"; - float = "hard"; - fpu = "vfpv3-d16"; platform = platforms.armv7l-hf-multiplatform; }; @@ -47,26 +42,24 @@ rec { pogoplug4 = rec { config = "armv5tel-unknown-linux-gnueabi"; - float = "soft"; platform = platforms.pogoplug4; }; ben-nanonote = rec { config = "mipsel-unknown-linux-uclibc"; - float = "soft"; platform = { name = "ben_nanonote"; kernelMajor = "2.6"; kernelArch = "mips"; gcc = { arch = "mips32"; + float = "soft"; }; }; }; fuloongminipc = rec { config = "mipsel-unknown-linux-gnu"; - float = "hard"; platform = platforms.fuloong2f_n32; }; diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix index 7ba06f129db..3667766aa9f 100644 --- a/lib/systems/parse.nix +++ b/lib/systems/parse.nix @@ -182,20 +182,24 @@ rec { types.abi = enum (attrValues abis); abis = setTypes types.openAbi { - android = {}; - cygnus = {}; - gnu = {}; - msvc = {}; - eabi = {}; - androideabi = {}; - gnueabi = {}; - gnueabihf = {}; - musleabi = {}; - musleabihf = {}; - musl = {}; - uclibceabihf = {}; - uclibceabi = {}; - uclibc = {}; + cygnus = {}; + msvc = {}; + eabi = {}; + + androideabi = {}; + android = {}; + + gnueabi = { float = "soft"; }; + gnueabihf = { float = "hard"; }; + gnu = {}; + + musleabi = { float = "soft"; }; + musleabihf = { float = "hard"; }; + musl = {}; + + uclibceabihf = { float = "soft"; }; + uclibceabi = { float = "hard"; }; + uclibc = {}; unknown = {}; }; diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index f39e890fbf1..d6587ac49a8 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -25,7 +25,6 @@ rec { gcc = { arch = "armv5te"; - float = "soft"; }; kernelMajor = "2.6"; @@ -158,7 +157,6 @@ rec { kernelDTB = true; # Beyond 3.10 gcc = { arch = "armv5te"; - float = "soft"; }; }; @@ -336,7 +334,6 @@ rec { gcc = { cpu = "cortex-a9"; fpu = "vfpv3"; - float = "hard"; }; }; @@ -363,7 +360,6 @@ rec { gcc = { cpu = "cortex-a9"; fpu = "neon"; - float = "hard"; }; }; @@ -449,6 +445,7 @@ rec { kernelTarget = "vmlinux"; gcc = { arch = "loongson2f"; + float = "hard"; abi = "n32"; }; }; @@ -498,7 +495,6 @@ rec { # and the above page suggests NEON is only an improvement with hand-written assembly. arch = "armv7-a"; fpu = "vfpv3-d16"; - float = "hard"; # For Raspberry Pi the 2 the best would be: # cpu = "cortex-a7"; diff --git a/pkgs/development/compilers/gcc/common/platform-flags.nix b/pkgs/development/compilers/gcc/common/platform-flags.nix index 71997752ad1..e261f54f582 100644 --- a/pkgs/development/compilers/gcc/common/platform-flags.nix +++ b/pkgs/development/compilers/gcc/common/platform-flags.nix @@ -2,11 +2,12 @@ let p = targetPlatform.platform.gcc or {}; + float = p.float or (targetPlatform.parsed.abi.float or null); in lib.concatLists [ (lib.optional (p ? arch) "--with-arch=${p.arch}") (lib.optional (p ? cpu) "--with-cpu=${p.cpu}") (lib.optional (p ? abi) "--with-abi=${p.abi}") (lib.optional (p ? fpu) "--with-fpu=${p.fpu}") - (lib.optional (p ? float) "--with-float=${p.float}") + (lib.optional (float != null) "--with-float=${float}") (lib.optional (p ? mode) "--with-mode=${p.mode}") ] diff --git a/pkgs/development/libraries/glibc/common.nix b/pkgs/development/libraries/glibc/common.nix index 5179ce4a9a8..0e363fe4a25 100644 --- a/pkgs/development/libraries/glibc/common.nix +++ b/pkgs/development/libraries/glibc/common.nix @@ -127,7 +127,9 @@ stdenv.mkDerivation ({ ] ++ lib.optionals withLinuxHeaders [ "--enable-kernel=3.2.0" # can't get below with glibc >= 2.26 ] ++ lib.optionals (cross != null) [ - (if cross ? float && cross.float == "soft" then "--without-fp" else "--with-fp") + (if cross.platform.gcc.float or (cross.parsed.abi.float or "hard") == "soft" + then "--without-fp" + else "--with-fp") ] ++ lib.optionals (cross != null) [ "--with-__thread" ] ++ lib.optionals (cross == null && stdenv.isAarch32) [