let nixpkgs = import {}; inherit (nixpkgs) buildPackages; stdenv = nixpkgs.stdenvNoCC; genodeVersion = "19.05"; glibc = nixpkgs.stdenv.glibc; glibcVersion = (builtins.parseDrvName glibc.name).version; in stdenv.mkDerivation rec { name = "genode-toolchain-${genodeVersion}"; version = genodeVersion; src = if stdenv.isx86_64 then nixpkgs.fetchurl { url = "https://downloads.sourceforge.net/project/genode/genode-toolchain/${genodeVersion}/genode-toolchain-${genodeVersion}-x86_64.tar.xz"; sha256 = "036czy21zk7fvz1y1p67q3d5hgg8rb8grwabgrvzgdsqcv2ls6l9"; } else abort "no toolchain for ${stdenv.system}"; depsBuildBuild = with buildPackages; [ patchelf ]; dontPatchELF = true; # installPhase is disabled for now phases = "unpackPhase fixupPhase"; unpackPhase = '' mkdir -p $out echo "unpacking $src..." tar xf $src --strip-components=5 -C $out ''; installPhase = '' cd $out/bin for platform in arm x86 ; do dest="$"$platform"/bin" eval dest=$"$dest" mkdir -p $dest for b in genode-$platform-* ; do eval ln -s $b $dest/$\{b#genode-$platform-\} done done cd - ''; fixupPhase = '' interp=${glibc.out}/lib/ld-${glibcVersion}.so if [ ! -f "$interp" ] ; then echo new interpreter $interp does not exist, echo cannot patch binaries exit 1 fi for f in $(find $out); do if [ -f "$f" ] && patchelf "$f" 2> /dev/null; then patchelf --set-interpreter $interp \ --set-rpath $out/lib:${glibc.out}/lib:${buildPackages.zlib.out}/lib \ "$f" || true fi done ''; passthru = { libc = glibc; }; }