Wrap vanilla cargo rlibs/packages in generated "containers" for various ends.
- Clone this repository
- Open in VS Code
- Install extensions recommended by workspace
- Hit F5
This will build and run one of the example projects of example/multiplatform in Chrome
cargo install cargo-container- Author a
Container.tomlworkspace instead of a regularCargo.tomlworkspace- Write a
[workspace]like you would inCargo.toml, withmembers(and optionallyexclude) - Define one or more
[[build]]sections defining whatcratesto wrap with whattools - Optional: specify more crates to auto-install via
[local-install]
- Write a
- Author the crates to wrap in said boilerplate
- Run
cargo container build. This will:- Install any bin dependencies specified by
[local-install] - Run
toolsto generate Cargo.toml projects - Generate a
Cargo.tomlalongsideContainer.tomlthat references the generated dependencies - Runs
toolsto build generated Cargo.toml projects
- Install any bin dependencies specified by
- Profit!
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
- Cargo is intentionally not trying to support everything to keep things simple/sane. Understandable, but crippling.
- Dependency builds are isolated even when you have use cases for them modifying the final output.
- No support for additional build rules after invoking rustc.
There's already a slew of nonstandard build tools for various specialized needs as a result:
These are generally non-composable, incoherent, require extra setup steps to install, etc.
This is pretty neato.
- Intro: https://matklad.github.io/2018/01/03/make-your-own-make.html
- Example: https://github.com/rust-analyzer/rust-analyzer/blob/master/.cargo/config
I want something more zero-config/automatic/declarative for early projects though. Kind of a metabuild equivalent. I will steal as much inspiration from this as I can.
Why not cargo make ?
It seems pretty great, but has a few drawbacks:
- It's unopinionated and lacks standardization - projects will be inconsistent
- Bring your own build rules
- No sane defaults for way too many project types
- Little-to-no support for creating reusable standard rules, unless you count hardcoding wget s into your own makefiles - which I don't.
- Packaging build rules in crates sounds neato.
- Auto-adding build rules based on dependencies sounds neato.