about summary refs log tree commit diff
path: root/nixpkgs/pkgs/misc/arm-trusted-firmware/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/misc/arm-trusted-firmware/default.nix')
-rw-r--r--nixpkgs/pkgs/misc/arm-trusted-firmware/default.nix113
1 files changed, 113 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/misc/arm-trusted-firmware/default.nix b/nixpkgs/pkgs/misc/arm-trusted-firmware/default.nix
new file mode 100644
index 000000000000..27bef4cae449
--- /dev/null
+++ b/nixpkgs/pkgs/misc/arm-trusted-firmware/default.nix
@@ -0,0 +1,113 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, openssl, pkgsCross, buildPackages }:
+
+let
+  buildArmTrustedFirmware = { filesToInstall
+            , installDir ? "$out"
+            , platform ? null
+            , extraMakeFlags ? []
+            , extraMeta ? {}
+            , version ? "2.1"
+            , ... } @ args:
+           stdenv.mkDerivation ({
+
+    name = "arm-trusted-firmware${lib.optionalString (platform != null) "-${platform}"}-${version}";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "ARM-software";
+      repo = "arm-trusted-firmware";
+      rev = "refs/tags/v${version}";
+      sha256 = "1gy5qskrjy8n3kxdcm1dx8b45l5b75n0pm8pq80wl6xic1ycy24r";
+    };
+
+    depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+    # For Cortex-M0 firmware in RK3399
+    nativeBuildInputs = [ pkgsCross.arm-embedded.stdenv.cc ];
+
+    buildInputs = [ openssl ];
+
+    makeFlags = [
+      "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
+    ] ++ (lib.optional (platform != null) "PLAT=${platform}")
+      ++ extraMakeFlags;
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p ${installDir}
+      cp ${lib.concatStringsSep " " filesToInstall} ${installDir}
+
+      runHook postInstall
+    '';
+
+    hardeningDisable = [ "all" ];
+    dontStrip = true;
+
+    # Fatal error: can't create build/sun50iw1p1/release/bl31/sunxi_clocks.o: No such file or directory
+    enableParallelBuilding = false;
+
+    meta = with lib; {
+      homepage = https://github.com/ARM-software/arm-trusted-firmware;
+      description = "A reference implementation of secure world software for ARMv8-A";
+      license = licenses.bsd3;
+      maintainers = [ maintainers.lopsided98 ];
+    } // extraMeta;
+  } // builtins.removeAttrs args [ "extraMeta" ]);
+
+in {
+  inherit buildArmTrustedFirmware;
+
+  armTrustedFirmwareTools = buildArmTrustedFirmware rec {
+    extraMakeFlags = [
+      "HOSTCC=${stdenv.cc.targetPrefix}gcc"
+      "fiptool" "certtool" "sptool"
+    ];
+    filesToInstall = [
+      "tools/fiptool/fiptool"
+      "tools/cert_create/cert_create"
+      "tools/sptool/sptool"
+    ];
+    postInstall = ''
+      mkdir -p "$out/bin"
+      find "$out" -type f -executable -exec mv -t "$out/bin" {} +
+    '';
+  };
+
+  armTrustedFirmwareAllwinner = buildArmTrustedFirmware rec {
+    platform = "sun50i_a64";
+    extraMeta.platforms = ["aarch64-linux"];
+    filesToInstall = ["build/${platform}/release/bl31.bin"];
+  };
+
+  armTrustedFirmwareQemu = buildArmTrustedFirmware rec {
+    platform = "qemu";
+    extraMeta.platforms = ["aarch64-linux"];
+    filesToInstall = [
+      "build/${platform}/release/bl1.bin"
+      "build/${platform}/release/bl2.bin"
+      "build/${platform}/release/bl31.bin"
+    ];
+  };
+
+  armTrustedFirmwareRK3328 = buildArmTrustedFirmware rec {
+    extraMakeFlags = [ "bl31" ];
+    platform = "rk3328";
+    extraMeta.platforms = ["aarch64-linux"];
+    filesToInstall = [ "build/${platform}/release/bl31/bl31.elf"];
+  };
+
+  armTrustedFirmwareRK3399 = buildArmTrustedFirmware rec {
+    extraMakeFlags = [ "bl31" ];
+    platform = "rk3399";
+    extraMeta.platforms = ["aarch64-linux"];
+    filesToInstall = [ "build/${platform}/release/bl31/bl31.elf"];
+  };
+
+  armTrustedFirmwareS905 = buildArmTrustedFirmware rec {
+    extraMakeFlags = [ "bl31" ];
+    platform = "gxbb";
+    extraMeta.platforms = ["aarch64-linux"];
+    filesToInstall = [ "build/${platform}/release/bl31.bin"];
+  };
+}