From b0cab4542d7da79044a968c9b326897aa3d4fa31 Mon Sep 17 00:00:00 2001 From: Aaron Janse Date: Thu, 20 Aug 2020 02:46:31 -0700 Subject: [PATCH] relibc: build from source --- pkgs/development/libraries/relibc/default.nix | 79 +++++++++++++++---- 1 file changed, 62 insertions(+), 17 deletions(-) diff --git a/pkgs/development/libraries/relibc/default.nix b/pkgs/development/libraries/relibc/default.nix index a1787ce24bb5..43e02fc87586 100644 --- a/pkgs/development/libraries/relibc/default.nix +++ b/pkgs/development/libraries/relibc/default.nix @@ -1,27 +1,72 @@ -{ stdenvNoCC, buildPackages, fetchurl }: +{ stdenvNoCC, buildPackages, makeRustPlatform }: -stdenvNoCC.mkDerivation { - name = "binary-relibc-latest"; +let + rpath = stdenvNoCC.lib.makeLibraryPath [ + buildPackages.stdenv.cc.libc + "$out" + ]; + bootstrapCrossRust = stdenvNoCC.mkDerivation { + name = "binary-redox-rust"; + + src = fetchTarball { + name = "redox-rust-toolchain-bin.tar.gz"; + url = "https://www.dropbox.com/s/33r92en0t47l1ei/redox-rust-toolchain-bin.tar.gz?dl=1"; + sha256 = "1g17qp2q6b88p04yclkw6amm374pqlakrmw9kd86vw8z4g70jkxm"; + }; - # snapshot of https://static.redox-os.org/toolchain/x86_64-unknown-redox/relibc-install.tar.gz - src = fetchurl { - name = "relibc-install.tar.gz"; - url = "https://gateway.pinata.cloud/ipfs/QmNp6fPTjPA6LnCYvW1UmbAHcPpU7tqZhstfSpSXMJCRwp"; - sha256 = "1hjdzrj67jdag3pm8h2dqh6xipbfxr6f4navdra6q1h83gl7jkd9"; + dontBuild = true; + dontPatchELF = true; + dontStrip = true; + installPhase = '' + mkdir $out/ + cp -r * $out/ + + find $out/ -executable -type f -exec patchelf \ + --set-interpreter "${buildPackages.stdenv.cc.libc}/lib/ld-linux-x86-64.so.2" \ + --set-rpath "${rpath}" \ + "{}" \; + find $out/ -name "*.so" -type f -exec patchelf \ + --set-rpath "${rpath}" \ + "{}" \; + ''; + + meta.platforms = with stdenvNoCC.lib; platforms.redox ++ platforms.linux; }; - # to avoid "unpacker produced multiple directories" - unpackPhase = "unpackFile $src"; + redoxRustPlatform = buildPackages.makeRustPlatform { + rustc = bootstrapCrossRust; + cargo = bootstrapCrossRust; + }; - dontBuild = true; - dontPatchELF = true; - dontStrip = true; - installPhase = '' - mkdir $out/ - cp -r x86_64-unknown-redox/* $out/ - rm -rf $out/bin +in +redoxRustPlatform.buildRustPackage rec { + pname = "relibc"; + version = "latest"; + + LD_LIBRARY_PATH = "${buildPackages.zlib}/lib"; + + src = buildPackages.fetchgit { + url = "https://gitlab.redox-os.org/redox-os/relibc/"; + rev = "5af8e3ca35ad401014a867ac1a0cc3b08dee682b"; + sha256 = "1j4wsga9psl453031izkl3clkvm31d1wg4y8f3yqqvhml2aliws5"; + fetchSubmodules = true; + }; + + RUSTC_BOOTSTRAP = 1; + + dontInstall = true; + dontFixup = true; + doCheck = false; + + postBuild = '' + mkdir -p $out + DESTDIR=$out make install ''; + TARGET = buildPackages.rust.toRustTarget stdenvNoCC.targetPlatform; + + cargoSha256 = "1fzz7ba3ga57x1cbdrcfrdwwjr70nh4skrpxp4j2gak2c3scj6rz"; + meta = with stdenvNoCC.lib; { homepage = "https://gitlab.redox-os.org/redox-os/relibc"; description = "C Library in Rust for Redox and Linux";