summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2021-11-08 02:05:25 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2021-11-08 20:38:59 +0000
commitc9c3de0131c565bf5a7f0e2249cd26f6e7acb172 (patch)
treea4964a437eecc083d4f95360d19de928c0888676
parentcbd00bab803b03cacbea27d442c60e719a804992 (diff)
downloadnixpkgs-c9c3de0131c565bf5a7f0e2249cd26f6e7acb172.tar
nixpkgs-c9c3de0131c565bf5a7f0e2249cd26f6e7acb172.tar.gz
nixpkgs-c9c3de0131c565bf5a7f0e2249cd26f6e7acb172.tar.bz2
nixpkgs-c9c3de0131c565bf5a7f0e2249cd26f6e7acb172.tar.lz
nixpkgs-c9c3de0131c565bf5a7f0e2249cd26f6e7acb172.tar.xz
nixpkgs-c9c3de0131c565bf5a7f0e2249cd26f6e7acb172.tar.zst
nixpkgs-c9c3de0131c565bf5a7f0e2249cd26f6e7acb172.zip
Update script as rust-src layout has changed
Use stub lib so `core` and `alloc` are handled symmetrically.
-rw-r--r--pkgs/build-support/rust/sysroot/Cargo.lock17
-rw-r--r--pkgs/build-support/rust/sysroot/cargo.py16
-rw-r--r--pkgs/build-support/rust/sysroot/src.nix5
-rwxr-xr-xpkgs/build-support/rust/sysroot/update-lockfile.sh22
4 files changed, 41 insertions, 19 deletions
diff --git a/pkgs/build-support/rust/sysroot/Cargo.lock b/pkgs/build-support/rust/sysroot/Cargo.lock
index 61fcef61744..6ec6da6ae6e 100644
--- a/pkgs/build-support/rust/sysroot/Cargo.lock
+++ b/pkgs/build-support/rust/sysroot/Cargo.lock
@@ -10,9 +10,9 @@ dependencies = [
 
 [[package]]
 name = "compiler_builtins"
-version = "0.1.36"
+version = "0.1.52"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cd0782e0a7da7598164153173e5a5d4d9b1da094473c98dce0ff91406112369"
+checksum = "b6591c2442ee984e2b264638a8b5e7ae44fd47b32d28e3a08e2e9c3cdb0c2fb0"
 dependencies = [
  "rustc-std-workspace-core",
 ]
@@ -22,8 +22,21 @@ name = "core"
 version = "0.0.0"
 
 [[package]]
+name = "nixpkgs-sysroot-stub-crate"
+version = "0.0.0"
+dependencies = [
+ "alloc",
+ "compiler_builtins",
+ "core",
+]
+
+[[package]]
 name = "rustc-std-workspace-core"
 version = "1.99.0"
 dependencies = [
  "core",
 ]
+
+[[patch.unused]]
+name = "rustc-std-workspace-alloc"
+version = "1.99.0"
diff --git a/pkgs/build-support/rust/sysroot/cargo.py b/pkgs/build-support/rust/sysroot/cargo.py
index 09f6fba6d1c..9d970eff79e 100644
--- a/pkgs/build-support/rust/sysroot/cargo.py
+++ b/pkgs/build-support/rust/sysroot/cargo.py
@@ -6,7 +6,7 @@ orig_cargo = os.environ['ORIG_CARGO'] if 'ORIG_CARGO' in os.environ else None
 
 base = {
   'package': {
-    'name': 'alloc',
+    'name': 'nixpkgs-sysroot-stub-crate',
     'version': '0.0.0',
     'authors': ['The Rust Project Developers'],
     'edition': '2018',
@@ -17,17 +17,19 @@ base = {
       'features': ['rustc-dep-of-std', 'mem'],
     },
     'core': {
-      'path': os.path.join(rust_src, 'libcore'),
+      'path': os.path.join(rust_src, 'core'),
+    },
+    'alloc': {
+      'path': os.path.join(rust_src, 'alloc'),
     },
-  },
-  'lib': {
-    'name': 'alloc',
-    'path': os.path.join(rust_src, 'liballoc/lib.rs'),
   },
   'patch': {
     'crates-io': {
       'rustc-std-workspace-core': {
-        'path': os.path.join(rust_src, 'tools/rustc-std-workspace-core'),
+        'path': os.path.join(rust_src, 'rustc-std-workspace-core'),
+      },
+      'rustc-std-workspace-alloc': {
+        'path': os.path.join(rust_src, 'rustc-std-workspace-alloc'),
       },
     },
   },
diff --git a/pkgs/build-support/rust/sysroot/src.nix b/pkgs/build-support/rust/sysroot/src.nix
index 065f9828614..e741326bd0d 100644
--- a/pkgs/build-support/rust/sysroot/src.nix
+++ b/pkgs/build-support/rust/sysroot/src.nix
@@ -7,14 +7,15 @@ stdenv.mkDerivation {
   preferLocalBuild = true;
   phases = [ "installPhase" ];
   installPhase = ''
-    export RUSTC_SRC=${rustPlatform.rustcSrc.override { minimalContent = false; }}
+    export RUSTC_SRC=${rustPlatform.rustLibSrc.override { }}
   ''
   + lib.optionalString (originalCargoToml != null) ''
     export ORIG_CARGO=${originalCargoToml}
   ''
   + ''
     ${buildPackages.python3.withPackages (ps: with ps; [ toml ])}/bin/python3 ${./cargo.py}
-    mkdir -p $out
+    mkdir -p $out/src
+    touch $out/src/lib.rs
     cp Cargo.toml $out/Cargo.toml
     cp ${./Cargo.lock} $out/Cargo.lock
   '';
diff --git a/pkgs/build-support/rust/sysroot/update-lockfile.sh b/pkgs/build-support/rust/sysroot/update-lockfile.sh
index 83d29832384..d0596d1e5a6 100755
--- a/pkgs/build-support/rust/sysroot/update-lockfile.sh
+++ b/pkgs/build-support/rust/sysroot/update-lockfile.sh
@@ -1,21 +1,27 @@
 #!/usr/bin/env nix-shell
 #!nix-shell -i bash -p python3 python3.pkgs.toml cargo
 
-set -e
+set -eu pipefile
 
-HERE=$(dirname "${BASH_SOURCE[0]}")
+HERE=$(readlink -e $(dirname "${BASH_SOURCE[0]}"))
 NIXPKGS_ROOT="$HERE/../../../.."
 
 # https://unix.stackexchange.com/a/84980/390173
 tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t 'update-lockfile')
-
 cd "$tempdir"
-nix-build -E "with import (/. + \"${NIXPKGS_ROOT}\") {}; pkgs.rustPlatform.rustcSrc.override { minimalContent = false; }"
-RUSTC_SRC="$(pwd)/result" python3 "$HERE/cargo.py"
-RUSTC_BOOTSTRAP=1 cargo build || echo "Build failure is expected. All that's needed is the lockfile."
+mkdir -p src
+touch src/lib.rs
 
-cp Cargo.lock "$HERE"
+RUSTC_SRC=$(nix-build "${NIXPKGS_ROOT}" -A pkgs.rustPlatform.rustLibSrc --no-out-link)
 
-rm -rf "$tempdir"
+ln -s $RUSTC_SRC/{core,alloc} ./
+
+export RUSTC_SRC
+python3 "$HERE/cargo.py"
 
+export RUSTC_BOOTSTRAP=1
+cargo generate-lockfile
 
+cp Cargo.lock "$HERE"
+
+rm -rf "$tempdir"