|
|
|
# Shameless plagiarism of Blitz's toolchain expression:
|
|
|
|
# https://github.com/blitz/genode-nix
|
|
|
|
|
|
|
|
#
|
|
|
|
# WARNING: these binaries are from sourceforge and
|
|
|
|
# have not been publicly verified by Genode Labs.
|
|
|
|
#
|
|
|
|
|
|
|
|
{ stdenv, fetchurl, ncurses5, expat, makeWrapper, wrapCC }:
|
|
|
|
|
|
|
|
let
|
|
|
|
cc = stdenv.mkDerivation rec {
|
|
|
|
pname = "genode-toolchain";
|
|
|
|
version = "19.05";
|
|
|
|
|
|
|
|
src = fetchurl ({
|
|
|
|
x86_64-linux = {
|
|
|
|
url =
|
|
|
|
"mirror://sourceforge/project/genode/${pname}/${version}/${pname}-${version}-x86_64.tar.xz";
|
|
|
|
sha256 = "036czy21zk7fvz1y1p67q3d5hgg8rb8grwabgrvzgdsqcv2ls6l9";
|
|
|
|
};
|
|
|
|
}.${stdenv.buildPlatform.system} or (throw
|
|
|
|
"cannot install Genode toolchain on this platform"));
|
|
|
|
|
|
|
|
preferLocalBuild = true;
|
|
|
|
|
|
|
|
nativeBuildInputs = [ makeWrapper ];
|
|
|
|
|
|
|
|
phases = [ "unpackPhase" "fixupPhase" ];
|
|
|
|
|
|
|
|
dontStrip = true;
|
|
|
|
dontPatchELF = true;
|
|
|
|
|
|
|
|
libPath = stdenv.lib.makeLibraryPath [ "$out" stdenv.cc.cc expat ncurses5 ];
|
|
|
|
|
|
|
|
unpackPhase = ''
|
|
|
|
mkdir $out
|
|
|
|
tar xf $src --strip-components=5 -C $out
|
|
|
|
'';
|
|
|
|
|
|
|
|
preFixup = ''
|
|
|
|
for p in $(find "$out" -type f -executable); do
|
|
|
|
if isELF "$p"; then
|
|
|
|
echo "Patchelfing $p"
|
|
|
|
patchelf "$p"
|
|
|
|
patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) "$p" || true
|
|
|
|
patchelf --set-rpath ${libPath} "$p" || true
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
pushd $out/bin
|
|
|
|
for BIN in $out/bin/genode-aarch64-*; do
|
|
|
|
makeWrapper ''${BIN} aarch64-unknown-genode-''${BIN#$out/bin/genode-aarch64-}
|
|
|
|
done
|
|
|
|
for BIN in $out/bin/genode-arm-*; do
|
|
|
|
makeWrapper ''${BIN} arm-unknown-genode-''${BIN#$out/bin/genode-arm-}
|
|
|
|
done
|
|
|
|
for BIN in $out/bin/genode-riscv-*; do
|
|
|
|
makeWrapper ''${BIN} riscv-unknown-genode-''${BIN#$out/bin/genode-riscv-}
|
|
|
|
done
|
|
|
|
for BIN in $out/bin/genode-x86-*; do
|
|
|
|
makeWrapper ''${BIN} i686-unknown-genode-''${BIN#$out/bin/genode-x86-}
|
|
|
|
makeWrapper ''${BIN} x86_64-unknown-genode-''${BIN#$out/bin/genode-x86-}
|
|
|
|
done
|
|
|
|
popd
|
|
|
|
'';
|
|
|
|
} // {
|
|
|
|
isGNU = true;
|
|
|
|
targetPrefix = {
|
|
|
|
aarch64-genode = "genode-arm-";
|
|
|
|
x86_64-genode = "genode-x86-";
|
|
|
|
}.${stdenv.targetPlatform.system} or null;
|
|
|
|
};
|
|
|
|
|
|
|
|
wrapped = wrapCC cc;
|
|
|
|
|
|
|
|
wrapped' = wrapped.overrideAttrs (attrs: { inherit (cc) src targetPrefix; });
|
|
|
|
|
|
|
|
in wrapped'
|