diff options
author | Vincent Ambo <mail@tazj.in> | 2022-12-06T13·47+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-12-15T17·26+0000 |
commit | d9d627cdf0507e44f606519384fbebd726eb0593 (patch) | |
tree | 9dbe093db00ea5a49ca22e4d58493ec392773ce5 /tvix/Cargo.toml | |
parent | 0fd956f2488899e3ef41065cc6e1e535cf962125 (diff) |
refactor(tvix): share a Cargo.lock file between Rust projects r/5419
This relates to the (abandoned) cl/7256. Introduces a Cargo workspace at //tvix that is primarily intended to be used as a workaround for the annoying Nix+Rust tooling while having a consistent set of dependencies. This is driven in part by a desire to adopt crate2nix and get more granular Nix builds for Tvix's Rust projects, and in part by a need to split //tvix/eval into something providing the CLI (REPL etc.), and a library providing eval, without significantly altering the structure of build targets. To accomplish this the workspace has been designed to allow projects to remain independent build targets. I want to avoid lumping all the projects together - something like //tvix/eval should always be independent of other parts of tvix. A helper function in //tvix/default.nix lets downstream naersk projects construct a sparse root for the project which combines the workspace's `Cargo.lock` with the project's own `Cargo.toml`. Note that cargo commands in the workspace itself require the build dependencies of _all_ projects to be present, which is currently a bit annoying to accomplish. This introduces some breakage: 1. It breaks usage of rust-analyser without being in a shell with the dependencies of *all* Tvix projects, as it is not capable of respecting only the subset of dependencies for a part of the workspace. 2. It is no longer possible to run tests using `cargo test`, as the test generation crate we use does not work with workspaces: https://github.com/frehberg/test-generator/issues/6 This still works in the Nix build as we construct a Cargo project that looks like it's not in a workspace there. Until somebody fixes that crate / writes a new macro / does something else with the test suite, the way to run the tests is through the Nix build. Long-term we'll probably want to get rid of cargo completely, it's just a big wart and most tooling works without it if correctly configured, but we don't have time for that now. Change-Id: I846bff7a8429a25c077fd1e9ef4e3c34a299a4a1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7533 Reviewed-by: flokli <flokli@flokli.de> Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/Cargo.toml')
-rw-r--r-- | tvix/Cargo.toml | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tvix/Cargo.toml b/tvix/Cargo.toml new file mode 100644 index 000000000000..4cc70f9040a6 --- /dev/null +++ b/tvix/Cargo.toml @@ -0,0 +1,32 @@ +# This Cargo file is a workspace configuration as per +# https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html +# +# We add this file to get a coherent set of dependencies across Tvix +# crates by sharing a Cargo.lock. This is necessary because of the +# currently limited support for Rust builds in Nix. +# +# Note that this explicitly does *not* mean that //tvix should be +# considered "one project": This is simply a workaround for a +# technical limitation and it should be our aim to remove this +# workspace file and make the subprojects independent. +# +# Note also that CI targets for actual projects should *not* be tied +# to //tvix, but to its subprojects. A potential file at +# //tvix/default.nix should likely *not* expose anything other than +# extra steps or other auxiliary targets. + +[workspace] + +members = [ + "eval", + "eval/builtin-macros", + "nix_cli", + "store", +] + +# Add a profile to all targets that enables release optimisations, but +# retains debug symbols. This is great for use with +# benchmarking/profiling tools. +[profile.release-with-debug] +inherits = "release" +debug = true |