about summary refs log tree commit diff
path: root/nixpkgs/pkgs/build-support/rust/build-rust-package/sysroot/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/build-support/rust/build-rust-package/sysroot/default.nix')
-rw-r--r--nixpkgs/pkgs/build-support/rust/build-rust-package/sysroot/default.nix35
1 files changed, 35 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/build-support/rust/build-rust-package/sysroot/default.nix b/nixpkgs/pkgs/build-support/rust/build-rust-package/sysroot/default.nix
new file mode 100644
index 000000000000..bb95b7bdc35c
--- /dev/null
+++ b/nixpkgs/pkgs/build-support/rust/build-rust-package/sysroot/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, rustPlatform, buildPackages }:
+
+{ shortTarget, originalCargoToml, target, RUSTFLAGS }:
+
+let
+  cargoSrc = import ../../sysroot/src.nix {
+    inherit lib stdenv rustPlatform buildPackages originalCargoToml;
+  };
+in rustPlatform.buildRustPackage {
+  inherit target RUSTFLAGS;
+
+  name = "custom-sysroot";
+  src =  cargoSrc;
+
+  RUSTC_BOOTSTRAP = 1;
+  __internal_dontAddSysroot = true;
+  cargoSha256 = "sha256-zgkwevitxsu1C4OgGTsqNSc0gDxaNXYK1WPbfER48d0=";
+
+  doCheck = false;
+
+  installPhase = ''
+    export LIBS_DIR=$out/lib/rustlib/${shortTarget}/lib
+    mkdir -p $LIBS_DIR
+    for f in target/${shortTarget}/release/deps/*.{rlib,rmeta}; do
+      cp $f $LIBS_DIR
+    done
+
+    export RUST_SYSROOT=$(rustc --print=sysroot)
+    host=${stdenv.buildPlatform.rust.rustcTarget}
+    cp -r $RUST_SYSROOT/lib/rustlib/$host $out
+  '';
+
+  # allows support for cross-compilation
+  meta.platforms = lib.platforms.all;
+}