diff options
Diffstat (limited to 'nixpkgs/pkgs/misc/arm-trusted-firmware/default.nix')
-rw-r--r-- | nixpkgs/pkgs/misc/arm-trusted-firmware/default.nix | 113 |
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"]; + }; +} |