70 lines
1.7 KiB
Nix
70 lines
1.7 KiB
Nix
let
|
|
nixpkgs = import <nixpkgs> {};
|
|
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; };
|
|
}
|