about summary refs log tree commit diff
path: root/pkgs/build-support/rust
AgeCommit message (Collapse)AuthorFilesLines
2024-06-14build-rust-crate: quote build script output env varAhmad Sattar1-1/+1
2024-06-11Merge master into staging-nextgithub-actions[bot]4-4/+4
2024-06-11buildRustCrate: extensions.sharedLibrary -> extensions.libraryIlan Joselevich4-4/+4
Switched to a common attribute for library file extensions: https://github.com/NixOS/nixpkgs/commit/de70971c90f3e3161e94ace851b30474228a0861 This makes buildRustCrate evaluate successfully when using pkgsCross/pkgsStatic.
2024-05-18rustPlatform: --frozen -> --offlineAlyssa Ross4-4/+4
--frozen is stricter than we need in Nixpkgs. If a Cargo.lock is slightly wrong, or (in my use case) if building a subproject that is not a member of the top-level workspace, but the correct Cargo.lock can be entirely resolved from the existing top-level Cargo.lock, it should be deterministic, and shouldn't cause any problems, to let cargo generate the new Cargo.lock. This should result in less need to bother upstreams about fixing their Cargo.lock files in cases where they could have been automatically fixed.
2024-05-10build-support/rust: rewrite workspace dependency inheritanceK9001-15/+27
This fixes at least one bug with default-features, and also just aligns us more with what Cargo actually does. Also some Python style fixes and a bit less mutating state.
2024-05-10buildRustPackage: add new supported platformsAlyssa Ross1-3/+3
The new NetBSD platforms have appeared since last time I updated this list, but it looks like I just missed the MIPS linux ones last time.
2024-04-16Merge pull request #302926 from ↵lassulus1-1/+8
helsinki-systems/fix/buildrustpackage-structuredattrs cargoBuildHook: Fix features with __structuredAttrs
2024-04-10tests.importCargoLock: fix self-inclusive src listings in .nix filesOlivia Crain8-23/+95
Replace `src = ./.` instances with more explicit source listings. Otherwise, derivations will be rebuilt on any change to the files defining them (e.g. formatting via nixfmt-rfc-style).
2024-04-10cargoBuildHook: Fix features with __structuredAttrsJanne Heß1-1/+8
2024-03-02wrapRustc: wrap rustdocAlyssa Ross2-5/+7
We need to set -crt-static on musl for rustdoc as well, so let's unify the wrappers. Ideally, rather than wrapping rustdoc, we'd have rustdoc use the wrapped rustc, but that's currently only possible with an unstable option (--test-builder). The options set by the wrapper, -C target-feature and --sysroot, are supported by both rustdoc and rustc, but other flags maybe not be supported by both, so I've introduced different environment variables (the existing NIX_RUSTFLAGS and a new NIX_RUSTDOCFLAGS) to allow those to be set independently. This fixes cargo-auditable in pkgsMusl., which broke because its doctests stopped working when -crt-static was moved to the wrapper. Fixes: 79156bf13ae7 ("rustc: move crt-static default override to wrapper (#291829)")
2024-02-28rustc: move crt-static default override to wrapper (#291829)Alyssa Ross2-1/+21
Previously, when cross compiling from non-musl to musl, the crt-static default override wouldn't be applied, because the compiler wouldn't have been built with it due to fastCross. Moving it to the wrapper fixes this without having to introduce extra compiler rebuilds. And because the wrapper is applied even to the bootstrap rustc, we no longer need special handling of crt-static in the Cargo expression. Unlike --sysroot, rustc allows -C target-feature= to be passed multiple times, with later instances taking precedence over earlier ones. This means that it's very easy to set the default in the wrapper, just by our overridden default before any other arguments. This fixes pkgsCross.aarch64-multiplatform-musl.mesa from x86_64-linux.
2024-01-29Merge staging-next into staginggithub-actions[bot]2-4/+22
2024-01-29Merge pull request #274440 from bouk/missing-build-rust-envRyan Lahfa2-4/+22
build-rust-crate: add missing CARGO_PKG env variables
2024-01-28build-rust-crate: add missing CARGO_PKG env variablesBouke van der Bijl2-4/+22
See https://doc.rust-lang.org/cargo/reference/environment-variables.html for supported variables
2024-01-28Merge pull request #284307 from alyssais/rustc-sysroot=Ryan Lahfa1-1/+1
wrapRustc: handle --sysroot=
2024-01-27wrapRustc: handle --sysroot=Alyssa Ross1-1/+1
This form is used by Linux 6.8.
2024-01-23rust.envVars: use wrapped LLD for aarch64 muslAlyssa Ross1-2/+3
The unwrapped version doesn't know where to look for libraries, so this is required to e.g. build anything that uses openssl-sys with OPENSSL_NO_VENDOR. A randomly chosen example package that's fixed by this change is pkgsStatic.gitoxide.
2024-01-23rust: use pkgsBuildHost/pkgsTargetTargetAlyssa Ross1-16/+16
We're already using pkgsBuildBuild, and we'll soon be using pkgsBuildTarget, so for consistency, change buildPackages and targetPackages to their corresponding two-component names.
2024-01-15buildRustPackage: disable cargo-auditable on pkgsStatic aarch64Yureka1-1/+2
2024-01-15rust: use lld on pkgsStatic aarch64Yureka1-2/+12
2024-01-15rust: allow linker to be different from compilerYureka2-8/+12
2024-01-11Merge master into staging-nextgithub-actions[bot]1-1/+1
2024-01-04build-rust-crate: Allow missing `hostPlatform.extensions.sharedLibrary`Peter Kolloch1-1/+1
If you cross-build, sharedLibrary might not be set. E.g. for this nixpkgs instance: ```nix pkgs = import <nixpkgs> { config = { }; crossSystem = { config = "riscv32-unknown-none-elf"; rustc = { config = "riscv32i-unknown-none-elf"; }; }; } ```
2024-01-02Merge remote-tracking branch 'origin/master' into staging-nextK9001-1/+1
2023-12-21rustPlatform.importCargoLock: fix workspace_root detectionLily Foster1-1/+1
Prior to this change, the `importCargoLock` git dependency builder assumed that the workspace root that needed to be passed to `replace-workspace-values` will always be the root directory of the git repository. This is not always the case as independent workspace roots may be used from subdirectories, and packages be referenced via paths. An example of this is [1], where the `iced` subdirectory is its own independent workspace, and workspace values for packages within it should be pulled from the `iced` subdirectory as the workspace root, not from the top-level of the fetched repository. [1]: https://github.com/pop-os/libcosmic/blob/b8f1a366dd030b90ed72e50f521e3da1d6a676ce/Cargo.toml
2023-12-20maturinBuildHook: use dist dir relative to cargoRootMartin Weinelt1-1/+1
With `cargoRoot` set to a subdirectory of the source, where the Cargo.{lock,toml} are found, the final mv would previously fail, since the build results appear relative to cargoRoot, not to the original build directory.
2023-12-19wrapRustcWith: allow --sysroot to be overriddenAlyssa Ross1-1/+14
It turns out that unlike a normal Unix program, if the --sysroot option is given more than once, rustc will error rather than using the last value given. Therefore, we need to ensure we only add our default --sysroot argument if one hasn't been given explicitly on the wrapper's command line. This fixes cross compilation of rustc. Closes: https://github.com/NixOS/nixpkgs/issues/271736 Fixes: 8b51cdd3bea1 ("rustc: add a compiler wrapper")
2023-12-16rustPlatform.importCargoLock: copy lints from workspaceArtemis Tosini1-0/+7
Rust 1.74 added support for configuring lints with cargo in a new "lints" table. This also adds a new possible position to reference the host workspace. Fixes #273835
2023-11-30rustc: use the wrapper for fastCross sysrootAlyssa Ross2-3/+9
This avoids having two layers of wrapper for cross rustc.
2023-11-30rustc: add a compiler wrapperAlyssa Ross2-0/+40
We keep running into situations where we can't get the right combination of rustc flags through build systems into rustc. RUSTFLAGS is the only variable supported across build systems, but if RUSTFLAGS is set, Cargo will ignore all other ways of specifying rustc flags, including the target-specific ones, which we need to make dynamic musl builds work. (This is why pkgsCross.musl64.crosvm is currently broken — it works if you unset separateDebugInfo, which causes RUSTFLAGS not to be set.) So, we need to do the same thing we do for C and C++ compilers, and add a compiler wrapper so we can inject the flags we need, regardless of the build system. Currently the wrapper only supports a single mechanism for injecting flags — the NIX_RUSTFLAGS environment variable. As time goes on, we'll probably want to add additional features, like target-specific environment variables.
2023-11-19Merge pull request #266787 from tvbeat/cargo-manifest-linksRyan Lahfa2-1/+5
2023-11-11build-rust-crate: set CARGO_MANIFEST_LINKS if links is setLuka Blaskovic2-1/+5
2023-11-09lib.systems: elaborate Rust metadataAlyssa Ross7-121/+45
We need this stuff to be available in lib so make-derivation.nix can access it to construct the Meson cross file. This has a couple of other advantages: - It makes Rust less special. Now figuring out what Rust calls a platform is the same as figuring out what Linux or QEMU call it. - We can unify the schema used to define Rust targets, and the schema used to access those values later. Just like you can set "config" or "system" in a platform definition, and then access those same keys on the elaborated platform, you can now set "rustcTarget" in your crossSystem, and then access "stdenv.hostPlatform.rustcTarget" in your code. "rustcTarget", "rustcTargetSpec", "cargoShortTarget", and "cargoEnvVarTarget" have the "rustc" and "cargo" prefixes because these are not exposed to code by the compiler, and are not standardized. The arch/os/etc. variables are all named to match the forms in the Rust target spec JSON. The new rust.target-family only takes a list, since we don't need to worry about backwards compatibility when that name is used. The old APIs are all still functional with no warning for now, so that it's possible for external code to use a single API on both 23.05 and 23.11. We can introduce the warnings once 23.05 is EOL, and make them hard errors when 23.11 is EOL.
2023-10-31Merge master into staging-nextgithub-actions[bot]1-0/+1
2023-10-31Merge pull request #220429 from ↵Ryan Lahfa1-0/+1
amjoseph-nixpkgs/pr/build-rust-crate/cross/linker
2023-10-23Merge staging-next into staginggithub-actions[bot]2-0/+8
2023-10-23buildRustPackage: add isMips64n32 to badPlatformsAdam Joseph1-0/+4
Rust is not yet able to target the n32 ABI on mips64. Let's add `isMips64n32` to the `meta.badPlatforms` of all derivations created by buildRustPackage. I use this to automatically detect which packages on my system can be built for n32 (almost all of them) and build those using n32, and the few packages (mainly those that depend on boost or rust) that can't for n64.
2023-10-23buildRustCrate: add isMips64n32 to badPlatformsAdam Joseph1-0/+4
Rust is not yet able to target the n32 ABI on mips64. Let's add `isMips64n32` to the `meta.badPlatforms` of all derivations created by buildRustCrate. I use this to automatically detect which packages on my system can be built for n32 (almost all of them) and build those using n32, and the few packages (mainly those that depend on boost or rust) that can't for n64.
2023-10-12Merge staging-next into staginggithub-actions[bot]1-3/+3
2023-10-11rustPlatform.cargoSetupHook: fix platform check (#260068)Alyssa Ross1-3/+3
Cargo will never need to link for the target platform — that'd be for the package being built to do at runtime. Cargo should know about the build and host linkers. This fixes e.g. pkgsCross.musl64.fd from x86_64-linux. Fixes: 67a4f828b46c ("rust: hooks: fix cross compilation")
2023-10-10rustc: 1.72.1 -> 1.73.0Alyssa Ross1-1/+2
This upgrade unfortunately removes MIPS support, as it has been dropped to Tier 3[1] and so bootstrap tarballs are no longer provided. It looks like it was dropped due to multiple codegen bugs, and lack of maintenance, so bringing it back would probably involve engaging with Rust/LLVM upstream on those. [1]: https://github.com/rust-lang/compiler-team/issues/648
2023-10-08Merge remote-tracking branch 'origin/master' into staging-nextFabián Heredia Montiel1-0/+4
2023-10-03rust.toRustTargetForUseInEnvVars: support custom targetsAlyssa Ross3-21/+16
> If using a target spec JSON file, the <triple> value is the filename > stem. For example --target foo/bar.json would match [target.bar]. - https://doc.rust-lang.org/cargo/reference/config.html#target I've also exposed toRustTargetSpecShort as a public function, because it's useful to be able to know what the target subdirectory will be.
2023-09-29Merge pull request #256949 from andresilva/build-rust-package-profilesfigsoda4-4/+3
buildRustPackage: support custom cargo profiles
2023-09-26rust: hooks: fix cross compilationAdam Joseph6-38/+28
Currently there is a state of severe confusion in pkgs/build-support/rust/hooks/ regarding host vs target; right now there is only "host" defined, but whether it means "host" or "target" seems to fluctuate. This commit corrects that, ensuring that all variables come in all three flavors (build, host, target) and are used consistently with the nixpkgs convention. This also fixes the cross-compilation of packages which use `maturinBuildHook` -- hooks go in `nativeBuildInputs` and are phase-shifted backwards by one platform, so they need to be careful about distinguishing between build and host. Closes #247441
2023-09-26rust: add rust.envVarsAdam Joseph1-1/+76
2023-09-24buildRustPackage: support custom cargo profilesAndré Silva4-4/+3
2023-09-23Update pkgs/build-support/rust/build-rust-crate/default.nixBouke van der Bijl1-1/+1
Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
2023-09-18build-rust-crate: add stripExclude for .rlibBouke van der Bijl1-0/+4
2023-08-26default-crate-overrides: add libseat-sysAdam Joseph1-0/+6
This is needed for building `cosmic-comp` using `crate2nix` instead of `buildRustPackage` (like https://github.com/NixOS/nixpkgs/pull/251365/ does).