about summary refs log tree commit diff
path: root/pkgs/build-support/rust
Commit message (Collapse)AuthorAge
* rustPlatform: fix cross-compiling by using native diffhyperfekt2020-06-08
|
* buildRustPackage: add documentation on how to create cargo.lock patchesJörg Thalheim2020-06-05
|
* buildRustCrate: Replace hyphen with underscore in env variables (#88054)Michael Howell2020-05-26
| | | | | | * Add test case for include dir * buildRustCrate: replace hyphen with underscore in env This fixes a bug that prevents encoding_c from building.
* rustPlatform: fix bug with ambiguous diff toolBenjamin Hipple2020-05-06
| | | | | | | | | | If a user provides `nativeBuildInputs = [ llvmPackages.bintools ]` or any other package containing a `${prefix}/bin/diff`, the builder could use it instead of the standard unix `diff`, causing a build failure. This updates the call to specify an abspath to `diff` and avoid reliance on `PATH`. Resolves #87081
* Merge pull request #85172 from andir/buildRustCrate-proc-macroAndreas Rammhold2020-04-13
|\ | | | | buildRustCrate: support proc-macro in default prelude
| * buildRustCrate: support proc-macro in default preludeAndreas Rammhold2020-04-13
| |
* | buildRustCrate: Support versioned crate renamesPeter Kolloch2020-04-10
| |
* | buildRustCrate: Document parametersPeter Kolloch2020-04-10
|/ | | | | | | | | I know, heretic, but... I also know that this is not perfect but it is a good start, I think. It would be nice if this were part of the automatic "nixdoc" function reference. I'd like guidance if this should be part of the rust section or something else.
* buildRustPackage: enable strictDepsJörg Thalheim2020-03-29
| | | | | This will improve cross-compiling support by forcing users to specify buildInputs/nativeBuildInputs correctly.
* buildRustCrate: Add tests for checking files in outputs.Peter Kolloch2020-03-29
| | | | | ...and remove superfluous dependency files (*.d). ...and copy dSYM directories on Mac OS when in release=false mode.
* buildRustCrateTests: Fix link order test on darwinAndreas Rammhold2020-03-28
| | | | | | | | | | | | As it turns out Darwin does most of the things differently then "normal" systems. They are using a different shared library extension and require an obscure commandline parameter that has to be added to every build system out there. That issue seems to be with clang on Darwin as on Linux that flag isn't required to build the very same tests (when using clang). After adjusting these two details the tests are running fine on the darwin box that I was able to obtain.
* Merge pull request #83379 from symphorien/rust-linkAndreas Rammhold2020-03-28
|\ | | | | buildRustCrate: don't sort link flags
| * buildRustCrateTests: add regression test for link orderSymphorien Gibol2020-03-28
| |
| * buildRustCrate: don't sort link flagsSymphorien Gibol2020-03-25
| | | | | | | | Linkage order is significant and sorting can result in link errors.
* | buildRustCrate: fewer backslashesAlyssa Ross2020-03-27
|/ | | | This is a slight readability boost, I think.
* Merge pull request #82404 from danieldk/build-script-link-fixAndreas Rammhold2020-03-20
|\ | | | | buildRustCrate: only link build deps into build script
| * buildRustCrate: sort linker options in-placeDaniël de Kok2020-03-13
| |
| * buildRustCrate: only link build deps into build scriptDaniël de Kok2020-03-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | According to the Cargo documentation: > The build script does not have access to the dependencies listed in > the dependencies or dev-dependencies section (they’re not built > yet!). Also, build dependencies are not available to the package > itself unless also explicitly added in the [dependencies] table. https://doc.rust-lang.org/cargo/reference/build-scripts.html This change separates linkage of regular dependencies and build dependencies.
* | rust: remove legacy cargo fetcherBenjamin Hipple2020-03-18
|/ | | | | | | We have now migrated every single Rust package in NixPkgs! This deletes the legacy fetcher, which is now unused. Resolves #79975
* Merge pull request #82155 from kolloch/buildRustCrate_findMatchingDirAndreas Rammhold2020-03-10
|\ | | | | buildRustCrate: Search for matching Cargo.toml in sub directories
| * build-support/rust/buildRustCrate: Search for matching Cargo.toml in sub ↵Peter Kolloch2020-03-09
| | | | | | | | | | | | | | | | | | | | | | directories This is what cargo does for git repositories. See related issues: * https://github.com/kolloch/crate2nix/issues/53 * https://github.com/kolloch/crate2nix/issues/33
| * buildRustCrate: refactor colored loggingPeter Kolloch2020-03-09
| | | | | | | | | | | | * Make errors include the crate name and make them much more prominent. * Move more code into lib.sh * Already source generated logging code and lib.sh in configure
* | Merge pull request #81974 from bhipple/feature/rust-docMario Rodas2020-03-10
|\ \ | |/ |/| buildRustPackage: update docstring comment
| * buildRustPackage: update docstring commentBenjamin Hipple2020-03-07
| | | | | | | | | | | | The inlined readme that we were iterating on has been moved to GitHub issue #79975, and the default is now the new cargo fetcher, so this doc comment is out of date.
* | rustPlatform.fetchCargo: handle custom Cargo.lock patchfiles with validationBenjamin Hipple2020-02-28
|/ | | | | | | | | | Previously, we would asssert that the lockfiles are consistent during the unpackPhase, but if the pkg has a patch for the lockfile itself then we must wait until the patchPhase is complete to check. This also removes an implicity dependency on the src attribute coming from `fetchzip` / `fetchFromGitHub`, which happens to name the source directory "source". Now we glob for it, so different fetchers will work consistently.
* Merge pull request #79816 from andir/buildRustCrate-no-override-depAndreas Rammhold2020-02-18
|\ | | | | buildRustCrate: remove superfluous dependency overrides
| * buildRustCrate: remove superfluous dependency overridesAndreas Rammhold2020-02-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By overriding each dependency on every level of the dependency tree we are creating a lot of unnecessary instances of the same derivation Looking at the output size of `nix-instantiate --trace-function-calls -vvvv …` and the execution time I got about a 10x improvement after applying this change. It was probably good intentions that lead to these overrides but in practice no tooling (that I know of) really needs this. `carnix` and `crate2nix` are fine without those overrides. Furthermore I believe that it is the job of the tooling around `buildRustCrate` to provide a coherent set of overrides. By not enforcing all of the overrides, debug flags, verbosity, … to be the same throughout the closure we also allow consumers to override specific aspects of the crates. Some (older?) crates might need different `crateOverrides` then newer crates with the same name. Currently such situations can not (easily) be implemented with the override in-place.
* | rust: Fix for legacy fetch cargoBenjamin Hipple2020-02-15
| | | | | | | | See inline comment and #79975 for details.
* | treewide: change fetchCargoTarball default to opt-outBenjamin Hipple2020-02-13
| | | | | | | | | | | | | | | | | | | | | | Changes the default fetcher in the Rust Platform to be the newer `fetchCargoTarball`, and changes every application using the current default to instead opt out. This commit does not change any hashes or cause any rebuilds. Once integrated, we will start deleting the opt-outs and recomputing hashes. See #79975 for details.
* | rust: Replace migration README with GitHub issueBenjamin Hipple2020-02-12
| | | | | | | | | | | | | | | | The readme was nice to discuss in the implementation PR, but now that this is merged it's better to have an issue that can be linked against in PRs and doesn't require further merges to update status. Ported with a status update in #79975
* | Merge master into staging-nextFrederik Rietdijk2020-02-12
|\ \
| * | buildRustCrate: remap the current build dir to / for (more) reproducible buildsAndreas Rammhold2020-02-06
| |/
* / fetchcargo: use flat tar.gz file for vendored src instead of recursive hash dirBenjamin Hipple2020-02-10
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | This has several advantages: 1. It takes up less space on disk in-between builds in the nix store. 2. It uses less space in the binary cache for vendor derivation packages. 3. It uses less network traffic downloading from the binary cache. 4. It plays nicely with hashed mirrors like tarballs.nixos.org, which only substitute --flat hashes on single files (not recursive directory hashes). 5. It's consistent with how simple `fetchurl` src derivations work. 6. It provides a stronger abstraction between input src-package and output package, e.g., it's harder to accidentally depend on the src derivation at runtime by referencing something like `${src}/etc/index.html`. Likewise, in the store it's harder to get confused with something that is just there as a build-time dependency vs. a runtime dependency, since the build-time src dependencies are tarred up. Disadvantages are: 1. It takes slightly longer to untar at the start of a build. As currently implemented, this attaches the compacted vendor.tar.gz feature as a rider on `verifyCargoDeps`, since both of them are relatively newly implemented behavior that change the `cargoSha256`. If this PR is accepted, I will push forward the remaining rust packages with a series of treewide PRs to update the `cargoSha256`s.
* buildRustCrate: fix #78412Andreas Rammhold2020-01-28
| | | | | | `build.rs` files might create files. Those files are supposed to go into `OUT_DIR` (envirionment variable) and not be overlayed onto the source tree.
* buildRustCrateTests: add regression test for #74071Andreas Rammhold2020-01-28
|
* buildRustCrateTests: add test case for rlib linkingAndreas Rammhold2020-01-21
|
* buildRustCrateTests: fix some formatting issuesAndreas Rammhold2020-01-21
|
* buildRustCrate: treat `rlib` crates just like `lib` cratesAndreas Rammhold2020-01-21
| | | | | Both version provide `rlib` files to link against. Previously we would try to find a matching shared library in the `lib` output.
* buildRustCrateTests: use releaseTools.aggregateAndreas Rammhold2020-01-16
| | | | | | Previously I did use `runCommand` to do the same. Using releaseTools.aggregate seems a lot saner and we might get nicer hydra output of the tests that are failing.
* buildRustCrate: remove one of the odd library filename casesAndreas Rammhold2020-01-16
| | | | | | | | | | | | | | | | | | | | | It used to be the case (ref missing) that cargo did treat `src/$libName.rs` as an alternative to `src/lib.rs` when the latter wasn't present. Recently I failed to reproduce that with vanilla cargo and it started to cause pain with some crates of the form: some_crate/ `- src `- main.rs `- some_crate.rs We would build `src/some_crate.rs` and thing it is a library while that might not be the actual case. This crate is a valid `bin` crate not a `lib` crate as far as I can tell from the samples I took. I removed support for the previously required heuristic and commented out the test cases in case we will need them again. We could crawl in the Git history but chances are that the next person looking into this doesn't know about the history.
* rustPlatform.buildRustPackage: cleaner output on verifyCargoDeps (#77567)Benjamin Hipple2020-01-12
| | | | | | When this fails, the user may want to copy-paste the path to the "bad" Cargo.lock file to inspect. The trailing `.` on `$cargoDeps.` gets caught in most terminal copy-pastes. Since half the lines already don't have it, this removes it from all of them for consistent output.
* buildRustCrate: slight "rewording" and reformattingAndreas Rammhold2020-01-07
| | | | | There is no point in reinventinb builtins through `filterAttrs` or the like. Lets just stick to what we already have in our toolbelt.
* buildRustCrate: add `buildTests` flag to tell rustc to build tests instead ↵Andreas Rammhold2020-01-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | of binaries This helps us instruct rustc to build tests instead of binaries. The actual build will then ONLY produce test executables. This is a first step towards having rust crate tests within nixpkgs. We default back to only a single output in test cases since that is the only reasonable thing to do here. Producing libraries or binaries in addition to tests would theoretically be feasible but usually generates different dependency trees. It is very common to have some libraries in `[dev-depdendencies]` within Cargo.toml just for your tests. To not start mixing things up going with a dedicated derivation for the test build sounds like the best choice for now. To use this you must provide a proper test dependency chain to `buildRustCrate` (as you would usually do with your non-test inputs). And then set the `buildTests` attribute to `true`. The derivation will then contain all tests that were built in `$out/tests`. All common test patterns and directories should be supported and tested by this change. Below is an example how you would run a single test from the derivation. This commit contains some more examples in the `buildRustCrateTests` attribute set that might be helpful. ``` let drv = buildRustCrate { … buildTests true; }; in runCommand "test-my-crate" {} '' touch $out exec ${drv}/tests/my-test '' ```
* buildRustCrate: fixup usage of `builtins.filterSource`Andreas Rammhold2020-01-07
| | | | | | While unifying most of the lib function calls I accidentially changed the filterSource functions as well. Since there were no tests I ended up forgetting about this case (even thought I ran into it…).
* Merge pull request #75563 from andir/cleanup-buildRustCrateAndreas Rammhold2020-01-02
|\ | | | | Cleanup buildRustCrate expression
| * buildRustCrate: move common build functions to a dedicated fileAndreas Rammhold2019-12-12
| | | | | | | | | | This means we aren't rebuilding hat file for each crate we are building and the buildPhase expression is a lot easier to comprehent.
| * buildRustCrate: deduplicate dependency override codeAndreas Rammhold2019-12-12
| | | | | | | | | | | | The previous lines were only different in the kind of dependencies but otherwise exactly the same. It makes the entire thing a bit more readable by moving this into a function that takes care of this.
| * buildRustCrate: use less bash for the build scriptAndreas Rammhold2019-12-12
| | | | | | | | | | | | | | | | | | | | | | | | | | We can get rid of a bunch of workarounds that were in the build script before by just passing on the `crateBin` attribute. Before we converted the list of attributes to a string only to convert it back in bash during the build phase. We can do the entire looping through builds in Nix and thus need no conversion and parsing of attributes over and over again. The big part that still remains bash is the heuristic that cargo introduced and that we can't do at eval time.
| * buildRustCrate: reflow the way `extraRustcOpts` is constructedAndreas Rammhold2019-12-11
| | | | | | | | | | This should make it more obvious that we have three parts to it and not just one long gibberish string that makes up all of it.
| * buildRustCrate: rename `makeDeps` function to `mkRustcDepArgs`Andreas Rammhold2019-12-11
| | | | | | | | | | This should carry the function better then `makeDeps` as it isn't producing deps but the rustc arguments required to link against those.