From c91090774d4c307ce2e6a6cb8b46b80682a95200 Mon Sep 17 00:00:00 2001 From: Timon Schelling Date: Thu, 7 Aug 2025 20:19:24 +0000 Subject: [PATCH 1/3] Try providing cargo-rust-gpu to nix devs --- .nix/flake.nix | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/.nix/flake.nix b/.nix/flake.nix index d8fb88ed54..5997d825c7 100644 --- a/.nix/flake.nix +++ b/.nix/flake.nix @@ -33,12 +33,49 @@ pkgs = import nixpkgs { inherit system overlays; }; - - rustc-wasm = pkgs.rust-bin.stable.latest.default.override { + + rustExtensions = [ "rust-src" "rust-analyzer" "clippy" "cargo" ]; + + rust = pkgs.rust-bin.stable.latest.default.override { targets = [ "wasm32-unknown-unknown" ]; - extensions = [ "rust-src" "rust-analyzer" "clippy" "cargo" ]; + extensions = rustExtensions; + }; + + rustNightlyPkg = pkgs.rust-bin.nightly."2025-06-23".default.override { + extensions = rustExtensions ++ [ "rustc-dev" "llvm-tools" ]; }; + rustPlatformNightly = pkgs.makeRustPlatform { + cargo = rustNightlyPkg; + rustc = rustNightlyPkg; + }; + + rustc_codegen_spirv = (rustPlatformNightly.buildRustPackage.override { + stdenv = pkgs.llvmPackages.stdenv; + }) (finalAttrs: { + pname = "rustc_codegen_spirv"; + version = "0-unstable-2025-08-04"; + src = pkgs.fetchFromGitHub { + owner = "Rust-GPU"; + repo = "rust-gpu"; + rev = "df1628a032d22c864397417c2871b74d602af986"; + hash = "sha256-AFt3Nc+NqK8DxNUhDBcOUmk3XDVcoToVeFIMYNszdbY="; + }; + cargoHash = "sha256-en3BYJWQabH064xeAwYQrvcr6EuWg/QjvsG+Jd6HHCk"; + + cargoBuildFlags = [ "-p" "rustc_codegen_spirv" ]; + + doCheck = false; + }); + + cargoRustGpuBuild = pkgs.writeShellScriptBin "cargo-rust-gpu" '' + #!${pkgs.bash}/bin/bash + + export PATH="${pkgs.lib.makeBinPath [rustNightlyPkg]}" + export RUSTFLAGS="-Zcodegen-backend=${rustc_codegen_spirv}/lib/librustc_codegen_spirv.so" + exec cargo +nightly $@ + ''; + libcef = pkgs.libcef.overrideAttrs (finalAttrs: previousAttrs: { version = "138.0.26"; gitRevision = "84f2d27"; @@ -79,7 +116,7 @@ # Development tools that don't need to be in LD_LIBRARY_PATH buildTools = [ - rustc-wasm + rust pkgs.nodejs pkgs.nodePackages.npm pkgs.binaryen @@ -91,6 +128,8 @@ # Linker pkgs.mold + + cargoRustGpuBuild ]; # Development tools that don't need to be in LD_LIBRARY_PATH devTools = with pkgs; [ From ea8bd57b8572bcc351bb7e2ed5609c28cff59b14 Mon Sep 17 00:00:00 2001 From: Timon Schelling Date: Thu, 7 Aug 2025 22:29:18 +0000 Subject: [PATCH 2/3] Try providing cargo-rust-gpu to nix devs --- .nix/flake.nix | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/.nix/flake.nix b/.nix/flake.nix index 5997d825c7..cbc089a1b9 100644 --- a/.nix/flake.nix +++ b/.nix/flake.nix @@ -50,9 +50,7 @@ rustc = rustNightlyPkg; }; - rustc_codegen_spirv = (rustPlatformNightly.buildRustPackage.override { - stdenv = pkgs.llvmPackages.stdenv; - }) (finalAttrs: { + rustc_codegen_spirv = rustPlatformNightly.buildRustPackage (finalAttrs: { pname = "rustc_codegen_spirv"; version = "0-unstable-2025-08-04"; src = pkgs.fetchFromGitHub { @@ -63,19 +61,32 @@ }; cargoHash = "sha256-en3BYJWQabH064xeAwYQrvcr6EuWg/QjvsG+Jd6HHCk"; - cargoBuildFlags = [ "-p" "rustc_codegen_spirv" ]; + cargoBuildFlags = [ "-p" "rustc_codegen_spirv" "--features=use-installed-tools" "--no-default-features" ]; doCheck = false; }); - cargoRustGpuBuild = pkgs.writeShellScriptBin "cargo-rust-gpu" '' + cargoGpuPkg = rustPlatformNightly.buildRustPackage (finalAttrs: { + pname = "cargo-gpu"; + version = "0-unstable-2025-07-24"; + src = pkgs.fetchFromGitHub { + owner = "Rust-GPU"; + repo = "cargo-gpu"; + rev = "a2ad3574dd32142ff661994e0d79448a45d18f47"; + hash = "sha256-YGu9Cuw+pcN9/rCuCxImouzsQ3ScHF+cW6zgxMm0XGI="; + }; + cargoHash = "sha256-tyad9kO90uwAnMQYa09takIBXifrumSx2C4rpSK95aM="; + + doCheck = false; + }); + + cargoNightlyPkg = pkgs.writeShellScriptBin "cargo-nightly" '' #!${pkgs.bash}/bin/bash - export PATH="${pkgs.lib.makeBinPath [rustNightlyPkg]}" - export RUSTFLAGS="-Zcodegen-backend=${rustc_codegen_spirv}/lib/librustc_codegen_spirv.so" - exec cargo +nightly $@ + exec ${rustNightlyPkg}/bin/cargo $@ ''; + libcef = pkgs.libcef.overrideAttrs (finalAttrs: previousAttrs: { version = "138.0.26"; gitRevision = "84f2d27"; @@ -129,7 +140,9 @@ # Linker pkgs.mold - cargoRustGpuBuild + pkgs.spirv-tools + cargoNightlyPkg + cargoGpuPkg ]; # Development tools that don't need to be in LD_LIBRARY_PATH devTools = with pkgs; [ @@ -152,6 +165,8 @@ CEF_PATH = libcefPath; XDG_DATA_DIRS="${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}:${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}:$XDG_DATA_DIRS"; + RUSTC_CODEGEN_SPIRV="${rustc_codegen_spirv}/lib/librustc_codegen_spirv.so"; + shellHook = '' alias cargo='mold --run cargo' ''; From 6ca75875fea9842b71dcd6149f9b3f3d9f30a055 Mon Sep 17 00:00:00 2001 From: Timon Schelling Date: Fri, 8 Aug 2025 18:19:36 +0000 Subject: [PATCH 3/3] Add exec with rust-gpu env script to flake --- .nix/flake.nix | 52 +++++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/.nix/flake.nix b/.nix/flake.nix index cbc089a1b9..28961a99e6 100644 --- a/.nix/flake.nix +++ b/.nix/flake.nix @@ -35,22 +35,19 @@ }; rustExtensions = [ "rust-src" "rust-analyzer" "clippy" "cargo" ]; - rust = pkgs.rust-bin.stable.latest.default.override { targets = [ "wasm32-unknown-unknown" ]; extensions = rustExtensions; }; - rustNightlyPkg = pkgs.rust-bin.nightly."2025-06-23".default.override { + rustGPUToolchainPkg = pkgs.rust-bin.nightly."2025-06-23".default.override { extensions = rustExtensions ++ [ "rustc-dev" "llvm-tools" ]; }; - - rustPlatformNightly = pkgs.makeRustPlatform { - cargo = rustNightlyPkg; - rustc = rustNightlyPkg; + rustGPUToolchainRustPlatform = pkgs.makeRustPlatform { + cargo = rustGPUToolchainPkg; + rustc = rustGPUToolchainPkg; }; - - rustc_codegen_spirv = rustPlatformNightly.buildRustPackage (finalAttrs: { + rustc_codegen_spirv = rustGPUToolchainRustPlatform.buildRustPackage (finalAttrs: { pname = "rustc_codegen_spirv"; version = "0-unstable-2025-08-04"; src = pkgs.fetchFromGitHub { @@ -60,33 +57,29 @@ hash = "sha256-AFt3Nc+NqK8DxNUhDBcOUmk3XDVcoToVeFIMYNszdbY="; }; cargoHash = "sha256-en3BYJWQabH064xeAwYQrvcr6EuWg/QjvsG+Jd6HHCk"; - cargoBuildFlags = [ "-p" "rustc_codegen_spirv" "--features=use-installed-tools" "--no-default-features" ]; - doCheck = false; }); - cargoGpuPkg = rustPlatformNightly.buildRustPackage (finalAttrs: { - pname = "cargo-gpu"; - version = "0-unstable-2025-07-24"; - src = pkgs.fetchFromGitHub { - owner = "Rust-GPU"; - repo = "cargo-gpu"; - rev = "a2ad3574dd32142ff661994e0d79448a45d18f47"; - hash = "sha256-YGu9Cuw+pcN9/rCuCxImouzsQ3ScHF+cW6zgxMm0XGI="; - }; - cargoHash = "sha256-tyad9kO90uwAnMQYa09takIBXifrumSx2C4rpSK95aM="; + # Wrapper script for running rust commands with the rust toolchain used by rust-gpu. + # For example `rust-gpu cargo --version` or `rust-gpu rustc --version`. + execWithRustGPUEnvironment = pkgs.writeShellScriptBin "rust-gpu" '' + #!${pkgs.lib.getExe pkgs.bash} - doCheck = false; - }); + filtered_args=() + for arg in "$@"; do + case "$arg" in + +nightly|+nightly-*) ;; + *) filtered_args+=("$arg") ;; + esac + done - cargoNightlyPkg = pkgs.writeShellScriptBin "cargo-nightly" '' - #!${pkgs.bash}/bin/bash + export PATH="${pkgs.lib.makeBinPath [ rustGPUToolchainPkg pkgs.spirv-tools ]}:$PATH" + export RUSTC_CODEGEN_SPIRV_PATH="${rustc_codegen_spirv}/lib/librustc_codegen_spirv.so" - exec ${rustNightlyPkg}/bin/cargo $@ + exec ${"\${filtered_args[@]}"} ''; - libcef = pkgs.libcef.overrideAttrs (finalAttrs: previousAttrs: { version = "138.0.26"; gitRevision = "84f2d27"; @@ -99,7 +92,6 @@ strip $out/lib/* ''; }); - libcefPath = pkgs.runCommand "libcef-path" {} '' mkdir -p $out @@ -140,9 +132,7 @@ # Linker pkgs.mold - pkgs.spirv-tools - cargoNightlyPkg - cargoGpuPkg + execWithRustGPUEnvironment ]; # Development tools that don't need to be in LD_LIBRARY_PATH devTools = with pkgs; [ @@ -165,8 +155,6 @@ CEF_PATH = libcefPath; XDG_DATA_DIRS="${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}:${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}:$XDG_DATA_DIRS"; - RUSTC_CODEGEN_SPIRV="${rustc_codegen_spirv}/lib/librustc_codegen_spirv.so"; - shellHook = '' alias cargo='mold --run cargo' '';