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.toml
workspace instead of a regularCargo.toml
workspace- Write a
[workspace]
like you would inCargo.toml
, withmembers
(and optionallyexclude
) - Define one or more
[[build]]
sections defining whatcrates
to 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
tools
to generate Cargo.toml projects - Generate a
Cargo.toml
alongsideContainer.toml
that references the generated dependencies - Runs
tools
to 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.