summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2018-12-02 17:47:53 -0600
committerMatthew Bauer <mjbauer95@gmail.com>2018-12-02 19:49:36 -0600
commit3b32c920d569c1653d2a3ee84b0aa1f24bf34a85 (patch)
tree3807ef2a3aad09a0bc5a052b7b9e428d56e1f1a1
parent808f05808b40c9092a54cfab7799c13cdb8a5db5 (diff)
downloadnixpkgs-3b32c920d569c1653d2a3ee84b0aa1f24bf34a85.tar
nixpkgs-3b32c920d569c1653d2a3ee84b0aa1f24bf34a85.tar.gz
nixpkgs-3b32c920d569c1653d2a3ee84b0aa1f24bf34a85.tar.bz2
nixpkgs-3b32c920d569c1653d2a3ee84b0aa1f24bf34a85.tar.lz
nixpkgs-3b32c920d569c1653d2a3ee84b0aa1f24bf34a85.tar.xz
nixpkgs-3b32c920d569c1653d2a3ee84b0aa1f24bf34a85.tar.zst
nixpkgs-3b32c920d569c1653d2a3ee84b0aa1f24bf34a85.zip
systems/parse.nix: support eabihf
eabihf is an abi that can be used with ARM architectures that support
the “hard float”. It should probably only be used with ARM32 when you
are absolutely sure your binaries will run on ARM systems with a FPU.

Also, add an example "armhf-embedded" to match the preexisting
arm-embedded system. qmk_firmware needs hard float in a few places, so
add them here to get that to work.

Fixes #51184
-rw-r--r--lib/systems/examples.nix4
-rw-r--r--lib/systems/parse.nix23
-rw-r--r--pkgs/development/misc/qmk_firmware/default.nix13
-rw-r--r--pkgs/top-level/all-packages.nix2
4 files changed, 30 insertions, 12 deletions
diff --git a/lib/systems/examples.nix b/lib/systems/examples.nix
index c799b9ec449..608db00a968 100644
--- a/lib/systems/examples.nix
+++ b/lib/systems/examples.nix
@@ -110,6 +110,10 @@ rec {
     config = "arm-none-eabi";
     libc = "newlib";
   };
+  armhf-embedded = {
+    config = "arm-none-eabihf";
+    libc = "newlib";
+  };
 
   aarch64-embedded = {
     config = "aarch64-none-elf";
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)}
diff --git a/pkgs/development/misc/qmk_firmware/default.nix b/pkgs/development/misc/qmk_firmware/default.nix
index 0a7b4fd9d9a..0ec8664dac9 100644
--- a/pkgs/development/misc/qmk_firmware/default.nix
+++ b/pkgs/development/misc/qmk_firmware/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchFromGitHub
 , avrgcc, avrbinutils
-, gcc-arm-embedded, binutils-arm-embedded
+, gcc-arm-embedded, gcc-armhf-embedded
 , teensy-loader-cli, dfu-programmer, dfu-util }:
 
 let version = "0.6.144";
@@ -14,12 +14,23 @@ in stdenv.mkDerivation {
     sha256 = "0m71f9w32ksqjkrwhqwhr74q5v3pr38bihjyb9ks0k5id0inhrjn";
     fetchSubmodules = true;
   };
+  postPatch = ''
+    substituteInPlace tmk_core/arm_atsam.mk \
+      --replace arm-none-eabi arm-none-eabihf
+    rm keyboards/handwired/frenchdev/rules.mk keyboards/dk60/rules.mk
+  '';
   buildFlags = "all:default";
+  doCheck = true;
+  checkTarget = "test:all";
+  installPhase = ''
+    mkdir $out
+  '';
   NIX_CFLAGS_COMPILE = "-Wno-error";
   nativeBuildInputs = [
     avrgcc
     avrbinutils
     gcc-arm-embedded
+    gcc-armhf-embedded
     teensy-loader-cli
     dfu-programmer
     dfu-util
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index e52ed542982..1310af493c8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -23027,7 +23027,7 @@ with pkgs;
     avrgcc = pkgsCross.avr.buildPackages.gcc;
     avrbinutils = pkgsCross.avr.buildPackages.binutils;
     gcc-arm-embedded = pkgsCross.arm-embedded.buildPackages.gcc;
-    binutils-arm-embedded = pkgsCross.arm-embedded.buildPackages.binutils;
+    gcc-armhf-embedded = pkgsCross.armhf-embedded.buildPackages.gcc;
   };
 
   newlib = callPackage ../development/misc/newlib { };