{stdenv, fetchurl, unzip}: let platform = stdenv.platform; configureFun = ubootConfig : '' make mrproper make ${ubootConfig} NBOOT=1 LE=1 ''; buildFun = kernelArch : '' unset src if test -z "$crossConfig"; then make clean all else make clean all ARCH=${kernelArch} CROSS_COMPILE=$crossConfig- fi ''; in stdenv.mkDerivation { name = "uboot-2012.07"; src = fetchurl { url = "ftp://ftp.denx.de/pub/u-boot/u-boot-2012.07.tar.bz2"; sha256 = "15nli6h9a127ldizsck3g4ysy5j4m910wawspgpadz4vjyk213p0"; }; nativeBuildInputs = [ unzip ]; dontStrip = true; installPhase = '' mkdir -p $out cp u-boot.bin $out cp u-boot u-boot.map $out mkdir -p $out/bin cp tools/{envcrc,mkimage} $out/bin ''; # They have 'errno.h' included by a "-idirafter". As the gcc # wrappers add the glibc include as "-idirafter", the only way # we can make the glibc take priority is to -include errno.h. postPatch = if stdenv ? glibc && stdenv.glibc != null then '' sed -i 's,$(HOSTCPPFLAGS),-include ${stdenv.glibc}/include/errno.h $(HOSTCPPFLAGS),' config.mk '' else ""; patches = [ ./sheevaplug-sdio.patch ./sheevaplug-config.patch ]; configurePhase = assert platform ? uboot && platform.uboot != null; assert (platform ? ubootConfig); configureFun platform.ubootConfig; buildPhase = assert (platform ? kernelArch); buildFun platform.kernelArch; crossAttrs = let cp = stdenv.cross.platform; in assert cp ? uboot && cp.uboot != null; { configurePhase = assert (cp ? ubootConfig); configureFun cp.ubootConfig; buildPhase = assert (cp ? kernelArch); buildFun cp.kernelArch; }; }