Commit Graph

36 Commits

Author SHA1 Message Date
Lily Ballard
8eb3c82575 rustPlatform.rust: undeprecate
These attributes were deprecated in #230951 because they confused things
with splicing, e.g. passing `rustPlatform.rust.rustc` to
`nativeBuildInputs` would get the wrong derivation when cross-compiling.
This was a consequence of the fact that they come from the buildPackages
set. But we still want to expose these packages as otherwise Rust
packages have no way to reference the rustc and cargo that build them,
which means they can't e.g. use `disallowedReferences` to ensure they
don't end up in the runtime closure.

Just as `stdenv.cc` itself isn't spliced, we can solve this problem by
unsplicing the packages.
2026-04-15 21:39:14 -07:00
aleksana
453d6b714e rustPlatform.rustVendorSrc: init
This is needed when compiling against rustLibSrc, for example when using
wasm-pack. The upstream Cargo.lock may not include those dependencies.
2025-06-25 10:24:12 +08:00
Wolfgang Walther
40c35a8a7a rustPlatform: remove useless callPackage from hooks
Also removes a few unused arguments.
2025-06-18 15:57:28 +02:00
Emily
7cf0473ccd rustPlatform.fetchCargoTarball: drop 2025-03-28 15:09:52 +00:00
DavHau
db4cf6cb1d rust: fix splicing for rust hooks
This fixes a long standing issue where rust hooks behave differently when used inside buildRustPackage vs inside mkDerivation, which lead to surprising behavior, like for example the package being built for the wrong paltform or the linker not being found especially in cross compilation scenarios.

The reason for this inconsitency was, that buildRustPackage consumed the hooks in a non-spliced form, via [this inherit statement](4506ece030/pkgs/development/compilers/rust/make-rust-platform.nix (L60)), and therefore the usual platform shift on the hooks introduced by putting them in `nativeBuildInputs` was not applied here.

Thoug whenever the hook was used inside other builders like `mkDerivation` the platform shift did apply correctly as the hook was consumed via the spliced package set, introducing the inconsitecy.

Because of the wrong (non-spliced) use in buildRustPackage, most rust hooks have been designed with the wrong build/host/target shift in mind which is fixed by this change.

Due to the inconsitent behavior between different builders, workarounds like `rust.envVars`, which were previously introduced, likely become obsolete by this change.

This likely fixes a bunch of cross compilation issues for rust packages that are not based on `buildRustPackage` but instead consume the hooks directly.

Done:
- ensure that `buildRustPackage` consumes spliced hooks by using makeScopeWithSplicing' in make-rust-platform.nix.
- refactor hooks to make them refer to correct build/host/target packages.
- remove `rust.envVars` workaround from all rust hooks
- implement tests for most rust hooks in /pkgs/test/rut-hooks

The newly added tests can be executed for native as well as cross compilation via:
```
nix-build -A tests.rust-hooks -A pkgsCross.riscv64.tests.rust-hooks
```
2025-01-31 18:18:46 +07:00
Silvan Mosberger
4f0dadbf38 treewide: format all inactive Nix files
After final improvements to the official formatter implementation,
this commit now performs the first treewide reformat of Nix files using it.
This is part of the implementation of RFC 166.

Only "inactive" files are reformatted, meaning only files that
aren't being touched by any PR with activity in the past 2 months.
This is to avoid conflicts for PRs that might soon be merged.
Later we can do a full treewide reformat to get the rest,
which should not cause as many conflicts.

A CI check has already been running for some time to ensure that new and
already-formatted files are formatted, so the files being reformatted here
should also stay formatted.

This commit was automatically created and can be verified using

    nix-build a08b3a4d19.tar.gz \
      --argstr baseRev b32a094368
    result/bin/apply-formatting $NIXPKGS_PATH
2024-12-10 20:26:33 +01:00
jopejoe1
2e2c7f54fd treewide: hide more deprecated stuff if allowAliases is false 2024-11-27 20:51:46 +01:00
TomaSajt
37ce479c7b buildRustPackage: add useFetchCargoVendor flag 2024-11-15 13:09:16 +01:00
TomaSajt
1911b1e399 rustPlatform.fetchCargoVendor: init 2024-11-11 15:52:54 +01:00
Diogo Correia
72e550dbcc rustPlatform: fix override on hooks
Previously, trying to use `.override {}` on one of the hooks,
specifically `bindgenHook` would yield in an error.
By replacing `callPackage` with `callPackages`, this error is fixed and
the overrides are propagated to the hooks.

Co-Authored-By: Atemu <atemu.main+nixpkgs@gmail.com>
2024-03-07 13:00:50 +00:00
Alyssa Ross
46cb0eb1a9 rustPlatform.rust: deprecate
It is almost never correct to use these attributes, because they don't
work correctly with splicing.  Compare:

	% nix repl -f . --argstr crossSystem aarch64-linux
	Welcome to Nix 2.10.3. Type :? for help.

	Loading installable ''...
	Added 18988 variables.
	nix-repl> callPackage ({ stdenv, rustc }: (stdenv.mkDerivation { name = ""; nativeBuildInputs = [ rustc ]; }).nativeBuildInputs) {}
	«derivation /nix/store/bjrkg8kcq3hvg5kb03ivb856zy91qpbk-aarch64-unknown-linux-gnu-rustc-1.69.0.drv» ]

	nix-repl> callPackage ({ stdenv, rustPlatform }: (stdenv.mkDerivation { name = ""; nativeBuildInputs = [ rustPlatform.rust.rustc ]; }).nativeBuildInputs) {}
	«derivation /nix/store/ra5r07j52y7akclr827r3dzxzvqnvfbl-rustc-1.69.0.drv» ]

I'm not sure this is fixable.  I don't think it's worth keeping them
around considering we have top level attributes.  It makes overriding
slightly more annoying, but only slightly.
2023-05-12 15:31:21 +00:00
figsoda
a1663fbdf6 rustPlatform.buildRustPackage: fix auditable option when cargo-auditable is not provided to makeRustPlatform 2023-04-13 13:30:39 -04:00
figsoda
b9259df616 rustPlatform.buildRustPackage: fix cross compiling auditable packages 2023-01-12 12:22:59 -05:00
Atemu
3eec3c8fed buildRustPackage: remove git from nativeBuildInputs
Having git in nativeBuildInputs causes thousands of rebuilds when git is touched
because every derivation that somehow transiently depends on a rust package will
change. See https://github.com/NixOS/nixpkgs/pull/205682 for instance.

AFAICT git is unused. Only the fetcher needs git which it has already.

Fixes https://github.com/NixOS/nixpkgs/issues/205804
2022-12-27 18:37:21 +10:00
Jörg Thalheim
b0213fb143 Merge pull request #194388 from tomhoule/make-rust-platform/import-cargo-lock-cargo-argument
makeRustPlatform: inherit cargo in import-cargo-lock
2022-12-17 08:44:43 +00:00
figsoda
d3eb606296 rustPlatform.buildRustPackage: add useNextest option to check with cargo-nextest 2022-11-28 17:00:17 -05:00
Tom Houlé
a37017ffd6 makeRustPlatform: inherit cargo in import-cargo-lock
The main purpose of `makeRustPlatform` is to enable users to override
the `rustc` and `cargo` versions used by the `rustPlatform` derivations.

In all attributes of the result of `makeRustPlatform`, `rustc` and/or
`cargo` are overriden, except in `importCargoLock`. I think this is an
oversight / bug, and passing the received cargo derivation is the right
behaviour.

If `importCargoLock` always using the global cargo package even in
`makeRustPlatform` is the intended behaviour, I think it should be
documented at least in a comment.
2022-10-04 12:09:52 +02:00
Felix Buehler
916a86aa2f rust-{lib-}src: deprecate phases 2022-02-25 22:57:59 +01:00
Guillaume Girol
bedabfbcef rustPlatform.bindgenHook: init 2022-02-22 19:37:07 +01:00
John Ericson
18ed048c7b build-support/rust: Organize
- `toRustTarget` and friends pulled out from rust tools into rust
   library. Since they don't depend on any packages they can be more
   widely useable.

 - `build-rust-package` gets its own directory

 - `fetch-cargo-tarball` gets its own directory
2021-11-07 14:16:49 -05:00
Bernardo Meurer
949c9f67cd makeRustPlatform: allow to easily override stdenv 2021-11-01 10:40:09 -07:00
Bernardo Meurer
00334d352f Revert "makeRustPlatform: allow to easily override stdenv"
This reverts commit f17c3516fb.
2021-10-28 23:25:35 -07:00
Bernardo Meurer
f17c3516fb makeRustPlatform: allow to easily override stdenv 2021-10-26 22:13:38 -07:00
Sandro
c1a8f04935 Merge pull request #126725 from SuperSandro2000/cargo-no-ruby 2021-06-15 02:50:23 +02:00
Sandro Jäckel
f3ce27d2db rust: remove ruby from rustPlatform 2021-06-13 20:38:22 +02:00
Daniël de Kok
1da0b1dbc9 Merge pull request #122158 from danieldk/import-cargo-lock
rustPlatform.buildRustPackage: support direct use of Cargo.lock
2021-05-28 12:07:25 +02:00
Daniël de Kok
b3969f3ad7 rustPlatform.buildRustPackage: support direct use of Cargo.lock
This change introduces the cargoLock argument to buildRustPackage,
which can be used in place of cargo{Sha256,Hash} or cargoVendorDir. It
uses the importCargoLock function to build the vendor
directory. Differences compared to cargo{Sha256,Hash}:

- Requires a Cargo.lock file.
- Does not require a Cargo hash.
- Retrieves all dependencies as fixed-output derivations.

This makes buildRustPackage much easier to use as part of a Rust
project, since it does not require updating cargo{Sha256,Hash} for
every change to the lock file.
2021-05-28 08:01:28 +02:00
Daniël de Kok
2f46d77e28 rustPlatform.importCargoLock: init
This function can be used to create an output path that is a cargo
vendor directory. In contrast to e.g. fetchCargoTarball all the
dependent crates are fetched using fixed-output derivations. The
hashes for the fixed-output derivations are gathered from the
Cargo.lock file.

Usage is very simple, e.g.:

importCargoLock {
  lockFile = ./Cargo.lock;
}

would use the lockfile from the current directory.

The implementation of this function is based on Eelco Dolstra's
import-cargo:

https://github.com/edolstra/import-cargo/blob/master/flake.nix

Compared to upstream:

- We use fetchgit in place of builtins.fetchGit.
- Sync to current cargo vendoring.
2021-05-28 08:01:25 +02:00
Daniël de Kok
11307c1d47 maturinBuildHook: add rustc to deps
maturin 0.10.5 uses rustc -vV to find the host:

e886c85f5a

We now need to make rustc visible to the hook for maturin to work
properly.
2021-05-21 07:51:27 +02:00
Daniël de Kok
05e40e79a8 buildRustPackage: factor out check phase to cargoCheckHook
API change:

`cargoParallelTestThreads` suggests that this attribute sets the
number of threads used during tests, while it is actually a boolean
option (use 1 thread or NIX_BUILD_CORES threads). In the hook, this
is replaced by a more canonical name `dontUseCargoParallelTests`.
2021-02-16 08:09:15 +01:00
Daniël de Kok
9757c7101a buildRustPackage: factor out install phase to cargoInstallHook 2021-02-15 12:17:18 +01:00
Daniël de Kok
160cf87086 rustPlatform.maturinBuildHook: init
This build hook can be used to build Python packages using maturin.
2021-02-12 08:40:43 +01:00
Daniël de Kok
a8efb2053f buildRustPackage: factor out build phase to cargoBuildHook
- API change: remove the `target` argument of `buildRustPackage`, the
  target should always be in sync with the C/C++ compiler that is used.

- Gathering of binaries has moved from `buildPhase` to `installPhase`,
  this simplifies the hook and orders this functionality logically
  with the installation logic.
2021-02-11 20:00:12 +01:00
Daniël de Kok
d083f412fa buildRustPackage: factor out setting up .cargo/config to cargoSetupHook
This makes it possible to reuse this functionality as a hook in
derivations that do not use buildRustPackage.
2021-02-10 07:01:24 +01:00
oxalica
68060f6f6f makeRustPlatform: add rustLibSrc
rust-analyzer: rustcSrc -> rustLibSrc to fix build
2020-11-07 01:42:27 +08:00
John Ericson
54b4b470c3 makeRustPlatform: Put back in it's own file.
We expose it on the top level, but I don't think it makes sense to pull
it from a specific version of the rust tools when it is in fact version
agnostic.

This reverts a tiny portion of 912dca193a.
2020-10-13 20:05:29 -04:00