{ stdenv , lib , fetchurl , bison , dtc , flex , libusb1 , lzop , openssl , pkg-config , buildPackages }: let buildBarebox = { filesToInstall , installDir ? "$out" , defconfig , extraMeta ? {} , ... } @ args: stdenv.mkDerivation rec { pname = "barebox-${defconfig}"; version = "2020.12.0"; src = fetchurl { url = "https://www.barebox.org/download/barebox-${version}.tar.bz2"; sha256 = "06vsd95ihaa2nywpqy6k0c7xwk2pzws4yvbp328yd2pfiigachrv"; }; postPatch = '' patchShebangs scripts ''; nativeBuildInputs = [ bison dtc flex openssl libusb1 lzop pkg-config ]; depsBuildBuild = [ buildPackages.stdenv.cc ]; hardeningDisable = [ "all" ]; makeFlags = [ "DTC=dtc" "CROSS_COMPILE=${stdenv.cc.targetPrefix}" ]; configurePhase = '' runHook preConfigure make ${defconfig} runHook postConfigure ''; installPhase = '' runHook preInstall mkdir -p ${installDir} cp ${lib.concatStringsSep " " filesToInstall} ${installDir} runHook postInstall ''; enableParallelBuilding = true; dontStrip = true; meta = with lib; { homepage = "https://www.barebox.org"; description = "Swiss Army Knive for bare metal"; license = licenses.gpl2Only; maintainers = with maintainers; [ emantor ]; } // extraMeta; } // removeAttrs args [ "extraMeta" ]; in { inherit buildBarebox; bareboxTools = buildBarebox { defconfig = "hosttools_defconfig"; installDir = "$out/bin"; extraMeta.platforms = lib.platforms.linux; filesToInstall = [ "scripts/bareboximd" "scripts/imx/imx-usb-loader" "scripts/omap4_usbboot" "scripts/omap3-usb-loader" "scripts/kwboot" ]; }; }